@wular/coder 0.4.5 → 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 +822 -822
- 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-0163fdf910179991.js → agent-pills-65087e563e7f928c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-b1fcd9a5236b1fc7.js → agent-settings-form-51f5d16c5b35b0c4.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-1d8f0ec6cf8c797e.js → agents-grid-8d8fb47aa05c1022.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{badge-9984d2fd0e7f995d.js → badge-b8e1e1429e8418e8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{card-818c7a0d580e2e0d.js → card-abb16544e8e5a5e0.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-0d55fb62af761ac5.js → combo-0feaff3c2ab55606.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{composer-8abfcac26339cc99.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-be929e2de15876a6.js → confirm-d804955ec454f00f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-apps-3e8b55a43315f58a.js → connect-apps-c4b8fc9d3a25e545.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-8864a63f83ffd411.js → connect-repositories-2cf520006ed18949.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-518af85578eacf6d.js → credentials-list-a1b81c1b630a8415.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{custom-range-e8977f0d9699c1e6.js → custom-range-79011164d1e2529c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-75d6d2d01f4fc35a.js → editor-b86137d54feb4ba1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{engines-list-2f6b8b3f2e873e4d.js → engines-list-0cf0dd6427e45add.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{field-43fea54c1c287e30.js → field-329f272ef3edae30.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{filter-55618648fc10c377.js → filter-673d0e6dbc95293c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{heads-1326669bdce3da2f.js → heads-bdb3900291e3ba2c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{instructions-0b968d5d0a58c716.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-90a47c07c4dd932e.js → list-074a086ab5e19d77.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{mcp-list-735e401c60ab51a3.js → mcp-list-c97f883efa3f7d03.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{models-list-999f54c76ca31379.js → models-list-3f869a70740e4244.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-4592c82f72b21b1a.js → platform-actions-b317343915219089.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runners-list-ab64a5fb01d5eef8.js → runners-list-33a7339bd7cb3e18.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-bf5a4c06605249e0.js → segmented-c9d58f98a7d32b4d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{select-591ca78b6ae29bd8.js → select-f4ea2f12a2298e4a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{sentinel-b4c91a38a5d79219.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-cf66e1c1a2f30ef1.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-74153aeac1f0baec.js → tail-5a5f739bca637202.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-actions-26ad7f7c937f2589.js → task-actions-37ed047ca8c5b129.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-view-0d085ce407e8511e.js → task-view-efe402c64d6a3c9b.js} +3 -3
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-e9e914cf5dd959e9.js → tasks-list-eae2a32d61b437c5.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{toolbar-a99d36b4b6f05bb1.js → toolbar-7aee851cfcc688cc.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-875a9a0ebb3f7d08.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-4ed05f9a51f559a3.js → pnext-client-11f56cbcfd2a3fca.js} +1 -1
- 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-899f9625435988dd.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-44516934e5619d32.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/shared-init-8a34c730aabe942d.js +0 -2
- package/dist/dash/standalone/static/assets/pnext-client-1473d0349f242421.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-195f74ae46e817da.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2b5532ce488c9391.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2d3ea662f22db27f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-43c0166e51dce87f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-652affde71fecdf7.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-82beeebf704714a6.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ad1fab64ee1a5b30.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b2dccebfff1465f5.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c8a42c9bfeded4e4.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d04d2ffbb491564c.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d060565c4d80b60e.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-dce6e1b84ee02f09.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-e753846e298d2403.js +0 -1
- package/dist/integrations-6kXL9hRo.js +0 -1
- package/dist/refresh-CmBQALAW.js +0 -1
- package/dist/runner-D5jaEfhG.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,t}from"./cli-
|
|
1
|
+
import{i as e,t}from"./cli-IfrPgeYz.js";import{p as n}from"./output-BKeyLbvt.js";import{c as r,n as i,s as a}from"./args-DEMOfLz2.js";import{credentialOptions as o}from"./remove-B6PskfkD.js";import s from"node:process";const c=e({name:`credentials add`,globalFlags:{cwd:!1},help:{usage:`coder credentials add [label] --engine <claude|codex|custom> --env <NAME> [--env <NAME> ...] [--value <secret|->] [--workspace] [--no-check] [--default] [--server [url]]`,summary:`Store an API key, encrypted on the server, as your personal credential or with --workspace for every member. The value comes from the named environment variable unless --value says otherwise, and is never printed. Without subscription sign-in on the server, CLAUDE_CODE_OAUTH_TOKEN takes your own claude setup-token output.`,examples:[[`ANTHROPIC_API_KEY=sk-... coder credentials add --engine claude --env ANTHROPIC_API_KEY`,`your own API key, read from the environment`],[`OPENAI_API_KEY=sk-... coder credentials add team --engine codex --env OPENAI_API_KEY --workspace`,`a workspace key every member's tasks can use`],[`pbpaste | coder credentials add router --engine custom --env OPENROUTER_API_KEY --value -`,`any provider, value from stdin`]],flags:[[`--env <NAME>`,`one environment variable name; repeat for more (reads that variable by default)`],[`--engine <name>`,`claude, codex, or custom`],[`--value <secret|->`,`literal values land in shell history and are visible to other processes; use - for stdin or prefer environment variables`],[`--workspace`,`a workspace credential; owners and admins only`],[`--no-check`,`skip the provider credential check`],[`--default`,`make this the default for its engine`],t]},options:{...o,engine:a,env:r,value:a,"no-check":i,default:i},args:1,run:async({options:e,args:[t]})=>{let{addCredential:n}=await import(`./remote-AcWWfKVS.js`).then(e=>e.a);return n(t,{...e,env:e.env??[],noCheck:e[`no-check`]})},print:(e,{options:t})=>s.stdout.write(`Added ${t.workspace?`workspace`:`personal`} credential ${n.bold(e.label)}.\n`)});export{c as commandCredentialsAdd};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{i as t}from"./cli-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{i as t}from"./cli-IfrPgeYz.js";import{p as n}from"./output-BKeyLbvt.js";import{n as r,s as i,t as a}from"./args-DEMOfLz2.js";import{t as o}from"./models-DGPrMV51.js";import s from"node:process";var c=e({commandModelAdd:()=>d,modelOptions:()=>l,modelSavedJson:()=>f,printModelSaved:()=>p,writeOptions:()=>u});const l={...a,"base-url":i,model:i,"env-key":i,workspace:r},u=e=>({baseUrl:e[`base-url`],model:e.model,envKey:e[`env-key`],workspace:e.workspace}),d=t({name:`model add`,help:{usage:`coder model add <name> --base-url <url> --model <id> [--env-key VAR]`,summary:`Connect a custom model behind an OpenAI-compatible endpoint (Ollama, LM Studio,
|
|
2
2
|
vLLM, OpenRouter, ...). It currently runs on the codex engine pointed at your
|
|
3
3
|
URL and is usable anywhere a model is: --model <name>, --engine custom, or as an
|
|
4
4
|
agent default in config. Alias: \`coder model setup\`.`,flags:[[`--base-url <url>`,`OpenAI-compatible API base (e.g. http://localhost:11434/v1)`],[`--model <id>`,`the provider's model id (e.g. qwen2.5-coder:32b)`],[`--env-key <VAR>`,`env var holding the API key (omit for keyless local endpoints)`],[`--workspace`,`write to <repo>/.coder/config.json instead of the user file`]],examples:[[`coder model add qwen --base-url http://localhost:11434/v1 --model qwen2.5-coder:32b`,`local Ollama model, no key`],[`coder model add kimi --base-url https://openrouter.ai/api/v1 --model moonshotai/kimi-k2 --env-key OPENROUTER_API_KEY`,`third-party provider via OpenRouter`],[`coder run --model qwen "explain this repo"`,`dispatch a task on it`]]},options:l,args:1,run:({options:e,args:[t],cwd:n})=>o(n,t,u(e)),json:f,print:e=>p(e,`saved`)});function f({name:e,entry:t,file:n,probe:r,codex:i,install:a,ready:o}){return{name:e,...t,file:n,probe:r,codex:i,...a?{codexInstall:a}:{},ready:o}}function p({name:e,entry:t,file:r,probe:i,codex:a,install:o,nativeResponses:c,keyMissing:l},u){let d=n,f=e=>` ${d.green(`✔`)} ${e}`,p=e=>` ${d.red(`✘`)} ${e}`,m=[`${u} ${d.cyan(e)} -> ${t.model} @ ${t.baseUrl} ${d.dim(`(${r})`)}`,``,i.reachable?f(`${i.detail} ${d.dim(`(${c?`responses api, direct`:`chat api, auto-translated`})`)}`):p(i.detail),a.available?f(o?.installed?`${o.note} ${d.dim(`(${a.detail})`)}`:`codex engine ${d.dim(`(${a.detail})`)}`):p(o?.note??`codex CLI not installed - run: npm install -g @openai/codex`)];l&&m.push(p(`env var ${t.envKey} is not set in this shell`)),m.push(``,d.dim([`Use it: coder run --model ${e} "<task>"`,`Make default: coder config set engines.custom.model ${e}`].join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{nt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-
|
|
1
|
+
import{nt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{n,s as r,t as i}from"./args-DEMOfLz2.js";import a from"node:process";const o=({name:e,file:t})=>a.stdout.write(`Added MCP server "${e}" to ${t}. Attach with --mcp ${e}.\n`),s=a=>t({name:`mcp add`,help:{usage:`coder mcp add <name> [--tools a,b] [--user] (--url <url> [--header K=V] [--transport http|sse] | [--env K=V] -- <command> [args...])`,summary:"Save an MCP server under `mcp.<name>`: a remote url, or the command to spawn after `--`.",flags:[[`--url <url>`,`remote server (streamable HTTP by default)`],[`--header <K=V,...>`,"request headers for a remote server; values may hold ${VAR}"],[`--transport <http|sse>`,`remote transport (default: http)`],[`--env <K=V,...>`,"environment for a stdio server; values may hold ${VAR} or ${VAR:-default}"],[`--tools <a,b>`,`tool allowlist (default: every tool the server offers)`],[`--user`,`write ~/.coder config instead of the repo`]],examples:[[`coder mcp add docs -- npx -y docs-mcp`,`then: coder run --mcp docs "..."`]]},options:{...i,env:r,header:r,url:r,transport:r,tools:r,user:n},args:1,run:({options:t,args:[n],cwd:r})=>e(r,n,{...t,command:a}),print:o}),c=Object.assign(e=>{let t=e.indexOf(`--`);return s(t===-1?[]:e.slice(t+1))(t===-1?e:e.slice(0,t))},s([]));export{c as commandMcpAdd,o as printAdded};
|
|
@@ -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{c as r,s as i}from"./args-DEMOfLz2.js";import{runnerOptions as a}from"./remove-CZmO4BSd.js";import o from"node:process";const s=t({name:`runner add`,globalFlags:{cwd:!1},args:1,help:{usage:`coder runner add <kind> [--name <name>] [--scope <scope>] [--field key=value …] [--server [url]] [--json]`,summary:`Connect a runner. Secret fields read environment variables with key=env:VARIABLE. Adding local prints a pairing command.`,flags:[[`--name <name>`,`runner display name`],[`--scope <scope>`,`personal or workspace`],[`--field key=value`,`repeat for each field, use env:VARIABLE for secrets`],n]},options:{...a,name:i,scope:i,field:r},async run({options:t,args:[n]}){if(!n)throw new e(`invalid-option`,`Missing runner kind.`);let{addRunnerFields:r}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);return r(n,t)},print:e=>o.stdout.write(`${`command`in e?e.command:`Added ${e.name} (${e.id}).`}\n`)});export{s as commandRunnerAdd};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{rt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-
|
|
1
|
+
import{rt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{n,t as r}from"./args-DEMOfLz2.js";import{printAdded as i}from"./add-DrbKvzAF.js";const a=t({name:`mcp add-json`,help:{usage:`coder mcp add-json <name> '<json entry>' [--user]`,summary:`Save an entry pasted from any .mcp.json (command/args/env or url/headers, plus tools).`,flags:[[`--user`,`write ~/.coder config instead of the repo`]]},options:{...r,user:n},args:2,run:({options:t,args:[n,r],cwd:i})=>e(i,n,r,t),print:i});export{a as commandMcpAddJson};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./cli-
|
|
1
|
+
import{s as e}from"./cli-IfrPgeYz.js";const t=e(`agent`,{tools:async()=>(await import(`./tools-DhlrB8xV.js`)).commandTools,list:async()=>(await import(`./list-DYzczkQZ.js`)).commandAgentList,ls:async()=>(await import(`./list-DYzczkQZ.js`)).commandAgentList,show:async()=>(await import(`./show-aCUICSoc.js`)).commandAgentShow,run:async()=>(await import(`./run-FYA9XIij.js`)).commandAgentRun,init:async()=>(await import(`./init-Bo3RS_va.js`)).commandAgentInit,push:async()=>(await import(`./push-HLTHyhsP.js`)).commandAgentPush,usage:async()=>(await import(`./usage-BlT_poNA.js`)).commandAgentUsage,integrations:async()=>(await import(`./integrations-CstFKLTr.js`)).commandAgentIntegrations},{menu:[{usage:`list`,blurb:`list local or server-owned agents`},{usage:`show <id>`,blurb:`one agent in full: settings, integrations, triggers, tools`},{usage:`init [id]`,blurb:`scaffold an agent folder in .coder/agents`},{usage:`push [id]`,blurb:`upload workspace agents to a Coder server`},{usage:`integrations <list|show>`,blurb:`the integration catalog: coder agent integrations --help`},{usage:`run <agent> <event.json>`,blurb:`run a recorded event through an agent, offline or on a server`},{usage:`usage`,blurb:`aggregate usage by agent, installation, or engine`}],description:[`Define and run agents from the CLI, the dashboard, or on GitHub, Slack and other platforms.`]},{aliases:{ls:`list`},nested:[`integrations`]});export{t as commandAgent};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{St as t}from"./dispatch-YW1aqjEg.js";import{t as n}from"./types-D0q15RJa.js";import{a as r}from"./load-DDZfByUe.js";import{i,n as a}from"./remote-AcWWfKVS.js";import{t as o}from"./integrations-B2CavXR1.js";import{a as s,r as c}from"./exec-DgI3boHa.js";import{c as l,o as u,u as d}from"./task-DhZ5vhyY.js";import{n as f}from"./match-DMI54zg4.js";import p from"node:path";import m from"node:process";import h from"node:fs";import{spawn as g}from"node:child_process";import _ from"node:os";import v from"node:fs/promises";const y=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Z0-9]|\r/g;function b(e,t){if(e===`codex`)return{file:`codex`,args:[`login`,`--device-auth`],env:{CODEX_HOME:t}};let n=`stty cols 4000 rows 50 2>/dev/null; exec claude setup-token`;return{file:`sh`,args:[`-c`,`cat | { ${m.platform===`darwin`?`script -q /dev/null sh -c '${n}'`:`script -qfec '${n}' /dev/null`}; kill 0; }`],env:{CLAUDE_CONFIG_DIR:t,BROWSER:`true`}}}function x(e){try{return JSON.parse(Buffer.from(String(e).split(`.`)[1]??``,`base64url`).toString())}catch{return{}}}function S(e){let t=x(JSON.parse(e).tokens?.id_token),n=t[`https://api.openai.com/auth`];return{...typeof t.email==`string`?{email:t.email}:{},...typeof n?.chatgpt_plan_type==`string`?{plan:n.chatgpt_plan_type}:{}}}function C(e,t){let n=t.replace(y,``),r=/\x1b\]8;[^;]*;(https:\/\/[^\x07\x1b]+)(?:\x07|\x1b\\)/.exec(t)?.[1],i=e===`claude`?r??/https:\/\/\S*(?:oauth|authorize)\S*(?=\s)/.exec(n)?.[0]:/https:\/\/\S+(?=\s)/.exec(n)?.[0],a=e===`codex`?/\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/.exec(n)?.[0]:void 0;if(!(!i||e===`codex`&&!a))return{url:i,...a?{code:a}:{}}}async function w(e,t){let{server:n,token:r}=d();delete m.env.CODER_TASK_TOKEN,delete m.env.CODER_LOGIN;let i=new AbortController,a=async(t,a)=>{let o=await fetch(`${n}/logins/${encodeURIComponent(e)}${t}`,{method:a===void 0?`GET`:`POST`,...t?{signal:i.signal}:{},headers:{authorization:`Bearer ${r}`,...a===void 0?{}:{"content-type":`application/json`}},...a===void 0?{}:{body:JSON.stringify(a)}});if(!o.ok)throw Error(`Coder server answered ${o.status}`);return await o.json()},{engine:o}=await a(``),s=await v.mkdtemp(p.join(t,`.login-`)),c=b(o,s),l=g(c.file,c.args,{env:{...m.env,...c.env},stdio:[`pipe`,`pipe`,`pipe`],detached:!0}),u=()=>{try{m.kill(-l.pid,`SIGTERM`)}catch{}},f=``,h=``,_=!1,x=new Promise((e,t)=>{l.once(`error`,t),l.once(`close`,e)}),w=setTimeout(u,6e5),T=async()=>{for(;!i.signal.aborted;){let{code:e}=await a(`/input`);if(e)return void l.stdin.write(`${e}\r`)}},E=e=>{if(f+=e.toString(),h=f.replace(y,``),!_){let e=C(o,f);e&&(_=!0,m.stdout.write(`Sign-in link ready
|
|
2
2
|
`),a(``,e).catch(()=>u()),o===`claude`&&T().catch(()=>{i.signal.aborted||u()}))}o===`claude`&&/sk-ant-oat[\w-]+\s/.test(h)&&u()};l.stdout.on(`data`,E),l.stderr.on(`data`,E);try{let e=await x;i.abort();let t=/sk-ant-oat[A-Za-z0-9_-]+/.exec(h)?.[0];if(o===`claude`&&t){let e=/[\w.+-]+@[\w-]+(?:\.[\w-]+)+/.exec(h)?.[0];await a(``,{result:{env:{CLAUDE_CODE_OAUTH_TOKEN:t},...e?{account:{email:e}}:{}}})}else if(o===`codex`&&e===0){let e=await v.readFile(p.join(s,`auth.json`),`utf8`);await a(``,{result:{env:{CODEX_AUTH_JSON:e},account:S(e)}})}else await a(``,{error:_?`Sign-in did not finish. Start again.`:`${o} sign-in could not start.`}).catch(()=>{});m.stdout.write(`Sign-in finished
|
|
3
|
-
`)}finally{clearTimeout(w),i.abort(),u(),await v.rm(s,{recursive:!0,force:!0})}}var T=e({agentIdError:()=>k,agents:()=>P,regexError:()=>A});const E=e=>e.cwd?p.resolve(e.cwd):m.cwd(),D=e=>(Array.isArray(e)?e:(e??``).split(`,`)).map(e=>e.trim()).filter(Boolean),O=/^[a-z0-9][a-z0-9_-]*$/;function k(e,t){if(!O.test(t))return`Use lowercase letters, digits, - or _, starting with a letter or digit.`;let n=p.join(e,`.coder`,`agents`,t);if(h.existsSync(n)&&h.readdirSync(n).length>0)return`${p.relative(e,n)} is not empty; clear it to start over, or edit what is there.`}function A(e){try{new RegExp(e);return}catch{return`Not a valid regular expression.`}}function j(e,t){let n=o[e]?.sample;return{integration:e,type:t,appId:`${e}:sample`,installationId:`sample`,deliveryId:`sample-1`,actor:{id:`user-1`,login:`someone`,role:`member`},text:`Replace me with the text a real event would carry.`,...n?{chat:{thread:{_type:`chat:Thread`,adapterName:e,channelId:n.slice(0,n.lastIndexOf(`:`)),id:n,isDM:!1}}}:{}}}async function M(e,r={}){let i=E(r);if(!e&&r.askId&&(e=await r.askId(e=>k(i,e))),!e)throw new t(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent init <id>`});let a=k(i,e);if(a)throw new t(`invalid-option`,a.includes(`not empty`)?a:`Agent id "${e}": ${a}`);let s=p.join(i,`.coder`,`agents`,e),c=r.askPicks?await r.askPicks(e):{...r.name?{name:r.name}:{},integrations:D(r.integrations).length?D(r.integrations):[Object.keys(o)[0]],events:{},matches:{},tools:r.tools??`comment`};if(!n.includes(c.tools))throw new t(`invalid-option`,`Unknown preset "${c.tools}"; valid: ${n.join(`, `)}`);let l={},u=D(r.triggers),d=e=>Object.keys(o[e]?.events??{});for(let e of c.integrations)if(!o[e])throw new t(`invalid-option`,`Unknown integration "${e}"; valid: ${Object.keys(o).join(`, `)}`);for(let e of u)if(!c.integrations.some(t=>d(t).includes(e)))throw new t(`invalid-option`,`No chosen integration has event "${e}".`,{hint:`Events per integration: coder agent integrations show <id>`});let f=Object.fromEntries(D(r.match).map(e=>{let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Bad --match "${e}"; use event=regex.`);let r=e.slice(n+1);if(A(r))throw new t(`invalid-option`,`Bad --match for ${e.slice(0,n)}: ${A(r)}`);return[e.slice(0,n),r]}));for(let e of c.integrations){let n=d(e),r=c.events[e]??(u.length?u.filter(e=>n.includes(e)):[n.includes(`mention`)?`mention`:n[0]]);for(let i of r)if(!n.includes(i))throw new t(`invalid-option`,`${e} has no event "${i}"; valid: ${n.join(`, `)}`);let i={...f,...c.matches[e]??{}},a=r.filter(e=>i[e]);r.length&&(l[e]={triggers:a.length?Object.fromEntries(r.map(e=>[e,!i[e]||{match:i[e]}])):r,tools:c.tools})}let m={...c.name?{name:c.name}:{},...r.description?{description:r.description}:{},permissions:r.permissions??`read-only`,integrations:l};await v.mkdir(s,{recursive:!0}),await v.writeFile(p.join(s,`agent.json`),`${JSON.stringify(m,null,2)}\n`),await v.writeFile(p.join(s,`system.md`),`You are ${c.name??e}.\n`);let h=p.join(_.tmpdir(),`coder-agent-samples`,e),g=[];for(let[e,t]of Object.entries(l)){let n=(Array.isArray(t.triggers)?t.triggers:Object.keys(t.triggers??{}))[0];await v.mkdir(h,{recursive:!0});let r=p.join(h,`sample-${e}-${n}.json`);await v.writeFile(r,`${JSON.stringify(j(e,n),null,2)}\n`),g.push(r)}return{id:e,dir:s,files:[`agent.json`,`system.md`],samples:g,integrations:Object.keys(l)}}function N(e){if(e===void 0||typeof e==`number`)return e;if(/^\d+$/.test(e))return Number(e);let n=/^(\d+)([dh])$/.exec(e);if(!n)throw new t(`invalid-option`,`Invalid --since value.`,{hint:`Use 7d, 24h, or milliseconds since epoch`});return Date.now()-Number(n[1])*(n[2]===`d`?864e5:36e5)}const P={list:(e={})=>e.server===void 0?r(E(e),o):a(e).agents.list(),async show(e,n={}){if(!e)throw new t(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent show <id>`});if(n.server===void 0){let i=(await r(E(n),o)).find(t=>t.id===e);if(!i)throw new t(`invalid-option`,`No agent named "${e}".`,{hint:`List agents: coder agent list`});return i}let i=a(n),s=await i.agents.get(e),c=await i.agents.version(e,s.currentVersion);return{...s,definition:c.definition}},init:M,push:(e,t={})=>i(a(t),E(t),e),async run(e,n,i={}){if(i.wait&&i.server===void 0)throw new t(`invalid-option`,`--wait needs --server.`,{hint:`Offline runs print their reply as they finish`});if(!e||!n)throw new t(`invalid-option`,`Missing agent id or event file.`,{hint:`Usage: coder agent run <agent> <event.json>`});let l=E(i),u=typeof n==`string`?JSON.parse(await v.readFile(p.resolve(l,n),`utf8`)):n;if(i.server!==void 0){let t=a(i),n=await t.tasks.create({agent:e,event:u});if(!i.wait||!n.tasks.length)return n;let r=[];for(let e of n.tasks){let n=await t.tasks.wait(e,{onLog:i.onLog});r.push(n),i.onDone?.(n)}return r}let d=await r(l,o),m=d.find(t=>t.id===e);if(!m)throw new t(`invalid-option`,`No agent named "${e}".`);let h=f(u,d).find(t=>t.agent.id===e),g=i.flow??h?.flow;if(!g)throw new t(`invalid-option`,`Agent "${e}" does not match event "${u.type}".`);return c({cwd:l,agent:e,flow:g,task:{...s(m,g,u),tools:{},...h?.permissions?{permissions:h.permissions}:{}},post:!1})},runTask(e,t={}){let n=E(t);return m.env.CODER_LOGIN?w(e,n):m.env.CODER_PREPARE?u(e,n):l(e,n)},async usage(e={}){if(e.by&&![`agent`,`installation`,`engine`].includes(e.by))throw new t(`invalid-option`,`Invalid --by value.`,{hint:`Use agent, installation, or engine`});let n=e.by;if(e.server!==void 0)return a(e).usage({since:N(e.since),by:n});let[{localUsage:r},{usageSummary:i}]=await Promise.all([import(`./store-
|
|
3
|
+
`)}finally{clearTimeout(w),i.abort(),u(),await v.rm(s,{recursive:!0,force:!0})}}var T=e({agentIdError:()=>k,agents:()=>P,regexError:()=>A});const E=e=>e.cwd?p.resolve(e.cwd):m.cwd(),D=e=>(Array.isArray(e)?e:(e??``).split(`,`)).map(e=>e.trim()).filter(Boolean),O=/^[a-z0-9][a-z0-9_-]*$/;function k(e,t){if(!O.test(t))return`Use lowercase letters, digits, - or _, starting with a letter or digit.`;let n=p.join(e,`.coder`,`agents`,t);if(h.existsSync(n)&&h.readdirSync(n).length>0)return`${p.relative(e,n)} is not empty; clear it to start over, or edit what is there.`}function A(e){try{new RegExp(e);return}catch{return`Not a valid regular expression.`}}function j(e,t){let n=o[e]?.sample;return{integration:e,type:t,appId:`${e}:sample`,installationId:`sample`,deliveryId:`sample-1`,actor:{id:`user-1`,login:`someone`,role:`member`},text:`Replace me with the text a real event would carry.`,...n?{chat:{thread:{_type:`chat:Thread`,adapterName:e,channelId:n.slice(0,n.lastIndexOf(`:`)),id:n,isDM:!1}}}:{}}}async function M(e,r={}){let i=E(r);if(!e&&r.askId&&(e=await r.askId(e=>k(i,e))),!e)throw new t(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent init <id>`});let a=k(i,e);if(a)throw new t(`invalid-option`,a.includes(`not empty`)?a:`Agent id "${e}": ${a}`);let s=p.join(i,`.coder`,`agents`,e),c=r.askPicks?await r.askPicks(e):{...r.name?{name:r.name}:{},integrations:D(r.integrations).length?D(r.integrations):[Object.keys(o)[0]],events:{},matches:{},tools:r.tools??`comment`};if(!n.includes(c.tools))throw new t(`invalid-option`,`Unknown preset "${c.tools}"; valid: ${n.join(`, `)}`);let l={},u=D(r.triggers),d=e=>Object.keys(o[e]?.events??{});for(let e of c.integrations)if(!o[e])throw new t(`invalid-option`,`Unknown integration "${e}"; valid: ${Object.keys(o).join(`, `)}`);for(let e of u)if(!c.integrations.some(t=>d(t).includes(e)))throw new t(`invalid-option`,`No chosen integration has event "${e}".`,{hint:`Events per integration: coder agent integrations show <id>`});let f=Object.fromEntries(D(r.match).map(e=>{let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Bad --match "${e}"; use event=regex.`);let r=e.slice(n+1);if(A(r))throw new t(`invalid-option`,`Bad --match for ${e.slice(0,n)}: ${A(r)}`);return[e.slice(0,n),r]}));for(let e of c.integrations){let n=d(e),r=c.events[e]??(u.length?u.filter(e=>n.includes(e)):[n.includes(`mention`)?`mention`:n[0]]);for(let i of r)if(!n.includes(i))throw new t(`invalid-option`,`${e} has no event "${i}"; valid: ${n.join(`, `)}`);let i={...f,...c.matches[e]??{}},a=r.filter(e=>i[e]);r.length&&(l[e]={triggers:a.length?Object.fromEntries(r.map(e=>[e,!i[e]||{match:i[e]}])):r,tools:c.tools})}let m={...c.name?{name:c.name}:{},...r.description?{description:r.description}:{},permissions:r.permissions??`read-only`,integrations:l};await v.mkdir(s,{recursive:!0}),await v.writeFile(p.join(s,`agent.json`),`${JSON.stringify(m,null,2)}\n`),await v.writeFile(p.join(s,`system.md`),`You are ${c.name??e}.\n`);let h=p.join(_.tmpdir(),`coder-agent-samples`,e),g=[];for(let[e,t]of Object.entries(l)){let n=(Array.isArray(t.triggers)?t.triggers:Object.keys(t.triggers??{}))[0];await v.mkdir(h,{recursive:!0});let r=p.join(h,`sample-${e}-${n}.json`);await v.writeFile(r,`${JSON.stringify(j(e,n),null,2)}\n`),g.push(r)}return{id:e,dir:s,files:[`agent.json`,`system.md`],samples:g,integrations:Object.keys(l)}}function N(e){if(e===void 0||typeof e==`number`)return e;if(/^\d+$/.test(e))return Number(e);let n=/^(\d+)([dh])$/.exec(e);if(!n)throw new t(`invalid-option`,`Invalid --since value.`,{hint:`Use 7d, 24h, or milliseconds since epoch`});return Date.now()-Number(n[1])*(n[2]===`d`?864e5:36e5)}const P={list:(e={})=>e.server===void 0?r(E(e),o):a(e).agents.list(),async show(e,n={}){if(!e)throw new t(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent show <id>`});if(n.server===void 0){let i=(await r(E(n),o)).find(t=>t.id===e);if(!i)throw new t(`invalid-option`,`No agent named "${e}".`,{hint:`List agents: coder agent list`});return i}let i=a(n),s=await i.agents.get(e),c=await i.agents.version(e,s.currentVersion);return{...s,definition:c.definition}},init:M,push:(e,t={})=>i(a(t),E(t),e),async run(e,n,i={}){if(i.wait&&i.server===void 0)throw new t(`invalid-option`,`--wait needs --server.`,{hint:`Offline runs print their reply as they finish`});if(!e||!n)throw new t(`invalid-option`,`Missing agent id or event file.`,{hint:`Usage: coder agent run <agent> <event.json>`});let l=E(i),u=typeof n==`string`?JSON.parse(await v.readFile(p.resolve(l,n),`utf8`)):n;if(i.server!==void 0){let t=a(i),n=await t.tasks.create({agent:e,event:u});if(!i.wait||!n.tasks.length)return n;let r=[];for(let e of n.tasks){let n=await t.tasks.wait(e,{onLog:i.onLog});r.push(n),i.onDone?.(n)}return r}let d=await r(l,o),m=d.find(t=>t.id===e);if(!m)throw new t(`invalid-option`,`No agent named "${e}".`);let h=f(u,d).find(t=>t.agent.id===e),g=i.flow??h?.flow;if(!g)throw new t(`invalid-option`,`Agent "${e}" does not match event "${u.type}".`);return c({cwd:l,agent:e,flow:g,task:{...s(m,g,u),tools:{},...h?.permissions?{permissions:h.permissions}:{}},post:!1})},runTask(e,t={}){let n=E(t);return m.env.CODER_LOGIN?w(e,n):m.env.CODER_PREPARE?u(e,n):l(e,n)},async usage(e={}){if(e.by&&![`agent`,`installation`,`engine`].includes(e.by))throw new t(`invalid-option`,`Invalid --by value.`,{hint:`Use agent, installation, or engine`});let n=e.by;if(e.server!==void 0)return a(e).usage({since:N(e.since),by:n});let[{localUsage:r},{usageSummary:i}]=await Promise.all([import(`./store-Cxc2GYyj.js`).then(e=>e.h),import(`./usage-Bw7fQeFC.js`).then(e=>e.a)]);return i(r(E(e)).map(([,e])=>e),N(e.since)??0,n)},integrations:{list:()=>Object.entries(o).map(([e,t])=>({id:e,description:t.description,events:Object.keys(t.events),tools:t.tools.presets.write})),show(e){if(!e)throw new t(`invalid-option`,`Missing integration id.`,{hint:`Usage: coder agent integrations show <id>`});let n=o[e];if(!n)throw new t(`invalid-option`,`Unknown integration "${e}".`,{hint:`List integrations: coder agent integrations list`});return{id:e,events:Object.fromEntries(Object.entries(n.events).map(([e,t])=>[e,t.description])),tools:n.tools.presets}}}};export{P as n,T as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.js";import{p as t}from"./output-BKeyLbvt.js";import{n}from"./models-DGPrMV51.js";import{n as r}from"./add-CKENklTr.js";import i from"node:process";const a=e({name:`model alias`,help:{usage:`coder model alias <name> <spec> [--workspace]`,summary:`Save an alias for an engine spec, e.g. fast -> codex:luna. An alias may reuse a
|
|
2
2
|
built-in name to override it.`,flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]]},options:r,args:2,run:({options:e,args:[t,r],cwd:i})=>n(i,t,r,e),print:o});function o(e){let n=t,r=`${e.provider} ${e.model}${e.effort?` (${e.effort})`:``}`;i.stdout.write(`aliased ${n.cyan(e.alias)} -> ${e.provider}:${e.model}${e.effort?`:${e.effort}`:``} ${n.dim(`= ${r}`)} ${n.dim(`(${e.file})`)}\n`)}export{a as commandModelAlias};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./cli-
|
|
1
|
+
import{s as e}from"./cli-IfrPgeYz.js";const t=e(`server app`,{create:async()=>(await import(`./create-Ik613gJw.js`)).commandServerAppCreate},{menu:[{usage:`create <integration>`,blurb:`create the built-in agent's public app`}],description:[`The built-in agent's apps, one per platform, shared by every workspace on this server.`],exampleCommand:`server app create`});export{t as commandServerApp};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Tt as e}from"./dispatch-YW1aqjEg.js";import{i as t,r as n}from"./cli-
|
|
1
|
+
import{Tt as e}from"./dispatch-YW1aqjEg.js";import{i as t,r as n}from"./cli-IfrPgeYz.js";import{a as r,p as i,s as a}from"./output-BKeyLbvt.js";import{i as o,n as s,s as c,t as l}from"./args-DEMOfLz2.js";import u from"node:process";const d={server:o,workspace:c,yes:s};function f(e,t){let n=i;if(!t.length)return void u.stdout.write(`${n.dim(`No approvals for task ${e}.`)}\n`);for(let e of t){let t=e.answered??`pending`;u.stdout.write(`${n.cyan(e.id)} ${t.padEnd(8)} ${n.dim(String(e.summary??``))}\n`)}let r=t.filter(e=>!e.answered);if(r.length){let e=r.length===1?r[0].id:`<approval-id>`;u.stdout.write(`\n${a([`Answer: coder task approve ${e} [--deny]`],n)}\n`)}}function p(t){let n=i;if(!t.length)return void u.stdout.write(`${n.dim(`No pending approvals.`)}\n\n${a([`Check tasks: coder task list`],n)}\n`);let o={id:Math.max(11,...t.map(e=>e.id.length)),task:Math.max(7,...t.map(e=>e.taskId.length))};u.stdout.write(n.bold(n.light(`${`approval-id`.padEnd(o.id)} ${`task-id`.padEnd(o.task)} age summary\n`)));for(let i of t){let t=i.createdAt?r(e(i.createdAt)):`-`;u.stdout.write(`${n.cyan(i.id.padEnd(o.id))} ${n.cyan(i.taskId.padEnd(o.task))} ${t.padEnd(5)} ${n.light(i.summary)}\n`)}let s=t.length===1?t[0].id:`<approval-id>`;u.stdout.write(`\n${a([`Answer: coder task approve ${s} [--deny]`],n)}\n`)}const m=t({name:`task approvals`,help:{usage:`coder task approvals [task-id] [--server [url]]`,summary:`Without a task id: pending approvals across all tasks. With one: that task's
|
|
2
2
|
permission escalations and how each was answered.`,flags:[n]},options:{...l,...d},args:1,run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-DEp3GHwH.js`).then(e=>e.t);return n.approvals(t,{...e,organization:e.workspace})},json:(e,{options:t,args:[n]})=>t.server===void 0&&n?e.map(({taskId:e,...t})=>t):t.server===void 0?e.map(({taskId:e,id:t,summary:n,createdAt:r})=>({taskId:e,id:t,summary:n,createdAt:r})):e,print(e,{options:t,args:[n]}){if(t.server===void 0)return n?f(n,e):p(e);if(!e.length)return void u.stdout.write(`${i.dim(`No pending approvals.`)}\n\n${a([`Check tasks: coder task list`],i)}\n`);for(let t of e)u.stdout.write(`${t.taskId} ${JSON.stringify(t)}\n`)}});export{m as commandApprovals};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-
|
|
1
|
+
import{i as e,r as t}from"./cli-IfrPgeYz.js";import{p as n}from"./output-BKeyLbvt.js";import{i as r,n as i,s as a,t as o}from"./args-DEMOfLz2.js";import s from"node:process";const c={server:r,workspace:a,yes:i},l=e({name:`task approve`,help:{usage:`coder task approve [task-id] <approval-id> [--deny] [--server [url]]`,summary:`Answer an escalated permission request. Accepts by default; --deny rejects it.
|
|
2
2
|
Approval ids are unique, so the task id is optional.`,flags:[[`--deny`,`reject the request instead of accepting`],t]},options:{...o,deny:i,...c},args:2,run:async({options:e,args:[t,n]})=>{let{tasks:r}=await import(`./task-DEp3GHwH.js`).then(e=>e.t);return r.approve(t,n,{...e,organization:e.workspace})},print:(e,{options:t,args:r})=>s.stdout.write(t.server===void 0?`${t.deny?`Denied`:`Approved`} ${n.cyan(e.approvalId)} on task ${n.cyan(e.taskId)}.\n`:`${t.deny?`Denied`:`Approved`} ${n.cyan(r[1])}.\n`)});export{l as commandApprove};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{St as t}from"./dispatch-YW1aqjEg.js";import{i as n,t as r}from"./load-DDZfByUe.js";import{n as i}from"./integrations-B2CavXR1.js";import{o as a}from"./local-B0GiaLV0.js";import{$n as o,Gn as s,t as c}from"./store-
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{St as t}from"./dispatch-YW1aqjEg.js";import{i as n,t as r}from"./load-DDZfByUe.js";import{n as i}from"./integrations-B2CavXR1.js";import{o as a}from"./local-B0GiaLV0.js";import{$n as o,Gn as s,t as c}from"./store-Cxc2GYyj.js";import{n as l}from"./env-LsVTi18f.js";import u from"node:process";var d=e({serverAppLink:()=>f});async function f(e,d={}){let f=l(d.env??u.env),p=i(f.integrations);if(!p[e])throw new t(`invalid-option`,`Unknown integration "${e}".`,{hint:`Pick one of ${Object.keys(p).join(`, `)}.`});if(!f.databaseUrl||!f.publicUrl)throw new t(`invalid-option`,`Built-in apps need the server database and address.`,{hint:`Set DATABASE_URL and PUBLIC_URL as the server has them.`});let m={...n()[r].json,...d.name?{name:d.name}:{}},h={agent:r,def:a(m),...d.owner?{owner:d.owner}:{},public:!0},g=await c(f);try{let t=g.defaultOrganizationId,n={config:f,organizationId:t,store:g.store(t)},r=await o(n,`create`,`*`,s(e,h)),i=new URLSearchParams({agent:h.agent,def:h.def,...h.owner?{owner:h.owner}:{},public:`1`,tx:r});return{url:`${f.publicUrl.replace(/\/$/,``)}/create/${e}?${i}`}}finally{await g.close()}}export{f as n,d as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.js";import{p as t}from"./output-BKeyLbvt.js";import{n,t as r}from"./args-DEMOfLz2.js";import i from"node:process";const a=e=>e===1?``:`s`,o=e({name:`flow archive`,help:{usage:`coder flow archive <run-id> | coder flow archive --all-stopped`,summary:`Archive a flow run so it drops out of the default list (see it again with
|
|
2
2
|
\`coder flow list --archived [--limit N]\`). Pass --all-stopped to archive every
|
|
3
3
|
finished run. A running run must be stopped first.`,flags:[[`--all-stopped`,`archive every stopped (finished) run`]]},options:{...r,"all-stopped":n},args:1,run:async({options:e,args:[t]})=>{let{archiveRuns:n}=await import(`./executor-HWnIIYUL.js`).then(e=>e.b);return n(t,{allStopped:e[`all-stopped`]})},print(e){if(!(`count`in e))return void i.stdout.write(`Archived run ${t.cyan(e.runId)}.\n`);i.stdout.write(e.count?`Archived ${e.count} stopped run${a(e.count)}.\n`:`${t.dim(`No stopped runs to archive.`)}\n`)}});export{o as commandArchive,a as plural};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-
|
|
1
|
+
import{i as e,r as t}from"./cli-IfrPgeYz.js";import{p as n}from"./output-BKeyLbvt.js";import{i as r,n as i,s as a,t as o}from"./args-DEMOfLz2.js";import s from"node:process";const c={server:r,workspace:a,yes:i},l=e=>e===1?``:`s`,u=e({name:`task archive`,help:{usage:`coder task archive <task-id> | coder task archive --all-stopped [--server [url]]`,summary:`Archive a task session so it drops out of the default list (see it again with
|
|
2
2
|
\`coder task list --archived [--limit N]\`). Pass --all-stopped to archive every
|
|
3
3
|
finished task. A running task keeps running; steering an archived task
|
|
4
4
|
brings it back.`,flags:[[`--all-stopped`,`archive every stopped (finished) task`],t]},options:{...o,"all-stopped":i,...c},args:1,run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-DEp3GHwH.js`).then(e=>e.t);return n.archive(t,{...e,organization:e.workspace,allStopped:e[`all-stopped`]})},print(e,{options:t}){if(e.count===void 0)return void s.stdout.write(`Archived task ${n.cyan(e.taskId)}.\n`);s.stdout.write(t.server===void 0?e.count?`Archived ${e.count} stopped task${l(e.count)}.\n`:`${n.dim(`No stopped tasks to archive.`)}\n`:`Archived ${e.count} server task${l(e.count)}.\n`)}});export{u as commandArchive,l as plural};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-IfrPgeYz.js";import{n as t,s as n}from"./args-DEMOfLz2.js";const r=e({name:`task archive-sweep`,options:{cwd:n,flows:t},args:1/0,run:async({options:e,args:t,cwd:n})=>{let{archiveFlagged:r}=await import(`./actions-CmfXOVXQ.js`).then(e=>e.t),{archiveFlaggedRuns:i}=await import(`./executor-HWnIIYUL.js`).then(e=>e.b);return e.flows?i(t):r(n,t)}});export{r as commandArchiveSweep};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-
|
|
1
|
+
import{i as e,r as t}from"./cli-IfrPgeYz.js";import{p as n}from"./output-BKeyLbvt.js";import{i as r,n as i,s as a,t as o}from"./args-DEMOfLz2.js";import{idAndText as s}from"./steer-BGKYpW4T.js";import c from"node:process";const l={server:r,workspace:a,yes:i},u=e({name:`task ask`,help:{usage:`coder task ask <task-id> "<question>" [--server [url]]`,summary:`Answer a question ABOUT a task without touching it: a read-only sidecar reads
|
|
2
2
|
the task's progress log, result, and workspace and answers; the task never
|
|
3
3
|
sees the question and its thread is not steered. Works whether the task is
|
|
4
4
|
running or stopped. To change what the task does, use \`coder task steer\`.`,flags:[[`--model <alias|slug>`,`sidecar model (default: the task's own)`],[`--effort <low|medium|high>`,`sidecar reasoning effort`],t],examples:[[`coder task ask task-abc "what approach did you take and why?"`,`probe a decision without derailing the task`]]},options:{...o,model:a,effort:a,...l},args:1/0,async run({options:e,args:t}){let{tasks:r}=await import(`./task-DEp3GHwH.js`).then(e=>e.t),{id:i,text:a}=s(t,`Missing task id or question.`,[`Usage: coder task ask <task-id> "<question>"`,`Help: coder task ask --help`]);return r.ask(i,a,{...e,organization:e.workspace,onAsking:t=>e.json||c.stderr.write(`${n.dim(`[coder]`)} asking about task ${n.cyan(t)} (read-only sidecar; the task is not interrupted)...\n`)})},json:({ok:e,...t})=>t,print(e,{options:t,args:[r]}){if(t.server!==void 0)return void c.stdout.write(`Asked server task ${n.cyan(r)}.\n`);let{answer:i,error:a}=e;i?c.stdout.write(`\n${i}\n`):c.stdout.write(`${n.dim(`(no answer)`)}${a?` ${n.red(a)}`:``}\n`)},exit:(e,{options:t})=>t.server===void 0?+!e.ok:void 0});export{u as commandAsk};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,l as t}from"./http-DG54kyx4.js";import{Lt as n,fn as r,pn as i}from"./store-
|
|
1
|
+
import{i as e,l as t}from"./http-DG54kyx4.js";import{Lt as n,fn as r,pn as i}from"./store-Cxc2GYyj.js";import{c as a}from"./schema-DoNO0dPh.js";import{a as o,i as s,o as c}from"./serve-D_XiZzYd.js";import{createECDH as l,hkdfSync as u}from"node:crypto";import*as d from"openid-client";import{and as f,eq as p}from"drizzle-orm";import{EncryptJWT as m,calculateJwkThumbprint as h,createRemoteJWKSet as g,jwtDecrypt as _,jwtVerify as v}from"jose";const y=(e,t)=>new Uint8Array(u(`sha256`,e,``,t,32));async function b(e){let t=y(e,`coder oidc client key`),n=l(`prime256v1`);n.setPrivateKey(t);let r=n.getPublicKey(),i={kty:`EC`,crv:`P-256`,x:Buffer.from(r.subarray(1,33)).toString(`base64url`),y:Buffer.from(r.subarray(33)).toString(`base64url`)},a=await crypto.subtle.importKey(`jwk`,{...i,d:Buffer.from(t).toString(`base64url`)},{name:`ECDSA`,namedCurve:`P-256`},!1,[`sign`]),o=await h(i);return{key:a,kid:o,jwk:{...i,kid:o,alg:`ES256`,use:`sig`}}}async function x(e){let t=[e.encryptionKey,e.previousEncryptionKey].filter(e=>!!e),n=await Promise.all(t.map(b));return{cookie:t.map(e=>y(e,`coder session cookie`)),client:n[0],jwks:{keys:n.map(e=>e.jwk)}}}const S=`${r}.session`,C=`${r}.oidc`,w=3800,T=2592e3,E=()=>Math.floor(Date.now()/1e3);function D(e){let t=new Map;for(let n of(e.get(`cookie`)??``).split(/;\s*/)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1))}return t}function O(e){let t=[];for(;e.has(`${S}.${t.length}`);)t.push(`${S}.${t.length}`);return t}function k(e){let t=D(e);return t.get(S)??(O(t).map(e=>t.get(e)).join(``)||void 0)}function A(e){return Array.isArray(e)?e.flatMap(e=>typeof e?.id==`string`&&typeof e.role==`string`?[{id:e.id,slug:String(e.slug??e.id),name:String(e.name??e.slug??e.id),role:e.role}]:[]):[]}function j(e,t,n){let r=e.get(`x-coder-organization`),i=r?t.organizations.find(e=>e.slug===r||e.id===r):t.organizations.find(e=>e.id===n)??t.organizations[0];return i?{...t,organizationId:i.id,role:i.role}:r?{...t,organizationDenied:!0}:t}async function M(r,l){let u=l.auth.wular.url,h=l.publicUrl,y=new URL(h).origin,b=h.startsWith(`https:`),M=await x(l),N=`${h}${s}`,P=(e,t,n)=>`${e}=${t}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${n}${b?`; Secure`:``}`,F=(e,t)=>new m(e).setProtectedHeader({alg:`dir`,enc:`A256GCM`}).setIssuedAt().setExpirationTime(`${t}s`).encrypt(M.cookie[0]);async function I(e){if(e)for(let t of M.cookie)try{return(await _(e,t)).payload}catch{}}async function L(e,t){let n=await F(t,T),r=O(D(e));if(n.length<=w)return[P(S,n,T),...r.map(e=>P(e,``,0))];let i=n.match(RegExp(`.{1,${w}}`,`g`));return[P(S,``,0),...i.map((e,t)=>P(`${S}.${t}`,e,T)),...r.slice(i.length).map(e=>P(e,``,0))]}let R=e=>[S,...O(D(e))].map(e=>P(e,``,0)),z,B=()=>z??=d.discovery(new URL(u),`${h}${c}`,void 0,d.PrivateKeyJwt(M.client),new URL(u).protocol===`http:`?{execute:[d.allowInsecureRequests]}:void 0).catch(e=>{throw z=void 0,e}),V,H=async()=>V??=g(new URL((await B()).serverMetadata().jwks_uri));function U(e,t){let n=e.claims();if(!n)throw Error(`Wular Auth returned no ID token`);let r=A(n.organizations),i=e=>r.find(t=>t.id===e)?.id;return{sub:n.sub,name:typeof n.name==`string`?n.name:``,email:typeof n.email==`string`?n.email:``,orgs:r,org:i(t?.org)??i(n.org)??r[0]?.id,exp_at:E()+(e.expires_in??600),at:E(),rt:e.refresh_token??t?.rt,idt:e.id_token??t?.idt}}let W=new Map;function G(e){let t=e.rt;if(!t)return Promise.resolve(void 0);let n=W.get(t);return n||(n=B().then(e=>d.refreshTokenGrant(e,t)).then(t=>U(t,e)).catch(e=>(W.delete(t),e instanceof d.ResponseBodyError&&e.error===`invalid_grant`?!1:void 0)),W.set(t,n),setTimeout(()=>W.delete(t),6e4).unref?.()),n}async function K(e,t,n){let r=(await H().then(t=>v(e,t,{issuer:u,audience:y,typ:`at+jwt`})).catch(()=>void 0))?.payload;if(!r?.sub)return;let i={user:{id:r.sub,name:``,email:``},organizations:A(r.organizations)};return n&&E()-(r.iat??0)>60?{...i,stale:!0}:j(t,i,typeof r.org==`string`?r.org:void 0)}async function q(e){let t=await B().catch(()=>void 0);if(!t)return Response.redirect(`${h}/login?error=unavailable`,302);let n={verifier:d.randomPKCECodeVerifier(),state:d.randomState(),nonce:d.randomNonce(),return:i(e.searchParams.get(`return`),y)},r=d.buildAuthorizationUrl(t,{redirect_uri:N,scope:o,code_challenge:await d.calculatePKCECodeChallenge(n.verifier),code_challenge_method:`S256`,state:n.state,nonce:n.nonce});return new Response(null,{status:302,headers:{location:r.href,"set-cookie":P(C,await F(n,600),600)}})}async function J(e,t){let n=e=>{let t=new Headers({location:`/login?error=${encodeURIComponent(e)}`});return t.append(`set-cookie`,P(C,``,0)),new Response(null,{status:302,headers:t})},r=await I(D(e.headers).get(C));if(!r)return n(`expired`);let i=t.searchParams.get(`error`);if(i)return n(i);let a;try{a=U(await d.authorizationCodeGrant(await B(),new URL(`${N}${t.search}`),{pkceCodeVerifier:r.verifier,expectedState:r.state,expectedNonce:r.nonce,idTokenExpected:!0}))}catch{return n(`sign_in_failed`)}let o=new Headers({location:r.return});o.append(`set-cookie`,P(C,``,0));for(let t of await L(e.headers,a))o.append(`set-cookie`,t);return new Response(null,{status:302,headers:o})}async function Y(t){if(!n(t,h))return e();let r=await I(k(t.headers)),i=await B().catch(()=>void 0),a=`${h}/?signed_out=1`,o=i?.serverMetadata().end_session_endpoint&&r?.idt?d.buildEndSessionUrl(i,{id_token_hint:r.idt,post_logout_redirect_uri:a}).href:a,s=Response.json({url:o});for(let e of R(t.headers))s.headers.append(`set-cookie`,e);return s}return{issuer:u,jwks:M.jwks,handler(e){let n=new URL(e.url);return n.pathname===`/api/auth/sign-in`&&e.method===`GET`?q(n):n.pathname===`/api/auth/callback`&&e.method===`GET`?J(e,n):n.pathname===`/api/auth/sign-out`&&e.method===`POST`?Y(e):Promise.resolve(t())},async session(e,t=!1,n=[]){let r=e.get(`authorization`);if(r?.startsWith(`Bearer `))return K(r.slice(7),e,t);let i=await I(k(e));if(i){if(i.exp_at<=E()||t&&E()-i.at>60){let t=await G(i);if(t===!1&&n.push(...R(e)),!t)return;i=t,n.push(...await L(e,i))}return j(e,{user:{id:i.sub,name:i.name,email:i.email},organizations:i.orgs},i.org)}},async setOrganization(e,t){let n=await I(k(e)),r=n?.orgs.find(e=>e.slug===t);if(!(!n||!r))return{...r,cookies:await L(e,{...n,org:r.id})}},async link(e,t,n,i={}){let o={name:e.name,email:e.email,...i.organizations?{organizations:i.organizations}:{},...i.token?{token:i.token}:{}};await r.insert(a).values({platform:t,platformUserId:n,userId:e.id,...o}).onConflictDoUpdate({target:[a.platform,a.platformUserId],set:o,setWhere:p(a.userId,e.id)});let[s]=await r.select({userId:a.userId}).from(a).where(f(p(a.platform,t),p(a.platformUserId,n)));return s?.userId===e.id?`linked`:`taken`},async linkedUser(e,t){let[n]=await r.select({id:a.userId,name:a.name,email:a.email,organizations:a.organizations,token:a.token}).from(a).where(f(p(a.platform,e),p(a.platformUserId,t)));return n&&{id:n.id,name:n.name,email:n.email,...n.organizations?{organizations:n.organizations}:{},...n.token?{token:n.token}:{}}}}}export{M as createAuth};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-IfrPgeYz.js";const t=e(`auth`,{login:async()=>(await import(`./login-KHrM3MI3.js`)).commandLogin,logout:async()=>(await import(`./logout-CqUKg0lc.js`)).commandLogout,status:async()=>(await import(`./status-C09SKASS.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,4 +1,4 @@
|
|
|
1
|
-
import{Sn as e,St as t,T as n,tt as r,wn as i}from"./dispatch-YW1aqjEg.js";import{a,c as o,l as s,p as c,r as l,t as u}from"./prompt-K7-bKcTC.js";import{h as d,i as f,p,r as m,s as h}from"./output-BKeyLbvt.js";import{a as g}from"./args-DEMOfLz2.js";import _ from"node:path";import v from"node:process";import{pathToFileURL as y}from"node:url";import*as b from"zod/mini";const x=async()=>(await import(`./task-
|
|
1
|
+
import{Sn as e,St as t,T as n,tt as r,wn as i}from"./dispatch-YW1aqjEg.js";import{a,c as o,l as s,p as c,r as l,t as u}from"./prompt-K7-bKcTC.js";import{h as d,i as f,p,r as m,s as h}from"./output-BKeyLbvt.js";import{a as g}from"./args-DEMOfLz2.js";import _ from"node:path";import v from"node:process";import{pathToFileURL as y}from"node:url";import*as b from"zod/mini";const x=async()=>(await import(`./task-DvPkqHCF.js`)).commandTaskGroup,S=async()=>(await import(`./setup-host-DRuUX8zg.js`)).commandSetupHost,C=async()=>(await import(`./server-83YZ2Kkh.js`)).commandServer,w=async()=>(await import(`./upgrade-BOYs5Vyi.js`)).commandUpgrade,T={task:x,flow:async()=>(await import(`./flow-DwhBWoSx.js`)).commandFlow,run:async()=>(await import(`./run-IWXjB5OD.js`)).commandTask,list:async()=>(await import(`./list-CLVoliXi.js`)).commandTasks,result:async()=>(await import(`./result-DtXZusqj.js`).then(e=>e.s)).commandResult,config:async()=>(await import(`./config-Duf8jCkd.js`)).commandConfig,"setup-host":S,"host-setup":S,setup:S,model:async()=>(await import(`./model-_e9f9Oth.js`)).commandModel,mcp:async()=>(await import(`./mcp-DCydEehH.js`)).commandMcpConfig,docs:async()=>(await import(`./docs-BdmVTydv.js`)).commandDocs,review:async()=>(await import(`./review-IRsckIiU.js`)).commandReview,agent:async()=>(await import(`./agent-CR8UFMa-.js`)).commandAgent,server:C,dash:async()=>{let e=await C(),t=await e.subcommands.serve();return Object.assign(t=>e([`serve`,...t]),{commandName:t.commandName,help:t.help})},runner:async()=>(await import(`./runner-CbDswgji.js`)).commandRunner,auth:async()=>(await import(`./auth-cZ0FrkBv.js`)).commandAuth,credentials:async()=>(await import(`./credentials-Dxpb5jCT.js`)).commandCredentials,upgrade:w,update:w},E={title:`Coder`,usageLine:`coder <command>`,description:`Delegate a coding task to the best available engine and steer it while it runs.`,commands:[{usage:`dash`,blurb:`your tasks, agents and settings in the browser`},{usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`},{usage:`list`,blurb:`list recent tasks (by default running + just stopped)`},{usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`},{usage:`task <cmd>`,blurb:`run, list, result, watch, steer, stop, approve, ...`},{usage:`flow <cmd>`,blurb:`run, list, watch, result, resume, stop, discover, ...`},{usage:`agent <cmd>`,blurb:`list, show, init, push, run, usage, integrations`},{usage:`credentials <cmd>`,blurb:`engine credentials: list, add, login, remove, default`},{usage:`server <cmd>`,blurb:`self-host Coder: serve, migrate, rotate-key`},{usage:`runner <cmd>`,blurb:`run your server's tasks on this machine: serve, list, ...`},{usage:`auth <cmd>`,blurb:`sign in to Coder: login, logout, status`},{usage:`review [--base <ref> | --pr <n>]`,blurb:`review changed code with a built-in flow`},{usage:`config <list|get|set|unset> [<key> [value]]`,blurb:`read or write config`},{usage:`model <list|add|alias|disable>`,blurb:`manage models: built-ins, aliases, custom endpoints`},{usage:`mcp <add|add-json|list|rm>`,blurb:`MCP servers tasks can attach by name (--mcp <name>)`},{usage:`docs [topic]`,blurb:`print bundled documentation (for agents to read)`},{usage:`upgrade [--cli-only|--plugins-only]`,blurb:`update the CLI and host plugins (alias: update)`}],start:[{usage:`coder setup-host [claude|agents]`,blurb:`"claude" for Claude Code, "agents" for any ~/.agents host (Codex, Pi, ...)`},{usage:`coder run --engine [codex|claude] "<task>"`,blurb:`run a task on that engine's default model`},{usage:`coder task result <task-id> --wait`,blurb:`wait for the answer; returns early if the task needs your approval`}],agents:[{usage:`coder docs skill [--claude]`,blurb:`load the skill once`}],usage:[{usage:`coder <command> --help`,blurb:`flags and details for any command`}]};function D(e,t,n=t.cyan){let r=Math.max(0,...e.map(e=>e.usage.length))+2;return e.map(e=>` ${n(e.usage.padEnd(r))}${t.dim(e.blurb)}${e.note?` ${t.light(e.note)}`:``}`)}function O(e,t,n){return[``,n.bold(`${e}:`),...t]}function k(e,t,n={}){let r=p;return`${[r.bold(`Usage:`),` ${n.usage??`coder ${e} <subcommand>`}`,...n.description?.length?[``,...n.description]:[],...O(`Subcommands`,D(t,r),r),...n.examples?.length?O(`Examples`,n.examples.flatMap(([e,t])=>[` ${r.cyan(e)}`,` ${r.dim(t)}`]),r):[],...n.seeAlso?O(`Related`,n.seeAlso.split(` · `).map(e=>` ${r.cyan(`coder ${e}`)}`),r):[],``,h([`Details on a subcommand: coder ${e} <subcommand> --help`],r,r.cyan)].join(`
|
|
2
2
|
`)}\n`}function A(e,t){if(!t)return null;let n=p,r=([e,t])=>({usage:e,blurb:t}),i=[n.bold(`Usage:`),` ${t.usage}`];t.summary&&i.push(``,t.summary),t.flags?.length&&i.push(...O(`Flags`,D(t.flags.map(r),n),n)),t.globalFlags?.length&&i.push(...O(`Global flags`,D(t.globalFlags.map(r),n),n)),t.exitCodes?.length&&i.push(...O(`Exit codes`,D(t.exitCodes.map(r),n),n)),t.env?.length&&i.push(...O(`Environment`,D(t.env.map(r),n),n)),t.examples?.length&&i.push(...O(`Examples`,t.examples.flatMap(([e,t])=>[` ${n.cyan(e)}`,` ${n.dim(t)}`]),n));let a=e.includes(` `)?[`${e.slice(0,e.lastIndexOf(` `))} --help`]:t.seeAlso?.split(` · `)??[];return a.length&&i.push(...O(`Related`,a.map(e=>` ${n.cyan(`coder ${e}`)}`),n)),`${i.join(`
|
|
3
3
|
`)}\n`}function j(e,t){let n=p,{start:r,agents:i,usage:a,commands:o,globals:s}=e,c=D([...r,...i,...a,...o,...s],n),l=(e,t)=>c.slice(e,e+t);return`${[`${n.bold(e.title)} ${n.dim(`v${t}`)}`,e.description,...O(`Get started`,l(0,r.length),n),...O(`Agents`,l(r.length,i.length),n),...O(`Usage`,[` ${e.usageLine}`,...l(r.length+i.length,a.length)],n),...O(`Commands`,l(r.length+i.length+a.length,o.length),n),...O(`Global`,c.slice(-s.length),n)].join(`
|
|
4
4
|
`)}\n`}function M(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`-h`)||n.includes(`--help`)}const N=`Use luna or sonnet for mechanical work; sol or opus is the default.
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as HelpRow, i as CommandHelpSpec, r as CommandHandler } from "./types-
|
|
1
|
+
import { a as HelpRow, i as CommandHelpSpec, r as CommandHandler } from "./types-CdIo1Zbm.js";
|
|
2
2
|
import * as z from "zod/mini";
|
|
3
3
|
//#region src/tui/help.d.ts
|
|
4
4
|
type GroupHelpSpec = {
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"./cli-
|
|
2
|
+
import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c,u as l}from"./cli-IfrPgeYz.js";export{c as CREDENTIAL_SERVER_FLAG,i as MODEL_HINT,o as SERVER_FLAG,n as command,e as confirmServer,a as getCommandHelp,s as group,t as main,r as renderHelp,l as renderTopHelp};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{St as e,X as t,Y as n,mt as r,tt as i}from"./dispatch-YW1aqjEg.js";import{f as a,i as o}from"./cli-
|
|
1
|
+
import{St as e,X as t,Y as n,mt as r,tt as i}from"./dispatch-YW1aqjEg.js";import{f as a,i as o}from"./cli-IfrPgeYz.js";import{h as s,p as c}from"./output-BKeyLbvt.js";import{n as l,t as u}from"./args-DEMOfLz2.js";import d from"node:process";const f=t=>new e(`invalid-option`,`Usage: ${t}`);function p(e){try{return JSON.parse(e)}catch{return e.includes(`,`)?e.split(`,`).map(e=>e.trim()).filter(Boolean):e}}const m=o({name:`config`,help:{usage:`coder config <list|get|set|unset> [<key> [value]] [--workspace]`,summary:"Read or write configuration. `list` prints the effective config; get/set/unset\ntarget a dotted key (e.g. engines.codex.model). Writes go to ~/.coder/config.json.",flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]],examples:[[`coder config list`,`print the effective config`],[`coder config set chain codex,claude`,`set the engine fallback chain`],[`coder config get engines.codex.model`,`read one value`]]},options:{...u,workspace:l},args:1/0,run({options:e,args:[r,a,...o],cwd:s}){if(!(!r||r===`help`)){if(r===`list`)return{action:r,config:i(s)};if(r===`get`){if(!a)throw f(`coder config get <key> (e.g. chain, engines.codex.model)`);return{action:r,value:n(s,a)}}if(r!==`set`&&r!==`unset`)throw f(`coder config <list|get|set|unset> [<key> [value]] [--workspace]`);if(!a||r===`set`&&o.length===0)throw f(`coder config ${r} <key>${r===`set`?` <value>`:``}`);return{action:r,set:t(s,a,p(o.join(` `)),{workspace:e.workspace,unset:r===`unset`})}}},json(e){let t=e;return t.action===`list`?t.config:t.action===`get`?t.value??null:t.set},print(e){if(!e)return void d.stdout.write(a(`config`,m.help));if(e.action===`list`)return h(e.config,r());if(e.action===`get`)return g(e.value);_(e.set)}});function h(e,t){let n=c,r=e=>[e?.model,e?.effort,e?.permissions].filter(Boolean).join(`/`)||`-`;d.stdout.write([`${n.dim(`chain`)} ${e.chain.join(` -> `)}`,`${n.dim(`codex`)} ${r(e.engines.codex)}`,`${n.dim(`claude`)} ${r(e.engines.claude)}`,`${n.dim(`approvals`)} timeout=${e.approvals.escalationTimeoutMs}ms hosts=[${e.approvals.allowedNetworkHosts.join(`, `)}]`,`${n.dim(`file`)} ${t}`].join(`
|
|
2
2
|
`)+`
|
|
3
3
|
`)}function g(e){if(e===null||typeof e==`object`&&e!==void 0)return s(e);d.stdout.write(`${e===void 0?`(unset)`:String(e)}\n`)}function _(e){let t=c,n=e.unset?`unset ${t.cyan(e.key)}`:`${t.cyan(e.key)} = ${JSON.stringify(e.value)}`;d.stdout.write(`${n} ${t.dim(`(${e.file})`)}\n`)}export{m as commandConfig};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./prompt-K7-bKcTC.js";import{i as n}from"./cli-
|
|
1
|
+
import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./prompt-K7-bKcTC.js";import{i as n}from"./cli-IfrPgeYz.js";import{n as r,s as i}from"./args-DEMOfLz2.js";import a from"node:process";const o=n({name:`server app create`,globalFlags:{cwd:!1},help:{usage:`coder server app create <integration> [--org <org>] [--name <name>] [--json]`,summary:`Open the page that creates the built-in agent's public app on a platform, once per server. Every workspace then connects it from its dashboard with one click. Run it where the server's environment is set.`,flags:[[`--org <org>`,`create it under this organization instead of your own account`],[`--name <name>`,`the app's name and handle (default Coder)`]],env:[[`DATABASE_URL`,`the server's Postgres`],[`PUBLIC_URL`,`the server's address, which goes into the app`]],examples:[[`coder server app create github --name wular-coder`,`the hosted GitHub App`],[`coder server app create slack`,`the Slack app`]]},options:{org:i,name:i,json:r},args:1,async run({options:t,args:[n]}){let{serverAppLink:r}=await import(`./apps-CaHoLNE7.js`).then(e=>e.t);if(!n)throw new e(`invalid-option`,`Missing integration, such as github or slack.`);return r(n,{owner:t.org,name:t.name})},json:({url:e})=>({ok:!0,url:e}),print({url:e}){a.stdout.write(`Open this page to create the app (valid 10 minutes):\n${e}\n`),t(e)}});export{o as commandServerAppCreate};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-IfrPgeYz.js";const t=e(`credentials`,{list:async()=>(await import(`./list-DhJOorrE.js`)).commandCredentialsList,add:async()=>(await import(`./add-BIp1t_pT.js`)).commandCredentialsAdd,login:async()=>(await import(`./login-C-VTh_6i.js`)).commandCredentialsLogin,remove:async()=>(await import(`./remove-B6PskfkD.js`)).commandCredentialsRemove,default:async()=>(await import(`./default-zMKQ15xH.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};
|