@wular/coder 0.4.13 → 0.5.0
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/README.md +3 -3
- package/dist/actions-CkMAM1Km.js +3 -0
- package/dist/agent-Bi5nbUhA.js +1 -0
- package/dist/app-server-BTpa5GBV.js +6 -0
- package/dist/approvals-CRwkc9vB.js +5 -0
- package/dist/apps-B6mUToTa.js +18 -0
- package/dist/args-CJsHYWbt.js +66 -0
- package/dist/async-CNhQ4wyZ.js +3 -0
- package/dist/auth-oCvlHitk.js +1 -0
- package/dist/builtin/coder/agent.json +6 -6
- package/dist/builtin/coder/system.md +4 -5
- package/dist/chat-4AiZEqKh.js +13 -0
- package/dist/{chat-bwKd3y6V.js → chat-Bfu9XKRa.js} +1 -1
- package/dist/cli.js +18 -13
- package/dist/{client-C4QCT6cG.js → client-nBo9Mhsr.js} +4 -4
- package/dist/cmd-Cu3OquA_.js +122 -0
- package/dist/config-D_RuO6gX.js +5 -0
- package/dist/connection-BXjn7gCC.js +1 -0
- package/dist/connections-Cswv7r8Z.js +2 -0
- package/dist/context-CFrDYenS.js +6 -0
- package/dist/crypto-Ittsv-m4.js +1 -0
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1682 -1444
- package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/event-json.856d33f567e58d0e.js +30 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/http.e78b470f4ecf125b.js +58 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.de1f1311bab4252f.js → index.54c45900f2153d34.js} +46 -72
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.ec6391dbf3063330.js → view.e20379d8f741754a.js} +38 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/types.5bf5a41cedb54154.js +37 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.30ed8c28774a1a82.js → load.252f972b42c690e2.js} +18 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.118a70787eff1761.js → page.11efd0e175db9053.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.fcdfd50c21031895.js → loading.56c14183236be231.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.98dfcd316c306258.js → notify.59ae138dc182d7c3.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.74c59322f5fe8a2c.js → page.e9386951cedea737.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.730aa96b086ac996.js → sign-out.713d3ec10951fde5.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.1be5795272b245c8.js → agent-menu.5c780867b82081b1.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.2c30ace077893029.js → agents-grid.f989d6f2d9ece6e4.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.733f0acc2af5ceda.js → loading.0130f8533d8f1b1e.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.0f88720e52db99a2.js +48 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.b26006f060cd48f0.js → layout.8d2f0997462fc958.js} +89 -32
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{loading.388aeaf0c2edf8f8.js → loading.90bf37c903ce6f0d.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.4b23e9df21433bd3.js → page.bc93891522c8120d.js} +22 -88
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.e06845585ca67abc.js → loading.d56ef50b0694f975.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.4048048acb374c67.js → page.cf5cf9afe38ab0e4.js} +51 -123
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.000f2f87a48bfbc6.js → platform-actions.c44c7df7841719f2.js} +234 -134
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-state.6b6132518ca61635.js +21 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.6e90cbfe308f28a0.js +82 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.ee0bb2dc4d403ec3.js → agent-settings-form.61de585104c2be10.js} +44 -66
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.0e3641f3e4abaa7c.js → loading.2800c65e45a4a1d9.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.649b4ba135ded99b.js → page.4d06f759984a63b3.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.195e168e8e41d797.js → loading.ea2925eab1d2e594.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.96f7573208644f40.js → page.fb069bf82b727d27.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.905293c9aa9afbc9.js → loading.3a615597ca648452.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.5f2b8585db8b27ad.js → page.0a472a0e269b8c01.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.8700f0106f4e8c15.js → versions-list.7ef7dfd5d8f5de43.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.f94b2f9ab04aaf21.js → loading.007326a04f05d46c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.e898c4b5ef16ecb0.js → page.a26aa7bc6ab655f0.js} +10 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.361918fe58349aa1.js +142 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/loading.f0d91d48e2b79e50.js +14 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/page.3f60cf67517d0d31.js +99 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.44e689e546fb042b.js → agent-pills.1012e04bfbc7bffd.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.4c67dfbb7d28a416.js → agent-toggle.ffbf9a8b8b2fbde7.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.9740a8e2f4b41f28.js → hero.0ae015a4fbe6321e.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{instructions.85b1cd986a9edbb5.js → instructions.1b8c9189961c5a4f.js} +13 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.ff8b78a03153239b.js → connect-repositories.9abe365f0098d358.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.471af698b8060eba.js → editor.6548f8f757578f90.js} +164 -127
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.b7b5c89e618e8f89.js → import-picker.577b1d84c7ab84e1.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.ecb9dfd4d0f9d107.js → loading.9b65a8c1cdc8346f.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.880bdac7fe843635.js → page.2b326d00ccef5544.js} +9 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.81f7e055829854a3.js → layout.45a09107b19f0a7e.js} +89 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.f8d679f2d06b0ebc.js +155 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.8f8697b1b6b34ad7.js → page.5aa3ddc669366703.js} +10 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.fe608b8e661aba1d.js → page.5a5188f0fc75dcd2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/advanced-list.73cdadb2968a39d2.js +63 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connection-add.353ec01fbb814f78.js +526 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.cf4061ae909272c3.js +439 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.a4d8338c7f6a5702.js → credentials-list.fc4cff0289267551.js} +116 -101
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.1443bbed1ff1d441.js → credentials.db01de2581ac65f3.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.e7d6a422f6a869ea.js +201 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{loading.7ca95dcb4fb3362b.js → loading.71ca4f6c99a8a9d5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.acb92b39cab1d11c.js +635 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.805d0f8a2c5817d6.js → page.95fe939e36e5be55.js} +67 -41
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.1e83449aa6593224.js → runners-list.5764eac3307d67cc.js} +42 -37
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.17ac06593005b8ba.js → secrets-list.d316bb157f747f6c.js} +19 -17
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/chain-hint.65c4cc04c78e8bfd.js +18 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.8c4a2b31b194ba3e.js → layout.4eb70f2de8674f93.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.dc630cb6e2cbf83a.js +150 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-pick.a143e77f5ed5f9d3.js +160 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.a77996786278cda0.js → page.70cad0e981c33fa5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.705be0b1129b97af.js → settings-head.004ced21e02ffa48.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{tunnel-guide.29eee1a0b1852168.js → tunnel-guide.1bc6bff9d8019098.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.19b4c50ef497aca1.js → create-link.18bd2b92cd23b73f.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.18cf32fa42247b91.js → outcome-dialog.a74e686aaed0c584.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-toast.95f7be49430248eb.js +24 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome.cbbc8cd1bbbee01b.js → outcome.22a83d756e4020a7.js} +3 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.616f0b36bf7925bc.js → page.e39ee9236664d043.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.a911169a820ba604.js → activity.441e82ab00344fb2.js} +12 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.76f851da5cc5268d.js → loading.779ecdd9c9d2ff09.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.ddb594bb6567ee13.js → page.24e121ea6eb578ba.js} +16 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.4a4052a38db4bad3.js +408 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-missing.33ec27a4a5eafefe.js +27 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.3276538e8306fd8a.js → task-view.0cd3ec2655f44cc7.js} +43 -34
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.05fc39e1a7fd1ab7.js → composer-data.73225456d60d63e3.js} +4 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.dbf06b05c5e2eba3.js → composer.ee326fbf5e526fb1.js} +114 -121
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/pending-approvals.7607998094780fdd.js +40 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{status.cb704b48ce86cc7d.js → status.d2c05c397780b833.js} +7 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.f089c1c122ed6dd2.js → task.a25847399a4dfb30.js} +9 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.5a00d69851dae119.js → tasks-list.e486cbd16ea3e963.js} +43 -35
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.36e70c93f7d0feee.js → tasks-section.01510523d1556d59.js} +16 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.185b1ba0c803db3f.js → page.ede64f82388f9480.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{custom-range.2e21c7f891966c15.js → custom-range.fe91164d7a311356.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{day-chart.261b6651df2d3966.js → day-chart.20faaaf57c81ad9e.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.a7e0ec01bfa769e3.js → loading.5b973a8bb29197d5.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.d41fea7676e37bfc.js → page.0499098badd3f5f8.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.69e68c9dae09f238.js → range-bar.0b9038e9df707843.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{top-agents.18fc469e781e2305.js → top-agents.93c916167299ffb6.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.296d70b95894209f.js → layout.94ea3908b03bede6.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.a82be2fd23e9ac67.js → page.4827d64c71c0690a.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.d3e61538dbc8ec39.js → drawer.1a08ff611df7fe38.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.8c6adf9c5a6f467c.js → foreign-link.1d4f63a0379cbd1d.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.1cea8a722c10b998.js → loading-card.77bea8c5870b5d3c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.87b92529dbb53ceb.js → page-head.2eb1e0213eb50349.js} +3 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.c32d78562f75db25.js → stream.e3800e736f832124.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.44075fa7e04575e8.js → task-toasts.3b7eeee29fc327de.js} +28 -18
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.85100ed66d6f9200.js → theme-choices.fc86071c1b634176.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.d6109e72fbd04b45.js → back.7aa0ae82dbec38cd.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.d3abfd4053b711ce.js → org.853d173b55368728.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.489faf1a259479f7.js → side-toggle.be7d2a7529557435.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{badge.c0bc352791a95fd6.js → badge.9f63fd615cf0ee22.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/button.2b18ba19ae01e2bb.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{button.ce9e6cdb08ca86db.js → button.b62fa52e18fa338b.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.4ab7ad42a0770726.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.9f0d45b73bc78b4f.js → card.c0030eafd76587e3.js} +21 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.93e4d1b20c2873ed.js → collapse.eb578fdf42029754.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.54270c0251466fda.js → combo.e4e08287494081a3.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.29e198be34578222.js → confirm.e21b7f5e486dafb8.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.bd6fc1577a393965.js → copy.043e0695c08c72f9.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.81bb9a5c60cd1089.js → filter.0730dccad6332327.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.6fdff1e7355aaa0e.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.e36c72f54750663a.js → icons.f769275420d072ce.js} +4 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu-items.1d082ac4dae8f3d4.js → menu-items.759a1b1f7c5ee365.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.ee45bace979944b6.js → menu.7f558c7c6f6345d5.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.cd96fa0495fe0fde.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.0b69c7fd9db025b9.js → modal.08ac85d31f4c76c1.js} +7 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.2eb33e5bea28d804.js → select.0ee9e8f04ddd8b47.js} +9 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.04132db0c5033d4f.js → tail.7eb303330802ac18.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.cdbd0357f2c5e1fe.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.8b3a460a65edf85a.js → toolbar.ff8367c641d28c1e.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.67dd6f8ab1ae067d.js → action.f22057e7dfac40fe.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.78267fa3d7905d17.js → client.c8d7efefb6194d7d.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/routes/http.394704f4f12ada08.js +165 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/utils/crypto.24a6439ff8d10d3d.js +11 -0
- package/dist/dash/standalone/static/assets/chunks/advanced-list-850a950afe4f6996.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-pills-9f6fa120182db948.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-toggle-521136f20a71400d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agents-grid-bcd13cd7a46224a6.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{back-e29cb10f5548ddae.js → back-2d67134b122334f4.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/chain-hint-53675e299a865420.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{combo-702c94817bf6ac17.js → combo-cb2c62fe580a8903.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-data-890f71bade4f0616.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{confirm-a78147b6ecef3847.js → confirm-d6b2c5b1deccd1e8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-7770ab805160028d.js → connect-repositories-226bf70aa81c29d8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-a33d6637e2d52fcf.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{copy-bdc60bdafe336316.js → copy-294c6052b3b69424.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/credentials-list-90fc1c6d202e1461.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/custom-range-efa1b6a71ba84597.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/editor-53a3e1a893644fff.js +6 -0
- package/dist/dash/standalone/static/assets/chunks/{field-bb8191aa02d07282.js → field-4d374d5ed3f43d7e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-d3dc01b2f90820db.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/list-16247e39898cd20e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/models-list-6d93523660503dfb.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-fde11a52c282301d.js → outcome-dialog-755fc581cbc2836e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-08e9b3816dcd62b1.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-step-5881a8be1e761e00.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/runners-list-dd759d408c643a29.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runtime-6e12333f12903a62-1.js → runtime-9b28886f3cbe0ed3-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-be1f634a1b077baa.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{segmented-0b6dc6b93c35e0f5.js → segmented-f646bfa8aa0aa449.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +9 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-953965859f7bf6b9.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-b42d2c06c25d1e2b.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-f8804b80cf32f8d0.js → tail-d13c4cc0cf11ffd1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/task-423e6a3f2527f534.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-actions-5917357eac6504ca.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/tasks-list-2c5ce592e00fda45.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/versions-list-177ae397ad64dcea.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-6e12333f12903a62-0.js → wular-pnext-9b28886f3cbe0ed3-0.js} +1 -1
- package/dist/dash/standalone/static/assets/create-param-id-2c72f3e32e7f8b8d.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-a7f30a8c5a6fa651.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-account-76fffb9337b633f2.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-cc5d59edfc3cf0b1.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-170499c849114150.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-00243b34eb094b95.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-199a9991de1bf2d9.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-param-app-a6d559f0e26bd01b.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-operator-8d5ef55834d8deba.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-settings-7138821f5422d087.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-586fec34f285e9cb.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-setup-67679c1f84f352cf.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-8a44e171984d32a1.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-usage-c534db20ce538fd2.css +1 -0
- package/dist/dash/standalone/static/assets/global-df2c26ad15039e8a.css +1 -0
- package/dist/dash/standalone/static/assets/{login-9760b85feae40270.css → login-148795638d6ff5d4.css} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7ecbd7a0cbe4e231.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ed31510d4615a5a5.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +1 -0
- package/dist/definition-4on4SG5J.js +1 -0
- package/dist/discover-DvzAbQvU.js +1 -0
- package/dist/dispatch-BaW2X6Sc.js +12 -0
- package/dist/{dist-DAnSqY1s.js → dist-B5qUdWUG.js} +35 -35
- package/dist/{dist-B2jiMMxZ.js → dist-Clxdruuu.js} +3 -3
- package/dist/{dist-ClCNj65n.js → dist-CymLGfHl.js} +4 -4
- package/dist/{adapter-Bz0E-DAY.js → dist-DX0JzVC6.js} +990 -990
- package/dist/{adapter-CsacmMmv.js → dist-DfD9WmV8.js} +39 -39
- package/dist/dist-node-B8VIVzUc.js +20 -0
- package/dist/docs-CbgaMPvq.js +2 -0
- package/dist/drive-Tk6JvQK5.js +1 -0
- package/dist/drizzle-orm-CYU7WOQS.js +2 -0
- package/dist/{emit-BrkJJPUE.js → emit-BgeqsCkC.js} +3 -3
- package/dist/env-_AxrvBXP.js +1 -0
- package/dist/errors-DK_trCff.js +1 -0
- package/dist/exec-CAaYFJD1.js +3 -0
- package/dist/executor-Chc0zawh.js +11 -0
- package/dist/flow/builtin/review/index.d.ts +2 -2
- package/dist/flow/builtin/review/index.js +9 -9
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/github-actions-2RjyRseX.js +36 -0
- package/dist/{hook-CIipj9MJ.js → hook-COWDSO4a.js} +1 -1
- package/dist/http-615JJgHo.js +5 -0
- package/dist/http-DRk8cDjf.js +1 -0
- package/dist/{index-ChcxzFdB.d.ts → index-ezhbF5wC.d.ts} +335 -244
- package/dist/integrations-BVmsk64f.js +9 -0
- package/dist/lib/broker.js +2 -2
- package/dist/load-PqaDHiHX.js +2 -0
- package/dist/local-BMGcCk8N.js +1 -0
- package/dist/local-BzZuOwgI.js +5 -0
- package/dist/login-BDKTNynK.js +8 -0
- package/dist/maintenance-d43Ml540.js +1 -0
- package/dist/mcp-BGam3G_B.js +1 -0
- package/dist/mcp-BGx48pyR.js +25 -0
- package/dist/mcp-BNz_l5TV2.js +1 -0
- package/dist/metadata-D_bBfr3H.js +1 -0
- package/dist/models-D1NXi6ni.js +1 -0
- package/dist/output-BKeyLbvt.js +5 -0
- package/dist/permission-BkYxjiFR.js +1 -0
- package/dist/prompt-CpwbsEWM.js +4 -0
- package/dist/refresh-yfEi5SQs.js +1 -0
- package/dist/remote-BbXx6S9P.js +1 -0
- package/dist/remote-rArUa01V.js +2 -0
- package/dist/runner-DG9jrX5H.js +1 -0
- package/dist/runner.json +1 -1
- package/dist/runner.tgz +0 -0
- package/dist/schema.d.ts +2 -2
- package/dist/schema.js +2 -3
- package/dist/sdk.d.ts +2858 -1376
- package/dist/sdk.js +1 -1
- package/dist/serve-B-5rDiZm.js +1 -0
- package/dist/serve-CvnrGAj7.js +12 -0
- package/dist/serve-DoYbHm_k.js +5 -0
- package/dist/session-Dtje9y-r.js +1 -0
- package/dist/sessions-DIz9fyRN.js +1 -0
- package/dist/shared--aE4olIO.js +1 -0
- package/dist/sign-in-wWkyaq5X.js +3 -0
- package/dist/state-Br-Fuaxg.js +6 -0
- package/dist/store-CzQLgCzt.js +352 -0
- package/dist/task-CFt85vTy.js +1 -0
- package/dist/task-N0qhnKpK.js +7 -0
- package/dist/tool-search-BkdgVolu.js +6 -0
- package/dist/tools-DNgEptor.js +1 -0
- package/dist/tools-oQvFAnh5.js +1 -0
- package/dist/tools-search-D1zArRyJ.js +1 -0
- package/dist/turn-Cc-v-eSy.js +3 -0
- package/dist/types-DHBqXFE2.js +1 -0
- package/dist/update-check-UyRob3yy.js +1 -0
- package/dist/view-D-rbQ1Kz.js +4 -0
- package/dist/views-3TxH367C.js +2 -0
- package/dist/worker-BMuKKiIa.js +1 -0
- package/dist/worker-CIHY9L42.js +7 -0
- package/dist/zod-_-snqfdO.js +1 -0
- package/dist/zod.js +65 -1
- package/docs/agents/coder.md +5 -1
- package/docs/agents/index.md +53 -82
- package/docs/approvals.md +47 -0
- package/docs/cli/agent.md +34 -13
- package/docs/cli/auth.md +1 -1
- package/docs/cli/connection.md +22 -21
- package/docs/cli/index.md +14 -12
- package/docs/cli/model.md +11 -11
- package/docs/cli/task.md +28 -30
- package/docs/config.md +37 -65
- package/docs/connections.md +80 -0
- package/docs/dash.md +23 -19
- package/docs/flows.md +46 -213
- package/docs/models.md +48 -78
- package/docs/review.md +20 -17
- package/docs/runners.md +49 -0
- package/docs/sdk.md +49 -73
- package/docs/self-host.md +79 -81
- package/package.json +4 -5
- package/plugins/agents/skills/coder/SKILL.md +3 -3
- package/plugins/claude/skills/dispatch/SKILL.md +3 -3
- package/plugins/cursor/README.md +3 -3
- package/plugins/cursor/skills/coder/SKILL.md +3 -3
- package/dist/actions-D12xDiQS.js +0 -4
- package/dist/adapter-DzpdWewB.js +0 -1
- package/dist/agent-JJStALIx.js +0 -8
- package/dist/apps-Bnk7F3A2.js +0 -379
- package/dist/args-Dqf5Y1RP.js +0 -1
- package/dist/async-Tj4zKHXR.js +0 -3
- package/dist/auth-BhpnOCbn.js +0 -1
- package/dist/base64url-CsVsW4Id.js +0 -1
- package/dist/chat-CSepnsrK.js +0 -13
- package/dist/cmd-BHZwhrfa.js +0 -118
- package/dist/connection-BkYTuJjV.js +0 -1
- package/dist/context-zhSlmXOp.js +0 -7
- package/dist/conversation-DT-35cEt.js +0 -1
- package/dist/core-DwsAMCnL.js +0 -65
- package/dist/dash/standalone/node_modules/contextjsx/dist/index.mjs +0 -1
- package/dist/dash/standalone/node_modules/contextjsx/dist/jsx-runtime.mjs +0 -1
- package/dist/dash/standalone/node_modules/contextjsx/dist/src-BJ0QFeB8.mjs +0 -2
- package/dist/dash/standalone/node_modules/contextjsx/package.json +0 -70
- package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/turn.6bb73458768e222e.js +0 -129
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.e972c134a1ae918f.js +0 -55
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/auth/sign-in.661b3a4139af5bd7.js +0 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/page.04762872666a6f0a.js +0 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.8a20501ccb244421.js +0 -36
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.d066b77dd3187026.js +0 -65
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.09bf294d753ee9d7.js +0 -115
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.97381888bfdd711b.js +0 -642
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/engines-list.d47db60d7dc01ebd.js +0 -73
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.a5b273558fb7f0f0.js +0 -156
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.31d369f1b7ab45da.js +0 -444
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.73f8d0d54f79d8e3.js +0 -100
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.51fbeac76459433a.js +0 -240
- package/dist/dash/standalone/static/assets/chunks/action-a76e495fb39a73d3.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-pills-4d3c6a2aa9eb1522.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-f7231a66e391f6b6.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-toggle-d7d27123f2070f18.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agents-grid-185ecb3d86c6c447.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-56ebf36d63400423.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-a686289a79f64bae.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-data-f46a9bc7a14b4f9a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-696726aedab42c96.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-07559f145f3e3da3.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-426b0a5871ee41dd.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/credentials-list-f07d090410104148.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/custom-range-6618f32ef6cd4e80.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/editor-0860e370cbfc6b03.js +0 -6
- package/dist/dash/standalone/static/assets/chunks/engines-list-31b9bb7885924b05.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/format-a27067f0186e78ac.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-06b63e558f879da5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-2d9fbcbfadac4f40.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/list-2773686bf8df64c7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-8d2170eebe0d061d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/models-list-03611e64b6a07efe.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/notice-d14fdac28139c0a8.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-d3ba8ef89c59f801.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-2a71c62b9f7eaef3.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-70600c9943320152.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/runners-list-edf536eb8003eab5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-e86122f73525ff95.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-b281027d465e004f.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/shared-init-c3bd249cf1eca6d1.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/side-toggle-9b3af821cfe4c824.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-a37e7c26e82eb77d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-actions-705395565f2d83b8.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-cb21169f38b56d15.js +0 -6
- package/dist/dash/standalone/static/assets/chunks/tasks-list-d7dccfd7e0623ae0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/versions-list-f8f2e71df691efda.js +0 -1
- package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +0 -1
- package/dist/dash/standalone/static/assets/create-param-id-c2c756f652f2fc30.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-account-702f8a1b213e4026.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-aad2f9f93c06e9ab.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-f9dcbcec36586f2b.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-8ff47f5d622c1f9b.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-907036d553cfeb36.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cc77badad15f00c.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-705d7c15868b4fd6.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-04e189c045098772.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-76fcd1ce7b3dae71.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-eccb6bb9297a53e6.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-operator-635a121f7a9a95bd.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-a3297dc4d9e0c961.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-bcb06f81d9e8268d.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-setup-df4be8b188b9777f.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-16f9866a1b4801cd.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-02ae551dcd852b57.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-usage-f2175403069aab99.css +0 -1
- package/dist/dash/standalone/static/assets/global-e1de614478b64717.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-0dc829ba60df5c26.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-14d191f7f1da6602.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-169eaa63783b71fd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1e34cfefafa70fac.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-285d61f00a80f40b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-35b89c3ba23ee845.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6c42784e005d4b87.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6cd93f9bd4cf6ffd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7355f473fade532d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-815c3c297f75efb0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-87fe73c10a4dc33c.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-98b56a142d441260.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b4bafe68a40f720b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-bf61ff39bdc0db48.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c9fa86c244813f74.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d2e7a75e16221224.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d34e774405ea8da8.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d511822afdb41d1d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-e113aa2f25ecfe01.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-eb62f461d0c32266.js +0 -1
- package/dist/discover-CHfF4cEz.js +0 -1
- package/dist/dist-node-Bv1kCqyi.js +0 -20
- package/dist/docs-KHc0_gFX.js +0 -2
- package/dist/drive-Bwl7Bjme.js +0 -1
- package/dist/env-6Y-NNnYD.js +0 -1
- package/dist/errors-DO_IltpP.js +0 -16
- package/dist/exec-BmTa0vcO.js +0 -4
- package/dist/executor-ufWRqhdS.js +0 -11
- package/dist/http-Cg8PSe-c.js +0 -1
- package/dist/integrations-I7fRDk_l.js +0 -4
- package/dist/load-BDlEFetB.js +0 -2
- package/dist/local-COlczLwI.js +0 -5
- package/dist/log-view-CfX9lakH.js +0 -4
- package/dist/maintenance-CKCIWOvn.js +0 -1
- package/dist/match-CufHAZQH.js +0 -1
- package/dist/mcp-BkwmRHI9.js +0 -2
- package/dist/mcp-CGU7aoJ-.js +0 -1
- package/dist/mcp-DAHbhfUh.js +0 -13
- package/dist/models-CzggS7p2.js +0 -1
- package/dist/output-SNqdgh9A.js +0 -17
- package/dist/permission-MWFjKxqX.js +0 -1
- package/dist/prompt-CIx4jwQF.js +0 -8
- package/dist/refresh-CxsaX5R9.js +0 -1
- package/dist/remote-C9Hj2cby.js +0 -2
- package/dist/remote-HUZCWgfl.js +0 -3
- package/dist/runner-DYysY1-G.js +0 -1
- package/dist/runners-CfaGE0nV.js +0 -36
- package/dist/serve-DdAdw7Su.js +0 -4
- package/dist/serve-NQykWAKV.js +0 -1
- package/dist/serve-vKNqVaVy.js +0 -12
- package/dist/slack-BtKvW_4v.js +0 -5
- package/dist/task-CFxs0E_J.js +0 -1
- package/dist/task-iuYQ0zAK.js +0 -7
- package/dist/tools-B6ZxcqRi.js +0 -2
- package/dist/tools-FVop8XYG.js +0 -1
- package/dist/tools-search-kjKKolwp.js +0 -1
- package/dist/turn-DQ13lkPF.js +0 -2
- package/dist/types-DPtbvoo3.js +0 -1
- package/dist/types-DmThhjcW.js +0 -1
- package/dist/views-CMHXBMJp.js +0 -3
- package/dist/wire-C9CupY_A.js +0 -1
- package/dist/worker-BQpx1dPr.js +0 -9
- package/dist/worker-sTJL2eoe.js +0 -1
- package/dist/zod-BoqHoRCH.js +0 -1
- package/docs/access.md +0 -33
- package/docs/mcp.md +0 -54
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.1bd0542d832ae0c0.js → errors.200335e62a9d9564.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.061f6006f2685f5e.css.pnext-asset.js → page.abe7a6d16eb15c41.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.107e622830bff31d.css.pnext-asset.js → page.1c7947d6f79d6447.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{settings/agent-settings-form.ca926c58d15044aa.css.pnext-asset.js → platforms/platform-step.a722e3b8539a0f85.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{agent/instructions.446bccc375f30eeb.css.pnext-asset.js → [slug]/(tabs)/settings/agent-settings-form.bf5430862c505c55.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{editor/editor.1eb1bce282b289c9.css.pnext-asset.js → [slug]/platforms/[app]/@/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.db05694ed4113dab.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.a4efa8d807fe5416.css.pnext-asset.js → agents/[slug]/platforms/[app]/app-cards.d2f5c8d620066e05.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/@/app/dash/[org]/setup/outcome.3ad5f7ec67e5238d.css.pnext-asset.js → agents/agent/instructions.4c31196fcbf9846c.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/connections-list.46786fe36b121a43.css.pnext-asset.js → agents/editor/editor.6b9a1d5c0a490153.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/credentials-list.f7c27f170ec1e868.css.pnext-asset.js → layout.52abe52dcfa736d7.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.9927d602ebe9e7fc.css.pnext-asset.js → advanced-list.819e410e4178b328.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.8cbee173a5aff98d.css.pnext-asset.js → connections-list.87962937438296f1.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.53c7ea80b6fb734c.css.pnext-asset.js → credentials-list.973f91751525bcb6.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/[id]/task-view.42337a0d7c6ad0b6.css.pnext-asset.js → settings/[tab]/list.69d1b62c4066015b.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/composer.5b8687662e1629fa.css.pnext-asset.js → settings/[tab]/models-list.efd3f5781314c1d9.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/list/tasks-list.2f90c4410f843fff.css.pnext-asset.js → settings/[tab]/runners-list.df35d33aba0c8b07.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.f8ac779f0ebf888b.css.pnext-asset.js → dash/[org]/settings/model-pick.74fababc0cc0bba7.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{responsive.ebc5f7d77b4b86a0.css.pnext-asset.js → dash/[org]/tasks/[id]/task-view.aae9fa481b9015d1.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/task-toasts.d13d9f628e530552.css.pnext-asset.js → app/dash/[org]/tasks/composer.33d49ad218253703.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/badge.0cb1513f8b077560.css.pnext-asset.js → app/dash/[org]/tasks/list/pending-approvals.07e59a9cae7ccf29.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/button.d7f4433f4e7faa80.css.pnext-asset.js → app/dash/[org]/tasks/list/tasks-list.f3737549b4696cc8.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.f80288cc42f9bcae.css.pnext-asset.js → app/globals.3b53a3feaa1d72e1.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/filter.b53f21acc3e2cfef.css.pnext-asset.js → app/responsive.2979ffa0161a5afd.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/menu.25b184f68cba7b46.css.pnext-asset.js → frame/task-toasts.682322f6f729b33e.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.19e1ce5224a23acf.css.pnext-asset.js → badge.8e2a9842b28f44a6.css.pnext-asset.js} +0 -0
package/dist/args-Dqf5Y1RP.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Gt as e,Zt as t,kn as n}from"./core-DwsAMCnL.js";import{_r as r,ar as i,br as a,cr as o,fr as s,ir as c,nr as l,sr as u,tr as d}from"./errors-DO_IltpP.js";function f(e,t=``,r){return n.add(e,{description:t,...r?{value:r}:{}}),e}const p=e=>f(s(i()),e),m=(e,t)=>f(s(r()),e,t),h=(e,t)=>f(s(c(r())),e,t),g=(e,t)=>f(s(a([r(),o(!0)])),e,t),_=e=>f(l(s(a([r(),o(!0)])),!0),e,`[url]`),v=e=>f(s(a([o(`all`),d().check(u(),t())],{error:`expected a positive integer or "all"`})),e,`<n|all>`),y=t=>f(s(a([o(`all`),d().check(u(),e())],{error:`expected a number or "all"`})),t,`<n|all>`),b={server:g(`act on your Coder server`,`[url]`),workspace:m(`with --server: the workspace to act in (default: the saved one)`,`<slug>`),yes:p(`with --server: connect to a server used for the first time without asking`)};function x(e){return(e.server===!0?` --server`:typeof e.server==`string`?` --server ${JSON.stringify(e.server)}`:``)+(e.workspace?` --workspace ${JSON.stringify(e.workspace)}`:``)}const S={server:_(`act on your Coder server, in the saved workspace`),yes:p(`connect to a server used for the first time without asking`)};export{g as a,m as c,v as i,h as l,S as n,b as o,p as r,x as s,f as t,y as u};
|
package/dist/async-Tj4zKHXR.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{A as t,G as n,Or as r,Tr as i,kr as a}from"./errors-DO_IltpP.js";import{C as o}from"./output-SNqdgh9A.js";import{c as s,o as c}from"./actions-D12xDiQS.js";import{C as l,b as u,i as d,r as f,s as p,t as m,w as h}from"./executor-ufWRqhdS.js";import g from"node:path";import _ from"node:process";var v=e({driveAsyncTool:()=>T,pendingCall:()=>C,startAsyncTool:()=>w,taskFlow:()=>S});const y=e=>g.join(e,`async.json`),b=e=>i(y(e))??[];function x(e,t){return r(`${y(e)}.lock`,()=>{let n=b(e),r=t(n);return a(y(e),n),r})}const S=e=>e.flowRunId?h(e.flowRunId)?.name:void 0;function C(e,t){return b(e).find(e=>(!t||e.tool===t)&&!e.delivered&&(l(e.runId)?.status===`running`||e.pid!==void 0&&f(e.pid)))?.runId}async function w(e,t,n,r){let a=i(g.join(e,`job.json`));if(!a)throw Error(`This task has no record`);if(S(a)===t.flow)throw Error(`A ${t.name} task cannot start a ${t.name}`);if(r!==void 0&&!(r>0))throw Error(`timeout must be a positive number of seconds`);let s=a.cwd??_.cwd();return x(e,i=>{let c=C(e,t.name);if(c)throw Error(`${E(t.name)} ${c} is still running; its result arrives as a message.`);if(i.filter(e=>e.tool===t.name).length>=t.limit)throw Error(`This task has used all ${t.limit} of its ${t.name}s.`);let l=d(t.flow,{cwd:s,args:t.args(n,s)});i.push({tool:t.name,runId:l.runId});let{[o]:f,...p}=_.env;return u(l,s,{env:p,drive:[`--task`,a.id,`--tool`,t.name,...r?[`--timeout`,String(r)]:[]]}),l.runId})}async function T(e,r,i,a,o){let l=n(i,a),u=e=>x(l,t=>{let n=t.find(e=>e.runId===r);n&&Object.assign(n,e)}),d=E(e.name),f,g,v=()=>{},y=new Promise(e=>{o&&(g=setTimeout(()=>e(`timeout`),o*1e3)),v=()=>e(`stopped`),_.once(`SIGINT`,v),_.once(`SIGTERM`,v)}),S;try{await u({pid:_.pid});let t=h(r);if(!t)throw Error(`No flow run "${r}".`);let n=await Promise.race([m(t,i,{onStart:e=>f=e}),y]);typeof n==`string`?(await p(r,f?.runningIds()),f?.requestStop(),S=n===`timeout`?`${d} timed out after ${o}s and was stopped`:`${d} was stopped`):S=`${d} finished\n\n${e.render(n.result,r)}`}catch(e){S=`${d} ${r} failed: ${e instanceof Error?e.message:String(e)}`}finally{clearTimeout(g),_.off(`SIGINT`,v),_.off(`SIGTERM`,v)}let C=t(i,a);if(!C)throw Error(`No task "${a}" to send ${e.name} ${r} to.`);let w=e.limit-b(l).filter(t=>t.tool===e.name).length,[T,...D]=S.split(`
|
|
2
|
-
`),O=[`${T} (task ${e.name}s left ${w}/${e.limit}).`,...D].join(`
|
|
3
|
-
`);await s(C.cwd??i,C,O,(C.connectionSource??(C.connections?`server`:void 0))===`server`?{resolveConnections:c(C.mcp)}:{}),await u({delivered:!0})}const E=e=>e[0].toUpperCase()+e.slice(1);export{S as i,C as n,w as r,v as t};
|
package/dist/auth-BhpnOCbn.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,A as t,B as n,C as r,D as i,E as a,F as o,G as s,H as c,I as l,J as u,K as d,L as f,M as p,N as m,O as h,P as g,Q as _,R as v,S as y,T as b,U as x,V as S,W as C,X as w,Y as T,Z as E,_ as D,a as O,at as k,b as ee,c as A,ct as j,d as M,dt as te,et as N,f as ne,ft as re,g as ie,gt as ae,ht as oe,i as se,it as ce,j as le,k as ue,lt as de,m as fe,mt as P,n as pe,nt as me,o as he,ot as F,p as ge,pt as _e,q as ve,r as ye,rt as be,s as xe,st as Se,tt as Ce,ut as we,v as Te,vt as Ee,w as De,x as Oe,y as ke,z as Ae}from"./build-CmtlB7pX.js";import{i as je,l as Me}from"./http-Cg8PSe-c.js";import{Tn as Ne,V as Pe,_r as Fe,sr as Ie,vr as Le}from"./apps-Bnk7F3A2.js";import{m as I,p as L,platformLink as R}from"./schema.js";import{a as Re,i as ze,o as Be}from"./serve-vKNqVaVy.js";import{createECDH as Ve,hkdfSync as He}from"node:crypto";import{isDeepStrictEqual as Ue}from"node:util";function We(e,t,n){if(!S(e,t,n))throw new N(`JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint`)}function Ge(e,t,n=!1){if(!e[1]&&!e[2]&&!e[3])throw new N(`either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()`);t!==void 0&&(e[8]=t?.crit);let[,i,a,c,l,d,f,p,m]=e;if(l!==void 0&&v(l,`JWE Additional Authenticated Data`),d!==void 0&&v(d,`JWE Content Encryption Key`),f!==void 0&&v(f,`JWE Initialization Vector`),!n&&i!==void 0&&(i=s(N,i)[0],e[1]=i),a!==void 0&&(a=s(N,a)[0],e[2]=a),!n&&c!==void 0&&(c=s(N,c)[0],e[3]=c),p!==void 0&&!x(p))throw TypeError(`JWE Key Management Parameters must be an object`);We(i,a,c);let h={...i,...a,...c};T(N,i),u(N,o,m,i,h),ke(h,i);let{alg:g,enc:_}=h;if(typeof g!=`string`||!g)throw new N(`JWE "alg" (Algorithm) Header Parameter missing or invalid`);let y=Oe[g];if(y?.mode===`integrated-encryption`){if(_!==void 0)throw new N(`JWE "enc" (Encryption Algorithm) Header Parameter must not be present for integrated encryption`);if(d!==void 0)throw TypeError(`setContentEncryptionKey cannot be called with JWE "alg" (Algorithm) Header ${g}`);if(f!==void 0)throw TypeError(`setInitializationVector cannot be called with JWE "alg" (Algorithm) Header ${g}`);return[h,void 0,y]}if(typeof _!=`string`||!_)throw new N(`JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid`);return[h,r(_),y]}async function Ke(e,t,n){let[r,i,a]=t,[o,s,c,l,u,d,f,m,,h]=e,g=s,_=c,v=a??y(r.alg),x,S,C;v.mode===`integrated-encryption`?C=await p(v,n,`encrypt`):[C,x,S]=await ee(v,i,n,r,d,m),S&&(h?_=_?{..._,...S}:S:g=g?{...g,...S}:S,We(g,_,l));let T=g?w(JSON.stringify(g)):``,E=u?.byteLength?w(u):void 0,D=P(E?`${T}.${E}`:T),O=o;r.zip===`DEF`&&(O=await Te(O).catch(e=>{throw new N(`Failed to compress plaintext`,{cause:e})}));let k,A,j;v.mode===`integrated-encryption`?[x,k]=await v.encrypt(C,O,D,g,r,m):{ciphertext:k,tag:A,iv:j}=await b(i,O,C,f,D);let M={ciphertext:w(k)};return j&&(M.iv=w(j)),A&&(M.tag=w(A)),x?.byteLength&&(M.encrypted_key=w(x)),E&&(M.aad=E),g&&(M.protected=T),l&&(M.unprotected=l),_&&(M.header=_),M}async function qe(e,t,n){return Ke(e,Ge(e,n),t)}function Je(e){return[e.protected,e.encrypted_key,e.iv,e.ciphertext,e.tag].join(`.`)}const z=[[`verify`],[`sign`]];function Ye(e){let t={name:`HMAC`,hash:`SHA-${e}`};return{kty:[`oct`],secret:!0,subtle:t,signing:t,usages:z}}function B(e,t){let n={name:t?`RSA-PSS`:`RSASSA-PKCS1-v1_5`,hash:`SHA-${e}`};return{kty:[`RSA`],subtle:n,signing:t?{...n,saltLength:t}:n,usages:z,minRsaBits:2048}}function Xe(e,t){return{kty:[`EC`],crv:e,subtle:{name:`ECDSA`,namedCurve:e},signing:{name:`ECDSA`,hash:`SHA-${t}`},usages:z}}function Ze(){let e={name:`Ed25519`};return{kty:[`OKP`],crv:`Ed25519`,subtle:e,signing:e,usages:z}}function Qe(e){let t={name:`ML-DSA-${e}`};return{kty:[`AKP`],subtle:t,signing:t,usages:z}}const $e=De({HS256:Ye(256),HS384:Ye(384),HS512:Ye(512),RS256:B(256),RS384:B(384),RS512:B(512),PS256:B(256,32),PS384:B(384,48),PS512:B(512,64),ES256:Xe(`P-256`,256),ES384:Xe(`P-384`,384),ES512:Xe(`P-521`,512),EdDSA:Ze(),Ed25519:Ze(),"ML-DSA-44":Qe(44),"ML-DSA-65":Qe(65),"ML-DSA-87":Qe(87)});function et(t){let n=typeof t==`string`?$e[t]:void 0;if(!n)throw new e(`alg ${t} is not supported either by JOSE or your javascript runtime`);return n}function tt(e){return[e&&d(`algorithms`,e.algorithms),e?.crit]}function nt(e){return e===void 0?{}:C(e,F,`JWS Protected Header is invalid`)}function rt(e){try{return P(e)}catch{throw new F(`JWS Compact Serialization payload must use only ASCII characters`)}}async function it(e,t,r,i,o){let{protected:s,header:c,payload:d}=e,f=o??nt(s);if(!S(f,c))throw new F(`JWS Protected and JWS Unprotected Header Parameter names must be disjoint`);let h={...f,...c},g=ve(f,u(F,l,t[1],f,h)),{alg:_}=h;if(typeof _!=`string`||!_)throw new F(`JWS "alg" (Algorithm) Header Parameter missing or invalid`);if(t[0]&&!t[0].has(_))throw new E(`"alg" (Algorithm) Header Parameter value not allowed`);if(g){if(typeof d!=`string`)throw new F(`JWS Payload must be a string`)}else if(typeof d!=`string`&&!(d instanceof Uint8Array))throw new F(`JWS Payload must be a string or an Uint8Array instance`);let v=g||typeof d!=`string`?d:i(d),y=!1;typeof r==`function`&&(r=await r(f,e),y=!0);let b=et(_),x=te(s===void 0?new Uint8Array:P(s),P(`.`),typeof v==`string`?t[2]??=n(v,`payload`,F):v),C=Ae(e.signature,`signature`,F),w=await p(b,r,`verify`),T=await m(w,b.subtle,`verify`);b.minRsaBits&&a(b.alg,T);let D=!1;try{D=await crypto.subtle.verify(b.signing,T,C,x)}catch{}if(!D)throw new Se;let O={payload:typeof v==`string`?Ae(v,`payload`,F):v};return s!==void 0&&(O.protectedHeader=f),c!==void 0&&(O.unprotectedHeader=c),y?[{...O,key:w},g]:[O,g]}async function at(e,t,n){if(e instanceof Uint8Array&&(e=re.decode(e)),typeof e!=`string`)throw new F(`Compact JWS must be a string or Uint8Array`);let{0:r,1:i,2:a,length:o}=e.split(`.`);if(o!==3)throw new F(`Invalid Compact JWS`);return it({payload:i,protected:r,signature:a},t,n,rt)}const V=e=>Math.floor(e.getTime()/1e3),ot={s:1,m:60,h:3600,d:86400,w:604800,y:31557600},st=/^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i,H=`check_failed`;function ct(){throw TypeError(`Invalid time period format`)}function U(e){typeof e!=`string`&&ct();let t=st.exec(e);(!t||t[4]&&t[1])&&ct();let n=parseFloat(t[2]),r=Math.round(n*ot[t[3][0].toLowerCase()]);return Number.isFinite(r)||ct(),t[1]===`-`||t[4]===`ago`?-r:r}function W(e,t){if(!Number.isFinite(t))throw TypeError(`Invalid ${e} input`);return t}function lt(e,t){if(typeof t!=`string`)throw TypeError(`"${e}" claim must be a string`)}function ut(e){if(typeof e!=`string`&&(!Array.isArray(e)||Array.from(e).some(e=>typeof e!=`string`)))throw TypeError(`"aud" claim must be a string or an array of strings`)}function dt(e,t){return typeof e==`number`?W(t,e):e instanceof Date?W(t,V(e)):V(new Date)+U(e)}const ft=e=>{let t=e.toLowerCase();return e.includes(`/`)?t:`application/${t}`},pt=(e,t)=>typeof e==`string`?t.includes(e):Array.isArray(e)?t.some(t=>e.includes(t)):!1;function mt(e,t,n=!1){let r=e[t];if(!(r===void 0&&!n)){if(typeof r!=`number`)throw new j(`"${t}" claim must be a number`,e,t,`invalid`);return r}}function ht(e,t){throw new j(`unexpected "${t}" claim value`,e,t,H)}function gt(e,t,n={}){let r;try{r=JSON.parse(ae.decode(t))}catch{}if(!x(r))throw new we(`JWT Claims Set must be a top-level JSON object`);let{typ:i}=n;if(i!==void 0&&(typeof e.typ!=`string`||ft(e.typ)!==ft(i)))throw new j(`unexpected "typ" JWT header value`,r,`typ`,H);let{requiredClaims:a=[],issuer:o,subject:s,audience:c,maxTokenAge:l}=n,u=[...a];l!==void 0&&u.push(`iat`),c!==void 0&&u.push(`aud`),s!==void 0&&u.push(`sub`),o!==void 0&&u.push(`iss`);for(let e of new Set(u.reverse()))if(!Object.hasOwn(r,e))throw new j(`missing required "${e}" claim`,r,e,`missing`);o!==void 0&&!(Array.isArray(o)?o:[o]).includes(r.iss)&&ht(r,`iss`),s!==void 0&&r.sub!==s&&ht(r,`sub`),c!==void 0&&!pt(r.aud,typeof c==`string`?[c]:c)&&ht(r,`aud`);let{clockTolerance:d}=n,f=0;if(typeof d==`string`)f=U(d);else if(d!==void 0){if(typeof d!=`number`)throw TypeError(`Invalid clockTolerance option type`);f=d}W(`clockTolerance option`,f);let{currentDate:p}=n,m=W(`currentDate option`,V(p===void 0?new Date:p)),h=mt(r,`iat`,l!==void 0),g=mt(r,`nbf`);if(g!==void 0&&g>m+f)throw new j(`"nbf" claim timestamp check failed`,r,`nbf`,H);let _=mt(r,`exp`);if(_!==void 0&&_<=m-f)throw new de(`"exp" claim timestamp check failed`,r,`exp`,H);if(l!==void 0){let e=m-h,t=W(`maxTokenAge option`,typeof l==`number`?l:U(l));if(e-f>t)throw new de(`"iat" claim timestamp check failed (too far in the past)`,r,`iat`,H);if(e<-f)throw new j(`"iat" claim timestamp check failed (it should be in the past)`,r,`iat`,H)}return r}let _t;function G(e){return _t.get(e)}function vt(e){let t=G(e);for(let e of[`iat`,`nbf`,`exp`]){let n=t[e];if(typeof n==`number`&&!Number.isFinite(n))throw TypeError(`"${e}" claim must be a finite number`)}return oe.encode(JSON.stringify(t))}function yt(e,t){return G(e)[t]}var bt=class{constructor(e={}){if(!x(e))throw TypeError(`JWT Claims Set MUST be an object`);(_t||=new WeakMap).set(this,structuredClone(e))}setIssuer(e){return lt(`iss`,e),G(this).iss=e,this}setSubject(e){return lt(`sub`,e),G(this).sub=e,this}setAudience(e){return ut(e),G(this).aud=e,this}setJti(e){return lt(`jti`,e),G(this).jti=e,this}setNotBefore(e){return G(this).nbf=dt(e,`setNotBefore`),this}setExpirationTime(e){return G(this).exp=dt(e,`setExpirationTime`),this}setIssuedAt(e){let t=G(this);return t.iat=e===void 0?V(new Date):typeof e==`string`?W(`setIssuedAt`,V(new Date)+U(e)):dt(e,`setIssuedAt`),this}};async function xt(e,t,n){let[r,i]=await at(e,tt(n),t);if(!i)throw new we(`JWTs MUST NOT use unencoded payload`);let a=gt(r.protectedHeader,r.payload,n);return{...r,payload:a}}async function St(e,t,n){let{plaintext:r,...i}=await ie(e,D(n),t),{protectedHeader:a}=i,o=gt(a,r,n);for(let e of[`iss`,`sub`,`aud`])if(a[e]!==void 0&&(e===`aud`?JSON.stringify(a.aud)!==JSON.stringify(o.aud):a[e]!==o[e]))throw new j(`replicated "${e}" claim header parameter mismatch`,o,e,`mismatch`);return{payload:o,...i}}const Ct=bt;var wt=class extends Ct{#e=[void 0];#t;#n;#r;setProtectedHeader(e){return f(this.#e[1],`setProtectedHeader`),this.#e[1]=e,this}setKeyManagementParameters(e){return f(this.#e[7],`setKeyManagementParameters`),this.#e[7]=e,this}setContentEncryptionKey(e){return f(this.#e[5],`setContentEncryptionKey`),this.#e[5]=e,this}setInitializationVector(e){return f(this.#e[6],`setInitializationVector`),this.#e[6]=e,this}replicateIssuerAsHeader(){return this.#t=!0,this}replicateSubjectAsHeader(){return this.#n=!0,this}replicateAudienceAsHeader(){return this.#r=!0,this}async encrypt(e,t){let n=vt(this);this.#e[1]&&(this.#t||this.#n||this.#r)&&(this.#e[1]={...this.#e[1],iss:this.#t?yt(this,`iss`):void 0,sub:this.#n?yt(this,`sub`):void 0,aud:this.#r?yt(this,`aud`):void 0});let r=[...this.#e];return r[0]=n,Je(await qe(r,e,t))}};async function Tt(e){if(t(e))if(e.type===`secret`)e=e.export();else return e.export({format:`jwk`});if(e instanceof Uint8Array)return{kty:`oct`,k:w(e)};if(!h(e))throw TypeError(i(e,`CryptoKey`,`KeyObject`,`Uint8Array`));if(!e.extractable)throw TypeError(`non-extractable CryptoKey cannot be exported as a JWK`);let n=await crypto.subtle.exportKey(`jwk`,e);delete n.ext,delete n.key_ops,delete n.use,n.kty!==`AKP`&&delete n.alg;for(let e of Object.keys(n))n[e]===void 0&&delete n[e];return n}const K=(e,t)=>{if(typeof e!=`string`||!e)throw new Ce(`${t} missing or invalid`)};async function Et(t,n){let r;if(x(t)){if(r=g(t),typeof r.kty!=`string`)throw TypeError(i(t,`CryptoKey`,`KeyObject`,`JSON Web Key`))}else if(ue(t))r=g(await Tt(t));else throw TypeError(i(t,`CryptoKey`,`KeyObject`,`JSON Web Key`));if(n??=`sha256`,n!==`sha256`&&n!==`sha384`&&n!==`sha512`)throw TypeError(`digestAlgorithm must one of "sha256", "sha384", or "sha512"`);let a;switch(r.kty){case`AKP`:K(r.alg,`"alg" (Algorithm) Parameter`),K(r.pub,`"pub" (Public key) Parameter`),a={alg:r.alg,kty:r.kty,pub:r.pub};break;case`EC`:K(r.crv,`"crv" (Curve) Parameter`),K(r.x,`"x" (X Coordinate) Parameter`),K(r.y,`"y" (Y Coordinate) Parameter`),a={crv:r.crv,kty:r.kty,x:r.x,y:r.y};break;case`OKP`:K(r.crv,`"crv" (Subtype of Key Pair) Parameter`),K(r.x,`"x" (Public Key) Parameter`),a={crv:r.crv,kty:r.kty,x:r.x};break;case`RSA`:K(r.e,`"e" (Exponent) Parameter`),K(r.n,`"n" (Modulus) Parameter`),a={e:r.e,kty:r.kty,n:r.n};break;case`oct`:if(typeof r.k!=`string`)throw new Ce(`"k" (Key Value) Parameter missing or invalid`);a={k:r.k,kty:r.kty};break;default:throw new e(`"kty" (Key Type) Parameter missing or unsupported`)}let o=P(JSON.stringify(a));return w(await _e(n,o))}function Dt(e,t,n,r){let{kty:i,key_ops:a,ext:o,kid:s,alg:c,use:l,crv:u}=e;return(o===void 0||typeof o==`boolean`)&&(a===void 0||Array.isArray(a)&&a.every((e,t)=>typeof e==`string`&&a.indexOf(e)===t)&&a.includes(`verify`))&&t.kty.includes(i)&&(r===void 0||typeof r==`string`&&r===s)&&(c===void 0?i!==`AKP`:n===c)&&(l===void 0||l===`sig`)&&(!t.crv||u===t.crv)}async function Ot(e,t,n){let r=e.get(t)||e.set(t,{}).get(t),{alg:i}=n;if(r[i]===void 0){let e=le(n,t,!0).then(e=>{if(e.type!==`public`)throw new me(`JSON Web Key Set members must be public keys`);return r[i]=e,e}).catch(t=>{throw r[i]===e&&delete r[i],t});r[i]=e}return r[i]}function kt(t){let n;try{n=structuredClone(t)}catch{}if(!c(n))throw new me(`JSON Web Key Set malformed`);let r=n.keys.map(e=>{let t=g(e);return Array.isArray(t.key_ops)&&(t.key_ops=[...t.key_ops]),t}),i=new WeakMap;return Object.defineProperty(async(t,a)=>{let{alg:o,kid:s}={...t,...a?.header},c=typeof o==`string`?$e[o]:void 0;if(!c||c.secret)throw new e(`Unsupported "alg" value for a JSON Web Key Set`);let l=n.keys.filter((e,t)=>Dt(r[t],c,o,s)),{0:u,length:d}=l;if(!d)throw new ce;if(d!==1){let e=new be;throw e[Symbol.asyncIterator]=async function*(){for(let e of l)try{yield await Ot(i,e,c)}catch{}},e}return Ot(i,u,c)},"jwks",{value:()=>structuredClone(n)})}function At(){return typeof WebSocketPair<`u`||typeof navigator<`u`&&navigator.userAgent===`Cloudflare-Workers`||typeof EdgeRuntime<`u`&&EdgeRuntime===`vercel`}let jt;(typeof navigator>`u`||!navigator.userAgent?.startsWith?.(`Mozilla/5.0 `))&&(jt=`jose/v6.2.12`);const Mt=Symbol();async function Nt(e,t,n,r=fetch){let i=await r(e,{method:`GET`,signal:n,redirect:`manual`,headers:t}).catch(e=>{throw e.name===`TimeoutError`?new k:e});if(i.status!==200)throw new _(`Expected 200 OK from the JSON Web Key Set HTTP response`);try{return await i.json()}catch{throw new _(`Failed to parse the JSON Web Key Set HTTP response as JSON`)}}const Pt=Symbol();function q(e,t){return Number.isFinite(e)&&Date.now()<e+t}function Ft(e,t,n){if(Number.isNaN(e))throw TypeError(`"${n}" option must not be NaN`);return typeof e==`number`?e:t}function It(e,t){if(!(e instanceof URL))throw TypeError(`url must be an instance of URL`);let n=new URL(e.href).href,r=t??{},i=r.timeoutDuration;if(typeof i==`number`&&(!Number.isInteger(i)||i<0))throw TypeError(`"timeoutDuration" option must be a non-negative integer`);let a=typeof i==`number`?i:5e3,o=Ft(r.cooldownDuration,3e4,`cooldownDuration`),s=Ft(r.cacheMaxAge,6e5,`cacheMaxAge`),l=new Headers(r.headers);jt&&!l.has(`User-Agent`)&&l.set(`User-Agent`,jt),l.has(`accept`)||l.set(`accept`,`application/json, application/jwk-set+json`);let u=r[Mt],d=r[Pt],f,p,m=0,h=0,g;if(d&&typeof d==`object`){let{uat:e,jwks:t}=d;q(e,s)&&c(t)&&(f=e,g=kt(t))}let _=async()=>{if(p&&At()&&(p=void 0),!p){let e=++m,t=p=Nt(n,l,AbortSignal.timeout(a),u).then(t=>{let n=kt(t);if(e<=h)return;g=n;let r=Date.now();d&&(d.uat=r,d.jwks=t),f=r,h=e}).finally(()=>{p===t&&(p=void 0)})}await p};return Object.defineProperties(async(e,t)=>{(!g||!q(f,s))&&await _();try{return await g(e,t)}catch(n){if(n instanceof ce&&!q(f,o))return await _(),g(e,t);throw n}},{coolingDown:{get:()=>q(f,o),enumerable:!0},fresh:{get:()=>q(f,s),enumerable:!0},reload:{value:_,enumerable:!0},reloading:{get:()=>!!p,enumerable:!0},jwks:{value:()=>g?.jwks(),enumerable:!0}})}const Lt=(e,t)=>new Uint8Array(He(`sha256`,e,``,t,32));async function Rt(e){let t=Lt(e,`coder oidc client key`),n=Ve(`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 Et(i);return{key:a,kid:o,jwk:{...i,kid:o,alg:`ES256`,use:`sig`}}}async function zt(e){let t=[e.encryptionKey,e.previousEncryptionKey].filter(e=>!!e),n=await Promise.all(t.map(Rt));return{cookie:t.map(e=>Lt(e,`coder session cookie`)),client:n[0],jwks:{keys:n.map(e=>e.jwk)}}}const J=`${Fe}.session`,Y=`${Fe}.oidc`,X=`${Fe}.operator`,Bt=3800,Vt=2592e3,Ht=3600,Z=()=>Math.floor(Date.now()/1e3);function Q(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 Ut(e){let t=[];for(;e.has(`${J}.${t.length}`);)t.push(`${J}.${t.length}`);return t}function $(e){let t=Q(e);return t.get(J)??(Ut(t).map(e=>t.get(e)).join(``)||void 0)}function Wt(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 Gt(e){let t=(e?.orgs.find(t=>t.id===e.org)??e?.orgs[0])?.slug;return t?`/dash/${encodeURIComponent(t)}/operator`:`/dash/operator`}function Kt(e,t,n){let r=e.get(`x-coder-organization`);if(r)return Ie(t,r);let i=t.organizations.find(e=>e.id===n)??t.organizations[0];return i?{...t,organizationId:i.id,role:i.role}:t}async function qt(e,t){let n=t.auth.wular.url,r=t.publicUrl,i=new URL(r).origin,a=r.startsWith(`https:`),o=await zt(t),s=t=>t instanceof Ne?t.db:e,c=`${r}${ze}`,l=(e,t,n)=>`${e}=${t}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${n}${a?`; Secure`:``}`,u=(e,t)=>new wt(e).setProtectedHeader({alg:`dir`,enc:`A256GCM`}).setIssuedAt().setExpirationTime(`${t}s`).encrypt(o.cookie[0]);async function d(e){if(e)for(let t of o.cookie)try{return(await St(e,t)).payload}catch{}}async function f(e,t){let n=await u(t,Vt),r=Ut(Q(e));if(n.length<=Bt)return[l(J,n,Vt),...r.map(e=>l(e,``,0))];let i=n.match(RegExp(`.{1,${Bt}}`,`g`));return[l(J,``,0),...i.map((e,t)=>l(`${J}.${t}`,e,Vt)),...r.slice(i.length).map(e=>l(e,``,0))]}let p=e=>[J,...Ut(Q(e))].map(e=>l(e,``,0)),m,h=()=>m??=A(new URL(n),`${r}${Be}`,void 0,pe(o.client),new URL(n).protocol===`http:`?{execute:[ye]}:void 0).catch(e=>{throw m=void 0,e}),g,v=async()=>g??=It(new URL((await h()).serverMetadata().jwks_uri));function y(e,t){let n=e.claims();if(!n)throw Error(`Wular Auth returned no ID token`);let r=Wt(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:Z()+(e.expires_in??600),at:Z(),rt:e.refresh_token??t?.rt,idt:e.id_token??t?.idt}}let b=async t=>{try{await Promise.all(t.map(({id:t,slug:n,name:r})=>new Ne(e,t).put(`delivery`,`workspace`,{slug:n,name:r})))}catch(e){console.error(`coder server: saving organizations failed`,e)}},x=new Map;function S(e){let t=e.rt;if(!t)return Promise.resolve(void 0);let n=x.get(t);return n||(n=h().then(e=>fe(e,t)).then(t=>y(t,e)).then(t=>(Ue(t.orgs,e.orgs)||b(t.orgs),t)).catch(e=>(x.delete(t),e instanceof Ee&&e.error===`invalid_grant`?!1:void 0)),x.set(t,n),setTimeout(()=>x.delete(t),6e4).unref?.()),n.then(t=>t&&t.orgs.some(t=>t.id===e.org)?{...t,org:e.org}:t)}async function C(e,t,r){let a=(await v().then(t=>xt(e,t,{issuer:n,audience:i,typ:`at+jwt`})).catch(e=>{(!(e instanceof _)||e instanceof k||e.code===`ERR_JOSE_GENERIC`)&&console.error(`coder server: bearer verification unavailable`,e)}))?.payload;if(!a?.sub)return;let o={user:{id:a.sub,name:``,email:``},organizations:Wt(a.organizations)};return r&&Z()-(a.iat??0)>60?{...o,stale:!0}:Kt(t,o,typeof a.org==`string`?a.org:void 0)}async function w(e){let t=await h().catch(()=>void 0);if(!t)return Response.redirect(`${r}/login?error=unavailable`,302);let n=e.searchParams.get(`operator`)===`1`,a=e.searchParams.get(`prompt`)===`login`,o={verifier:ne(),state:ge(),nonce:M(),return:n?`/dash`:Le(e.searchParams.get(`return`),i),...n?{operator:n}:{}},s=O(t,{redirect_uri:c,...n?{scope:`openid`,prompt:`login`}:{scope:Re},...a?{prompt:`login`}:{},code_challenge:await xe(o.verifier),code_challenge_method:`S256`,state:o.state,nonce:o.nonce});return new Response(null,{status:302,headers:{location:s.href,"set-cookie":l(Y,await u(o,600),600)}})}async function T(e,t){let n=e=>{let t=new Headers({location:`/login?error=${encodeURIComponent(e)}`});return t.append(`set-cookie`,l(Y,``,0)),new Response(null,{status:302,headers:t})},r=await d(Q(e.headers).get(Y));if(!r)return n(`expired`);let i=t.searchParams.get(`error`);if(i)return n(i);let a,o;try{let e=await se(await h(),new URL(`${c}${t.search}`),{pkceCodeVerifier:r.verifier,expectedState:r.state,expectedNonce:r.nonce,idTokenExpected:!0});a=y(e),o=e.claims()?.auth_time}catch{return n(`sign_in_failed`)}if(r.operator)return D(e,a.sub,o);await b(a.orgs);let s=new Headers({location:r.return});s.append(`set-cookie`,l(Y,``,0));for(let t of await f(e.headers,a))s.append(`set-cookie`,t);return new Response(null,{status:302,headers:s})}let E=e=>u(e,e.at+Ht-e.seen).then(t=>l(X,t,e.at+Ht-e.seen));async function D(e,n,r){let a=await d($(e.headers)),o=Z(),s=typeof r==`number`&&o-r<=60,c=s&&a?.sub===n&&t.operators?.includes(n);c||console.error(`coder server: operator sign-in refused: ${s?`not this session or not an operator`:`auth_time ${typeof r==`number`?`${o-r}s old`:`missing`}`}`);let u=new Headers({location:`${Gt(a)}?${c?`entered=1`:`error=${s?`denied`:`stale`}`}`});return u.append(`set-cookie`,l(Y,``,0)),c&&u.append(`set-cookie`,await E({sub:n,aud:i,at:o,seen:o})),new Response(null,{status:302,headers:u})}async function ee(e){if(!Pe(e,r))return je();let t=await d($(e.headers)),n=await h().catch(()=>void 0),i=`${r}/?signed_out=1`,a=n?.serverMetadata().end_session_endpoint&&t?.idt?he(n,{id_token_hint:t.idt,post_logout_redirect_uri:i}).href:i,o=Response.json({url:a});for(let t of p(e.headers))o.headers.append(`set-cookie`,t);return o.headers.append(`set-cookie`,l(X,``,0)),o}return{issuer:n,jwks:o.jwks,handler(e){let t=new URL(e.url);return t.pathname===`/api/auth/sign-in`&&e.method===`GET`?w(t):t.pathname===`/api/auth/callback`&&e.method===`GET`?T(e,t):t.pathname===`/api/auth/sign-out`&&e.method===`POST`?ee(e):Promise.resolve(Me())},async session(e,t=!1,n=[]){let r=e.get(`authorization`);if(r?.startsWith(`Bearer `))return C(r.slice(7),e,t);let i=await d($(e));if(i){if(i.exp_at<=Z()||t&&Z()-i.at>60){let t=await S(i);if(t===!1&&n.push(...p(e)),!t)return;i=t,n.push(...await f(e,i))}return Kt(e,{user:{id:i.sub,name:i.name,email:i.email},organizations:i.orgs},i.org)}},async operator(e,t=[]){let n=Q(e).get(X),r=await d(n),a=Z();if(!r||r.aud!==i||a-r.seen>900||a>=r.at+Ht){n&&t.push(l(X,``,0));return}return t.push(await E({...r,seen:a})),r.sub},async setOrganization(e,t,n=[]){let r=await d($(e));r&&r.exp_at<=Z()&&(r=await S(r)||void 0);let i=r?.orgs.find(e=>e.slug===t);if(!(!r||!i))return r.org!==i.id&&n.push(...await f(e,{...r,org:i.id})),i},async organization(t){let n=await new Ne(e,t).get(`delivery`,`workspace`);return n&&`slug`in n?n:void 0},async link(e,t,n,r={},i){let a={name:e.name,email:e.email,...r.organizations?{organizations:r.organizations}:{},...r.token?{token:r.token}:{}},[o]=await s(i).insert(R).values({platform:t,platformUserId:n,userId:e.id,...a}).onConflictDoUpdate({target:[R.platform,R.platformUserId],set:a,setWhere:I(R.userId,e.id)}).returning({userId:R.userId});return o?.userId===e.id?`linked`:`taken`},async linkedAccounts(e,t){return(await s(t).select().from(R).where(I(R.userId,e))).map(e=>({platform:e.platform,platformUserId:e.platformUserId,name:e.name,email:e.email,...e.organizations?{organizations:e.organizations}:{},...e.token?{token:e.token}:{}}))},async unlink(e,t,n,r){await s(r).delete(R).where(L(I(R.userId,e),I(R.platform,t),I(R.platformUserId,n)))},async refreshLinkedToken(e,t,n,r,i,a){let[o]=await s(a).update(R).set({token:i}).where(L(I(R.userId,e),I(R.platform,t),I(R.platformUserId,n),I(R.token,r))).returning({userId:R.userId});return!!o},async linkedUser(t,n){let[r]=await e.select({id:R.userId,name:R.name,email:R.email,organizations:R.organizations,token:R.token}).from(R).where(L(I(R.platform,t),I(R.platformUserId,n)));return r&&{id:r.id,name:r.name,email:r.email,...r.organizations?{organizations:r.organizations}:{},...r.token?{token:r.token}:{}}}}}export{qt as createAuth};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=e=>Buffer.from(JSON.stringify(e)).toString(`base64url`),t=e=>JSON.parse(Buffer.from(e,`base64url`).toString(`utf8`));export{e as n,t};
|
package/dist/chat-CSepnsrK.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import{En as e}from"./apps-Bnk7F3A2.js";import{a as t}from"./client-C4QCT6cG.js";import{C as n,M as r,T as i,b as a,chatItem as o,chatState as s,h as c,m as l,p as u}from"./schema.js";import{randomUUID as d}from"node:crypto";var f=class{db;now;constructor(e,t=Date.now){this.db=e,this.now=t}at(e){return e?new Date(this.now()+e):null}stamp(e){return e===void 0?null:new Date(this.now()+e).toISOString()}live(){return i(a(s.expiresAt),c(s.expiresAt,new Date(this.now())))}expired(){return n(s.expiresAt,new Date(this.now()))}async read(e){let[n]=await t(this.db,()=>this.db.select({value:r`${s.value}`}).from(s).where(u(l(s.key,e),this.live())));return n?.value}async claim(e,t,n){return(await this.db.insert(s).values({key:e,value:t,expiresAt:n}).onConflictDoUpdate({target:s.key,set:{value:t,expiresAt:n},setWhere:this.expired()}).returning({key:s.key})).length>0}async connect(){}async disconnect(){}async get(e){return await this.read(`k:${e}`)??null}async set(e,t,n){let r={value:t,expiresAt:this.at(n)};await this.db.insert(s).values({key:`k:${e}`,...r}).onConflictDoUpdate({target:s.key,set:r})}setIfNotExists(e,t,n){return this.claim(`k:${e}`,t,this.at(n))}async delete(e){await this.db.execute(r`with items as (delete from ${o} where key = ${`k:${e}`}) delete from ${s} where key = ${`k:${e}`}`)}async appendToList(e,t,n={}){let i=`k:${e}`,a=n.maxLength?r`or seq <= coalesce((select seq from ${o} where key = ${i} order by seq desc offset ${n.maxLength-1} limit 1), -1)`:r``;await this.db.execute(r`
|
|
2
|
-
with added as (insert into ${o} (key, value, expires_at) values (${i}, ${JSON.stringify(t)}::jsonb, ${this.stamp(n.ttlMs)}::timestamptz))
|
|
3
|
-
delete from ${o} where key = ${i} and ((select expires_at from ${o} where key = ${i} order by seq desc limit 1) <= ${this.stamp(0)}::timestamptz ${a})`)}async getList(n){let i=`k:${n}`;return(await t(this.db,()=>e(this.db,r`
|
|
4
|
-
with newest as (select expires_at from ${o} where key = ${i} order by seq desc limit 1)
|
|
5
|
-
select value from ${o}, newest where key = ${i} and (newest.expires_at is null or newest.expires_at > ${this.stamp(0)}::timestamptz) order by seq`))).map(e=>e.value)}async acquireLock(e,t){let n={threadId:e,token:d(),expiresAt:this.now()+t};return await this.claim(`l:${e}`,n.token,new Date(n.expiresAt))?n:null}async extendLock(e,t){return(await this.db.update(s).set({expiresAt:this.at(t)}).where(u(l(s.key,`l:${e.threadId}`),l(s.value,e.token),this.live())).returning({key:s.key})).length>0}async releaseLock(e){await this.db.delete(s).where(u(l(s.key,`l:${e.threadId}`),l(s.value,e.token)))}async forceReleaseLock(e){await this.db.delete(s).where(l(s.key,`l:${e}`))}async enqueue(t,n,i){let a=`q:${t}`,s=this.stamp(0),[c]=await e(this.db,r`
|
|
6
|
-
with added as (insert into ${o} (key, value, expires_at) values (${a}, ${JSON.stringify(n)}::jsonb, ${new Date(n.expiresAt).toISOString()}::timestamptz)),
|
|
7
|
-
dropped as (delete from ${o} where key = ${a} and (expires_at <= ${s}::timestamptz
|
|
8
|
-
or seq <= coalesce((select seq from ${o} where key = ${a} and expires_at > ${s}::timestamptz order by seq desc offset ${i-1} limit 1), -1)))
|
|
9
|
-
select least((select count(*) from ${o} where key = ${a} and expires_at > ${s}::timestamptz) + 1, ${i})::int as depth`);return Number(c?.depth??0)}async dequeue(t){let n=`q:${t}`,i=this.stamp(0);return(await e(this.db,r`
|
|
10
|
-
delete from ${o} where key = ${n} and (expires_at <= ${i}::timestamptz
|
|
11
|
-
or seq = (select seq from ${o} where key = ${n} and expires_at > ${i}::timestamptz order by seq limit 1 for update skip locked))
|
|
12
|
-
returning value, expires_at > ${i}::timestamptz as live`)).find(e=>e.live)?.value??null}async queueDepth(n){let[i]=await t(this.db,()=>e(this.db,r`
|
|
13
|
-
select count(*)::int as depth from ${o} where key = ${`q:${n}`} and expires_at > ${this.stamp(0)}::timestamptz`));return Number(i?.depth??0)}async subscribe(e){let t={value:!0,expiresAt:null};await this.db.insert(s).values({key:`s:${e}`,...t}).onConflictDoUpdate({target:s.key,set:t})}async unsubscribe(e){await this.db.delete(s).where(l(s.key,`s:${e}`))}async isSubscribed(e){return await this.read(`s:${e}`)===!0}};export{f as PgChatState};
|
package/dist/cmd-BHZwhrfa.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import{Gt as e,Zt as t}from"./core-DwsAMCnL.js";import{$t as n,Dr as r,G as i,I as a,Mr as o,Sr as s,_r as c,br as l,cr as u,dt as d,fr as f,hr as p,l as m,lt as ee,or as h,ot as g,rr as te,sr as _,tr as v,v as ne,x as re,zt as ie}from"./errors-DO_IltpP.js";import{Dt as y,S as ae,_ as oe,a as b,b as se,c as ce,d as le,f as x,g as S,h as ue,l as de,lt as fe,m as C,n as w,o as pe,p as T,r as E,t as D,u as O,v as me,x as he,y as k}from"./output-SNqdgh9A.js";import{a as ge,i as _e,m as ve,n as ye,o as be,r as xe}from"./prompt-CIx4jwQF.js";import{a as Se,c as A,i as Ce,l as j,n as M,o as N,r as P,s as F,t as I,u as L}from"./args-Dqf5Y1RP.js";import{MODEL_HINT as we,command as R,group as z,nextSteps as B,t as Te}from"./cli.js";import V from"node:path";import H from"node:process";import Ee from"node:fs";import De from"node:os";function Oe(e){let t=T;H.stdout.write(S([{header:`id`,value:e=>e.id,paint:e=>t.cyan(e)},{header:`description`,value:e=>e.description},{header:`events`,value:e=>e.events.join(`, `)},{header:`tools`,value:e=>e.tools.join(`, `)}],e,{style:t,border:!0}))}const ke=R({name:`list`,description:`list integrations with their events and tools`,usage:"One row per integration: its id, the events an agent can wire, and every tool it offers; `show` splits the tools by preset.",access:`read`,globalFlags:{cwd:!1},run:async()=>{let{agents:e}=await import(`./agent-JJStALIx.js`).then(e=>e.t);return e.integrations.list()},next:()=>B([`Event descriptions and the tools each preset allows: coder agent integrations show <id>`]),print:Oe});function Ae(e){let t=T,n=[...Object.entries(e.events).map(([e,t])=>({kind:`event`,name:e,does:t})),...Object.entries(e.tools).map(([e])=>({kind:`tools`,name:e===`read`?`Read-only`:`Read-write`,does:e===`read`?`Platform tools marked read-only`:`All platform tools`}))];H.stdout.write(S([{header:`kind`,value:e=>e.kind,paint:e=>t.light(e)},{header:`name`,value:e=>e.name},{header:`does`,value:e=>e.does}],n,t))}const je=R({name:`show`,description:`events and tools of one integration`,usage:`Describe one integration: each event with what triggers it, and the tools each preset (read, write) allows.`,access:`read`,args:{id:A(`the integration`)},globalFlags:{cwd:!1},cli:{positional:[`id`],examples:[`coder agent integrations show github # the GitHub integration in full`]},run:async({args:[e]})=>{let{agents:t}=await import(`./agent-JJStALIx.js`).then(e=>e.t);return t.integrations.show(e)},print:Ae}),Me=z({name:`integrations`,description:`the integration catalog: events and tool presets`,usage:`The platforms an agent can listen to and act on: their events and tool presets.`,commands:[ke,je],aliases:{ls:`list`}}),Ne={read:`Read-only`,write:`Read-write`};function Pe(e,t){let n=T;H.stdout.write(`Created ${n.cyan(t)}.\n`)}function Fe(e,t){let{id:n,samples:r,integrations:i}=e,a=V.relative(t,e.dir),o=B(i.length?[`1. Write ${a}/system.md. Try it with no server: coder task run --agent ${n} "<task>"`,`2. Run it on a server: coder dash on this machine reads it from this repo; a cloud server imports it from the dashboard or with coder agent push.`,`3. On the dashboard, create the agent's app on each platform it uses (${i.join(`, `)}) from its Platforms tab, and install it.`,`4. Fire an event by hand, or leave --server out to run it offline: coder agent run ${n} ${r[0]??`<event.json>`} --server <url>`,`Guide: https://github.com/muzam1l/coder/blob/main/docs/agents/index.md`,`Agents: coder docs agents`]:[`1. Write ${a}/system.md. Try it with no server: coder task run --agent ${n} "<task>"`,`2. Give the agent a platform under "integrations" in ${a}/agent.json, then run init again or follow the guide: coder agent integrations list`,`Guide: https://github.com/muzam1l/coder/blob/main/docs/agents/index.md`,`Agents: coder docs agents`]);return i.length&&(o[1].usage=`coder dash`),o}async function Ie(e){let{regexError:t}=await import(`./agent-JJStALIx.js`).then(e=>e.t),{INTEGRATIONS:n}=await import(`./integrations-I7fRDk_l.js`).then(e=>e.r),{PRESETS:r}=await import(`./types-DmThhjcW.js`).then(e=>e.t),i=T;H.stdout.write(`Creating ${i.cyan(`.coder/agents/${e}`)}. Pick what the agent listens to and what it may do; flags skip these questions.\n\n`);let a=await ge({title:`Integrations`,hint:`Platforms the agent listens to and acts on. Add or remove them later in agent.json.`,multi:!0,selected:[Object.keys(n)[0]],options:Object.values(n).map(e=>({value:e.id,hint:e.description}))}),o={},s={};for(let e of a){let r=n[e],i=Object.keys(r.events),a=await be({title:`${e} events`,hint:`What wakes the agent on ${e}; each event runs the agent with that event as its prompt.`,multi:!0,required:!0,selected:i.filter(e=>!r.events[e].noisy),options:Object.entries(r.events).map(([e,n])=>({value:e,hint:n.description,...n.noisy?{input:{label:`match`,value:`^help\\b`,placeholder:`tab to add a match`,validate:t}}:{}}))});o[e]=a.values,s[e]=a.inputs}let[c]=await ge({title:`Access`,hint:`What the agent may do on its platforms and connections; Read-write allows every tool.`,selected:[`write`],options:r.map(e=>({value:e,label:Ne[e]}))}),l=await ye(`Display name`,e,void 0,`Shown in replies and app names.`);return{...l===e?{}:{name:l},integrations:a,events:o,matches:s,access:c}}const Le=R({name:`init`,description:`scaffold an agent folder in .coder/agents`,usage:"Create .coder/agents/<id>/ with an agent.json built from the integration catalog, a system.md to write the prompt in, and one sample event per integration for `coder agent run`. Asks for the id, integrations, events, and access when run in a terminal without them.",access:`write`,args:{id:A(`the agent id: its folder under .coder/agents`),integrations:A(`platforms the agent listens to (see coder agent integrations list)`,`<a,b>`),events:A(`events that start tasks, applied to each integration that has them (default: mention)`,`<a,b>`),access:A(`read or write, on its platforms and connections (default: write)`,`<mode>`),name:A(`display name used in replies (default: the id)`,`<text>`),description:A(`one line for agent list`,`<text>`),permissions:A(`engine permission mode (default: auto)`,`<mode>`),match:A(`start tasks only for event text matching a regex, as event=regex pairs`,`<a=re,b=re>`),yes:P(`skip the questions and take the defaults`)},cli:{positional:[`id`],examples:[`coder agent init # answer the questions, id included`,`coder agent init triage --integrations github --events issue,mention --access read # no questions`]},run:async({options:e,args:[t],cwd:n,tool:r})=>{let{agents:i}=await import(`./agent-JJStALIx.js`).then(e=>e.t),a=!r&&xe()&&!e.yes;return i.init(t,{...e,cwd:n,permissions:e.permissions,...a?{askId:e=>ye(`Agent id`,``,e,`Folder name under .coder/agents and the name used in commands.`)}:{},...a&&!e.integrations?{askPicks:Ie}:{}})},json:(e,{cwd:t})=>({id:e.id,dir:V.relative(t,e.dir),files:e.files,samples:e.samples}),next:({result:e,args:t})=>Fe(e,t.cwd?V.resolve(t.cwd):H.cwd()),print:(e,{cwd:t})=>Pe(e,V.relative(t,e.dir))}),Re=e=>`builtin`in e,ze=e=>e.map(e=>Re(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,description:e.definition.description??null}:{id:e.id,name:e.name,source:e.source,version:e.currentVersion,description:e.description??null});function Be(e,t){if(!e.length)return void H.stdout.write(`No agents configured.
|
|
2
|
-
`);let n=T;H.stdout.write(S([{header:`id`,value:e=>e.id,paint:e=>n.cyan(e)},{header:`name`,value:e=>e.name},{header:`source`,value:e=>e.source,paint:e=>n.light(e)},...t?[{header:`version`,value:e=>String(e.version)}]:[],{header:`description`,value:e=>e.description??`-`}],e,n))}const Ve=R({name:`list`,description:`list local or server-owned agents`,usage:`Without --server, one row per built-in and workspace agent. With --server, list the agent records and current versions owned by that Coder server.`,access:`read`,args:N,run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-JJStALIx.js`).then(e=>e.t);return n.list({...e,cwd:t,organization:e.workspace})},json:e=>ze(e),next:({result:e,args:t})=>t.server!==void 0||!e.length?[]:B([`An agent's settings, events, and tools: coder agent show <id>`,`Scaffold a new agent in this repo: coder agent init <id>`]),print:(e,{options:t})=>Be(ze(e),t.server!==void 0)}),He=R({name:`push`,description:`upload workspace agents to a Coder server`,usage:`Upload one workspace agent, or every agent in .coder/agents when no id is given. The server creates a new immutable version only when its definition, prompt, or files changed.`,access:`write`,args:{id:A(`the agent (default: every workspace agent)`),...N},cli:{positional:[`id`],examples:[`coder agent push helper # upload helper`]},run:async({options:e,args:[t],cwd:n})=>{let{agents:r}=await import(`./agent-JJStALIx.js`).then(e=>e.t);return r.push(t,{...e,cwd:n,organization:e.workspace})},print:e=>{for(let t of e){H.stdout.write(t.unchanged?`Pushed ${T.bold(t.id)} unchanged (version ${t.version})\n`:`Pushed ${T.bold(t.id)} as version ${t.version}\n`);for(let e of t.apps??[])e.error?H.stderr.write(`${e.error}\n`):e.drift&&H.stderr.write(`${e.name} needs changes on ${e.integration}; see Update on the agent's Platforms tab.\n`)}}});function U(e,t,n,r=T){let i=e?.error?.message??t;return e?.finalMessage||(i?`${r.red(`error:`)} ${i}`:n)}const Ue=1e3;function We(e,t=T,{truncate:n=!0}={}){let r=e=>e.split(`
|
|
3
|
-
`).map(e=>` ${t.dim(e)}`);return!n||e.length<=Ue?[t.dim(`prompt:`),...r(e)]:[t.dim(`prompt:`),...r(e.slice(0,500).trimEnd()),t.light(` … <${e.length-Ue} chars trimmed> …`),...r(e.slice(-500).trimStart())]}function Ge(e,t=T){let n=[];e.permissions&&n.push([`perms`,e.permissions]),e.cwd&&n.push([`cwd`,e.cwd]);for(let t of e.addDirs??[])n.push([`add-dir`,t]);return n.map(([e,n])=>`${t.dim(e.padEnd(8))} ${n}`)}function Ke(e){return e.createdAt&&e.completedAt?Date.parse(e.completedAt)-Date.parse(e.createdAt):null}function qe(e,t){if(t)return e.createdAt?`started ${b(m(e.createdAt))} ago`:``;let n=Ke(e);return[e.completedAt?`finished ${b(m(e.completedAt))} ago`:``,n!==null&&n>=0?`took ${b(n)}`:``].filter(Boolean).join(` · `)}function Je(e,{status:t,tokens:n,tokenModel:r,live:i=!1,style:a=T}){let o=qe(e,g.includes(e.status)||t===`waiting-approval`),s=e=>a.dim(e.padEnd(8));return[`${s(`task`)} ${a.cyan(e.id)}`,...e.name?[`${s(`name`)} ${e.name}`]:[],`${s(`status`)} ${C(t)}${o?` ${a.dim(`(${o})`)}`:``}`,`${s(`engine`)} ${re(e)}`,...Ge(e,a),...n?[`${s(`tokens`)} ${i?le(n):O(n,r??e.model)}${i?a.dim(` (so far)`):``}`]:[]]}function Ye(e,{tokens:t,tokenModel:n,statusChanged:r=!0,style:i=T}){let a=e=>i.dim(e.padEnd(8)),o=Ke(e);return[...r?[`${a(`status`)} ${C(e.status)}${o!==null&&o>=0?` ${i.dim(`(took ${b(o)})`)}`:``}`]:[],...t?[`${a(`tokens`)} ${O(t,n??e.model)}`]:[]]}function Xe(e,t=300,{plain:n=!1,style:r=T}={}){if(e.length<=t)return e;let i=`<${e.length-t} more chars>`;return`${e.slice(0,t)} ${n?i:r.dim(i)}`}const Ze=` `.repeat(8),Qe={assistant:`●`,reasoning:`✻`,tool:`→`,"tool-result":` `,usage:`·`,status:`·`,info:`·`,error:`✘`,steer:`⚑`};function $e(e,t){let n=/^\x1b\[[0-9;]*m/.exec(t(``))?.[0];return t(n&&e.includes(W)?e.split(W).join(`${W}${n}`):e)}const W=`\x1B[0m`;function G(e,t,n,r,i=r.dim){if(!e)return``;let a=(e.length>t?e.slice(0,t):e).split(`
|
|
4
|
-
`).map(e=>$e(e,i));return e.length>t&&(a[a.length-1]+=` ${r.light(`<${e.length-t} more chars>`)}`),a.length>n?[...a.slice(0,n),r.light(`… +${a.length-n} more lines`)].join(`
|
|
5
|
-
`):a.join(`
|
|
6
|
-
`)}var K=class e{opts;presentation;separated=!1;entryAt=null;lastTool;lastCall=``;lastCallSeq=-1;seq=0;view;style;static async create(t={}){return new e(t,await import(`./log-view-CfX9lakH.js`).then(e=>e.r))}constructor(e,t){this.opts=e,this.presentation=t,this.view=new t.LogView(e.cwd,{keepAnsi:!0}),this.style=e.style??T}get lastAssistantMessage(){return this.view.lastAssistantMessage}render(e){let t=Date.parse(String(e.at??``));this.entryAt=Number.isFinite(t)?t:null;let n=this.seq++,[r]=this.view.reduce({seq:n,at:t,level:`out`,line:``,entry:e});if(!r)return[];this.separated=r.separated&&r.seq===n;let i=this.style,a=r.sourceKind,o=r.title,s=this.opts.trim??500,c=this.opts.explicitTrim||s===1/0?1/0:6;if(r.kind===`usage`)return this.compose(a,i.dim(o),!1);if(r.kind===`approval`&&r.state){if(r.seq===n&&!r.result){let e=[this.clip(`${o} · ${r.state}`,3,i.light),this.clip(G(r.detail??``,s,c,i),c,i.dim)].filter(Boolean).join(`
|
|
7
|
-
`);return this.compose(a,e,!1)}let e=r.result&&r.result.durationMs>=1e3?` · ${b(r.result.durationMs)}`:``,t=r.seq===n?`${o} · ${r.state}`:`${r.state}${e}`,l=r.result?.detail??r.detail??``;return this.compose(a,this.approval(t,this.presentation.stripCwd(l,this.opts.cwd)),!1)}if(r.kind===`approval`)return this.compose(a,this.approval(o,r.detail??``),!1);if(r.kind===`assistant`)return this.compose(a,o,!0);if(r.kind===`steer`)return this.compose(a,i.yellow(o),!0);if(r.kind===`error`)return this.compose(a,i.red(o),!0);if(r.kind===`reasoning`){let e=Math.round((r.durationMs??0)/1e3),t=e>=1?`thought ${b(e*1e3)} · `:``,n=c===1/0?`${i.dim(t)}${G(o,s,1/0,i)}`:this.clip(`${t}${o.split(`
|
|
8
|
-
`)[0]??``}`,3,i.dim);return this.compose(a,n,!1)}if(r.kind===`tool`&&r.seq===n)return this.lastTool=r.tool,this.lastCall=o,this.lastCallSeq=r.seq,this.compose(a,this.clip(o.replace(/\s*\n\s*/g,` `),2,i.light),!1);if(r.kind===`tool`||r.kind===`tool-result`){let t=r.kind===`tool`&&(e.callId||e.callMessage)&&(r.seq!==this.lastCallSeq||o!==this.lastCall)?this.compose(`tool`,this.clip(o.replace(/\s*\n\s*/g,` `),2,i.light),!1):[];t.length&&(this.lastTool=r.tool,this.lastCall=o,this.lastCallSeq=r.seq);let n=r.result??{ok:r.tone!==`error`,exitCode:r.exitCode,durationMs:r.durationMs??0,detail:o},a=[r.kind===`tool-result`&&e.callId?i.dim(`from ${r.tool||`tool`} (${String(e.callId)})`):r.tool&&r.tool!==this.lastTool?i.dim(`from ${r.tool}`):``,n.ok?``:i.red(n.exitCode===void 0?`failed`:`exit ${n.exitCode}`),n.durationMs>=3e3?i.dim(b(n.durationMs)):``].filter(Boolean),l=G(n.detail,s,c,i),u=[...a.length?[a.join(i.dim(` · `))]:[],...l?[l]:[]];return[...t,...u.length?this.compose(`tool-result`,u.join(`
|
|
9
|
-
`),!1):[]]}return this.compose(a,this.clip(o,3,i.dim),!1)}approval(e,t){let n=this.style,r=this.opts.width?this.opts.width-Ze.length:1/0,i=`${e}${t?`. ${t}`:``}`;return!t||he(i)<=r?`${n.light(e)}${t?n.dim(`. ${t}`):``}`:[this.clip(e,1,n.light),this.clip(t,2,n.dim)].join(`
|
|
10
|
-
`)}clip(e,t,n){let r=this.opts.trim??500;if(this.opts.explicitTrim||r===1/0)return G(e,r,1/0,this.style,n);let i=this.opts.width;return i?ae(e,Math.max(i-Ze.length,24),t).map(e=>$e(e,n)).join(`
|
|
11
|
-
`):n(e)}compose(e,t,n){let r=this.separated?[``]:[],i=Qe[e]??(this.presentation.isApproval(e)?`⚑`:`·`),[a=``,...o]=t.split(`
|
|
12
|
-
`);return[...r,`${this.gutter(e)}${this.style.dim(i)} ${a}`,...o.map(e=>n?e:`${Ze}${e}`)]}gutter(e){let t=` `.repeat(6);return e===`tool-result`||!this.opts.startedAt||this.entryAt===null?t:`${this.style.dim(pe(this.entryAt-this.opts.startedAt).padStart(5))} `}};function q(e,t,n){return{usage:`coder task result ${e} --wait${F(t)}`,blurb:ee,cli:{text:n}}}function J(e,t={}){return B([`Continue on the same task: coder task steer ${e} "<follow-up>"${F(t)}`])}function et(e){return{finalMessage:e?.finalMessage??null,error:e?.error?.message??null,tokens:e?.tokens??null}}function tt(e,t){let n=it(e,t).map(({usage:e,blurb:t})=>({usage:e,blurb:t})),{task:r,result:i,steps:a,turns:o}=e;return{taskId:r.id,name:r.name??null,status:e.status,engine:r.engine,model:i?.model??r.model??null,...et(i),error:i?.error?.message??r.error??null,tokens:i?.tokens??e.liveTokens??null,pendingApprovals:e.pendingApprovals,next:n,...a.length?{steps:a}:{},...t.turns?{turns:o.map(e=>({at:e.at,status:e.status,...et(e)}))}:{}}}async function nt(e,t,n,r){let{task:i,steps:a,result:o,turns:s,pendingApprovals:c}=e,l=T,u=g.includes(i.status),d=Je(i,{status:e.status,tokens:o?.tokens??e.liveTokens??null,tokenModel:o?.model,live:!o?.tokens&&!!e.liveTokens,style:l});if(i.prompt&&d.push(...We(i.prompt,l)),c.length){d.push(``,l.dim(`pending approvals:`));for(let t of c)d.push(` ${l.cyan(t.id)} ${t.reason}`,fe(t.actions).replace(/^/gm,` `)),H.stdout.write(`${d.join(`
|
|
13
|
-
`)}\n`),d.length=0,r(e,{slot:`approval:${t.id}`})}if(a.length){d.push(``,l.dim(`steps:`));let e=await K.create({cwd:i.cwd??t,startedAt:Date.parse(i.createdAt??``)||void 0,width:k(),style:l}),n=o?.finalMessage&&String(a.at(-1)?.message??``).trim()===String(o.finalMessage).trim()?a.slice(0,-1):a;for(let t of n)d.push(...e.render(t))}if(d.push(``),n.turns&&s.length)s.forEach((e,t)=>{t&&d.push(``),d.push(l.dim(`Turn ${t+1} of ${s.length}. ${Xe(String(e.prompt??``))}`)),d.push(String(e.finalMessage||l.dim(`(no final message)`)))});else if(o)d.push(U({...o,error:o.error??void 0},i.error,`(no final message)`,l)),s.length>1&&(H.stdout.write(`${d.join(`
|
|
14
|
-
`)}\n`),d.length=0,r(e,{slot:`turns`}));else if(u){let{lastLog:t}=e;d.push(l.dim(e.stalled?`Result pending. No progress for ${b(e.idleMs??0)}. The task may be stalled.${t?` Last: ${Xe(t.message??t.kind??``)}`:``}`:`Result pending. The task is still running.`))}else d.push(U(null,i.error,l.dim(`(no result)`),l));d.length&&H.stdout.write(`${d.join(`
|
|
15
|
-
`)}\n`)}const rt=R({name:`result`,description:`status + final answer (--wait blocks)`,usage:`Show a task's status and its final answer (result pending while it runs), plus
|
|
16
|
-
any pending approvals. --wait blocks until it finishes, then prints. --tail <n>
|
|
17
|
-
includes the last n progress-log steps (--tail all for the whole transcript).
|
|
18
|
-
Defaults to the most recent task. Shortcut: \`coder result\`.
|
|
19
|
-
|
|
20
|
-
JSON and MCP return a summary and the complete answer, without engine diagnostics
|
|
21
|
-
or raw diffs. Use --tail for progress; answers are never truncated.
|
|
22
|
-
|
|
23
|
-
Run each --wait in its own background shell, one per task. Never wait on several
|
|
24
|
-
tasks in one call, or their approvals and answers never reach you one by one.`,access:`read`,args:{"task-id":A(`the task (default: the most recent)`),wait:P(`block until the task finishes or needs an approval, then print`),turns:P(`every turn's answer (a steered task accretes turns)`),tail:L(`include the last n progress-log steps (default: 0, final result only)`),...N},cli:{positional:[`task-id`],exit:[[0,`The task completed successfully.`],[1,`The task failed or was cancelled.`],[4,`An approval is pending; answer it, then run --wait again.`]],examples:[`coder result <task-id> --wait # block until the task finishes, print the answer`,`coder result <task-id> --turns # every turn's answer for a steered task`]},run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return await n.result(t,{...e,organization:e.workspace,onWaiting:e=>H.stderr.write(`${T.dim(`[coder] waiting for task ${e} to finish...`)}\n`)})},json:(e,{options:t})=>tt(e,t),next:({result:e,args:t})=>it(e,t),print:(e,{options:t,cwd:n,next:r})=>nt(e,n,t,r),exit:(e,{options:t})=>t.wait?e.task.status===`completed`?0:1:void 0});function it(e,t){let{task:n}=e,r=F(t),i=(e.pendingApprovals??[]).map(e=>({usage:`coder task approve ${n.id} ${e.id}${r}`,blurb:`(--deny to reject)`,cli:{layout:`inline`,prefix:` `,slot:`approval:${e.id}`}}));return!t.turns&&e.result&&(e.turns?.length??0)>1&&i.push(...B([`Turn ${e.turns.length} of ${e.turns.length}. All answers are in coder task result ${n.id} --turns.`],{layout:`plain`,dim:!0,prefix:``,slot:`turns`}).map(e=>({...e,usage:`coder task result ${n.id} --turns${r}`}))),g.includes(n.status)?t.wait?i:[...i,q(n.id,t,`Wait in its own background shell, one per task; do not poll: coder task result ${n.id} --wait`),...B([`Follow live: coder task watch ${n.id}${r}`,...e.stalled?[`Check the transcript: coder task result ${n.id} --tail all${r}`]:[]])]:[...i,...J(n.id,t)]}function at(e,t){let n=e.level===`sys`?t.dim(`· ${e.line}`):e.level===`err`?t.light(e.line):e.line;H.stdout.write(`${n}\n`)}async function ot(e,t,n,r){let i=n.trim===void 0?500:n.trim===`none`?1/0:n.trim,a=e.task,o=await K.create({cwd:a.cwd??t,startedAt:Date.parse(a.createdAt??``)||void 0,trim:i,explicitTrim:n.trim!==void 0,width:k()});if(!n.json){let e=[...Je(a,{status:a.status}),...g.includes(a.status)?[T.dim(`Watching. Press Ctrl-C to stop.`)]:[],...a.prompt?We(a.prompt,T,{truncate:!1}):[],``];H.stdout.write(`${e.join(`
|
|
25
|
-
`)}\n`)}let s=null,c=null,l=e=>{let t=o.render(e);t.length&&H.stdout.write(`${t.join(`
|
|
26
|
-
`)}\n`)};for await(let t of e.events){let e=t;if(e.kind===`usage`&&e.tokens&&(s=e.tokens),n.json){let t=e.kind===`steer`?1/0:i,n=e.message?{...e,message:Xe(e.message,t,{plain:!0})}:e;H.stdout.write(`${JSON.stringify(n)}\n`);continue}e.kind!==`usage`&&(c&&=(l(c),null),e.kind===`assistant`?c=e:l(e))}let{status:u,result:d,task:f}=await e.final();if(n.json)H.stdout.write(`${JSON.stringify({taskId:a.id,status:u,result:d},null,2)}\n`);else{let e=u===`completed`?`(no final message)`:`(task ${u})`,t=Ye(f,{tokens:d?.tokens??s,tokenModel:d?.model,statusChanged:u!==a.status});t.length&&H.stderr.write(`\n${t.join(`
|
|
27
|
-
`)}\n`);let n=U(d,f.error,e),r=c?String(c.message??``):``;H.stdout.write(`\n${n.trim()?n:r}\n`)}H.exit(u===`completed`?0:1)}async function st(e,t,n){let r=[];for await(let t of e.events)r.push(t);let{task:i}=e,a=n===void 0?``:n===!0?` --server`:` --server ${n}`;return{taskId:i.id,status:i.status,events:r,...g.includes(i.status)?{next:`coder task watch ${i.id} --from ${t+r.length}${a}`}:{}}}async function ct(e,t){let n=await K.create({cwd:t,trim:500,explicitTrim:!1,width:k()});for(let t of e.events){let e=n.render(t);e.length&&H.stdout.write(`${e.join(`
|
|
28
|
-
`)}\n`)}}const lt=R({name:`watch`,description:`stream a task's live transcript`,usage:`Stream a running task's transcript live (for you/debugging), then print its
|
|
29
|
-
final answer. Replays the last line first so the current step is visible;
|
|
30
|
-
--tail <n> replays the last n lines (--tail all for the whole transcript).
|
|
31
|
-
Blocks until it finishes; exits 0 on success, 1 otherwise. For the answer
|
|
32
|
-
alone, prefer \`coder result\`. Alias: stream.
|
|
33
|
-
|
|
34
|
-
With --from <n>, or as a tool, it returns the log from event n on without
|
|
35
|
-
following, and \`next\`: the command that continues it while the task runs.`,access:`read`,args:{"task-id":A(`the task (default: the most recent)`),tail:L(`replay the last n log lines first (default: 1)`),trim:I(f(l([u(`none`),v().check(_(),t())],{error:`expected a positive integer or "none"`})),`budget for tool output and thinking (default: 1200 chars, 12 lines)`,`<n|none>`),from:I(f(v().check(_(),e())),`return the log from event n on instead of following it`,`<n>`),...N},cli:{positional:[`task-id`],examples:[`coder task watch # follow the most recent task to completion`,`coder task watch <task-id> --from 0 --json # the log so far, and the command that continues it`]},async run({options:e,args:[t],cwd:n,tool:r,next:i}){let{tasks:a}=await import(`./task-CFxs0E_J.js`).then(e=>e.t),o=e.from??(r?0:void 0),s=await a.watch(t,{...e,from:o,organization:e.workspace});if(o!==void 0)return st(s,o,e.server);await ot(s,n,e,i)},next({result:e,args:t}){return e&&e.next?B([`Continue: ${e.next}`]):[]},print:(e,{cwd:t})=>e&&ct(e,t)});function ut(e,{finalMessage:t,error:n}){let r=T,i=e.startedAt===void 0?``:b((e.finishedAt??Date.now())-e.startedAt);H.stdout.write(`${r.bold(e.task.id)} ${C(e.status)}${n?` ${r.red(n)}`:``}${i?` ${r.dim(`took ${i}`)}`:``}\n`),e.credential&&H.stdout.write(`${r.dim(`credential`)} ${e.credential}\n`),t&&H.stdout.write(`\n${r.bold(`Reply`)}\n${t.trim()}\n`)}const dt=R({name:`run`,description:`run a recorded event through an agent, offline or on a server`,usage:`Run a recorded platform event (AgentEvent JSON) through an agent. With --server it goes through your Coder server exactly like a webhook: real app, tokens, runner, and the reply is posted. Without it the engine runs here on the agent's prompt and this checkout, platform tools off, and the reply is printed.`,access:`write`,args:{agent:A(`the agent id`),file:A(`the event JSON file`),server:Se(`act on your Coder server`,`[url]`),workspace:A(`with --server: the workspace to act in (default: the saved one)`,`<slug>`),yes:P(`with --server: connect to a server used for the first time without asking`),wait:P(`with --server: follow the task log here until it finishes, then print the reply`),flow:A(`override the matched flow`,`<name>`),task:A(`a runner's form: run that server task here`,`<id>`)},cli:{positional:[`agent`,`file`],examples:[`coder agent run helper sample-slack-mention.json # offline: print what the agent would reply`,`coder agent run helper event.json --server # for real, through the server`]},run:async({options:e,args:[t,n],cwd:r,tool:i,next:a})=>{let{agents:o}=await import(`./agent-JJStALIx.js`).then(e=>e.t),{remoteAnswer:s}=await import(`./remote-C9Hj2cby.js`).then(e=>e.s);if(e.task)return o.runTask(e.task,{cwd:r});let c=await o.run(t,n,{...e,cwd:r,organization:e.workspace,...e.json||i?{}:{onLog:e=>at(e,T),onDone:e=>{ut(e,s(e)),a(e)}}});return Array.isArray(c)?c.map(s):c},json:e=>Array.isArray(e)&&e.length===1?e[0]:e,next({result:e,args:t}){if(t.task)return[];let n=e;if(Array.isArray(n))return t.wait?n.flatMap(e=>[`completed`,`failed`,`cancelled`].includes(e.status)?J(e.taskId,t).map(e=>({...e,cli:{...e.cli,hidden:!0}})):[]):[];if(`attempts`in n){let e=n;return[`completed`,`failed`,`cancelled`].includes(e.status)?J(e.task.id,t):[]}return`tasks`in n&&n.tasks.length?B([`Watch it: coder task watch ${n.tasks[0]} --server ${ve(t.server)}`]):[]},print(e,{options:t}){let n=e;if(!(t.task||Array.isArray(n))){if(`tasks`in n){if(!n.tasks.length)return void H.stdout.write(`The server accepted the event but no agent matched it.
|
|
36
|
-
`);H.stdout.write(`${T.bold(`Queued on the server`)} as task ${n.tasks.join(`, `)}.\n`);return}n.reply===void 0?n.result!==void 0&&H.stdout.write(`${JSON.stringify(n.result,null,2)}\n`):H.stdout.write(`${n.reply.trim()}\n`)}}});function ft(e,t){return Re(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,...e.dir&&!e.builtin?{dir:V.relative(t,e.dir)}:{},definition:e.definition,...e.usage?{usage:e.usage}:{}}:{id:e.id,name:e.name,source:e.source,definition:e.definition,...e.settings?{usage:e.settings}:{}}}function pt(e){let t=T,{definition:n,usage:r}=e,i=`dir`in e?e.dir:void 0,a=[[`name`,e.name],[`source`,i?`${e.source} (${i})`:e.source],[`description`,n.description],[`permissions`,r?.permissions??n.permissions],[`access`,r?.access===`read`||n.access===`read`?`Read-only`:`Read-write`],[`engine`,r?.engine??n.engine],[`model`,r?.model??n.model],[`effort`,r?.effort??n.effort]],o=Math.max(...a.map(([e])=>e.length))+2;for(let[e,n]of a)n&&H.stdout.write(`${t.dim(e.padEnd(o))}${n}\n`);let s=Object.entries(n.integrations).map(([e,t])=>{let n=r?.integrations?.[e],i=Array.isArray(t.events)?t.events:Object.keys(t.events??{});return{id:e,events:(n?.allowedEvents?i.filter(e=>n.allowedEvents.includes(e)):i).join(`, `)||`-`}});H.stdout.write(`\n${S([{header:`integration`,value:e=>e.id,paint:e=>t.cyan(e)},{header:`events`,value:e=>e.events}],s,{style:t,border:!0})}`)}const mt=R({name:`show`,description:`one agent in full: settings, integrations, events, tools`,usage:`Describe one agent as it will run here, or its active version on a server: its settings, access and per-integration events.`,access:`read`,args:{id:A(`the agent`),...N},cli:{positional:[`id`],examples:[`coder agent show coder # what the built-in agent listens to and may do`]},run:async({options:e,args:[t],cwd:n})=>{let{agents:r}=await import(`./agent-JJStALIx.js`).then(e=>e.t);return r.show(t,{...e,cwd:n,organization:e.workspace})},json:(e,{cwd:t})=>ft(e,t),print:(e,{cwd:t})=>pt(ft(e,t))});function ht(e,t){let n=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(!n.length)return void H.stdout.write(`${T.dim(`No usage in this period.`)}\n`);H.stdout.write(`${S([{header:`by`,value:e=>e.group},{header:`key`,value:e=>e.key,paint:e=>T.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)}],n,T)}\n`)}const gt=R({name:`usage`,description:`aggregate usage by agent, installation, or engine`,access:`read`,args:{since:A(`period such as 7d or 24h, or milliseconds since epoch`,`<period|ms>`),by:A(`agent, installation, or engine`,`<group>`),...N},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-JJStALIx.js`).then(e=>e.t);return n.usage({...e,cwd:t,organization:e.workspace,since:e.since??`7d`})},print:(e,{options:t})=>ht(e,t.by)}),_t=z({name:`agent`,description:`define and run agents`,usage:`Define and run agents from the CLI, the dashboard, or on GitHub, Slack and other platforms.`,commands:[Ve,mt,Le,He,dt,gt],namespaces:[Me],aliases:{ls:`list`}}),vt=e=>{throw e instanceof y&&e.code===`login-failed`?new y(`invalid-option`,e.message,e.hint?{hint:e.hint}:{}):e},yt=R({name:`login`,description:`sign in through the browser`,usage:`Sign in with Wular Auth in your browser. The CLI keeps the tokens in ~/.coder/session.json, and commands that talk to a server then act as you.`,access:`write`,args:{...N,device:P(`show a code to approve on another device; the default without a local browser`)},globalFlags:{cwd:!1},cli:{env:[[`CODER_SERVER`,`the server to use instead of https://coder.wular.ai`]],examples:[`coder auth login # sign in to the hosted service`,`coder auth login --server https://agents.example.com # sign in to a self-hosted server`]},run:async({options:e,tool:t})=>{let{hasBrowser:n,sessions:r}=await import(`./remote-HUZCWgfl.js`).then(e=>e.s),i=t?H.stderr:H.stdout;return r.login({server:e.server,yes:e.yes,device:e.device||!n(),open:e=>{i.write(`Opening your browser to sign in. If it does not open, visit\n${T.light(e)}\n`),_e(e)},onCode:(e,t)=>i.write(`Confirm this code in your browser: ${T.bold(e)}\n${T.light(t)}\n`),organization:e.workspace,...xe()?{chooseOrganization:async e=>{let[t]=await ge({title:`Workspace`,hint:`Commands for this server use this workspace by default.`,options:e.map(e=>({value:e.slug,label:e.name,hint:e.slug}))});return t}}:{}}).catch(vt)},json:e=>({server:e.server,user:e.user,organization:e.organization}),print:e=>{let t=T;H.stdout.write(`${t.green(`✔`)} Signed in to ${t.bold(e.server)} as ${e.user.email}${e.organization?` ${t.dim(`· ${e.organization.name}`)}`:``}\n`)}}),bt=R({name:`logout`,description:`sign out and forget the saved session`,usage:`Revoke the saved session for that server at Wular Auth and forget its tokens.`,access:`write`,args:{server:Se(`sign out of this Coder server (default: the hosted one)`,`[url]`),yes:P(`connect to a server used for the first time without asking`)},globalFlags:{cwd:!1},run:async({options:e})=>{let{sessions:t}=await import(`./remote-HUZCWgfl.js`).then(e=>e.s);return t.logout(e).catch(vt)},print:e=>H.stdout.write(`Signed out of ${e.server}.\n`)}),xt=R({name:`status`,description:`show where you are signed in`,usage:`List saved sessions with their server, user, and workspace.`,access:`read`,globalFlags:{cwd:!1},cli:{env:[[`CODER_SERVER`,`the server to use instead of https://coder.wular.ai`]]},run:async()=>{let{sessions:e}=await import(`./remote-HUZCWgfl.js`).then(e=>e.s);return e.status()},next:({result:e})=>Object.keys(e).length?[]:B([`Sign in: coder auth login`]),print:e=>{let t=T,n=Object.entries(e);if(!n.length)return void H.stdout.write(`${t.dim(`Not signed in`)}\n`);H.stdout.write(`${S([{header:`server`,value:([e])=>e,paint:e=>t.cyan(e)},{header:`user`,value:([,e])=>e.user.email},{header:`workspace`,value:([,e])=>e.organization?`${e.organization.name} (${e.organization.slug})`:`-`}],n,t)}\n`)}}),St=z({name:`auth`,description:`sign in to Coder and manage saved server sessions`,commands:[yt,bt,xt]}),Ct=e=>new y(`invalid-option`,`Usage: ${e}`);function wt(e){try{return JSON.parse(e)}catch{return e.includes(`,`)?e.split(`,`).map(e=>e.trim()).filter(Boolean):e}}const Tt=R({name:`config`,description:`read or write config`,usage:"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.",access:`write`,args:{action:A(`list, get, set or unset`),key:A(`a dotted key, such as engines.codex.model`),value:j(`with set: the value; JSON, or a comma list`),workspace:P(`target <repo>/.coder/config.json instead of the user file`)},cli:{positional:[`action`,`key`,`value`],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`]},run({options:e,args:[t,n,...r],cwd:i}){if(!(!t||t===`help`)){if(t===`list`)return{action:t,config:ie.get(void 0,{cwd:i})};if(t===`get`){if(!n)throw Ct(`coder config get <key> (e.g. chain, engines.codex.model)`);return{action:t,value:ie.get(n,{cwd:i})}}if(t!==`set`&&t!==`unset`)throw Ct(`coder config <list|get|set|unset> [<key> [value]] [--workspace]`);if(!n||t===`set`&&r.length===0)throw Ct(`coder config ${t} <key>${t===`set`?` <value>`:``}`);return{action:t,set:ie.set(n,wt(r.join(` `)),{cwd:i,workspace:e.workspace,unset:t===`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 H.stdout.write(Te(Tt));if(e.action===`list`)return Et(e.config,n());if(e.action===`get`)return Dt(e.value);Ot(e.set)}});function Et(e,t){let n=T,r=e=>[e?.model,e?.effort,e?.permissions].filter(Boolean).join(`/`)||`-`;H.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`)} hosts=[${e.approvals.allowedNetworkHosts.join(`, `)}]`,`${n.dim(`file`)} ${t}`].join(`
|
|
37
|
-
`)+`
|
|
38
|
-
`)}function Dt(e){if(e===null||typeof e==`object`&&e!==void 0)return ue(e);H.stdout.write(`${e===void 0?`(unset)`:String(e)}\n`)}function Ot(e){let t=T,n=e.unset?`unset ${t.cyan(e.key)}`:`${t.cyan(e.key)} = ${JSON.stringify(e.value)}`;H.stdout.write(`${n} ${t.dim(`(${e.file})`)}\n`)}async function kt(e){let{openUrl:t}=await import(`./prompt-CIx4jwQF.js`).then(e=>e.s);H.stderr.write(`Sign in at ${E.cyan(e)}\n`),t(e)&&H.stderr.write(E.dim(`Opened it in your browser. Waiting...
|
|
39
|
-
`))}async function At(){let{askSecret:e}=await import(`./prompt-CIx4jwQF.js`).then(e=>e.s);return e(`Key`)}function jt(e){return e.provider===`env`?`API key ${e.env}`:e.provider===`mcp`?`MCP server ${e.url??e.command}`:`${e.provider} account${e.account?` ${e.account}`:``}`}async function Mt(){throw new y(`invalid-option`,`A tool cannot read a key from stdin or a prompt.`,{hint:`Keep the key in an environment variable and pass --env, or run it in a terminal`})}const Nt=R({name:`add`,description:`connect a platform account, an API key or an MCP server`,usage:"Connect a platform account by its name (OAuth in the browser), an API key that tasks read from --env, or an MCP server at --url or started by the command after `--`. An API key is kept as a credential. A credential already holding the variable is used, else the value comes from that variable here, or from stdin or a prompt. A remote MCP server is checked for OAuth, open access or a key; a needed key is read from stdin or a prompt. With --key, the key goes in --header (default Authorization) or --env. Signing in needs --server.",access:`write`,args:{name:c().check(h(`the connection name; a platform name connects that account`),p(e=>![`coder`,`conversation`,`coder-approval`].includes(e),`The names coder, conversation and coder-approval are reserved for Coder MCP servers.`)),command:j("a stdio MCP server to start; on the command line, the words after `--`"),env:A(`the API key variable, or where a stdio server reads its key`,`<NAME>`),url:A(`a remote MCP server (streamable HTTP by default)`),header:A(`the header a remote server reads its key from (default: Authorization)`,`<NAME>`),key:P(`read a key from stdin or a prompt, never from a flag value`),auth:A(`override MCP authentication (default: detected for --url, none for a command)`,`<oauth|key|none>`),access:A(`read keeps only read-only tools (default: the agent's mode, write for API keys)`,`<read|write>`),tools:A(`tool allowlist; a read-only stdio server needs one`,`<a,b>`),credential:A(`the credential an API key connection reads`,`<id>`),me:P(`your own connection instead of the workspace's`),...N},cli:{positional:[`name`],examples:[`GROQ_API_KEY=gsk_... coder connection add groq --env GROQ_API_KEY # an API key from this shell`,`pbpaste | coder connection add docs --key --env DOCS_TOKEN --access write -- npx -y docs-mcp # a stdio server with its key from stdin`,`coder connection add github --me --server # your GitHub account on your Coder server`]},run:async({options:e,args:[t],cwd:n,tool:r})=>{let{connection:i}=await import(`./connection-BkYTuJjV.js`).then(e=>e.n),a=r?Mt:At;return i.add(t,{...e,cwd:n,command:e.command??[],auth:e.auth,access:e.access,tools:e.tools?.split(`,`).map(e=>e.trim()).filter(Boolean),key:e.key?await a():void 0,askKey:a,onAuthorize:r?void 0:kt})},print:e=>H.stdout.write(`Connected ${T.bold(e.id)}, ${jt(e)}.\n`)}),Pt=e=>{let t=e.indexOf(`--`);return Nt(t===-1?e:[...e.slice(0,t),...e.slice(t+1).flatMap(e=>[`--command`,e])])};Object.defineProperty(Pt,"name",{value:Nt.name,writable:!0,enumerable:!0});const Ft=Object.assign(Pt,Nt),It=R({name:`approve`,description:`approve a repository MCP server on this machine`,usage:`Approve an MCP server this repository or one of its agents declares, on this machine. A changed endpoint or command needs approval again.`,access:`write`,args:{name:c().check(h(`the MCP server`)),agent:A(`select the agent when names have different definitions`,`<id>`)},cli:{positional:[`name`]},run:async({cwd:e,args:[t],options:n})=>{let{connection:r}=await import(`./connection-BkYTuJjV.js`).then(e=>e.n);return r.approve(t,{cwd:e,agent:n.agent})},print:({name:e})=>H.stdout.write(`Approved MCP server "${e}" on this machine.\n`)});function Lt({connections:e,declared:t}){let n=T;H.stdout.write(e.length?S([{header:`name`,value:e=>e.id,paint:e=>n.cyan(e)},{header:`connects`,value:e=>jt(e),paint:e=>n.light(e)},{header:`access`,value:e=>e.access===`read`?`Read-only`:e.access?`Read-write`:`Default`},{header:`for`,value:e=>e.mine?`you`:e.owner?e.owner:`workspace`},{header:`status`,value:e=>e.status}],e,n):`${n.dim(`No connections.`)}\n`),t.length&&H.stdout.write(`\n${n.bold(`Declared in this repository`)}\n${S([{header:`name`,value:e=>e.name,paint:e=>n.cyan(e)},{header:`in`,value:e=>e.source},{header:`runs`,value:e=>e.target,paint:e=>n.light(e)},{header:`here`,value:e=>e.approved?`approved`:`needs approval`}],t,n)}`)}const Rt=R({name:`list`,description:`list connections and the MCP servers this repository declares`,usage:`Your connections, and the MCP servers this repository and its agents declare with whether each is approved on this machine.`,access:`read`,args:N,run:async({options:e,cwd:t})=>{let{connection:n}=await import(`./connection-BkYTuJjV.js`).then(e=>e.n);return n.list({...e,cwd:t})},next:({result:{connections:e,declared:t}})=>B([...t.filter(e=>!e.approved).map(e=>`Approve: coder connection approve ${e.name}`),...e.length?[]:[`Add one: coder connection add <name> --env <NAME>`]]),print:Lt}),zt=R({name:`reconnect`,description:`give a connection a new key, or sign in again`,usage:`Give a key connection its new key, read from stdin or a prompt, or sign in to an OAuth connection again in the browser. The credential an API key connection reads gets the new value, so every connection reading it rotates.`,access:`write`,args:{name:c().check(h(`the connection`)),...N},cli:{positional:[`name`],examples:[`pbpaste | coder connection reconnect groq # the new key from the clipboard`]},run:async({options:e,args:[t],cwd:n,tool:r})=>{let{connection:i}=await import(`./connection-BkYTuJjV.js`).then(e=>e.n);return i.reconnect(t,{...e,cwd:n,askKey:r?Mt:At,onAuthorize:r?void 0:kt})},print:e=>H.stdout.write(`Reconnected ${T.bold(e.id)}.\n`)}),Bt=R({name:`rm`,description:`remove a connection`,usage:`Remove a connection. The credential an API key connection reads stays.`,access:`write`,args:{name:c().check(h(`the connection`)),...N},cli:{positional:[`name`]},run:async({options:e,args:[t],cwd:n})=>{let{connection:r}=await import(`./connection-BkYTuJjV.js`).then(e=>e.n);return r.remove(t,{...e,cwd:n})},print:e=>H.stdout.write(`Removed ${T.bold(e.id)}.\n`)}),Vt=z({name:`connection`,description:`platform accounts, API keys and MCP servers tasks use`,usage:"Connections give tasks access to a service without a handle: a platform account, an API key tasks read from the environment, or an MCP server. They live in ~/.coder, or on your Coder server with --server, and every task of yours may use them unless its agent or `coder task run --connections` narrows the set.",commands:[Ft,Rt,Bt,zt,It],aliases:{ls:`list`,remove:`rm`}}),Ht=R({name:`add`,description:`store an API key or subscription for one variable`,usage:`Store the key of one environment variable, encrypted on the server, as your own or with --workspace for every member. A key saved for that variable in the same scope is replaced. Where the server has subscription sign-in on, CLAUDE_CODE_OAUTH_TOKEN takes your own claude setup-token output.`,access:`write`,args:{env:A(`the variable tasks read the key as (reads that variable by default)`,`<NAME>`),value:A(`literal values land in shell history and are visible to other processes; use - for stdin or prefer environment variables`,`<secret|->`),workspace:P(`a workspace key; owners and admins only`),"no-check":P(`skip the provider key check`),...M},globalFlags:{cwd:!1},cli:{examples:[`ANTHROPIC_API_KEY=sk-... coder credentials add --env ANTHROPIC_API_KEY # your own Claude key, read from the environment`,`OPENAI_API_KEY=sk-... coder credentials add --env OPENAI_API_KEY --workspace # a workspace key every member's tasks can use`,`pbpaste | coder credentials add --env OPENROUTER_API_KEY --value - # a key for custom models, value from stdin`]},run:async({options:e,tool:t})=>{let{addCredential:n}=await import(`./remote-HUZCWgfl.js`).then(e=>e.i);if(t&&e.value===`-`)throw new y(`invalid-option`,`A tool cannot read the key from stdin.`,{hint:`Set the variable in the environment, or run it in a terminal`});return n({...e,noCheck:e[`no-check`]})},print:(e,{options:t})=>H.stdout.write(`${e.replaced?`Replaced`:`Added`} ${t.workspace?`workspace`:`personal`} ${T.bold(e.name)}.\n`)});function Ut(e){if(!e.length)return void H.stdout.write(`${T.dim(`No engine credentials.`)}\n`);H.stdout.write(`${S([{header:`variable`,value:e=>e.subscription?`${e.name} subscription`:e.name,paint:e=>T.cyan(e)},{header:`scope`,value:e=>e.scope},{header:`value`,value:e=>e.masked},{header:`account`,value:e=>[e.account?.email,e.account?.plan].filter(Boolean).join(` `)}],e,T)}\n`)}const Wt=R({name:`list`,description:`list your keys and the workspace keys, by variable`,access:`read`,args:M,globalFlags:{cwd:!1},run:async({options:e})=>{let{credentials:t}=await import(`./remote-HUZCWgfl.js`).then(e=>e.i);return t.list(e)},print:Ut});function Gt(e){e.url&&H.stderr.write(`Open ${T.cyan(e.url)}\n`),e.code&&H.stderr.write(`Enter the code ${T.bold(e.code)}\n`)}async function Kt(){let e=(await import(`node:readline/promises`)).createInterface({input:H.stdin,output:H.stderr}),t=(await e.question(`Paste the code from the sign-in page `)).trim();return e.close(),t}function qt(e){if(e.state===`failed`)return void H.stderr.write(`${E.red(e.error??`Sign-in failed.`)}\n`);H.stdout.write(`Signed in. Your ${T.bold(e.engine)} subscription is saved.\n`)}const Jt=R({name:`login`,description:`sign in to a claude or codex subscription on the server`,usage:`Runs the official claude or codex sign-in on the server's runner, prints the sign-in link or device code, and waits. Claude asks you to paste the code the sign-in page shows. The result replaces your subscription for that engine. Needs CLAUDE_SUBSCRIPTIONS=1 or CODEX_SUBSCRIPTIONS=1 on the server.`,access:`write`,args:{engine:f(c()).check(h(`claude or codex`)),...M},globalFlags:{cwd:!1},cli:{positional:[`engine`]},mcp:!1,run:async({options:e,args:[t]})=>{let{loginCredential:n}=await import(`./remote-HUZCWgfl.js`).then(e=>e.i);return n(t,{...e,onStart:e=>H.once(`SIGINT`,()=>void e().finally(()=>H.exit(130))),onOpen:Gt,code:Kt})},next:({result:e})=>e.state===`failed`?B([`Try again`],{stream:`stderr`}):[],print:qt,exit:(e,{options:t})=>!t.json&&e.state===`failed`?1:void 0}),Yt=R({name:`remove`,description:`remove the key of one variable`,usage:`Remove the key of one environment variable.`,access:`write`,args:{NAME:c().check(h(`the variable`)),workspace:P(`the workspace key of that variable`),...M},globalFlags:{cwd:!1},cli:{positional:[`NAME`]},async run({options:e,args:[t]}){let{credentials:n}=await import(`./remote-HUZCWgfl.js`).then(e=>e.i);return n.remove(t,e)},print:(e,{args:[t]})=>H.stdout.write(`Removed ${T.bold(t)}.\n`)}),Xt=z({name:`credentials`,description:`engine credentials: subscriptions and API keys`,usage:`Manage subscriptions and API keys, one per variable in each scope. 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 own, else the workspace's.`,commands:[Wt,Ht,Jt,Yt]}),Zt=R({name:`docs`,description:`print bundled documentation (for agents to read)`,usage:"Print bundled documentation. With no topic, list the available topics; with a\ntopic, print that doc's raw markdown to stdout (unstyled, for an agent to\nconsume). Topics with sub-pages list them as `<topic>/<page>` (also accepted as\n`<topic>-<page>`). `coder docs skill` prints the host skill so an engine can\nload it once per session (--claude for the Claude Code flavor).",access:`read`,args:{topic:A(`the doc to print (default: list the topics)`),claude:P(`with the skill topic: print the Claude Code flavor`)},globalFlags:{cwd:!1},cli:{positional:[`topic`],examples:[`coder docs # list the available topics`,`coder docs flows # print the Flows doc`,`coder docs review # print the Review doc`]},run:async({options:e,args:[t]})=>{let{docsCore:n}=await import(`./docs-KHc0_gFX.js`).then(e=>e.r);return n(t,e)},next:({result:e})=>`content`in e?[]:B([`Read a topic: coder docs <topic>`]),print:e=>H.stdout.write(`content`in e?e.content.endsWith(`
|
|
40
|
-
`)?e.content:`${e.content}\n`:Qt(e.topics))});function Qt(e){let t=T,n=e=>e.includes(`/`)?` ${e}`:e;return S([{header:`topic`,value:e=>n(e.name),paint:e=>t.cyan(e)},{header:`about`,value:e=>e.description,paint:e=>t.light(e)}],e,t)}const $t=e=>e===1?``:`s`,en=R({name:`archive`,description:`hide a run (or all stopped) from the list`,usage:`Archive a flow run so it drops out of the default list (see it again with
|
|
41
|
-
\`coder flow list --archived [--limit N]\`). Pass --all-stopped to archive every
|
|
42
|
-
finished run. A running run must be stopped first.`,access:`write`,args:{"run-id":A(`the run to archive`),"all-stopped":P(`archive every stopped (finished) run`)},cli:{positional:[`run-id`]},run:async({options:e,args:[t]})=>{let{archiveRuns:n}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D);return n(t,{allStopped:e[`all-stopped`]})},print(e){if(!(`count`in e))return void H.stdout.write(`Archived run ${T.cyan(e.runId)}.\n`);H.stdout.write(e.count?`Archived ${e.count} stopped run${$t(e.count)}.\n`:`${T.dim(`No stopped runs to archive.`)}\n`)}}),tn=R({name:`delete`,description:`delete a run's record (or all archived)`,usage:`Delete a flow run's record from disk (its journal, events, and logs). This is
|
|
43
|
-
permanent; the run's tasks are ordinary tasks and are not touched. Pass
|
|
44
|
-
--all-archived to delete every archived run at once. A running run must be
|
|
45
|
-
stopped first.`,access:`write`,args:{"run-id":A(`the run to delete`),"all-archived":P(`delete every archived run`)},cli:{positional:[`run-id`]},run:async({options:e,args:[t]})=>{let{deleteRuns:n}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D);return n(t,{allArchived:e[`all-archived`]})},print(e){if(!(`count`in e))return void H.stdout.write(`Deleted run ${T.cyan(e.runId)}.\n`);H.stdout.write(e.count?`Deleted ${e.count} archived run${$t(e.count)}.\n`:`${T.dim(`No archived runs to delete.`)}\n`)}}),nn=R({name:`discover`,description:`list flows runnable here (workspace + global)`,usage:`List every flow discoverable from the current directory: workspace flows in
|
|
46
|
-
.coder/flows/ (walking up to the repo root) and global flows in ~/.coder/flows/.`,access:`read`,run:async({cwd:e})=>{let{discoverFlows:t}=await import(`./discover-CHfF4cEz.js`).then(e=>e.r);return t(e)},next:({result:e})=>B(e.length?[`Run one: coder flow run <name>`,`Recent runs: coder flow list`]:[`Authoring guide: coder docs flows`]),print:(e,{cwd:t})=>rn(e,t)});function rn(e,t){if(!e.length){H.stdout.write(`No flows found in .coder/flows/ (workspace) or ~/.coder/flows/ (global).
|
|
47
|
-
`);return}let n=T;H.stdout.write(S([{header:`name`,value:e=>e.name,paint:e=>n.cyan(e)},{header:`scope`,value:e=>e.scope,paint:e=>n.light(e)},{header:`path`,value:e=>e.scope===`workspace`?V.relative(t,e.path)||e.path:e.path.replace(De.homedir(),`~`),paint:e=>n.light(e)}],e,n))}const an=R({name:`watch`,description:`watch a run live (replay + follow)`,usage:`Watch a flow run live: replay its progress lines from the start, then keep
|
|
48
|
-
following while it runs (Ctrl-C detaches; it keeps running). Blocks until it
|
|
49
|
-
finishes; exits 0 on success, 1 otherwise. Defaults to the most recent run.
|
|
50
|
-
For the result alone, prefer \`coder flow result\`. Alias: stream.
|
|
51
|
-
|
|
52
|
-
With --from <n>, or as a tool, it returns the events from event n on without
|
|
53
|
-
following, and \`next\`: the command that continues them while the run goes on.`,access:`read`,args:{"run-id":A(`the run (default: the most recent)`),tail:L(`replay only the last n events first (default: all)`),from:I(f(v().check(_(),e())),`return the events from event n on instead of following them`,`<n>`)},cli:{positional:[`run-id`],examples:[`coder flow watch # follow the most recent run to completion`,`coder flow watch <run-id> --from 0 --json # the events so far, and the command that continues them`]},async run({options:e,args:[t],tool:n,next:r}){let{watchRun:i}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D),a=e.from??(n?0:void 0),o=i(t,{tail:e.tail,from:a});if(a===void 0)return vn(o,{json:e.json,stream:!0},r);let s=[];for await(let e of o.events)s.push(e);let{runId:c,status:l}=o.record;return{runId:c,status:l,events:s,...l===`running`?{next:`coder flow watch ${c} --from ${a+s.length}`}:{}}},next:({result:e})=>Sn(e),print(e){let t=new gn;for(let n of e.events)t.emit(n);t.done()}}),on=[`⣾`,`⣽`,`⣻`,`⢿`,`⡿`,`⣟`,`⣯`,`⣷`];function Y(e,t=!1){let n=T;return t?w(`[${cn(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 sn(){return w(`[start]`,10)}function cn(e){return e===`completed`?`done`:e===`cancelled`?`failed`:e}function ln(e,t){return e??t.replace(/\s+/g,` `).trim().slice(0,60)}function X(e,t,n,r,i,a){let o=T,s=w(t??n,32);return[`${e} ${a?o.bold(s):s}`,o.dim(w(n,24)),o.light(w(i??``,20)),r?o.light(`${de(r.total)} tok`):``].join(` `).trimEnd()}function un(e,t=!1){let n=T;return`${Y(e.ok?`completed`:`failed`,t)} ${n.dim(`gate`)} ${n.light(e.cmd)}${e.ok?``:n.dim(` · exit ${e.code}`)}`}function dn(e,t,n){let r=T,i=n!==void 0&&n>=1e3?r.dim(` · ${b(n)}`):``;return`${t} ${r.dim(`gate`)} ${r.light(e)}${i}`}function fn(e,t=!1){return T.dim(`${`│ `.repeat(e)}${t?`└─`:`├─`}`)}function pn(e){return T.dim(`${`│ `.repeat(e)}│ `)}function Z(e){return`${` `.repeat(e.depth)}${e.log?`${w(`[log]`,10)} `:``}${e.body}`}function mn(e,t,n=!1){return n?Z(e):`${e.log?pn(e.depth):fn(e.depth,t)} ${e.body}`}function hn(e){return T.dim(`${`│ `.repeat(Math.max(0,e))}│`)}var gn=class{stream;names=new Map;active=new Map;activeGates=new Map;pending;previews=new Map;tails=new Map;previewWatchers=new Map;frame=0;hasCommitted=!1;timer;tty;region;constructor(e=H.stdout){this.stream=e,this.tty=!!e.isTTY,this.region=new oe(e)}emit(e){let t=T;switch(e.kind){case`task-start`:{let t={name:ln(e.name,e.prompt),engine:e.engine,depth:e.depth??0};if(this.names.set(e.taskId,t),!this.tty){this.final(t.depth,X(sn(),t.name,e.taskId,null,t.engine));return}this.active.set(e.taskId,t),this.previewWatchers.get(e.taskId)?.close(),this.previewWatchers.set(e.taskId,r(i(H.cwd(),e.taskId),t=>{t&&t!==`log.jsonl`||(this.refreshPreviews(e.taskId),this.repaint())})),this.refreshPreviews(e.taskId),this.spin(!0),this.repaint();return}case`task-end`:{this.active.delete(e.taskId),this.previews.delete(e.taskId),this.tails.delete(e.taskId),this.previewWatchers.get(e.taskId)?.close(),this.previewWatchers.delete(e.taskId),this.idle();let t=this.names.get(e.taskId);this.final(t?.depth??0,X(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,dn(t.cmd,sn()));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,un(e,!this.tty));return;case`log`:for(let n of e.message.split(`
|
|
54
|
-
`))this.final(e.depth??0,t.light(n),!0);return;case`flow-start`:this.final(e.depth-1,t.bold(`flow ${e.name}`));return;case`replay`:this.final(0,t.dim(`replayed ${e.count} steps from journal`),!0)}}done(){this.spin(!1);for(let e of this.previewWatchers.values())e.close();this.previewWatchers.clear(),this.flush(0),this.tty&&this.repaint(),this.region.done()}flush(e){this.pending&&=(this.region.commit(`${mn(this.pending,e<this.pending.depth,!this.tty)}\n`),this.hasCommitted=!0,void 0)}final(e,t,n=!1){if(!this.tty){this.region.commit(`${Z({depth:e,body:t,log:n})}\n`),this.hasCommitted=!0;return}this.flush(e),this.pending={depth:e,body:t,log:n},this.tty&&this.repaint()}repaint(){let e=[],t=[];if(this.pending){let n=mn(this.pending,!1);e.push(n),t.push(n)}let n=this.timer?T.bold(T.cyan(on[this.frame%on.length])):Y(`running`);for(let[r,i]of this.active){let a=`${fn(i.depth??0)} ${X(n,i.name,r,null,i.engine,!0)}`;(e.length||this.hasCommitted)&&e.push(hn(i.depth??0)),e.push(a),t.push(a);let o=this.previews.get(r);o&&e.push(`${pn(i.depth??0)} ${T.dim(o)}`)}for(let r of this.activeGates.values()){let i=`${fn(r.depth)} ${dn(r.cmd,n,Date.now()-r.startedAt)}`;(e.length||this.hasCommitted)&&e.push(hn(r.depth)),e.push(i),t.push(i)}let r=(se(this.stream)??1/0)-1,i=e.length<=r?e:t;if(i.length>r){let e=Math.max(0,r-1);i=[T.dim(`… +${i.length-e} more running`),...i.slice(-e)]}this.region.set(i)}refreshPreviews(e){try{let t=this.tails.get(e),n;if(!t){let r=V.join(i(H.cwd(),e),`log.jsonl`),o=Ee.existsSync(r)?Ee.statSync(r).size:0;n=a(H.cwd(),e,1)[0],t=s(r,o),this.tails.set(e,t)}for(let e of t())try{n=JSON.parse(e)}catch{n={message:e}}let r=n?.message?.replace(/\s+/g,` `).trim();if(!r)return;let o=(k(this.stream)??120)-8;this.previews.set(e,r.length>o?`${r.slice(0,o-1)}…`:r)}catch{}}idle(){!this.active.size&&!this.activeGates.size&&this.spin(!1)}spin(e){e&&!this.timer?this.timer=setInterval(()=>{this.frame++,this.repaint()},120).unref():!e&&this.timer&&(clearInterval(this.timer),this.timer=void 0)}};function _n(e,t){if(t){ue(e);return}let n=!H.stdout.isTTY,r=n?``:`${T.dim(`└─`)} `;H.stdout.write(`${r}${Y(`completed`,n)} run ${T.cyan(e.runId)} completed ${T.dim(`(${e.taskCount} tasks)`)}\n`),H.stdout.write(`\n${ce(e.result)}\n`),yn(e.tokens)}async function vn(e,t,n){let{runId:r}=e.record,i=!!(t.stream&&t.json);!t.json&&e.record.status===`running`&&H.stderr.write(`${T.dim(`[flow]`)} Run ${T.cyan(r)} started and is waiting to finish. Press Ctrl-C to detach. It keeps running.\n\n`);let a=t.json?()=>{}:me(),o=()=>{a(),i||(H.stderr.write(`\n${T.dim(`[flow] Detached. The run is still going.`)}\n`),n({runId:r,status:`running`,phase:`detached`},{stream:`stderr`,style:`stdout`,force:!0})),H.exit(130)};H.on(`SIGINT`,o);let s=new gn;for await(let n of e.events)i?H.stdout.write(`${JSON.stringify(n)}\n`):t.json||s.emit(n);s.done(),a(),H.off(`SIGINT`,o);let c=e.final();i&&(H.stdout.write(`${JSON.stringify(xn(c))}\n`),H.exit(c.status===`completed`?0:1)),c.status===`completed`&&(_n({runId:r,name:c.name,status:`completed`,result:c.result,tokens:c.ledger,taskCount:c.taskCount},t.json),H.exit(0)),c.status===`stopped`&&(t.json?ue({runId:r,name:c.name,status:`stopped`,taskCount:c.taskCount}):H.stdout.write(`\n${T.dim(`[flow] Run ${r} stopped.`)}\n`),n(c),H.exit(1)),H.stdout.write(`\n${T.red(`error:`)} ${c.error??`unknown error`}\n`),n(c,{force:!0}),H.exit(1)}function yn(e){let t=Object.keys(e);if(t.length){H.stdout.write(`\n${T.bold(`Tokens:`)}\n`);for(let n of t)H.stdout.write(` ${T.dim(O(e[n],n))}\n`)}}function bn(e){let{runId:t,name:n,status:r,startedAt:i,endedAt:a,taskCount:o,ledger:s,error:c,archived:l,archivedAt:u}=e;return{runId:t,name:n,status:r,startedAt:i,endedAt:a,taskCount:o,ledger:s,error:c,archived:l,archivedAt:u}}function xn(e){return{...bn(e),result:e.result}}function Sn(e){return e.next?B([`Continue: ${e.next}`]):e.status===`running`?B(e.phase===`detached`?[`Result: coder flow result ${e.runId}`,`Stop it: coder flow stop ${e.runId}`]:[`Result: coder flow result ${e.runId}`,`Runs: coder flow list`]):e.status===`stopped`||e.status===`failed`?B([`Resume: coder flow resume ${e.runId}`]):[]}const Cn=R({name:`list`,description:`recent flow runs (by default running + just stopped)`,usage:`List recent flow runs, most recent first: running runs plus ones that ended
|
|
55
|
-
within the last 30 minutes. Older runs auto-archive and move to --archived.`,access:`read`,args:{archived:P(`show archived runs (auto-archived or via flow archive)`),limit:Ce(`show at most n runs (default all)`)},run:async({options:e})=>{let{collectFlowRuns:t}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D);return t(e)},json:e=>e.runs.map(bn),next:({result:e})=>B(e.runs.length?[`Result: coder flow result <run-id>`,`Tasks: coder list`,`Runnable flows: coder flow discover`]:[`Run one: coder flow run <name>`,`Runnable flows: coder flow discover`]),print:(e,{options:t})=>wn(e,t)});function wn({runs:e,clipped:t},n){if(!e.length){H.stdout.write(n.archived?`No archived flow runs.
|
|
56
|
-
`:`No recent flow runs.
|
|
57
|
-
`);return}let r=T;H.stdout.write(`${S([{header:`run-id`,value:e=>e.runId,max:28,paint:e=>r.cyan(e)},{header:`name`,value:e=>e.name,max:30},{header:`status`,value:e=>e.status,paint:(e,t)=>C(t.status,e.length)},{header:`tasks`,value:e=>`${e.taskCount} tasks`,paint:e=>r.light(e)},{header:`tokens`,value:e=>{let t=Object.values(e.ledger).reduce((e,t)=>e+t.total,0);return t?`${de(t)} tok`:`-`},paint:e=>r.light(e)},{header:`age`,value:e=>b(m(e.startedAt)),paint:e=>r.light(e)}],e,r)}\n`),t&&H.stdout.write(r.dim(`\n... ${t} more not shown (--limit ${n.limit})\n`))}const Tn=R({name:`result`,description:`progress and result of a run`,usage:`Show a flow run's status and result, with its tasks, gates, and token ledger.
|
|
58
|
-
--tail <n> caps the step rows (0 for the result alone). Defaults to the most
|
|
59
|
-
recent run. To watch a run live, prefer \`coder flow watch\`.`,access:`read`,args:{"run-id":A(`the run (default: the most recent)`),tail:L(`show the last n step rows (default: all; 0 hides them)`)},cli:{positional:[`run-id`],examples:[`coder flow result --tail 0 # the most recent run's result, no step rows`]},async run({options:e,args:[t]}){let{runResult:n}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D),r=n(t);if(!r&&!e.json)throw new y(`flow-failed`,t?`No flow run "${t}".`:`No flow runs yet.`,{hint:`Run one: coder flow run <name>`});return r},json:e=>e&&xn(e),next:({result:e})=>e?B(e.status===`running`?[`Follow live: coder flow watch ${e.runId}`,`Stop it: coder flow stop ${e.runId}`]:e.status===`stopped`||e.status===`failed`?[`Resume: coder flow resume ${e.runId}`]:[]):[],print:(e,{options:t})=>Dn(e,t.tail)});function En(e,t=!1){let n=T;if(t)return e.map(Z);let r=(t,n)=>{for(let r=t+1;r<e.length;r+=1){let t=e[r].depth;if(t<n)return!1;if(t===n)return!0}return!1};return e.map((e,t)=>{let i=``;for(let n=0;n<e.depth;n+=1)i+=r(t,n)?`│ `:` `;return i+=e.log?`│ `:r(t,e.depth)?`├─`:`└─`,`${n.dim(i)} ${e.body}`})}function Dn(e,t=`all`){let n=T,r=!H.stdout.isTTY;H.stdout.write(`${n.bold(`Flow`)} ${n.cyan(e.name)} ${n.dim(`(${e.runId})`)}. ${n.bold(C(e.status))}\n`);let i=e.steps,a=i.filter(e=>d.includes(e.status)).length,o=e.status===`running`?`${a}/${i.length} tasks`:`${e.taskCount} tasks`;if(H.stdout.write(`${n.dim(`started ${e.startedAt}${e.endedAt?` · ended ${e.endedAt}`:``} · ${o}`)}\n`),t!==0){let a=new Map,o=new Map,s=new Map,c=[];for(let t of e.events)if(t.kind===`task-start`){let e={name:ln(t.name,t.prompt),engine:t.engine,depth:t.depth??0};a.set(t.taskId,e),o.set(t.taskId,e)}else if(t.kind===`task-end`){o.delete(t.taskId);let e=a.get(t.taskId);c.push({depth:e?.depth??0,body:X(Y(t.status,r),e?.name??null,t.taskId,t.tokens,e?.engine)})}else if(t.kind===`gate-start`)s.set(t.gateId,{cmd:t.cmd,depth:t.depth??0});else if(t.kind===`gate`)t.gateId&&s.delete(t.gateId),c.push({depth:t.depth??0,body:un(t,r)});else if(t.kind===`log`)for(let e of t.message.split(`
|
|
60
|
-
`))c.push({depth:t.depth??0,body:n.light(e),log:!0});else t.kind===`flow-start`&&c.push({depth:t.depth-1,body:n.bold(`flow ${t.name}`)});for(let[e,t]of o)c.push({depth:t.depth??0,body:X(Y(`running`,r),t.name,e,null,t.engine)+(r?``:` ${n.light(`running`)}`)});for(let e of s.values())c.push({depth:e.depth,body:dn(e.cmd,Y(`running`,r))+(r?``:` ${n.light(`running`)}`)});if(!c.length)for(let e of t===`all`?i:i.slice(-t))c.push({depth:0,body:X(Y(e.status,r),e.name,e.taskId??`-`,e.tokens)});let l=En(c,r),u=t===`all`?l:l.slice(-t);u.length&&H.stdout.write(`\n${u.join(`
|
|
61
|
-
`)}\n`)}e.endedAt&&e.result!==void 0&&H.stdout.write(`\n${n.bold(`Result:`)}\n${ce(e.result)}\n`),e.error&&H.stdout.write(`\n${n.red(`error:`)} ${e.error}\n`),yn(e.ledger)}const On={wait:P(`follow the run in the foreground (Ctrl-C detaches; it keeps running)`),args:A(`the flow's input as a JSON value (or pass bare key=value pairs)`,`<json>`),concurrency:A(`tasks running at once (default: CPU count)`,`<n>`),"max-tasks":A(`total tasks the run may dispatch (default: CPU count x 10)`,`<n>`),"dry-run":P(`print every resolved prompt and gate command without dispatching`)};function kn(e){let t={};for(let n of e){let e=n.indexOf(`=`);if(e===-1)throw new y(`invalid-option`,`Invalid argument "${n}": expected key=value.`,{hint:`Help: coder flow run --help`});let r=n.slice(0,e),i=n.slice(e+1);try{t[r]=JSON.parse(i)}catch{t[r]=i}}return t}function An(e,t){if(e!==void 0)try{return JSON.parse(e)}catch(e){throw new y(`invalid-option`,`Invalid --args JSON: ${e instanceof Error?e.message:String(e)}`)}return t.length?kn(t):{}}const jn=e=>e?Number(e):void 0,Mn=(e,t)=>({cwd:t,dryRun:e[`dry-run`],concurrency:jn(e.concurrency),maxTasks:jn(e[`max-tasks`]),detached:!0,wait:e.wait}),Nn=(e,t)=>e[`dry-run`]&&!e.json&&!t?In():{},Pn=R({name:`run`,description:`run a flow in the background (--wait to follow it live)`,usage:`Run a flow: a TypeScript file that orchestrates many coder tasks with gates,
|
|
62
|
-
journaling, and resume. Prints the run id and orchestrates in the background;
|
|
63
|
-
--wait follows the run in the foreground with live progress (Ctrl-C detaches;
|
|
64
|
-
it keeps running), and \`coder flow watch\` shows the same lines any time.
|
|
65
|
-
Stop a run with \`coder flow stop\`.`,access:`write`,args:{flow:c().check(h(`the flow: a discovered name or a path`)),inputs:j(`the flow's input as bare key=value pairs`),...On},cli:{positional:[`flow`,`inputs`],examples:[`coder flow run audit-routes --wait # run a discovered flow`,`coder flow run ./scratch/one-off.ts --wait # run a flow by path`,`coder flow run verify --args '{"clusters":["a","b"]}' --wait # pass structured input`]},async run({options:e,args:[t,...n],cwd:r,tool:i,next:a}){let{startRun:o}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D);return Fn(await o(t,{...Mn(e,r),args:An(e.args,n)},Nn(e,i)),e,i,a)},next:({result:e})=>Sn(e),print:e=>e.status===`running`?Ln(e):_n(e)});async function Fn(e,t,n,r){if(e.status!==`running`||!e.watch)return e;if(!n)return vn(e.watch,t,r);for await(let t of e.watch.events);let i=e.watch.final();if(i.status!==`completed`)throw new y(`flow-failed`,i.error??`Flow ${i.runId} ${i.status}.`,{runId:i.runId,hint:`Resume: coder flow resume ${i.runId}`});return{runId:i.runId,name:i.name,status:`completed`,result:i.result,tokens:i.ledger,taskCount:i.taskCount}}function In(){let e=new gn;return{onEvent:t=>e.emit(t)}}function Ln(e){H.stdout.write(`${T.dim(`[flow]`)} run ${T.cyan(e.runId)} started in the background (running).\n`)}const Rn=R({name:`resume`,description:`continue a stopped or edited run`,usage:`Re-run a flow from its journal: finished steps replay instantly, the first
|
|
66
|
-
changed or new step onward runs live. Defaults to the most recent run.
|
|
67
|
-
Accepts the same flags as flow run.`,access:`write`,args:{"run-id":A(`the run (default: the most recent)`),...On},cli:{positional:[`run-id`],examples:[`coder flow resume # continue the most recent run`]},async run({options:e,args:[t],cwd:n,tool:r,next:i}){let{resumeRun:a}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D);return Fn(await a(t,{...Mn(e,n),...e.args===void 0?{}:{args:An(e.args,[])}},Nn(e,r)),e,r,i)},next:({result:e})=>Sn(e),print:e=>e.status===`running`?Ln(e):_n(e)}),zn=R({name:`stop`,description:`stop a run and its still-running tasks`,usage:`Stop a running flow: signal the orchestrator so it stops dispatching, stamp the
|
|
68
|
-
run stopped, and stop its still-running tasks. Defaults to the most recent run;
|
|
69
|
-
the journal stays ready for \`coder flow resume\`.`,access:`write`,args:{"run-id":A(`the run (default: the most recent)`),"keep-tasks":P(`leave the run's still-running tasks running`)},cli:{positional:[`run-id`]},run:async({options:e,args:[t]})=>{let{stopRun:n}=await import(`./executor-ufWRqhdS.js`).then(e=>e.n);return n(t,{keepTasks:e[`keep-tasks`]})},next:({result:e})=>B([`Resume: coder flow resume ${e.runId}`]),print:Bn});function Bn(e){let t=T;e.status===`failed`?H.stdout.write(`${t.dim(`[flow]`)} Run ${t.cyan(e.runId)} orchestrator died. Marked ${C(`failed`)}.\n`):H.stdout.write(`${t.dim(`[flow]`)} run ${t.cyan(e.runId)} ${C(e.status)}.\n`),e.stoppedTasks.length&&H.stdout.write(`${t.dim(`[flow]`)} stopped tasks: ${e.stoppedTasks.join(`, `)}\n`),e.keptTasks.length&&H.stdout.write(`${t.dim(`[flow]`)} left running: ${e.keptTasks.join(`, `)}\n`)}const Vn=z({name:`flow`,description:`orchestrate many coder tasks from one TypeScript file`,usage:`Orchestrate many coder tasks with a plain TypeScript file: dispatch, gates,
|
|
70
|
-
concurrency, journaling, and resume. Flows live in .coder/flows/ (workspace)
|
|
71
|
-
or ~/.coder/flows/ (global). See \`coder docs flows\`.`,commands:[Pn,Cn,nn,Tn,an,zn,Rn,en,tn],aliases:{stream:`watch`,ls:`list`}}),Hn=R({name:`mcp`,description:`serve Coder's commands as MCP tools over stdio`,usage:`Serve Coder's commands as MCP tools over stdio, so a harness can run them.
|
|
72
|
-
|
|
73
|
-
Commands return their JSON payloads and next steps. Load guides with load_skill;
|
|
74
|
-
blocking commands keep their CLI flags and behavior, subject to the client's tool timeout.`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,cli:{examples:[`claude mcp add coder -- coder mcp # run Coder from Claude Code`]},async run(){if(process.stdin.isTTY){process.stdout.write(`coder mcp is the MCP server your host starts; it waits for an MCP client on stdin.
|
|
75
|
-
Add it to your host with \`coder setup-host\`, or by hand: claude mcp add coder -- coder mcp
|
|
76
|
-
`);return}let{app:e}=await import(`./context-zhSlmXOp.js`),{serve:t}=await import(`./serve-DdAdw7Su.js`);await t(e,`stdio`)}}),Q=P(`target <repo>/.coder/config.json instead of the user file`),Un=I(f(v().check(_(),t())),`the model's context window in tokens; filled from the provider when it reports one`,`<tokens>`),Wn=e=>({baseUrl:e[`base-url`],model:e.model,envKey:e[`env-key`],contextWindow:e[`context-window`],workspace:e.workspace}),Gn=R({name:`add`,description:`connect a model`,usage:`Connect a custom model behind an OpenAI-compatible endpoint (Ollama, LM Studio,
|
|
77
|
-
vLLM, OpenRouter, ...). It currently runs on the codex engine pointed at your
|
|
78
|
-
URL and is usable anywhere a model is: --model <name>, --engine custom, or as an
|
|
79
|
-
agent default in config. Alias: \`coder model setup\`.`,access:`write`,args:{name:A(`the name to dispatch it by`),"base-url":A(`OpenAI-compatible API base (e.g. http://localhost:11434/v1)`,`<url>`),model:A(`the provider's model id (e.g. qwen2.5-coder:32b)`,`<id>`),"env-key":A(`env var holding the API key (omit for keyless local endpoints)`,`<VAR>`),"context-window":Un,workspace:P(`write to <repo>/.coder/config.json instead of the user file`)},cli:{positional:[`name`],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`]},run:async({options:e,args:[t],cwd:n})=>{let{models:r}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return r.add(t,{...Wn(e),cwd:n})},json:Kn,next:({result:e})=>Jn(e),print:(e,{next:t})=>qn(e,`saved`,()=>t(e,{slot:`codex`}))});function Kn({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 qn({name:e,entry:t,file:n,probe:r,codex:i,install:a,nativeResponses:o,keyMissing:s},c,l){let u=T,d=e=>` ${u.green(`✔`)} ${e}`,f=e=>` ${u.red(`✘`)} ${e}`,p=[`${c} ${u.cyan(e)} -> ${t.model} @ ${t.baseUrl}${t.contextWindow?`, ${t.contextWindow} tokens`:``} ${u.dim(`(${n})`)}`,``,r.reachable?d(`${r.detail} ${u.dim(`(${o?`responses api, direct`:`chat api, auto-translated`})`)}`):f(r.detail),i.available?d(a?.installed?`${a.note} ${u.dim(`(${i.detail})`)}`:`codex engine ${u.dim(`(${i.detail})`)}`):a?.note?f(a.note):null];p.at(-1)===null&&(p.pop(),H.stdout.write(`${p.join(`
|
|
80
|
-
`)}\n`),p.length=0,l()),s&&p.push(f(`env var ${t.envKey} is not set in this shell`)),p.length&&H.stdout.write(`${p.join(`
|
|
81
|
-
`)}\n`)}function Jn({name:e,codex:t,install:n}){return[...!t.available&&!n?.note?[{usage:`npm install -g @openai/codex`,blurb:`codex CLI not installed`,cli:{text:` ${T.red(`✘`)} codex CLI not installed - run: npm install -g @openai/codex`,layout:`plain`,prefix:``,slot:`codex`}}]:[],...B([`Use it: coder run --model ${e} "<task>"`,`Make default: coder config set engines.custom.model ${e}`],{layout:`plain`,dim:!0})]}const Yn=R({name:`alias`,description:`name a spec, e.g. fast codex:luna`,usage:`Save an alias for an engine spec, e.g. fast -> codex:luna. An alias may reuse a
|
|
82
|
-
built-in name to override it.`,access:`write`,args:{name:A(`the alias`),spec:A(`the engine spec, such as codex:luna`),workspace:Q},cli:{positional:[`name`,`spec`]},run:async({options:e,args:[t,n],cwd:r})=>{let{models:i}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return i.alias(t,n,{...e,cwd:r})},print:Xn});function Xn(e){let t=T,n=`${e.provider} ${e.model}${e.effort?` (${e.effort})`:``}`;H.stdout.write(`aliased ${t.cyan(e.alias)} -> ${e.provider}:${e.model}${e.effort?`:${e.effort}`:``} ${t.dim(`= ${n}`)} ${t.dim(`(${e.file})`)}\n`)}const Zn=R({name:`remove`,description:`delete a custom model`,usage:`Remove a configured custom model.`,access:`write`,args:{name:A(`the custom model`),workspace:Q},cli:{positional:[`name`]},run:async({options:e,args:[t],cwd:n})=>{let{models:r}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return r.remove(t,{...e,cwd:n})},print:e=>Qn(`removed`,e.removed,e.file)});function Qn(e,t,n){H.stdout.write(`${e} ${T.cyan(t)} ${T.dim(`(${n})`)}\n`)}const $n=(e,t,n)=>R({name:e?`disable`:`enable`,description:t,usage:n,access:`write`,args:{name:A(`a built-in, custom model, or alias`),workspace:Q},cli:{positional:[`name`]},run:async({options:t,args:[n],cwd:r})=>{let{models:i}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return i[e?`disable`:`enable`](n,{...t,cwd:r})},json:({name:t,file:n})=>({[e?`disabled`:`enabled`]:t,file:n}),print:({name:t,file:n})=>Qn(e?`disabled`:`enabled`,t,n)}),er=$n(!0,`turn off a model (built-in, custom, or alias)`,`Disable a model - built-in, custom, or alias. Requests for it fail until re-enabled.`),tr=$n(!1,`re-enable a disabled model`),nr=R({name:`list`,description:`list built-ins, custom models, and aliases`,usage:`List built-in aliases, configured custom models, and user aliases. Only custom\nmodels are probed.\n\n${we}`,access:`read`,run:async({cwd:e})=>{let{models:t}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return t.list({cwd:e})},next:()=>B([`Add a custom model: coder model add <name> --base-url <url> --model <id> [--env-key VAR]`,`Alias a model, e.g. fast codex:luna: coder model alias <name> <spec>`,`Run with a model: coder run --model <name> "<task>"`]),print:rr});function rr(e){let t=T,n=e=>e?` ${t.dim(`(disabled)`)}`:``,r=[],i=(e,i)=>{r.push(t.bold(e));for(let e of i)`overrides`in e?r.push(` ${e.disabled?t.dim(`∅`):t.cyan(`↳`)} ${e.alias.padEnd(14)} ${t.dim(`-> ${e.spec} (overrides ${e.overrides})`)}${n(e.disabled)}`):`builtin`in e?r.push(` ${e.disabled?t.dim(`∅`):t.green(`✔`)} ${e.alias.padEnd(14)} ${t.dim(`-> ${e.model}`)}${n(e.disabled)}`):r.push(` ${e.disabled?t.dim(`∅`):t.cyan(`↳`)} ${e.alias.padEnd(14)} ${t.dim(`-> ${e.spec}`)}${n(e.disabled)}`);r.push(``)};i(`Codex models`,e.codex),i(`Claude models`,e.claude),r.push(t.bold(`Custom models`),``),e.custom.length||r.push(t.dim(` None.`));for(let{name:i,probe:a,...o}of e.custom){let e=o.disabled?t.dim(`∅`):a.reachable?t.green(`✔`):t.red(`✘`);r.push(` ${e} ${i.padEnd(14)} ${o.model} ${t.dim(`@ ${o.baseUrl}${o.contextWindow?`, ${o.contextWindow} tokens`:``}. ${a.detail}`)}${n(o.disabled)}`)}if(r.push(``),e.toggles){r.push(t.bold(`Other`),``);for(let i of e.toggles)r.push(` ${i.disabled?t.dim(`∅`):t.green(`✔`)} ${i.name.padEnd(14)} ${t.dim(`raw model id`)}${n(i.disabled)}`);r.push(``)}r.push(...we.split(`
|
|
83
|
-
`)),H.stdout.write(`${r.join(`
|
|
84
|
-
`)}\n`)}const ir=R({name:`unalias`,description:`remove an alias`,usage:`Remove a user-defined alias.`,access:`write`,args:{name:A(`the alias`),workspace:Q},cli:{positional:[`name`]},run:async({options:e,args:[t],cwd:n})=>{let{models:r}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return r.unalias(t,{...e,cwd:n})},print:e=>Qn(`unaliased`,e.unaliased,e.file)}),ar=R({name:`update`,description:`change a model in place`,usage:`Update a configured custom model. Only the flags you pass change; the endpoint
|
|
85
|
-
is re-probed and the wire protocol re-detected.`,access:`write`,args:{name:A(`the custom model`),"base-url":A(`new API base`,`<url>`),model:A(`new provider model id`,`<id>`),"env-key":A(`new API-key env var`,`<VAR>`),"context-window":Un,workspace:P(`write to <repo>/.coder/config.json instead of the user file`)},cli:{positional:[`name`]},run:async({options:e,args:[t],cwd:n})=>{let{models:r}=await import(`./models-CzggS7p2.js`).then(e=>e.n);return r.update(t,{...Wn(e),cwd:n})},json:Kn,next:({result:e})=>Jn(e),print:(e,{next:t})=>qn(e,`updated`,()=>t(e,{slot:`codex`}))}),or=z({name:`model`,description:`manage models: built-ins, aliases, custom endpoints`,usage:"Manage the models coder can dispatch to. `add` connects any OpenAI-compatible\nendpoint (Ollama, vLLM, OpenRouter, ...) as the custom engine, alongside the\nbuilt-in codex/claude models. Name your own shortcuts with `alias`\n(e.g. fast -> codex:luna); disable/enable turns any model off and on.",commands:[nr,Gn,ar,Zn,er,tr,Yn,ir],aliases:{ls:`list`}}),sr=R({name:`review`,description:`review changed code with a built-in flow`,usage:`Review changed code with a read-only agent. Every reported finding is checked
|
|
86
|
-
against the repository. Runs the built-in \`review\` flow. A local review covers
|
|
87
|
-
everything since the merge-base with the origin default branch, including
|
|
88
|
-
uncommitted and untracked files. Changed submodules are reviewed file by file.
|
|
89
|
-
PR reviews can post deduplicated inline comments.
|
|
90
|
-
|
|
91
|
-
Related: \`coder flow watch\`, \`coder docs review\`.`,access:`write`,args:{base:A(`local comparison base (default: merge-base with origin default)`,`<ref>`),head:A(`review commits through this ref only (default: the working tree)`,`<ref>`),pr:A(`review a pull request by number (origin repo) or URL; GitHub via gh for now`,`<n|url>`),since:A(`keep only PR files and hunks changed since this commit`,`<sha>`),path:j(`review only this path, relative to cwd (repeatable)`,`<p>`),exclude:j(`leave this path out, relative to cwd (repeatable)`,`<p>`),post:P(`post deduplicated inline comments and sticky PR summary`),md:P(`markdown output (the default)`),engine:A(`codex, claude, or custom`,`<name>`),model:A(`model for the review task`,`<alias|slug>`),effort:I(f(te([`low`,`medium`,`high`],{error:`expected "low", "medium", or "high"`})),`reasoning effort and review depth (default: medium depth)`,`<low|medium|high>`)},cli:{examples:[`coder review # review the branch plus uncommitted work`,`coder review --base main # review everything since main locally`,`coder review --path src --exclude src/gen # review src without generated code`,`coder review --pr 42 --post # review and post to pull request 42`]},async run({options:e,cwd:t}){let{review:n}=await import(`./executor-ufWRqhdS.js`).then(e=>e.n);if(e.json&&e.md)throw new y(`invalid-option`,`--json and --md are mutually exclusive.`);return n.run({...e,cwd:t})},print:async e=>{let{renderReviewMarkdown:t}=await import(`./flow/builtin/review/index.js`);H.stdout.write(t(e))}}),cr=R({name:`add`,description:`connect a runner`,usage:`Connect a runner. Secret fields read environment variables with key=env:VARIABLE. Adding local prints a pairing command.`,access:`write`,args:{kind:c().check(h(`the runner kind, such as local or http`)),name:A(`runner display name`),scope:A(`personal or workspace`),field:j(`repeat for each field, use env:VARIABLE for secrets`,`key=value`),...M},globalFlags:{cwd:!1},cli:{positional:[`kind`]},async run({options:e,args:[t]}){let{addRunnerFields:n}=await import(`./runner-DYysY1-G.js`).then(e=>e.t);return n(t,e)},print:e=>H.stdout.write(`${`command`in e?e.command:`Added ${e.name} (${e.id}).`}\n`)}),lr=R({name:`default`,description:`set the default in its scope`,usage:`Use this runner by default within its scope.`,access:`write`,args:{id:c().check(h(`the runner`)),...M},globalFlags:{cwd:!1},cli:{positional:[`id`]},async run({options:e,args:[t]}){let{runners:n}=await import(`./runner-DYysY1-G.js`).then(e=>e.t);return n.default(t,e)},print:e=>H.stdout.write(`Default runner ${e.name}.\n`)});function ur({items:e}){if(!e.length)return void H.stdout.write(`${T.dim(`No runners.`)}\n`);H.stdout.write(`${S([{header:`id`,value:e=>e.id,paint:e=>T.cyan(e)},{header:`name`,value:e=>e.name},{header:`scope`,value:e=>e.scope},{header:`status`,value:e=>e.online?`online`:`offline`},{header:`kind`,value:e=>e.kind},{header:`default`,value:e=>e.default?`yes`:``}],e,T)}\n`)}const dr=R({name:`list`,description:`list your runners and the workspace's`,access:`read`,args:M,globalFlags:{cwd:!1},run:async({options:e})=>{let{listRunners:t}=await import(`./runner-DYysY1-G.js`).then(e=>e.t);return t(e)},print:ur}),fr=R({name:`remove`,description:`remove a runner`,access:`write`,args:{id:c().check(h(`the runner`)),...M},globalFlags:{cwd:!1},cli:{positional:[`id`]},async run({options:e,args:[t]}){let{removeRunner:n}=await import(`./runner-DYysY1-G.js`).then(e=>e.t);return n(t,e)},print:(e,{args:[t]})=>H.stdout.write(`Removed ${T.bold(t)}.\n`)}),pr=R({name:`rename`,description:`rename a runner`,access:`write`,args:{id:c().check(h(`the runner`)),name:c().check(h(`its new name`)),...M},globalFlags:{cwd:!1},cli:{positional:[`id`,`name`]},async run({options:e,args:[t,n]}){let{runners:r}=await import(`./runner-DYysY1-G.js`).then(e=>e.t);return r.rename(t,n,e)},print:(e,{args:[t]})=>H.stdout.write(`Renamed ${t} to ${T.bold(e.name)}.\n`)}),mr=R({name:`serve`,description:`run your server's tasks on this machine`,usage:`Run tasks on this machine with its own claude and codex logins. Expose the port with any tunnel (cloudflared, ngrok, Tailscale Funnel or a public VS Code port) and pass the tunnel's URL; each start registers the current URL, so a changing tunnel URL is fine. Choose a default with coder runner default. Tasks use their named runner, the agent setting, your default, the workspace default, then the server default.`,access:`write`,args:{url:A(`the HTTPS address the server reaches this runner at`,`<public url>`),token:A(`one-use pairing token, --url is the Coder server`,`<token>`),"runner-url":A(`public tunnel address when pairing, or CODER_RUNNER_URL`,`<url>`),port:I(f(v().check(_(),t())),`local port the tunnel forwards to (default 4100)`,`<n>`),name:A(`shown in the dashboard (default: this machine's hostname)`),workspace:P(`run every member's tasks, not only yours (owners and admins)`),...M},mcp:!1,cli:{examples:[`cloudflared tunnel --url http://localhost:4100 # expose the port in one terminal`,`coder runner serve --url https://abc.trycloudflare.com # then serve through it`]},async run({options:e}){let{serveRunner:t}=await import(`./serve-NQykWAKV.js`).then(e=>e.n),n=await t({...e,runnerUrl:e[`runner-url`]}),r=()=>void n.close().finally(()=>H.exit(0));return H.once(`SIGINT`,r),H.once(`SIGTERM`,r),n},json:({server:e,close:t,...n})=>({ok:!0,...n}),next:()=>B([`Tasks run here with this machine's own claude and codex logins`,`Stop with Ctrl-C; the server marks the runner offline`],{prefix:``,paint:`cyan`}),print:e=>H.stdout.write(`Runner ${T.bold(e.name)} serves ${e.server} at ${T.cyan(e.config.url??``)} (${e.scope}), listening on localhost:${e.port}.\n`)}),hr=R({name:`test`,description:`check a runner connection`,usage:`Check the runner connection.`,access:`read`,args:{id:c().check(h(`the runner`)),...M},globalFlags:{cwd:!1},cli:{positional:[`id`]},async run({options:e,args:[t]}){let{testRunner:n}=await import(`./runner-DYysY1-G.js`).then(e=>e.t);return n(t,e)},print:e=>H.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)}),gr=z({name:`runner`,description:`run your server's tasks on this machine`,usage:`Run your Coder server's tasks on your own machine, reached through any tunnel.`,commands:[cr,lr,hr,mr,dr,pr,fr]}),_r=R({name:`create`,description:`create the built-in agent's public app`,usage:`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.`,access:`write`,args:{integration:c().check(h(`the platform, such as github`)),org:A(`create it under this organization instead of your own account`),name:A(`the app's name and handle (default Coder)`)},globalFlags:{cwd:!1},cli:{positional:[`integration`],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`]},async run({options:e,args:[t]}){let{serverAppLink:n}=await import(`./apps-Bnk7F3A2.js`).then(e=>e.t);return n(t,{owner:e.org,name:e.name})},json:({url:e})=>({ok:!0,url:e}),print({url:e}){H.stdout.write(`Open this page to create the app (valid 10 minutes):\n${e}\n`),_e(e)}}),vr=z({name:`app`,description:`the built-in agent's public apps`,usage:`The built-in agent's apps, one per platform, shared by every workspace on this server.`,commands:[_r]}),yr=R({name:`rotate-key`,description:`re-seal secrets with SERVER_ENCRYPTION_KEY`,usage:`Re-seal stored app, installation, engine, and linked user secrets with the current key.`,access:`write`,globalFlags:{cwd:!1},cli:{env:[[`SERVER_ENCRYPTION_KEY`,`the new key`],[`SERVER_ENCRYPTION_KEY_PREVIOUS`,`the old key, still accepted while rotating`]]},run:async()=>{let{rotateKey:e}=await import(`./maintenance-CKCIWOvn.js`).then(e=>e.t);return e()},json:({moved:e})=>({ok:!0,moved:e}),print:({moved:e})=>H.stdout.write(`Re-sealed ${e} secret${e===1?``:`s`}.\n`)});function br(e){let t=T,n=[...e.publicUrl===e.address?[]:[[`public`,e.publicUrl]],[`store`,e.database??(e.mode===`local`?ne():e.store)],[`runner`,e.runner],...e.signIn?[[`sign-in`,e.signIn]]:[],...e.mintedToken?[[`token`,e.mintedToken]]:[]],r=Math.max(...n.map(([e])=>e.length))+2;H.stdout.write(`${t.bold({local:`Coder local server`,memory:`Coder test server`,cloud:`Coder server`}[e.mode])} ${t.dim(`listening on ${e.address}`)}\n`);for(let[e,i]of n)H.stdout.write(` ${t.light(e.padEnd(r))}${i}\n`);e.warnings.length&&H.stdout.write(`
|
|
92
|
-
`);for(let n of e.warnings)H.stdout.write(` ${t.yellow(`!`)} ${n}\n`);e.cacheMigration?.then(e=>{(e.tasks||e.flows||e.files)&&H.stdout.write(`\n moved ${e.tasks.toLocaleString(`en-US`)} archived tasks to ${e.cache}\n`)}).catch(e=>H.stderr.write(`\n Cache migration failed: ${e instanceof Error?e.message:String(e)}\n`))}const xr=R({name:`serve`,description:`run the server`,usage:`Run the Coder server on Bun: the address platforms deliver events to, the dashboard, and the worker that runs tasks. With DATABASE_URL it is a full server with sign-in and workspaces. Without one it is the dashboard for this machine's CLI: its config, agents, tasks and engine logins, on loopback only. --memory makes a throwaway test server that keeps everything in memory. Configured through the environment; every variable is in coder docs self-host.`,access:`write`,args:{port:I(f(v().check(_(),t())),`listen port (default: PORT, else the port in a localhost PUBLIC_URL, else 8787)`,`<n>`),host:A(`listen address (default: HOST, else 127.0.0.1 without a database, else every interface)`,`<address>`),memory:P(`a throwaway test server: everything in memory, no sign-in, admin token only`),runner:A(`local, local-docker, vercel-sandbox, github-actions, or http`,`<name>`)},mcp:!1,cli:{env:[[`PUBLIC_URL`,`the address platforms and browsers reach the server at (default http://localhost:<port>)`],[`PORT`,`listen port, as hosts set it (default 8787)`],[`HOST`,`listen address, as --host`],[`DATABASE_URL`,`Postgres, set up with drizzle-kit push; turns on sign-in and workspaces`],[`AUTH_WULAR_URL`,`the Wular Auth issuer people sign in with (default https://auth.wular.ai)`],[`SERVER_ENCRYPTION_KEY`,`encrypts stored secrets and derives the sign-in keys; required with DATABASE_URL (openssl rand -base64 32)`],[`RUNNER`,`where tasks run: local (default), local-docker, vercel-sandbox, github-actions, http`],[`MAX_TASKS, TASK_TIMEOUT, TASK_STALL, TASK_ATTEMPTS`,`runner capacity and lifecycle limits`],[`ADMIN_TOKEN`,`local and memory servers: the dashboard and CLI key; minted and shown when unset`],[`CODER_CACHE_HOME`,`archived tasks, flows and usage (default OS cache directory/wular-coder)`],[`WORK_DIR`,`where the local runner keeps task work folders`],[`SERVER_NAME`,`what the dashboard calls this server (default Coder)`]],examples:[`PUBLIC_URL=https://abc.ngrok.app coder server serve # receive GitHub and Slack events through a tunnel; the tunnel serves only their webhooks and callbacks`,`PUBLIC_URL=https://agents.example.com DATABASE_URL=postgres://... coder server serve # on your own host, backed by Postgres`]},async run({options:e,cwd:t}){let{rerunUnderBun:n}=await import(`./env-6Y-NNnYD.js`).then(e=>e.t);if(await n(),e.memory&&!H.env.ADMIN_TOKEN&&!H.stdout.isTTY)throw new y(`invalid-option`,`Memory server needs an admin token: set ADMIN_TOKEN, or run in a terminal to get a printed one.`);let{serve:r}=await import(`./serve-vKNqVaVy.js`).then(e=>e.n),i=await r({cwd:t,port:e.port,...e.host?{host:e.host}:{},...e.runner?{runner:e.runner}:{},...e.memory?{memory:!0}:{}}),a=()=>void i.close().finally(()=>H.exit(0));return H.once(`SIGINT`,a),H.once(`SIGTERM`,a),i},json:e=>({ok:!0,address:e.address,publicUrl:e.publicUrl,runner:e.runner,store:e.store,mode:e.mode,maxTasks:e.maxTasks,...e.signIn?{signIn:e.signIn}:{},...e.mintedToken?{adminToken:e.mintedToken}:{},warnings:e.warnings}),next:({result:e})=>e.mode===`memory`?B([`the CLI reaches this server with its token in ADMIN_TOKEN: coder task list --server ${e.publicUrl}`]):[],print:br,afterNext(e){let t=T;if(e.dashboard){let n=H.stdout.isTTY&&_e(e.dashboard);H.stdout.write(n?`\nOpening the dashboard in your browser. If it doesn't open, go to:\n ${e.dashboard}\n`:`\n ${t.light(`dashboard`)} ${e.dashboard}\n`)}}}),Sr=R({name:`workflow`,description:`print the GitHub Actions workflow for RUNNER=github-actions`,usage:`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.`,access:`read`,globalFlags:{json:!1,cwd:!1},cli:{examples:[`coder server workflow > .github/workflows/coder-agent.yml # add it to a repo`]},run:async()=>{let{actionsWorkflow:e}=await import(`./runners-CfaGE0nV.js`).then(e=>e.S);return e()},print:e=>H.stdout.write(e)}),Cr=z({name:`server`,description:`self-host Coder: the server, its dashboard and sign-in`,usage:`Self-host Coder: the server your agents and platform apps talk to, with a dashboard and sign-in. We run one as the hosted service; you can run your own.`,namespaces:[vr],commands:[xr,yr,Sr]}),wr=R({name:`setup-host`,description:`check engines and install the host plugin or skill`,usage:`Set up coder in your host: check engines and auth, seed the config, and
|
|
93
|
-
install the host plugin/skill for the named host(s). Claude Code gets its
|
|
94
|
-
marketplace plugin; "agents" installs a skill into ~/.agents/skills for
|
|
95
|
-
every host that reads the Agent Skills standard dir (Codex, Pi, OpenCode,
|
|
96
|
-
...). Codex and Cursor also get the MCP server; the Claude plugin includes it.
|
|
97
|
-
With no host, checks, seeds and registers available Codex and Cursor hosts.
|
|
98
|
-
|
|
99
|
-
To add the MCP server by hand: claude mcp add coder -- coder mcp, codex mcp
|
|
100
|
-
add coder -- coder mcp, or for Cursor "coder": { "command": "coder", "args":
|
|
101
|
-
["mcp"] } under mcpServers in ~/.cursor/mcp.json. Restart running sessions after.`,access:`write`,args:{hosts:j(`claude, agents, codex, cursor (one or more)`)},cli:{positional:[`hosts`],examples:[`coder setup-host claude # install the Claude Code plugin`,`coder setup-host agents # install the shared skill and register MCP with available Codex`,`coder setup-host codex cursor # install the skill and register MCP with both hosts`]},run:async({options:e,args:t,cwd:n,tool:r})=>{let{setupHostCore:i}=await import(`./output-SNqdgh9A.js`).then(e=>e.K);return i(n,{...e,hosts:t},()=>e.json||r||Tr())},next({result:e}){return[...[`codex`,`claude`].flatMap(t=>Dr(e,t)),...B([`custom models (local/provider endpoints): coder model --help`],{layout:`plain`,dim:!0,prefix:` `,slot:`models`}),...B([`(coder config set <key> <value> to change)`],{layout:`plain`,dim:!0,prefix:` ${T.dim(e.configFile)} `,slot:`config`}).map(e=>({...e,usage:`coder config set <key> <value>`})),...B([e.ready?`ready - try: coder run --wait "explain this repo's layout"`:`not ready - install an engine CLI to run tasks: codex (npm install -g @openai/codex, then codex login) or claude (npm install -g @anthropic-ai/claude-code, then claude auth login)`],{layout:e.ready?`good`:`bad`,prefix:``})]},print:(e,{next:t})=>Er(e,t)});function Tr(){H.stdout.write(`${T.bold(`Coder host setup`)}\n\n`)}function Er(e,t){let n=T.bold,r=T.dim,{codex:i,claude:a,codexUpdate:o,config:s,configFile:c,claudePlugin:l,agentsSkill:u,ready:d}=e,f=[];H.stdout.write(`${n(`Available Engines`)}\n`);for(let n of[`codex`,`claude`]){let i=e[n];!i.available||!i.loggedIn?t(e,{slot:n}):H.stdout.write(`${x(`${n.padEnd(8)}${r(`${i.detail}; ${i.auth}`)}`)}\n`)}t(e,{slot:`models`}),o?.updated?f.push(x(`codex ${r(`updated ${o.from} -> ${i.detail} (GPT-6 support)`)}`)):o&&f.push(D(`codex ${o.note}`)),f.push(``);let p=e=>{let t=s.engines?.[e]??{};return[t.model,t.effort,t.permissions].filter(Boolean).join(`/`)};f.push(n(`Config`),` chain: ${(s.chain??[]).join(` -> `)} codex: ${p(`codex`)} claude: ${p(`claude`)}`),H.stdout.write(`${f.join(`
|
|
102
|
-
`)}\n`),f.length=0,t(e,{slot:`config`}),f.push(``);let m=[[`claude plugin`,l??null],[`agents skill `,u??null]];for(let[e,t]of m)t&&f.push(t.installed?x(`${e} ${r(t.note)}`):D(`${e} ${t.note}`),``);f.push(...e.mcp.map(e=>e.installed?x(e.note):D(e.note))),f.length&&H.stdout.write(`${f.join(`
|
|
103
|
-
`)}\n`)}function Dr(e,t){let n=e[t];if(n.available&&n.loggedIn)return[];let r=n.available?t===`codex`?`codex login`:`claude auth login`:`npm install -g ${t===`codex`?`@openai/codex`:`@anthropic-ai/claude-code`}`,i=n.available?`${t.padEnd(8)}not logged in${t===`codex`?` ${T.dim(`(${n.auth})`)}`:``} - run: ${r}`:`${t.padEnd(8)}CLI not installed - run: ${r}`;return[{usage:r,blurb:`${t} ${n.available?`not logged in`:`CLI not installed`}`,cli:{text:i,layout:`bad`,prefix:``,slot:t}}]}const Or={accept:`approved`,decline:`denied`,closed:`stopped`},kr=e=>e.answered?Or[e.answered]:`pending`;function Ar(e,t){let n=T;if(!t.length)return void H.stdout.write(`${n.dim(`No approvals for task ${e}.`)}\n`);for(let e of t){let t=e.deniedReason?` ${n.dim(`denied: ${e.deniedReason}`)}`:``;H.stdout.write(`${n.cyan(e.id)} ${kr(e).padEnd(8)} ${n.light(e.reason)}${t}\n${fe(e.actions)}\n`)}}function jr(e,t){let n=T;if(!e.length)return void H.stdout.write(`${n.dim(t?`No denied approvals.`:`No pending approvals.`)}\n`);for(let t of e){let e=t.createdAt?` ${n.dim(b(m(t.createdAt)))}`:``;H.stdout.write(`${n.cyan(t.id)} task ${n.cyan(t.taskId)}${e} ${n.light(t.reason)}\n${fe(t.actions)}\n`)}}const Mr=R({name:`approvals`,description:`pending approvals (all tasks, or one)`,usage:`List pending approvals across all tasks, --denied the denied ones (still answerable), or every approval of one task.`,access:`read`,args:{"task-id":A(`one task (default: approvals of every task)`),denied:P(`denied approvals instead of pending ones`),...N},cli:{positional:[`task-id`]},run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return n.approvals(t,{...e,organization:e.workspace})},json:(e,{args:[t]})=>t?e.map(({taskId:e,...t})=>t):e,next({result:e,args:t}){let n=F(t);if(!e.length)return t[`task-id`]?[]:B([`Check tasks: coder task list${n}`]);let r=e.length===1?t.server===void 0?e[0].id:`${e[0].taskId} ${e[0].id}`:t.server===void 0?`<approval-id>`:`<task-id> <approval-id>`;return B([`Answer: coder task approve ${r} [--deny --reason "<why>"]${n}`])},print:(e,{args:[t],options:n})=>t?Ar(t,e):jr(e,!!n.denied)}),Nr=R({name:`approve`,description:`answer an escalation`,usage:`Answer an escalation the task raised. Accepts by default; --deny rejects it, --reason says why.
|
|
104
|
-
Works any time, also after a deny: the task gets the decision as a message.
|
|
105
|
-
Approval ids are unique, so the task id is optional.`,access:`write`,args:{"task-id":A(`the task, or the approval id alone`),"approval-id":A(`the approval to answer`),deny:P(`reject the request instead of accepting`),reason:A(`why it is denied; the task reads it`),...N},cli:{positional:[`task-id`,`approval-id`]},run:async({options:e,args:[t,n]})=>{let{tasks:r}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return r.approve(t,n,{...e,organization:e.workspace})},print:({taskId:e,approvalId:t},{options:n})=>H.stdout.write(`${n.deny?`Denied`:`Approved`} ${T.cyan(t)} on task ${T.cyan(e)}; the task has been told.\n`)}),Pr=e=>e===1?``:`s`,Fr=R({name:`archive`,description:`archive a session (or --all-stopped)`,usage:`Archive a task session so it drops out of the default list (see it again with
|
|
106
|
-
\`coder task list --archived [--limit N]\`). Pass --all-stopped to archive every
|
|
107
|
-
finished task. A running task keeps running; steering an archived task
|
|
108
|
-
brings it back.`,access:`write`,args:{"task-id":A(`the task to archive`),"all-stopped":P(`archive every stopped (finished) task`),...N},cli:{positional:[`task-id`]},run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return n.archive(t,{...e,organization:e.workspace,allStopped:e[`all-stopped`]})},print(e){if(e.count===void 0)return void H.stdout.write(`Archived task ${T.cyan(e.taskId)}.\n`);H.stdout.write(e.count?`Archived ${e.count} stopped task${Pr(e.count)}.\n`:`${T.dim(`No stopped tasks to archive.`)}\n`)}});function Ir(e,t,n){let[r,...i]=e,a=i.join(` `).trim();if(!r||!a)throw new y(`invalid-option`,t,{hint:n});return{id:r,text:a}}function Lr(e,t=!1){let{taskId:n,steered:r}=e;if(r===`queued`){H.stdout.write(`${T.dim(`[coder]`)} follow-up queued for task ${T.cyan(n)}; it runs when the current turn finishes.\n`),t&&H.stdout.write(`\n${T.dim(`[coder] --wait is not available for a queued follow-up.`)}\n`);return}if(!t){H.stdout.write(r===`live`?`${T.dim(`[coder]`)} steered follow-up into running task ${T.cyan(n)}.\n`:`${T.dim(`[coder]`)} resumed task ${T.cyan(n)} with the follow-up (same thread, same id).\n`);return}H.stdout.write(`\n${e.finalMessage||`(no final message)`}\n\n`),H.stderr.write(`${T.dim(`[coder] task=${n} status=${e.status??`unknown`}`)}\n`)}const Rr=R({name:`steer`,description:`continue a task's thread`,usage:`Continue a task's thread with new instructions. They are injected into a live Codex or
|
|
109
|
-
Claude turn at its next tool boundary and queued across a startup or completion race.
|
|
110
|
-
A stopped, finished, or archived task resumes on the same task id. It reuses the
|
|
111
|
-
task's engine, model, and permissions unless overridden.`,access:`write`,args:{"task-id":A(`the task to continue`),text:j(`the follow-up instructions`),wait:P(`run in the foreground and block until the answer is ready`),model:A(`override the task's model for this follow-up`,`<alias|slug>`),effort:A(`override the task's reasoning effort`,`<low|medium|high>`),permissions:A(`read-only · workspace-write · auto`,`<mode>`),...N},cli:{positional:[`task-id`,`text`],examples:[`coder task steer task-abc "now add tests" # continue that task with a follow-up`]},async run({options:e,args:t}){let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t),{id:r,text:i}=Ir(t,`Missing task id or follow-up text.`,[`Usage: coder task steer <task-id> "<follow-up>" [--wait]`,`Help: coder task steer --help`]);return n.steer(r,i,{...e,organization:e.workspace})},json:(e,{options:t})=>!t.wait||e.steered===`queued`?e:{taskId:e.taskId,status:e.status??null,finalMessage:e.finalMessage??null},next({result:e,args:t}){return e.steered===`queued`&&!t.wait?[]:t.wait&&e.steered!==`queued`?J(e.taskId,t).map(e=>({...e,cli:{...e.cli,stream:`stderr`}})):[q(e.taskId,t,`Wait in its own background shell, one per task: coder task result ${e.taskId} --wait`)]},print:(e,{options:t})=>Lr(e,t.wait),exit(e,{options:t}){if(t.wait&&e.steered!==`queued`)return e.status===`completed`?0:1}}),zr=R({name:`ask`,description:`ask about a task without interrupting it`,usage:`Answer a question ABOUT a task without touching it: a read-only sidecar reads
|
|
112
|
-
the task's progress log, result, and workspace and answers; the task never
|
|
113
|
-
sees the question and its thread is not steered. Works whether the task is
|
|
114
|
-
running or stopped. To change what the task does, use \`coder task steer\`.`,access:`read`,args:{"task-id":A(`the task to ask about`),question:j(`the question`),model:A(`sidecar model (default: the task's own)`,`<alias|slug>`),effort:A(`sidecar reasoning effort`,`<low|medium|high>`),...N},cli:{positional:[`task-id`,`question`],examples:[`coder task ask task-abc "what approach did you take and why?" # probe a decision without derailing the task`]},async run({options:e,args:t}){let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t),{id:r,text:i}=Ir(t,`Missing task id or question.`,[`Usage: coder task ask <task-id> "<question>"`,`Help: coder task ask --help`]);return n.ask(r,i,{...e,organization:e.workspace,onAsking:t=>e.json||H.stderr.write(`${T.dim(`[coder]`)} asking about task ${T.cyan(t)} (read-only sidecar; the task is not interrupted)...\n`)})},json:({ok:e,...t})=>t,print({answer:e,error:t}){e?H.stdout.write(`\n${e}\n`):H.stdout.write(`${T.dim(`(no answer)`)}${t?` ${T.red(t)}`:``}\n`)},exit:e=>+!e.ok}),Br=R({name:`delete`,description:`delete a session (or --all-archived)`,usage:`Delete a task's session from disk. This is permanent. Pass --all-archived to
|
|
115
|
-
delete every archived task at once. A running task must be stopped first.`,access:`write`,args:{"task-id":A(`the task to delete`),"all-archived":P(`delete every archived task`),...N},cli:{positional:[`task-id`]},run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return n.delete(t,{...e,organization:e.workspace,allArchived:e[`all-archived`]})},print(e){if(e.count===void 0)return void H.stdout.write(`Deleted task ${T.cyan(e.taskId)}.\n`);H.stdout.write(e.count?`Deleted ${e.count} archived task${Pr(e.count)}.\n`:`${T.dim(`No archived tasks to delete.`)}\n`)}});function Vr(e,t,n){let r=T;if(!e.length){let e=t.archived?`archived tasks`:t.running?`running tasks`:t.stopped?`recently stopped tasks`:`recent tasks`;H.stdout.write(`No ${e}.\n`);return}let i=[{header:`task-id`,value:e=>e.taskId,paint:e=>r.cyan(e),max:28},{header:`status`,value:e=>e.status,paint:(e,t)=>C(t.status,e.length),max:16},{header:`engine`,value:e=>(e.engine===`custom`&&e.model?e.model:(e.engine??`-`)+(e.model?`/${e.model}`:``))+(e.effort?`/${e.effort}`:``),paint:e=>r.light(e),max:26},{header:`cwd`,value:e=>e.cwd?V.basename(e.cwd):`-`,paint:e=>r.light(e),max:24},{header:`name`,value:e=>{let t=e.archived?` ${r.dim(`(archived)`)}`:``;return`${e.name?e.name:r.light(e.prompt)}${e.idleMs!==null&&e.idleMs>=12e4?` ${(e.idleMs>6e5?r.red:r.dim)(`· idle ${b(e.idleMs)}`)}`:``}${t}`}}],a=[],o=new Map;for(let t of e){if(!t.flowRunId){let e=a.at(-1);e&&!e.header?e.rows.push(t):a.push({rows:[t]});continue}let e=o.get(t.flowRunId);if(!e){let i=n(t.flowRunId);e={header:i?`(${r.bold(t.flowRunId)} ${i.status}. Flow ${i.name})`:`(${r.bold(t.flowRunId)} flow)`,rows:[]},o.set(t.flowRunId,e),a.push(e)}e.rows.push(t)}H.stdout.write(S(i,a,r))}const Hr=R({name:`list`,description:`list recent tasks (by default running + just stopped)`,usage:`List recent tasks across all workspaces, most recent first: running tasks plus
|
|
116
|
-
ones stopped within the last 30 minutes. Older stopped tasks auto-archive and
|
|
117
|
-
move to --archived. Shortcut: \`coder list\`.`,access:`read`,args:{running:P(`show only running tasks`),stopped:P(`show only recently stopped tasks (not yet archived)`),archived:P(`show only archived tasks (auto-archived or via task archive)`),limit:Ce(`tasks per page (default: 50; all for every task)`),cursor:A(`continue from the previous page cursor`),dir:A(`only tasks launched in that workspace`),...N},run:async({options:e})=>{let{tasks:t}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return t.list({...e,organization:e.workspace})},next({result:e,args:t}){let n=F(t),r=B(e.items.length?[`Result: coder task result <task-id>${n}`,...t.archived?[]:[`Older tasks: coder task list --archived [--limit N]${n}`]]:e.items.archived?[`${e.items.archived} archived: coder task list --archived [--limit N]${n}`]:[]);return e.next&&r.push(...B([`Next page: coder task list --cursor ${e.next} --limit ${t.limit??50}${t.running?` --running`:``}${t.stopped?` --stopped`:``}${t.archived?` --archived`:``}${t.dir?` --dir ${JSON.stringify(t.dir)}`:``}${n}`],{layout:`plain`})),r},async print(e,{options:t}){let{readFlowRecord:n}=await import(`./executor-ufWRqhdS.js`).then(e=>e.D);Vr(e.items,t,n)}});function Ur(e,t={}){let n=q(e,t,`run this in its own background shell, one per task (never wait on several tasks in one call). Returns with the answer or a pending approval.`);n.cli={...n.cli,layout:`rows`,title:`Next step`};let r=F(t);return[n,...[{usage:`coder task steer ${e} "<follow-up>"${r}`,blurb:`steer the task with a message (use 'ask' without interrupting main thread)`},{usage:`coder task stop ${e}${r}`,blurb:`stop the task`},{usage:`coder task list${r}`,blurb:`recent tasks`},{usage:`coder task --help`,blurb:`all task commands`}].map(e=>({...e,cli:{layout:`rows`,title:`Related`}}))]}function Wr(e,t){H.stdout.write(`${T.dim(`[coder]`)} task ${T.blue(e)} started in the background (${t}).\n`)}function Gr(e){H.stderr.write(`${T.dim(`[coder]`)} Task ${T.cyan(e)} started and is waiting to finish. Press Ctrl-C to detach. It keeps running.\n`)}function Kr(e){H.stderr.write(`\n${T.dim(`[coder] Detached. The task is still running.`)}\n`)}function qr(e){H.stdout.write(`\n${U({finalMessage:e.finalMessage??void 0},e.error,`(no final message)`)}\n\n`);let t=e.tokens?` tokens=${O(e.tokens,e.model)}`:``;H.stderr.write(`${T.dim(`[coder] task=${e.taskId} status=${e.status}${t}`)}\n`)}const Jr=R({name:`run`,description:`run a task (background; --wait blocks)`,usage:`Dispatch a coding task to the configured engine. Backgrounds by default and\nprints a task id; --wait runs in the foreground and prints the answer.\nShortcut: \`coder run "<text>"\`.\n\nWriting a task: one task per focused goal, independent goals as parallel runs.\nThe worker starts with nothing but the text, so include the goal, file paths,\nconstraints and any context only you have. Delegate rather than doing the work\nyourself first, however small it looks.\n\nWaiting: run \`coder task result <task-id> --wait\` in its own background shell, one\nper task. Never wait on several tasks in one call, or their approvals and answers\nnever reach you one by one.\n\n${we}`,access:`write`,args:{prompt:j(`the task text`),"output-schema":A(`JSON Schema for the task answer`,`<json>`),name:A(`label the task (shown in list/result)`),agent:A(`run as that agent: its system.md, engine settings, MCP servers and flows; flags override them`,`<id>`),"append-system":A(`standing instructions appended to Coder's system prompt (kept out of prompt previews)`,`<text>`),wait:P(`run in the foreground and block until the answer is ready`),engine:A(`engine to use; custom runs your configured custom models (default: first in the chain)`,`<codex|claude|custom>`),model:A(`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`,`<alias|slug>`),effort:A(`reasoning effort`,`<low|medium|high>`),permissions:A(`read-only · workspace-write · auto (default: auto)`,`<mode>`),mcp:A('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',`<names|all|json>`),connections:A(`use only these connections (coder connection list), within the agent's`,`<ids>`),"add-dir":j(`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`,`<dir>`),server:Se(`run the task on your Coder server and follow it here (--background prints its id)`,`[url]`),workspace:A(`with --server: the workspace to run in (default: the saved one)`,`<slug>`),yes:P(`with --server: connect to a server used for the first time without asking`),background:P(`with --server: print the task id instead of following it`),repo:A(`with --server: check out a repo from the workspace's installs`,`<owner/name>`),runner:A(`with --server: where it runs (a runner kind or a registered runner)`)},cli:{positional:[`prompt`],exit:[[0,`The task started, or --wait printed a successful answer.`],[1,`Dispatch or the task failed.`],[3,`No engine could start; follow fallback.instructions in the JSON payload.`],[4,`An approval is pending; answer it, then run result --wait again.`],[130,`The foreground wait was detached and the task is still running.`]],examples:[`coder run "add a /health endpoint" # dispatch in the background, print a task id`,`coder result <task-id> --wait # then block until it finishes and print the answer`,`coder run --wait "fix the failing test" # or block on the run itself`,`coder task run --model luna --append-system "tests live in test/, don't touch anything outside of it" "rename foo to bar" # pick an engine via its model alias; --append-system adds standing instructions`,`coder task run --agent reviewer "review the last commit" # run a repo agent from .coder/agents/reviewer`,`coder run --add-dir ../api --add-dir ../shared "update the client for the new endpoint" # let the task reach sibling repos too`]},async run({options:e,args:t,tool:n,next:r}){let{tasks:i}=await import(`./task-CFxs0E_J.js`).then(e=>e.t),a=e.json,o;return n||H.on(`SIGINT`,()=>{o&&(Kr(o),r({taskId:o,phase:`detached`},{stream:`stderr`,force:!0})),H.exit(130)}),i.run(t.join(` `).trim(),{cwd:e.cwd,agent:e.agent,outputSchema:e[`output-schema`]?JSON.parse(e[`output-schema`]):void 0,engine:e.engine,model:e.model,effort:e.effort,permissions:e.permissions,name:e.name,appendSystem:e[`append-system`],mcp:e.mcp,connections:e.connections?.split(`,`).map(e=>e.trim()).filter(Boolean),addDirs:e[`add-dir`],wait:$(e),repo:e.repo,runner:e.runner,server:e.server,yes:e.yes,organization:e.workspace,onFallback:({engine:e,detail:t,next:n})=>H.stderr.write(`[coder] ${e} failed to start (${t}); falling back to ${n}.\n`),onNote:e=>H.stderr.write(`[coder] ${e}\n`),onWaiting:e=>{o=e,!a&&!n&&(Gr(e),r({taskId:e,phase:`waiting`},{stream:`stderr`,style:`stdout`}))}})},next({result:e,args:t}){let n=e.phase,r=e.taskId;return n===`detached`?[q(r,t,`Wait in its own background shell, one per task: coder task result ${r} --wait`)]:n===`waiting`?Ur(r,t):$(t)?J(r,t).map(e=>({...e,cli:{...e.cli,stream:`stderr`}})):Ur(r,t)},print(e,{options:t}){$(t)?qr(e):Wr(e.taskId,e.status)},exit:(e,{options:t})=>$(t)?e.status===`completed`?0:1:void 0});function $(e){return e.server===void 0?!!e.wait:!e.background}const Yr=R({name:`stop`,description:`interrupt a running task`,usage:`Interrupt a running task and mark it cancelled.`,access:`write`,args:{"task-id":A(`the task to stop`),...N},cli:{positional:[`task-id`]},run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-CFxs0E_J.js`).then(e=>e.t);return n.stop(t,{...e,organization:e.workspace})},print:({taskId:e,interrupt:t})=>H.stdout.write(`Stopped task ${T.cyan(e)} ${T.dim(`(${t})`)}\n`)}),Xr=z({name:`task`,description:`run, follow and steer coding tasks`,commands:[Jr,Hr,rt,lt,Rr,zr,Yr,Fr,Br,Mr,Nr],aliases:{stream:`watch`,ls:`list`}}),Zr=R({name:`upgrade`,description:`update the CLI and host plugins`,usage:`Update the coder CLI through whichever package manager installed it, then refresh
|
|
118
|
-
the host plugins to match.`,access:`write`,args:{"cli-only":P(`update just the CLI`),"plugins-only":P(`refresh just the host plugins`),codex:P(`limit the refresh to the Agent Skills copy (Codex, Pi, ...)`),claude:P(`limit the refresh to the Claude Code plugin`),pm:A(`force a package manager instead of auto-detecting`,`<npm|pnpm|yarn|bun>`)},globalFlags:{json:!1,cwd:!1},run:async({options:e,tool:t})=>{let{upgradeCore:n}=await import(`./output-SNqdgh9A.js`).then(e=>e.K);return n({...e,cliOnly:e[`cli-only`],pluginsOnly:e[`plugins-only`]},t?()=>{}:Qr)},print:$r});function Qr(e){H.stdout.write(`${T.bold(`Updating coder CLI`)} ${T.dim(`${e}...`)}\n`)}function $r(e){let t=T.bold,n=T.dim,r=(e,r)=>r&&e&&r!==e?`${e} ${n(`->`)} ${t(r)}`:`${r??e??`?`} ${n(`(unchanged)`)}`,i=(e,t)=>`${t.installed?x(`${e} ${r(t.from,t.to)} ${n(`- ${t.note}`)}`):D(`${e} ${t.note}`)}\n`;e.cli&&H.stdout.write(e.cli.changed?`${x(`coder CLI ${r(e.cli.from,e.cli.to)}`)}\n`:`${x(`coder CLI ${e.cli.from} ${n(`(already latest)`)}`)}\n`),e.claudePlugin&&H.stdout.write(i(`claude plugin`,e.claudePlugin)),e.agentsSkill&&H.stdout.write(i(`agents skill `,e.agentsSkill))}const ei=o({name:`coder`,description:`Delegate a coding task to the best available engine and steer it while it runs.`,namespaces:[Xr,Vn,_t,Xt,Cr,gr,St,or,Vt],commands:[sr,Tt,wr,Zt,Zr,Hn]}),ti={run:[`task`,`run`],list:[`task`,`list`],result:[`task`,`result`],dash:[`server`,`serve`]};export{ti as SHORTCUTS,ei as cli};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Gt as t,on as n,sn as r}from"./errors-DO_IltpP.js";import{Dt as i}from"./output-SNqdgh9A.js";import{a,t as o}from"./remote-HUZCWgfl.js";import s from"node:path";import c from"node:process";import{createHash as l}from"node:crypto";var u=e({connection:()=>T});const d=(e,t)=>new i(`invalid-option`,e,t?{hint:t}:{}),f=e=>e.cwd?s.resolve(e.cwd):c.cwd(),p=e=>e.server!==void 0,m=e=>o({...e,organization:e.organization??e.workspace}),h=e=>m(e).connections,g=()=>d(`Signing in needs a Coder server.`,`Repeat with --server <url>, or add it in coder dash`);async function _(e){let[{LocalStore:t},{INTEGRATIONS:n},r]=await Promise.all([import(`./local-COlczLwI.js`).then(e=>e.r),import(`./integrations-I7fRDk_l.js`).then(e=>e.r),import(`./apps-Bnk7F3A2.js`).then(e=>e.xt)]),a={store:new t,config:{store:`memory`,runner:`local`},integrations:n,organizationId:`default`,local:{cwd:e,port:0}},o=async e=>{try{return await e()}catch(e){throw e instanceof r.ConnectionError?new i(`invalid-option`,e.message,{needs:e.needs}):e}};return{ctx:a,list:()=>r.connectionRows(a),add:e=>o(()=>r.addConnection(a,e)),update:(e,t)=>o(()=>r.changeConnection(a,e,t)),remove:e=>o(()=>r.removeConnection(a,e))}}async function v(e){return p(e)?h(e).list():(await _(f(e))).list()}async function y(e,t){if(p(e))return(await m(e).credentials.list()).some(n=>n.name===t&&(e.me||n.scope===`workspace`));let{parseCredentialId:n}=await import(`./apps-Bnk7F3A2.js`).then(e=>e.Tt),{ctx:r}=await _(f(e));return(await r.store.list(`credential`)).some(e=>n(e.id).name===t)}async function b(e,t){let n=e.key??(await e.askKey?.())?.trim();if(!n)throw d(`${t} needs a key.`,`Give it with --key, on stdin or at the prompt`);return n}async function x(e,t,n){let r=new URL(n,a(e)),i=r.searchParams.get(`state`)??r.searchParams.get(`attempt`);if(!i)throw d(`Sign-in did not start.`);let o=l(`sha256`).update(i).digest(`hex`);e.onAuthorize(r.href);let s=Date.now()+6e5;for(;Date.now()<s;){let n=(await h(e).list(o,t)).find(e=>e.id===t);if(!n)throw d(`The connection was removed before sign-in finished.`);if(n.status===`ok`)return n}throw d(`Sign-in did not finish.`,`Try again: coder connection reconnect ${t}`)}async function S(e,t){let[n,...r]=t.command??[],i=t.access&&{access:t.access},a=t.me?{owner:`me`}:{};if(n&&t.url)throw d(`Use either --url or a command, not both.`);if(t.access&&![`read`,`write`].includes(t.access))throw d(`Invalid --access value.`,`Use read or write`);if(n||t.url){let o=t.auth??(t.key?`key`:t.url?void 0:`none`);if(o!==void 0&&![`oauth`,`key`,`none`].includes(o))throw d(`Invalid --auth value.`,`Use oauth, key or none`);if(o===`oauth`&&!p(t))throw g();if(n&&o===`key`&&!t.env)throw d(`Name the variable the key goes in with --env.`);let s=t.tools?.length?{tools:t.tools}:{};return{name:e,provider:`mcp`,...a,...i,...o?{auth:o}:{},endpoint:t.url?{url:t.url,...s}:{command:n,...r.length?{args:r}:{},...s},...o===`key`?{key:await b(t,e),keyIn:t.url?{header:t.header??`Authorization`}:{env:t.env}}:{}}}if(t.env){let n=t.key??(t.credential||await y(t,t.env)?void 0:c.env[t.env]??await b(t,e));return{name:e,provider:`env`,...a,keyIn:{env:t.env},...n?{key:n}:{},...t.credential?{credential:t.credential}:{}}}let{INTEGRATIONS:o}=await import(`./integrations-I7fRDk_l.js`).then(e=>e.r);if(!p(t)&&!o[e]?.auth.user)throw d(`Say what to connect.`,`Give --env <NAME> for an API key, --url <url> or -- <command> for an MCP server, or a platform name`);if(!p(t))throw g();return{name:e,provider:e,...a}}async function C(e,t){if(!e)throw d(`Name the connection.`,`See them: coder connection list`);let n=await v(t),r=n.find(t=>t.id===e)??n.find(t=>t.mine&&t.id.endsWith(`:${e}`));if(!r)throw d(`No connection "${e}".`,`See them: coder connection list`);return r}async function w(e){let{loadAgents:n}=await import(`./load-BDlEFetB.js`).then(e=>e.s),{INTEGRATIONS:i}=await import(`./integrations-I7fRDk_l.js`).then(e=>e.r),a=(e,t,n)=>({name:e,source:t,target:n.connection?`connection ${n.connection}`:n.url??[n.command,...n.args??[]].join(` `),approved:!!n.connection||r(n)}),o=(e={})=>Object.entries(e).filter(([,e])=>e.repository);return[...o(t(e).mcp).map(([e,t])=>a(e,`repo`,t)),...(await n(e,i,{includeDisabled:!0})).flatMap(e=>o(e.definition.mcp).map(([t,n])=>a(t,`agent ${e.id}`,n)))]}const T={async add(e,t={}){if(!e)throw d(`Name the connection.`,`Usage: coder connection add <name> ...`);let n=await S(e,t),r=p(t)?h(t):await _(f(t)),a;try{a=await r.add(n)}catch(o){if(!(o instanceof i)||o.needs!==`key`||!n.endpoint?.url||n.auth||n.key||!t.askKey)throw o;a=await r.add({...n,auth:`key`,key:await b(t,e),keyIn:{header:t.header??`Authorization`}})}return a.authorize&&t.onAuthorize?x(t,a.id,a.authorize):a},async list(e={}){return{connections:await v(e),declared:await w(f(e))}},async remove(e,t={}){let n=await C(e,t);return p(t)?await h(t).remove(n.id):await(await _(f(t))).remove(n.id),n},async reconnect(e,t={}){let n=await C(e,t);if(n.auth===`oauth`){if(!p(t))throw g();let{url:e}=await h(t).authorize(n.id);return t.onAuthorize?x(t,n.id,e):{...n,authorize:e}}if(n.auth!==`key`)throw d(`${n.name} uses no key or sign-in.`);let r=await b(t,n.name);return p(t)?h(t).update(n.id,{key:r}):(await _(f(t))).update(n.id,{key:r})},approve:(e,t={})=>n(f(t),e,t.agent)};export{u as n,T as t};
|
package/dist/context-zhSlmXOp.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{kn as e}from"./core-DwsAMCnL.js";import{En as t,Fr as n,Mr as r,lt as i}from"./errors-DO_IltpP.js";import{t as a}from"./docs-KHc0_gFX.js";import{cli as o}from"./cmd-BHZwhrfa.js";import s from"node:path";const c=e=>`# Coder dispatch${e?` (${e} host)`:``}`,l=(e,t)=>`## Setup\n\nIf \`coder\` is not on PATH, install it yourself without asking: \`npm install -g @wular/coder\`. When a dispatch fails because engines are missing or logged out, run \`${e}\` and follow its output. It checks engines and auth, fixes what it can, prints the exact fix for the rest, and is safe to re-run. Ask the user before installing an engine CLI or changing auth; if it updated codex, tell the user to restart their codex session.${t?" For a guided setup, suggest `/coder:setup`.":``}`,u=(e,t)=>[`## Using the CLI`,``,"- The CLI is the reference. `coder --help` and every subcommand's `--help` list the flags and exit codes, and each command prints the recommended next step when it returns. Follow it.","- `coder docs` lists the deeper guides; `coder docs <topic>` prints one.",`- ${e}`,...t?[`- ${t}`]:[]].join(`
|
|
2
|
-
`),d=(e,t)=>n({name:e,description:`Use Coder for coding, implementation, or investigation tasks - features, fixes, refactors, debugging, tests, code questions - one coder per focused goal, fanned out in parallel, waiting on each task. Use it when asked, when a task needs another engine (Claude, Codex, custom), or when a subagent is sufficient or required for the task.`,body:[c(t.host),"If `CODER_WORKER` is set in your environment, you are a coder worker. Skip this skill and do your assigned work directly; nested dispatch is disabled.\n\nYou dispatch coding tasks through the `coder` runtime instead of implementing them yourself.",`## Overview
|
|
3
|
-
|
|
4
|
-
Coder delegates coding to supervised subagents of any model - Codex, Claude, or any OpenAI-compatible or local endpoint - from one runtime on every host. Implementation details live in the subagents, so your context stays clean and handoffs are instant. Every task runs sandboxed under unified permissions (read-only, workspace-write, auto), is steerable mid-run, and falls back down the configured chain when an engine cannot start.`,l(t.setup,t.guided),"## Use Coder over MCP\n\nEach coder command is also an MCP tool with the same arguments, such as `task/run` or `flow/run`; `load_skill` loads a guide.\n\nSetup: `coder setup-host` adds the server. By hand:\n\n```bash\nclaude mcp add coder -- coder mcp\ncodex mcp add coder -- coder mcp\n```\n\nRestart running sessions after adding it.",u(t.wait,t.gates),'## Running tasks\n\nStart with `coder task run --help`. It says how to write a good task and what happens after dispatch. `coder task --help` lists the rest, result, steer, stop, list and approvals. Then run it:\n\n```bash\ncoder task run "Add a /health endpoint in src/server.ts that returns 200 with the git sha. Do not touch routes outside that file."\n```\n\nFollow what it prints.',"## Flows\n\nWhen the user asks for a repeatable multi-task workflow with verification gates and resume, author a Coder flow instead of hand-fanning tasks. Read `coder docs flows` before writing or editing one, preview with `--dry-run`, and once it runs give the user the real `coder flow watch <run-id>` command."].join(`
|
|
5
|
-
|
|
6
|
-
`)}),f={claude:d(`dispatch`,{host:`Claude`,setup:`coder setup-host claude`,guided:!0,wait:"Run each `coder task result <task-id> --wait` as its own background Bash call (run_in_background), one per task, never several tasks in one call, so each approval and answer re-invokes you."}),agents:d(`coder`,{setup:`coder setup-host`,wait:i,gates:"If your harness sandboxes or gates terminal commands (Codex does both), run every `coder` command with escalated permissions; the runtime is a supervisor with its own sandbox and approval policy."}),cursor:d(`coder`,{host:`Cursor`,setup:`coder setup-host`,wait:i,gates:"If Cursor asks before running `coder` commands, approve or allowlist `coder`; the runtime is a supervisor with its own sandbox and approval policy."})},p=a(t).filter(e=>e.file.startsWith(`docs/`)&&e.name.split(`/`)[0]!==`cli`).map(e=>n({name:e.name.replace(`/`,`-`),description:e.description,file:s.join(t,e.file)})),m=e=>e.replace(/\s*\(repeatable\)/g,``).replace(/--([a-z][\w-]*)/g,`$1`);function h(t={}){return Object.fromEntries(Object.entries(t).flatMap(([t,n])=>{if(t===`json`)return[];let r=e.get(n);if(!r?.description||m(r.description)===r.description)return[[t,n]];let i=n.clone();return e.add(i,{...r,description:m(r.description)}),[[t,i]]}))}function g(e,t){let n=[...t,e.name].join(`/`);return e.name===`watch`||[`docs`,`auth/login`,`setup-host`,`upgrade`].includes(n)?{...e,mcp:!1}:e.mcp===!1?e:{...e,args:h(e.args),mcp:{...e.mcp,description:m(e.description)}}}function _(e,t=[]){let n=[...t,e.name];return{...e,commands:e.commands.map(e=>g(e,n)),namespaces:e.namespaces?.map(e=>_(e,n))}}const v=r({...o,instructions:[`Coder runs coding agents: subagents on this machine for the work in front of you, and always-on agents in Coder Cloud that work in GitHub, Slack and other apps.`,`On this machine, task/run starts a subagent on any engine (Claude, Codex or a custom model). task/result returns its answer, task/steer continues it, and task/approve answers its permission requests. flow/run runs a TypeScript flow of many tasks; review reviews a diff.`,"For Coder Cloud, pass server to the same tools; sign in once with `coder auth login` in a terminal. agent/push publishes an agent, and connection/add gives tasks accounts, keys and MCP servers.",`Every result lists its next steps; follow them. load_skill loads a guide.`].join(`
|
|
7
|
-
`),commands:o.commands.map(e=>g(e,[])),namespaces:[...o.namespaces.map(e=>_(e))],skills:[f.agents,...p]});export{v as app};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
async function e(e,t){let n=await e.token();if(!n)return[];let r=await e.fetch(`https://slack.com/api/conversations.replies`,{method:`POST`,headers:{authorization:`Bearer ${n}`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t),redirect:`error`,signal:AbortSignal.timeout(5e3)}),i=await r.json();if(!r.ok||i.ok!==!0)throw Error(`Slack returned no thread`);return i.messages??[]}const t=e=>new Date(Number(e)*1e3).toISOString();async function n(n,r){let i=/^slack:([^:]+):(\d+\.\d+)$/.exec(n.chat?.thread.id??``),a=n.chat?.message;if(!i||!a||n.chat?.thread.isDM)return{};let[,o,s]=i;if(r.after===void 0){if(a.id===s)return{index:0};let[t]=await e(r,{channel:o,ts:s,limit:`1`});return t?.reply_count===void 0?{}:{index:t.reply_count}}if(r.delivered)return{};let c=r.after;return{since:(await e(r,{channel:o,ts:s,oldest:c,limit:`1000`})).filter(e=>e.ts&&e.ts!==s&&e.ts!==a.id&&e.ts>c&&!e.bot_id).map(e=>({id:e.ts,author:e.user_profile?.display_name||e.user_profile?.real_name||e.user||``,text:e.text??``,sentAt:t(e.ts)}))}}export{n as slackConversation};
|