@wular/coder 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{actions-CkMAM1Km.js → actions-C35tq9KH.js} +2 -2
- package/dist/{agent-Bi5nbUhA.js → agent-BZR4Eqdc.js} +1 -1
- package/dist/{app-server-BTpa5GBV.js → app-server-dnlLhhZb.js} +1 -1
- package/dist/{approvals-CRwkc9vB.js → approvals-C8XV7CK2.js} +1 -1
- package/dist/apps-CCqOsEZH.js +18 -0
- package/dist/async-BP5q3Une.js +3 -0
- package/dist/{auth-oCvlHitk.js → auth-CJOm9_Vh.js} +1 -1
- package/dist/builtin/coder/system.md +6 -3
- package/dist/{chat-4AiZEqKh.js → chat-BD2Fu3jU.js} +1 -1
- package/dist/cli.js +3 -3
- package/dist/{cmd-Cu3OquA_.js → cmd-BH1bmZGs.js} +34 -34
- package/dist/{config-D_RuO6gX.js → config-_32PHl9g.js} +1 -1
- package/dist/{connection-BXjn7gCC.js → connection-DNzNYpha.js} +1 -1
- package/dist/{connections-Cswv7r8Z.js → connections-B90TemYf.js} +1 -1
- package/dist/{context-CFrDYenS.js → context-DVGPu7f_.js} +1 -1
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1406 -1406
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.54c45900f2153d34.js → index.a036e2c6ae93ec75.js} +3 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.252f972b42c690e2.js → load.3e1c235ecb89201a.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.11efd0e175db9053.js → page.ff03c26886d248d2.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.59ae138dc182d7c3.js → notify.5b9c5a4ab975b01e.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.e9386951cedea737.js → page.6e80433ca86c927d.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.713d3ec10951fde5.js → sign-out.e419e0eae59a1394.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f989d6f2d9ece6e4.js → agents-grid.53dc6597be8d6049.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.0f88720e52db99a2.js → page.82a238c790c19a6c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.8d2f0997462fc958.js → layout.4a5c6f90ebaccf6f.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.bc93891522c8120d.js → page.ed696703c6fb5796.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.cf5cf9afe38ab0e4.js → page.12dbb62edaa16b4f.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.c44c7df7841719f2.js → platform-actions.1e7bb5f00112eeac.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-step.6e90cbfe308f28a0.js → platform-step.45adc3fb28e7d33b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.61de585104c2be10.js → agent-settings-form.1693e7dc34f5b94a.js} +16 -17
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.4d06f759984a63b3.js → page.fbbcdf8fde222f1e.js} +8 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.ea2925eab1d2e594.js → loading.099f0e549e964a5c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.fb069bf82b727d27.js → page.577e64210260faf2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.0a472a0e269b8c01.js → page.2d10853615403293.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.7ef7dfd5d8f5de43.js → versions-list.e6088baf4de7f41e.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.007326a04f05d46c.js → loading.f0dfaf4552b8cde1.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.a26aa7bc6ab655f0.js → page.9f09979ad3435fe3.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{app-cards.361918fe58349aa1.js → app-cards.adaebe98ec9d32e8.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.3f60cf67517d0d31.js → page.e2dc60bbcac65b1f.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.ffbf9a8b8b2fbde7.js → agent-toggle.d795b7112534872c.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.0ae015a4fbe6321e.js → hero.b74c6eb40c45b498.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.9abe365f0098d358.js → connect-repositories.e27bcba279f82d7b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.6548f8f757578f90.js → editor.288736c2a52c7df4.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.577b1d84c7ab84e1.js → import-picker.58bad50dd8e60d63.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.2b326d00ccef5544.js → page.83a490948f585e69.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.45a09107b19f0a7e.js → layout.61ad05aceb425910.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.f8d679f2d06b0ebc.js → operator-apps.6f71999915848a2c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.5aa3ddc669366703.js → page.4758811b7fc86d84.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.5a5188f0fc75dcd2.js → page.7de674df6cd0e824.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 → advanced-list.851275e04f8e7305.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.353ec01fbb814f78.js → connection-add.45a224c5e612b15f.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.cf4061ae909272c3.js → connections-list.6cacd41c18de261d.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.fc4cff0289267551.js → credentials-list.79a1355d894b8642.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.db01de2581ac65f3.js → credentials.30db114aef2c6ff6.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.e7d6a422f6a869ea.js → list.fa3b9eff6657bc57.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.acb92b39cab1d11c.js → models-list.2a8f6a5679fc5c4d.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.95fe939e36e5be55.js → page.7681780b48e2aa3e.js} +13 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.5764eac3307d67cc.js → runners-list.e9834546550a3c2c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.d316bb157f747f6c.js → secrets-list.ff9f3b3d88f2b8df.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.4eb70f2de8674f93.js → layout.3f8a61434ceaa186.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.dc630cb6e2cbf83a.js → model-options.0d6077fe68db3af9.js} +2 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-pick.a143e77f5ed5f9d3.js → model-pick.695538b2edf9dd15.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.70cad0e981c33fa5.js → page.e439da4bae9d6d6c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.18bd2b92cd23b73f.js → create-link.371225925a83e900.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.95f7be49430248eb.js → outcome-toast.c7d02e38464dec0b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.e39ee9236664d043.js → page.885e5ae7913d8f5b.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.441e82ab00344fb2.js → activity.f8d48c80747830ee.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.24e121ea6eb578ba.js → page.70ce5ef3bcf56310.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.4a4052a38db4bad3.js → task-actions.783070d7dbd198e4.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.0cd3ec2655f44cc7.js → task-view.db256c7f111b8f23.js} +22 -57
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.73225456d60d63e3.js → composer-data.c16854be11a561e4.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.ee326fbf5e526fb1.js → composer.6a331de70f3baff4.js} +24 -82
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.7607998094780fdd.js → pending-approvals.7ff2eadf13a3ee90.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.e486cbd16ea3e963.js → tasks-list.57c90c66384141a0.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.01510523d1556d59.js → tasks-section.22e4f86847e1a3e2.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.ede64f82388f9480.js → page.c6b9db3ca88aaa1f.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.0499098badd3f5f8.js → page.743fe359f09f5648.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e3800e736f832124.js → stream.c7ffa724145ce870.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.3b7eeee29fc327de.js → task-toasts.b0ba5a1b4976ae27.js} +47 -20
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.f22057e7dfac40fe.js → action.44115286faf6c0f8.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.c8d7efefb6194d7d.js → client.b9225923da59febe.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{advanced-list-850a950afe4f6996.js → advanced-list-4a393f37c461986f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-pills-9f6fa120182db948.js → agent-pills-f07bea43753a9342.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-6c1b6776328cd046.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{agent-toggle-521136f20a71400d.js → agent-toggle-dabbca2fe4006852.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-bcd13cd7a46224a6.js → agents-grid-a9440caa1768bfd8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{back-2d67134b122334f4.js → back-8ca96656264a0d1c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{chain-hint-53675e299a865420.js → chain-hint-c7994aad798ef430.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-cb2c62fe580a8903.js → combo-7b125f3927083749.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-3efd63e2e0192937.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-a6cf207b9c69b43f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{composer-data-890f71bade4f0616.js → composer-data-b05f3d93fdc472d7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{confirm-d6b2c5b1deccd1e8.js → confirm-6e26ab941d655b9f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-226bf70aa81c29d8.js → connect-repositories-90f1aedea6de7a99.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connections-list-a33d6637e2d52fcf.js → connections-list-90935e956e8f4626.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{copy-294c6052b3b69424.js → copy-38fa78628f39ec10.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-a3c963721aa06a72.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-90fc1c6d202e1461.js → credentials-list-ae950b9891d30c29.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{custom-range-efa1b6a71ba84597.js → custom-range-e9185a23187b3fe6.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-53a3e1a893644fff.js → editor-e0cc472111713852.js} +3 -3
- package/dist/dash/standalone/static/assets/chunks/{field-4d374d5ed3f43d7e.js → field-444bab2e16b91c26.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-7d9131eb37c4619e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{instructions-d3dc01b2f90820db.js → instructions-9f173d4229d9b77e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{list-16247e39898cd20e.js → list-84356c9286747b10.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-5e07b3318d69d218.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{models-list-6d93523660503dfb.js → models-list-eca9705ab89a2ce5.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-3006ae63624b3940.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-755fc581cbc2836e.js → outcome-dialog-c4d61a288688f53a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-ba59a3c06c25f0fd.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-0c61a03082f9d169.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-08e9b3816dcd62b1.js → platform-actions-267a43c805e3c3a6.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{platform-step-5881a8be1e761e00.js → platform-step-adfc87c1fa86e7e1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-fd1616528b2f6f12.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runners-list-dd759d408c643a29.js → runners-list-c858c5546c6fd513.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runtime-9b28886f3cbe0ed3-1.js → runtime-3fcac605fffcc273-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{secrets-list-be1f634a1b077baa.js → secrets-list-06cd41b5a2627452.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-f646bfa8aa0aa449.js → segmented-15503e745dd97f56.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{shared-init-b42d2c06c25d1e2b.js → shared-init-02666a6f76606589.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-7a7f1e623f0f5861.js +9 -0
- package/dist/dash/standalone/static/assets/chunks/{shared-init-953965859f7bf6b9.js → shared-init-a69029db2d72fb52.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-800f7bacd6de5aa8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-d13c4cc0cf11ffd1.js → tail-3024b828bce41f94.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-423e6a3f2527f534.js → task-1e6f9ba22fb5e29f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-actions-5917357eac6504ca.js → task-actions-c8fe1201a56901d9.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-531e243f8222f802.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-2c5ce592e00fda45.js → tasks-list-5373f9a2772a386a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-177ae397ad64dcea.js → versions-list-6642a24e9cef352b.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-9b28886f3cbe0ed3-0.js → wular-pnext-3fcac605fffcc273-0.js} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-00243b34eb094b95.css → dash-param-org-agents-param-slug-dd4ac319a0d62432.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css → dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css → dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css → dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-tasks-8a44e171984d32a1.css → dash-param-org-tasks-be3cb3d64573f3d9.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css → dash-param-org-tasks-param-id-c20a0537bc82620d.css} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-02b9bb5ae78a37d6.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-063d14b5b5c893a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1710a65c5b8280af.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2936b44e963219bc.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2f14cc4bf71bf456.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2f81535a69d0c8a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-368d90341055d7ff.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-58e0efbceb6c595f.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-7ecbd7a0cbe4e231.js → pnext-client-5fc693a6184e48a4.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-6ee756a74310a9fe.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-713f7a6bc55d23fb.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7c91f8543cd360fa.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-827b030f2c8e738e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-8b165b7e5c14a1f3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-95a81597ac1bdea0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a4c2fb8a94ccce04.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a7faaaf8c4cc8145.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-bab8ffb68e7dd229.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d9fab2611c2e7246.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-f3804c9ffb299fe0.js +1 -0
- package/dist/{definition-4on4SG5J.js → definition-D0OpQfGX.js} +1 -1
- package/dist/{discover-DvzAbQvU.js → discover-BfYHHJN_.js} +1 -1
- package/dist/{dispatch-BaW2X6Sc.js → dispatch-BkoIU4GU.js} +2 -2
- package/dist/{docs-CbgaMPvq.js → docs-CxklYa3P.js} +1 -1
- package/dist/{drive-Tk6JvQK5.js → drive-MggMiKA0.js} +1 -1
- package/dist/env-BwFCHakK.js +1 -0
- package/dist/{exec-CAaYFJD1.js → exec-CNygM6yF.js} +2 -2
- package/dist/{executor-Chc0zawh.js → executor-Ds4wDCzV.js} +6 -6
- package/dist/flow/builtin/review/index.d.ts +2 -2
- package/dist/flow/builtin/review/index.js +10 -15
- package/dist/flow/index.d.ts +2 -2
- package/dist/flow/index.js +1 -1
- package/dist/{hook-COWDSO4a.js → hook-CVJU-ZD0.js} +1 -1
- package/dist/{index-ezhbF5wC.d.ts → index-CTAQrCRU.d.ts} +71 -66
- package/dist/integrations-DSZSa8Rc.js +9 -0
- package/dist/lib/broker.js +1 -1
- package/dist/{load-PqaDHiHX.js → load-BtIDghgd.js} +2 -2
- package/dist/{local-BzZuOwgI.js → local-CqOUpEtl.js} +1 -1
- package/dist/{local-BMGcCk8N.js → local-DFrTuJFN.js} +1 -1
- package/dist/{login-BDKTNynK.js → login-93jO9qjx.js} +1 -1
- package/dist/maintenance-BuDKnfc7.js +1 -0
- package/dist/{mcp-BNz_l5TV2.js → mcp-CTVOR7r6.js} +1 -1
- package/dist/{mcp-BGam3G_B.js → mcp-EwT2mCaa.js} +1 -1
- package/dist/{mcp-BGx48pyR.js → mcp-cEIva8Pd.js} +6 -4
- package/dist/{models-D1NXi6ni.js → models-mKyePWrV.js} +1 -1
- package/dist/{permission-BkYxjiFR.js → permission-F6F25GJU.js} +1 -1
- package/dist/post-DLenID75.js +11 -0
- package/dist/{refresh-yfEi5SQs.js → refresh-CWEpTAkD.js} +1 -1
- package/dist/{remote-rArUa01V.js → remote-BDMuKaON.js} +1 -1
- package/dist/remote-Cl-j8r3W.js +1 -0
- package/dist/{runner-DG9jrX5H.js → runner-DK0jnzPr.js} +1 -1
- package/dist/runner.json +1 -1
- package/dist/runner.tgz +0 -0
- package/dist/schema.js +1 -1
- package/dist/sdk.d.ts +49 -45
- package/dist/sdk.js +1 -1
- package/dist/serve-Cqlkgdfd.js +8 -0
- package/dist/{serve-B-5rDiZm.js → serve-DHe6dZM6.js} +1 -1
- package/dist/{session-Dtje9y-r.js → session-BMbMzzPu.js} +1 -1
- package/dist/{sessions-DIz9fyRN.js → sessions-BGUfSe8L.js} +1 -1
- package/dist/{shared--aE4olIO.js → shared-D-KqAi7b.js} +1 -1
- package/dist/{sign-in-wWkyaq5X.js → sign-in-Dv-rdYD4.js} +2 -2
- package/dist/{state-Br-Fuaxg.js → state-CxAUec80.js} +1 -1
- package/dist/store-BpDipcKB.js +349 -0
- package/dist/{task-CFt85vTy.js → task-BRHXn5y1.js} +1 -1
- package/dist/task-CzXNLREX.js +7 -0
- package/dist/{tool-search-BkdgVolu.js → tool-search-C9Ty3hhL.js} +1 -1
- package/dist/{tools-oQvFAnh5.js → tools-BCm26CeV.js} +1 -1
- package/dist/{tools-DNgEptor.js → tools-C69W1B6S.js} +1 -1
- package/dist/{tools-search-D1zArRyJ.js → tools-search-BDaeCoWe.js} +1 -1
- package/dist/{turn-Cc-v-eSy.js → turn-eI4iRPsq.js} +1 -1
- package/dist/{update-check-UyRob3yy.js → update-check-Bap3dwaj.js} +1 -1
- package/dist/{views-3TxH367C.js → views-Bxm_5J6T.js} +1 -1
- package/dist/worker-DGhRPDDt.js +7 -0
- package/dist/{worker-BMuKKiIa.js → worker-DHNBRRl-.js} +1 -1
- package/docs/agents/coder.md +1 -1
- package/docs/cli/index.md +5 -3
- package/docs/connections.md +1 -1
- package/docs/flows.md +1 -1
- package/docs/review.md +36 -8
- package/docs/self-host.md +2 -1
- package/package.json +1 -1
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/apps-B6mUToTa.js +0 -18
- package/dist/async-CNhQ4wyZ.js +0 -3
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +0 -9
- package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +0 -3
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ed31510d4615a5a5.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +0 -1
- package/dist/env-_AxrvBXP.js +0 -1
- package/dist/integrations-BVmsk64f.js +0 -9
- package/dist/maintenance-d43Ml540.js +0 -1
- package/dist/remote-BbXx6S9P.js +0 -1
- package/dist/serve-CvnrGAj7.js +0 -12
- package/dist/store-CzQLgCzt.js +0 -352
- package/dist/task-N0qhnKpK.js +0 -7
- package/dist/worker-CIHY9L42.js +0 -7
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{types.5bf5a41cedb54154.js → types.9d22123d6296f5af.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.aae9fa481b9015d1.css.pnext-asset.js → task-view.440367ae07204ee7.css.pnext-asset.js} +0 -0
package/dist/serve-CvnrGAj7.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./errors-DK_trCff.js";import{E as t,T as n,V as r}from"./state-Br-Fuaxg.js";import{n as i}from"./types-DHBqXFE2.js";import{Z as a,s as o}from"./config-D_RuO6gX.js";import{n as s}from"./integrations-BVmsk64f.js";import{i as c,n as l}from"./crypto-Ittsv-m4.js";import"./dispatch-BaW2X6Sc.js";import{_ as u,a as d,g as f,l as p,o as m,p as h,r as g,s as _,t as v}from"./http-DRk8cDjf.js";import{n as y,r as b}from"./env-_AxrvBXP.js";import{l as x}from"./github-actions-2RjyRseX.js";import{$ as S,$n as ee,$r as C,A as te,An as w,Ar as ne,B as T,Bn as E,Br as re,Bt as D,C as ie,Cn as ae,Cr as oe,Ct as se,D as ce,Dn as le,Dr as ue,Dt as de,E as fe,En as pe,Er as me,Et as he,F as O,Fn as ge,Fr as _e,G as ve,Gn as ye,Gt as be,H as xe,Hn as Se,Hr as Ce,Ht as we,I as Te,In as Ee,Ir as De,It as Oe,Jn as ke,Jr as k,K as Ae,Kn as je,L as Me,Ln as Ne,Lr as Pe,M as Fe,Mn as Ie,Mr as Le,N as Re,Nn as ze,Nr as Be,O as Ve,On as He,Or as Ue,Ot as We,P as A,Pn as Ge,Pr as Ke,Pt as qe,Q as Je,Qn as Ye,Qr as Xe,R as j,Rn as Ze,Rr as Qe,Rt as $e,S as et,Sn as tt,Sr as nt,St as rt,T as it,Tn as at,Tr as ot,Tt as st,U as ct,Un as lt,Ur as ut,Ut as dt,V as M,Vn as ft,Vr as pt,Vt as mt,W as ht,Wn as gt,Wr as _t,X as vt,Xn as yt,Xr as bt,Xt as xt,Y as N,Yn as St,Yr as Ct,Z as wt,Zn as Tt,Zr as Et,Zt as Dt,_ as Ot,_n as kt,_r as At,_t as jt,a as Mt,ai as P,an as F,ar as Nt,at as Pt,b as Ft,bn as It,br as Lt,c as I,cn as Rt,cr as L,ct as zt,d as Bt,di as Vt,dn as Ht,dt as Ut,ei as Wt,en as Gt,er as Kt,et as qt,f as Jt,fn as Yt,fr as Xt,ft as Zt,g as Qt,gn as R,gr as $t,gt as en,h as tn,hn as nn,hr as rn,i as an,ii as z,in as B,ir as on,it as sn,j as cn,jn as ln,jr as un,jt as dn,k as V,kn as fn,kr as pn,l as mn,ln as hn,lr as gn,lt as _n,m as vn,mn as yn,mr as bn,n as xn,ni as H,nn as Sn,nr as Cn,nt as wn,o as Tn,oi as En,or as Dn,ot as On,p as kn,pn as An,pr as jn,q as Mn,qn as Nn,qr as Pn,qt as Fn,r as In,ri as U,rn as Ln,rr as Rn,rt as zn,s as Bn,si as Vn,sn as Hn,st as Un,ti as Wn,tn as Gn,tt as W,u as Kn,ui as qn,un as Jn,ut as Yn,v as Xn,vn as Zn,vr as Qn,w as $n,wn as er,wr as tr,wt as nr,x as G,xn as rr,xr as ir,xt as ar,y as or,yn as sr,yr as cr,z as lr,zn as ur,zr as dr,zt as fr}from"./apps-B6mUToTa.js";import{m as pr,p as mr,v as hr}from"./local-BzZuOwgI.js";import{a as gr,c as _r,n as vr,o as yr,r as br,s as xr}from"./metadata-D_bBfr3H.js";import Sr from"node:path";import K from"node:process";import Cr from"node:fs";import{spawnSync as wr}from"node:child_process";import{createHash as Tr,randomBytes as Er,randomUUID as Dr}from"node:crypto";import Or from"node:http";async function kr(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function Ar(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await jr(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,d({ok:r},r?200:503,{"cache-control":`no-store`})}async function jr(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Mr(e){let t=(e.now??Date.now)();if(!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await kr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...F(e.local.cwd,!1),...F(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await kr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}async function Nr(e,t,n,r){let i=t.session.user.id,a=(await e.json().catch(()=>({}))).engine??``;if(!Rr.has(a)||!t.config.subscriptions?.[a])return d({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return d({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=(await t.store.list(`login`)).find(({value:e})=>e.owner===i&&e.engine===a&&e.state!==`done`&&e.state!==`failed`&&e.expiresAt>q(t));if(s)return d(J(s.id,s.value));let c=`login-${Er(12).toString(`base64url`)}`,l=gn(c,t.organizationId,0),u={owner:i,engine:a,state:`starting`,tokenHash:l.hash,runner:o.kind,createdAt:q(t),expiresAt:q(t)+Lr};await zr(t,c,u);let f;try{let e=await o.start({id:c},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:l.token,CODER_LOGIN:a},void 0,{timeoutMs:Lr,hosts:[Ce[a].api,...Ce[a].account]}),n=await t.store.patchLogin(c,{handle:e},{tokenHash:u.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),d({error:`This sign-in is gone. Start again.`},409);f=n}catch(e){return await t.store.delete(`login`,c),d({error:e instanceof Error?e.message:String(e)},502)}return d(J(c,f),201)}async function Pr(e,t,n,r){let i=n.id??``;if(!r.searchParams.has(`state`)){let e=i&&!i.includes(`/`)?await Y(t,i):void 0;return e?d(J(i,e)):d({error:`This sign-in is gone. Start again.`},404)}let a=await t.store.watch(`login`,i);try{let n=i&&!i.includes(`/`)?await Y(t,i):void 0;if(!n)return d({error:`This sign-in is gone. Start again.`},404);let o=r.searchParams.get(`state`),s=Date.now()+25e3;for(;o&&n.state===o&&Date.now()<s&&!e.signal.aborted;)if(await a.wait(Math.min(1e4,s-Date.now()),e.signal),n=await Y(t,i),!n)return d({error:`This sign-in is gone. Start again.`},404);return d(J(i,n))}finally{a.close()}}async function Fr(e,t,n,r){let i=n.id??``,a=i&&!i.includes(`/`)?await Y(t,i):void 0;if(!a)return d({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:Vn(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?d({error:`This sign-in is not waiting for a code.`},409):d({ok:!0})}async function Ir(e,t,n,r){let i=n.id??``,a=i&&!i.includes(`/`)?await Y(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),d({ok:!0})):d({error:`This sign-in is gone. Start again.`},404)}const Lr=6e5,Rr=new Set([`claude`,`codex`]),q=e=>(e.now??Date.now)();function zr(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-q(e))})}function J(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{}}}async function Y(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}function Br(e,t){let n=t.handle&&e.runners[t.runner]?.stop(t.handle);if(!n)return;let r=n.catch(e=>console.error(`coder server: could not stop the machine of a finished ${t.engine} sign-in`,e));e.waitUntil?.(r)}async function Vr(e,t,n,r){let i=n.id,a=await t.store.watch(`login`,i),o=Date.now()+25e3;try{for(;;){if(e.signal.aborted)return d({});let n=await t.store.get(`login`,i);if(!n||n.tokenHash!==t.callbackLogin.tokenHash)return new Response(`Unauthorized`,{status:401});if(n.input){let e=await t.store.patchLogin(i,{input:null},{input:n.input,tokenHash:n.tokenHash});return d(e?{code:P(t.config,n.input)}:{})}if(n.state===`verifying`||n.state===`done`||n.state===`failed`||Date.now()>=o)return d({});await a.wait(Math.min(1e4,o-Date.now()),e.signal)}}finally{a.close()}}async function Hr(e,t,n,r){return d({engine:t.callbackLogin.engine})}async function Ur(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return d({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s)&&Br(t,a),d({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return d({error:`Invalid sign-in result`},400);let n=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,{...En(t.config,{env:c}),createdAt:(t.now??Date.now)(),...n?.email||n?.plan?{account:{...typeof n.email==`string`?{email:n.email}:{},...typeof n.plan==`string`?{plan:n.plan}:{}}}:{}})?(Br(t,a),d({ok:!0})):d({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return await t.store.patchLogin(i,l.url?{...l,state:`open`}:l,s)?d({ok:!0}):d({error:`This sign-in changed. Try again.`},409)}const Wr=e=>`create-finished:${c(e)}`;async function Gr(e,t){let n=await e.store.get(`delivery`,Wr(t));return n&&`target`in n?n.target:void 0}async function Kr(e,t,n){let r=e.operatorApp??!1,i=r?`*`:e.session?.user.id??`anonymous`;if(!e.integrations[t])return{error:`Unknown integration "${t}"; run coder agent integrations list to see them`,status:404};if(!e.config.publicUrl)return{error:`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,status:400};if(r&&!e.integrations[t].app.shareable)return{error:`Create this app in your workspace from the agent's Platforms tab.`,status:400};let a=Kn(n);if(!a)return{error:`Setup link is missing or malformed; start again from the agent's Platforms tab`,status:400};if(!a.definition.integrations[t])return{error:`This agent declares no ${t} integration in its agent.json`,status:400};if(a.state.public&&!r&&!e.integrations[t].publicApps)return{error:`${e.integrations[t].name} apps cannot be public here. Create a private one.`,status:400};let o=Tn(t,a.state),s=a.state.tx?await qn(e,a.state.tx,`create`,i)===o?a.state.tx:void 0:await Vt(e,`create`,i,o);return s?{state:{...a.state,tx:s},definition:a.definition}:{error:`This app creation link is invalid, expired, or already used`,status:403}}async function qr(e,t,n,r){let i=r.searchParams.get(`tx`);if(t.operatorApp&&i&&(await qn(t,i,`create`,`*`)||await Gr(t,i)===n.id))return await C(e,t.dashboardHosts)??Xe();let a=new URLSearchParams(r.searchParams);return a.set(`create`,n.id),h(`${Bn(t)}${vn(Qt(t),`/setup`)}?${a}`)}async function Jr(e,t,n){let r=await Kr(e,t,n);if(`error`in r)return d({error:r.error},r.status);let{app:i}=e.integrations[t],a=r.state.tx,o=i.createStep&&(e.operatorApp||r.state.public)?i.createStep(e.config.publicUrl,{saved:await Bt(e,t),name:r.definition.name,public:r.state.public}):void 0,s=e.config.publicUrl;if(i.createPost&&G.has(new URL(s).hostname))return d({error:`${e.integrations[t].name} cannot reach ${s}. Set a public address first.`},400);let c=e.operatorApp?void 0:mn(e,r.state.agent),u=i.createPost?.({publicUrl:s,spec:In(r.definition,r.state.agent,t),state:l({tx:a,...c?{back:c}:{}}),...r.state.owner?{owner:r.state.owner}:{},...r.state.public?{public:!0}:{}});return d({tx:a,...u?{post:u}:{},...o?{create:o}:{}})}async function Yr(e,t,n,r){return Jr(t,n.id,r.searchParams)}async function Xr(e,t,n){let r=await e.json().catch(()=>void 0);return Jr(t,n.integration,new URLSearchParams(r&&typeof r==`object`?r:{}))}async function Zr(e,t,n,r,a){let o=t.operatorApp??!1,s=o?`*`:t.session?.user.id??`anonymous`,c=t.integrations[n];if(!c)return I(t,`unknown-integration`,{platform:n},a);if(o&&!c.app.shareable)return d({error:`Create this app in your workspace from the agent's Platforms tab.`},400);let u=t.config.publicUrl;if(!u)return I(t,`no-public-url`,{},a);let f=r?await Jt(t,r,n,s):void 0;if(!f)return I(t,`create-expired`,{platform:n},a);o&&await t.store.put(`delivery`,Wr(r),{at:t.now?.()??Date.now(),target:n},{ttlMs:6e5});let p=o?`/create/${n}`:mn(t,f.state.agent),m=o?{tx:r}:{},g=o?void 0:(await xn(t)).find(e=>e.integration===n),_=await c.app.createCallback(e,{publicUrl:u,spec:In(f.definition,f.state.agent,n),fetch:t.fetch??fetch,tokens:an(t,n),...g?{shared:P(t.config,g.credentials)}:{}}).catch(r=>r instanceof i&&r.code===`invalid-field`&&e.headers.get(`accept`)===`application/json`?d({error:r.message},400):r instanceof i?I(t,r.code,{platform:n,error:r.error,...m},p):(console.error(`coder server: creating the ${n} app failed`,r),I(t,`failed`,{platform:n,...m},p)));if(_ instanceof Response)return _;let v={id:`${n}:${_.platformAppId}`,integration:n,agent:f.state.agent,name:_.name,...f.state.repo?{agentsRepo:f.state.repo}:{},...f.state.repo?{branch:f.state.branch??`main`}:{},...o?{builtin:!0}:{},...`shared`in _?{shared:g.id,credentials:``}:{credentials:Vn(t.config,_.credentials)},createdAt:t.now?.()??Date.now()};if(await t.store.put(`app`,v.id,v),c.app.values&&await t.store.put(`delivery`,Ke(v.id),{version:0,manifest:c.app.values(v,{publicUrl:u,spec:In(f.definition,v.agent,n)}).lines,changed:!1}),o)return await oe(t,`Created the shared app`,`${_.name} on ${c.name}`),I(t,`created`,{platform:n,app:_.name,...m},p);let y=await Vt(t,`install`,s,v.id);return h(`${u}/install/${n}?app=${encodeURIComponent(v.id)}&state=${l({tx:y,back:p})}`)}async function Qr(e,t,n,r){let i=g(r.searchParams.get(`state`));return Zr(e,t,n.id,i?.tx,Mt(i?.back))}async function $r(e,t,n,r){let i=new URLSearchParams(await e.clone().text()).get(`tx`),a=await Zr(e,t,n.id,i,void 0),o=a.headers.get(`location`);return o&&e.headers.get(`accept`)===`application/json`?d({url:o}):a}async function ei(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await ne(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=await Ht(e,n,i,P(e.config,a.credentials));if(i.repos?.includes(t)||(await n.repos.list(Yt(e,i),r)).includes(t))return{contents:n,token:r,app:a,installation:i}}catch(e){console.error(`coder server: repository access for ${i.id} failed`,e)}}}async function ti(e,t,n){let r=await ei(e,t);if(!r)return d({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,un,r.token,n).catch(()=>[]),o=await Promise.all(i.map(async i=>{let o=await r.contents.repos.readFile(t,`${un}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(o===void 0)return;let s={};try{let e=JSON.parse(o);e&&typeof e==`object`&&(s=e)}catch{}let c=Object.entries(s.mcp&&typeof s.mcp==`object`&&!Array.isArray(s.mcp)?s.mcp:{}).flatMap(([e,t])=>a(e,t)),l=await mr(e.store,i),u=l?.source===`repo`&&l.repo===t,d=u?await pr(e.store,i):void 0;return{id:i,name:typeof s.name==`string`?s.name:i,...c.length?{warnings:c}:{},...typeof s.description==`string`?{description:s.description}:{},...u?{version:l.currentVersion,...d?.source?{commit:d.source.commit}:{}}:{},...l&&!u?{taken:!0}:{}}}));return d({repo:t,agents:o.filter(Boolean)})}async function ni(e,t,n,r){let i=r.searchParams.get(`repo`);return i?ti(t,i,r.searchParams.get(`ref`)||`HEAD`):d({error:`repo is required`},400)}async function ri(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return d({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await ei(t,i.repo);if(!e)return d({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await mr(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return d({error:`Agent id "${e}" is already taken`},409)}let o=await Le(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await _e(t,o),d({imported:o.map(e=>e.agent)})}catch(e){return d({error:e instanceof Error?e.message:String(e)},400)}}async function ii(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=t.routeTask??await t.store.get(`task`,i);if(!s&&t.taskPrincipal)return d({error:`No task "${i}"`},404);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!B(n,i,!1))return d({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return gi(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=B(n,i);if(t)return{status:t,lines:Ln(n,i,e,ci),pendingResult:si(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o);return gi(e,t,i,Number.isFinite(c)?c:o,{ctx:t,id:i},oi(t))}const ai=3e4;function oi(e){let t=e.now??Date.now,n={at:t(),seen:!0};return async r=>{let{task:i}=r,a=await jn(e);return L(a&&{...a,spaces:[]},i)?!0:i.audience?.startsWith(`space:`)?((n.audience!==i.audience||t()-n.at>=ai)&&(n={at:t(),audience:i.audience,seen:L(await jn(e,[i.audience]),i)}),n.seen):!1}}function si(e,t,i=!1){if(!R.has(t.status)||t.error||t.status===`cancelled`)return!1;let a=n(e,t.task.id),o=Date.parse(a?.resumedAt??a?.createdAt??``)||0;return i||(Cr.statSync(Sr.join(r(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<o}const X=1e3,ci=500,li=29e4,ui=2e4,Z=3e4;function di(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new pi,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-li),a):a,p=u>0&&(!d||u<f)?`event: reset
|
|
2
|
-
data: {}
|
|
3
|
-
|
|
4
|
-
`:``,m=new TextEncoder,h=()=>{},g=new ReadableStream({start(n){n.enqueue(m.encode(`retry: ${X}\nid: ${f}${s}\n\n${p}`)),h=o.watch(t,i,f,e=>n.enqueue(m.encode(e)),()=>n.close());let r=()=>{h();try{n.close()}catch{}};e.signal.aborted?r():e.signal.addEventListener(`abort`,r)},cancel(){h()}});return new Response(g,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}function fi(e,t){let{task:n,approval:r,archivedAt:i,createdAt:a,startedAt:o,finishedAt:s}=e;return{id:n.id,agent:n.agent,status:e.status,approval:r??null,approvals:e.approvals??n.context?.approvals??null,archivedAt:e.autoArchived&&!t?void 0:i,createdAt:a,startedAt:o,finishedAt:s,...$e(e),...t?{result:e.result??null,error:e.error??null,answer:e.answer??null}:{}}}const Q=(e,t)=>`${e}:${t??``}`;var pi=class{options;watches=new Set;timer;counts=new Map;views=new Map;runners=new Map;reading=!1;closed=!1;last=Date.now();scans=new Map;left=new Map;archived=new Map;reads=0;generation=Dr().slice(0,8);constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a=Date.now();this.watches.size||(this.last=a);let o={ctx:e,ids:new Set(t),sent:new Map,gone:new Set,from:n,fresh:!0,runners:``,tag:this.tag(e),beat:a,marked:a,until:a+(this.options.lifeMs??li),send:r,close:i};return this.watches.add(o),this.timer||(this.timer=setInterval(()=>this.tick(),this.options.pollMs??X),this.timer.unref?.()),this.tick(),()=>this.drop(o)}tag(e){return`-${Tr(`sha256`).update(e.organizationId).digest(`hex`).slice(0,8)}${e.queue instanceof dn?`.${this.generation}`:``}`}runnersChanged(e){this.runners.delete(e)}close(){this.closed=!0;for(let e of[...this.watches]){this.drop(e);try{e.close()}catch{}}}drop(e){if(this.watches.delete(e)){if(![...this.watches].some(t=>t.ctx.organizationId===e.ctx.organizationId)){for(let t of[this.counts,this.views])for(let n of t.keys())n.startsWith(`${e.ctx.organizationId}:`)&&t.delete(n);this.runners.delete(e.ctx.organizationId)}this.watches.size||(clearInterval(this.timer),this.timer=void 0,this.counts.clear(),this.views.clear(),this.runners.clear())}}tick(){let e=Date.now();for(let t of[...this.watches])if(e>=t.until){this.drop(t);try{t.close()}catch{}}else e-t.beat>=(this.options.heartbeatMs??ui)&&(t.beat=e,this.send(t,`: ping
|
|
5
|
-
|
|
6
|
-
`));this.reading||!this.watches.size||(this.reading=!0,this.read(e).finally(()=>this.reading=!1))}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){let t=[...this.watches],n=new Map;for(let e of t){let t=n.get(e.ctx.organizationId)??{ctx:e.ctx,ids:new Set,fresh:new Set};for(let n of e.ids)t.ids.add(n),e.fresh&&t.fresh.add(n);n.set(e.ctx.organizationId,t)}let r=Math.min(this.last,...t.flatMap(e=>e.fresh?[e.from]:[]));this.reads++;let i=await this.changes(n,r-Z,e).catch(e=>{console.error(`coder server: task events failed`,e)});if(!i)return;this.last=e;let a=new Map;try{for(let[r,{ctx:o}]of n){let n=JSON.stringify([[...i.rows.get(r)??[]].map(([e,t])=>[e,t.status,t.archivedAt]).sort(),[...i.deleted.get(r)?.keys()??[]].sort()]),s=t.filter(e=>e.ctx.organizationId===r),c=s.some(e=>!wn(e.ctx)&&!e.ctx.taskPrincipal);for(let t of new Set(s.map(e=>e.ctx.taskPrincipal?.task))){let l=Q(r,t),u=this.counts.get(l),d=u?.fingerprint!==n||c&&!t&&e-u.at>=ai,f=o.local?[...i.rows.get(r)?.values()??[]].filter(e=>!e.archivedAt&&[`queued`,`running`,`waiting`].includes(e.status)&&(!t||e.task.parent===t)).map(e=>({...Xt(e.task),requestedBy:e.task.requestedBy,active:1})):d?t?[{audience:``,active:(await o.queue.counts(r,{archived:!1,statuses:[`queued`,`running`,`waiting`],parent:t})).active}]:await o.queue.activeCounts(r):u.groups;a.set(l,f),s.some(e=>this.watches.has(e))&&this.counts.set(l,{groups:f,fingerprint:n,at:d?e:u.at})}}}catch(e){console.error(`coder server: task counts failed`,e);return}let o=new Map(await Promise.all(t.map(async t=>{let{organizationId:n,session:r,taskPrincipal:o}=t.ctx,s=`${n}:${r?.user.id??``}:${o?.task??``}`,c=[...i.rows.get(n)?.values()??[]],l=new Set([...c.map(e=>e.task.audience),...[...i.deleted.get(n)?.values()??[]].map(e=>e.audience),...(a.get(Q(n,o?.task))??[]).map(e=>e.audience)].filter(e=>!!e?.startsWith(`space:`))),u=this.views.get(s);if(!u||e-u.at>=ai||[...l].some(e=>!u.audiences.has(e))||c.some(e=>e.updatedAt>u.at&&l.has(e.task.audience))){let n=jn(t.ctx,[...l]),r={at:e,audiences:l,view:n};this.views.set(s,r),n.catch(()=>this.views.get(s)===r&&this.views.delete(s))}return[t,await this.views.get(s).view]})));await Promise.all([...n].filter(([t])=>e-(this.runners.get(t)?.at??-1/0)>=15e3).map(async([t,{ctx:n}])=>{let r=this.runners.get(t),i={at:e,records:r?.records??[]};this.runners.set(t,i);try{let e=await n.store.list(`runner`);this.runners.get(t)===i&&(i.records=e)}catch(e){this.runners.get(t)===i&&(r?this.runners.set(t,r):this.runners.delete(t)),console.error(`coder server: runner events failed`,e)}}));for(let n of t){if(!this.watches.has(n))continue;let t=[];try{let r=o.get(n);t=this.news(n,i,e,r);let s=a.get(Q(n.ctx.organizationId,n.ctx.taskPrincipal?.task))?.filter(e=>L(r,e)).reduce((e,t)=>e+t.active,0);s!==void 0&&s!==n.active&&(n.active=s,t.push(`id: ${e}${n.tag}\nevent: counts\ndata: ${JSON.stringify({active:s})}\n\n`)),t.push(...this.runnerNews(n,e))}catch{}!t.length&&e-n.marked>=(this.options.heartbeatMs??ui)&&t.push(`id: ${e}${n.tag}\n\n`),t.length&&(n.marked=e,this.send(n,t.join(``)))}}runnerNews(e,t){let n=this.runners.get(e.ctx.organizationId);if(!n)return[];let r=de(e.ctx,n.records,t),i=JSON.stringify(r.map(({lastSeen:e,...t})=>t.online?t:{...t,lastSeen:e})),a=e.runners;return e.runners=i,a===i?[]:[`id: ${t}${e.tag}\nevent: runners\ndata: ${JSON.stringify({items:r})}\n\n`]}async changes(e,t,r){let i=await[...e.values()][0].ctx.queue.changes([...e].map(([e,t])=>({organizationId:e,ids:[...t.ids],fresh:[...t.fresh]})),t),a=new Map;for(let{organizationId:e,status:t}of i.rows){let n=a.get(e)??new Map;a.set(e,n.set(t.task.id,t))}let o=new Map;for(let{organizationId:e,id:t,...n}of i.deleted){let r=o.get(e)??new Map;o.set(e,r.set(t,n))}for(let[t,{ctx:i}]of e){if(!i.local)continue;let e=[...a.get(t)?.values()??[]],o=this.scans.get(i.local.cwd);if(!o||r-o.at>=(this.options.localScanMs??4e3)||e.some(e=>e.updatedAt>o.at)){let e=!o||r-o.archivedAt>=(this.options.archiveScanMs??15e3);await hn(i,i.local.cwd);let t=e?F(i.local.cwd,!0):o.archived,a=F(i.local.cwd,!1),s=new Set(a.map(e=>e.task.id)),c=[...a,...t.filter(e=>!s.has(e.task.id))],l=new Set(c.map(e=>e.task.id)),u=this.left.get(i.local.cwd)??new Map;for(let e of o?.rows??[])l.has(e.task.id)||u.set(e.task.id,o.at);for(let[e,t]of u)(t<r-6e5||l.has(e))&&u.delete(e);let d=this.archived.get(i.local.cwd)??new Set;for(let e of d)l.has(e)?d.delete(e):n(i.local.cwd,e)||(u.set(e,o?.at??r),d.delete(e));this.left.set(i.local.cwd,u),this.scans.set(i.local.cwd,o={at:r,rows:c,archived:t,archivedAt:e?r:o.archivedAt})}a.set(t,new Map(er(i.local.cwd,o.rows,e).map(e=>[e.task.id,e])))}return{rows:a,deleted:o}}news(e,{rows:t,deleted:n},r,i){let{ctx:a}=e,o=a.taskPrincipal?.task,s=t.get(a.organizationId)??new Map;if(o&&e.fresh)for(let t of e.ids)s.get(t)?.task.parent!==o&&e.ids.delete(t);let c=[],l=(t,n)=>{let i=JSON.stringify(n);e.sent.get(t)!==i&&(e.sent.set(t,i),c.push(`id: ${r}${e.tag}\nevent: task\ndata: ${i}\n\n`))},u=e=>({id:e,deleted:!0}),d=t=>{let n=a.local&&!o&&B(a.local.cwd,t,e.ids.has(t));if(l(t,n?fi(n,e.ids.has(t)):u(t)),e.gone.add(t),n&&a.local){let e=this.archived.get(a.local.cwd)??new Set;this.archived.set(a.local.cwd,e.add(t))}};for(let[t,n]of s){if(o&&n.task.parent!==o)continue;if(!L(i,n.task)){e.sent.has(t)&&l(t,u(t));continue}let s=e.ids.has(t);e.gone.delete(t);let c=fi(s&&a.local&&n.local&&R.has(n.status)?B(a.local.cwd,t)??n:n,s);if(a.local&&n.local&&e.sent.get(t)!==JSON.stringify(c)&&r-(n.finishedAt??0)<Z&&si(a.local.cwd,n)){e.sent.has(t)||e.sent.set(t,``);continue}s||a.local&&!e.fresh||n.updatedAt>e.from-Z?l(t,c):e.fresh&&e.sent.set(t,JSON.stringify(c))}if(e.fresh||a.queue instanceof dn)for(let t of e.ids)s.has(t)||d(t);for(let[t,{at:r,...s}]of n.get(a.organizationId)??[])r>e.from-Z&&L(i,s)&&(!o||e.ids.has(t))&&l(t,u(t));if(a.local){for(let t of e.sent.keys())!s.has(t)&&!e.ids.has(t)&&!e.gone.has(t)&&d(t);for(let[t,n]of this.left.get(a.local.cwd)??[])n>e.from-Z&&!s.has(t)&&e.sent.get(t)!==JSON.stringify(u(t))&&d(t)}return e.fresh=!1,e.from=r,c}};const mi=1e4;var hi=class{options;feeds=new Map;timer;interval;closed=!1;reads=0;constructor(e={}){this.options=e,this.interval=e.pollMs??X}watch(e,t,n,r,i,a){if(this.closed)return queueMicrotask(i),()=>{};let o=this.feeds.get(e),s=o?.reading!==void 0&&Date.now()-o.reading>=(this.options.stallMs??mi);if(!o||s){let t={key:e,source:n,watches:new Set,head:1/0};if(o){for(let e of o.watches)t.watches.add(Object.assign(e,{feed:t}));o.watches.clear()}this.feeds.set(e,o=t)}let c={cursor:t,feed:o,timers:[],send:r,close:i,sees:a};c.timers=[setTimeout(()=>this.end(c),this.options.lifeMs??5e4),setInterval(()=>this.send(c,`: ping
|
|
7
|
-
|
|
8
|
-
`),this.options.heartbeatMs??ui)];for(let e of c.timers)e.unref?.();return o.watches.add(c),o.reading===void 0&&t<o.head&&this.read([o]),this.schedule(),()=>this.drop(c)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;for(let t of e.timers)clearTimeout(t);!t.watches.delete(e)||t.watches.size||(this.feeds.get(t.key)===t&&this.feeds.delete(t.key),!this.feeds.size&&(clearTimeout(this.timer),this.timer=void 0,this.interval=this.options.pollMs??X))}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}schedule(){this.timer||this.closed||!this.feeds.size||(this.timer=setTimeout(()=>this.tick(),this.interval),this.timer.unref?.())}tick(){this.timer=void 0;let e=[...this.feeds.values()].filter(e=>e.reading===void 0);this.schedule(),this.read(e).then(e=>{let t=e?this.options.pollMs??X:Math.min(this.interval*2,this.options.idleMs??5e3);t!==this.interval&&(this.interval=t,clearTimeout(this.timer),this.timer=void 0,this.schedule())})}async read(e){let t=e.filter(e=>this.feeds.get(e.key)===e&&e.watches.size).map(e=>{let t=[...e.watches];return{feed:e,readers:t,from:Math.min(...t.map(e=>e.cursor))}});if(!t.length)return!1;let n=Date.now();for(let{feed:e}of t)e.reading=n;this.reads+=t.length;let r=new Map,i=[];for(let e of t){let{source:t}=e.feed;typeof t==`function`?i.push({...e,read:t}):r.set(t.ctx.queue,[...r.get(t.ctx.queue)??[],{...e,...t}])}let a=e=>(console.error(`coder server: task log read failed`,e),null);return(await Promise.all([...[...r].map(async([e,t])=>{let{statementTimeout:n}=t[0].ctx,r=()=>e.logTails(t.map(({ctx:e,id:t,from:n})=>({organizationId:e.organizationId,id:t,after:n})),500),i=await(n?n(mi,r):r()).catch(a);return Promise.all(t.map((e,t)=>this.settle(e,i&&i[t])))}),...i.map(async e=>[await this.settle(e,await e.read(e.from).catch(a))])])).flat().includes(!0)}async settle({feed:e,readers:t,from:n},r){let i=r?await Promise.all(t.map(async e=>await e.sees?.(r.status).catch(()=>!1)===!1)):[];if(e.reading=void 0,this.feeds.get(e.key)!==e)return!1;t.forEach((e,t)=>i[t]&&this.end(e));let a=t.filter(t=>e.watches.has(t)),o=a.length<e.watches.size,s=!1;if(r===void 0)for(let e of a)this.end(e);else if(r){let{status:t,lines:i,pendingLogs:c,pendingResult:l}=r,u=i.length===500,d=R.has(t.status)&&!u&&!c&&!l,f=i.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]),p=i.at(-1)?.seq??n;s=e.head!==1/0&&p>e.head,e.head=Math.max(n,p),u&&(o=!0);let m=t.status===`waiting`?t.approval:void 0;for(let e of a){let t=f.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);!u&&!d&&!e.caught&&(e.caught=!0,t+=`event: caught-up
|
|
9
|
-
data: {}
|
|
10
|
-
|
|
11
|
-
`),!u&&m?.id&&e.approval!==m.id&&(e.approval=m.id,t+=`event: approval\ndata: ${JSON.stringify(m)}\n\n`),e.cursor=Math.max(e.cursor,i.at(-1)?.seq??-1),d?this.end(e,`${t}event: end\ndata: {}\n\n`):t&&this.send(e,t)}}return o&&this.feeds.get(e.key)===e&&this.read([e]),s}};function gi(e,t,n,r,i,a){let o=t.logWatcher??new hi,s=new TextEncoder,c=()=>{},l=new ReadableStream({start(l){l.enqueue(s.encode(`retry: ${X}\n\n`)),c=o.watch(`${t.organizationId}:${n}`,r,i,e=>l.enqueue(s.encode(e)),()=>l.close(),a);let u=()=>{c();try{l.close()}catch{}};e.signal.aborted?u():e.signal.addEventListener(`abort`,u)},cancel(){c()}});return new Response(l,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}const _i={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},vi=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function yi(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=vi([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function bi(e){let t=e.remotes?.find(e=>e.type===`streamable-http`);if(t)return{type:`http`,url:t.url,env:[],headers:vi(t.headers)};let n=e.packages?.find(e=>_i[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=_i[n.registryType],a=[],o=yi(n.runtimeArguments,`runtime`,a),s=yi(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:vi(n.environmentVariables),headers:[]}}function xi(e,t){let[n=``,r]=e.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),[i=``,a]=t.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),o=n.localeCompare(i,`en`,{numeric:!0});if(o)return o;if(r===void 0||a===void 0)return Number(r===void 0)-Number(a===void 0);let s=r.split(`.`),c=a.split(`.`);for(let e=0;e<Math.max(s.length,c.length);e++){let t=s[e],n=c[e];if(t===void 0||n===void 0)return Number(t!==void 0)-Number(n!==void 0);let r=/^\d+$/.test(t),i=/^\d+$/.test(n),a=r===i?t.localeCompare(n,`en`,{numeric:r}):Number(i)-Number(r);if(a)return a}return 0}function Si(e,t,n){for(let{server:r,_meta:i}of n){let n=i?.[`io.modelcontextprotocol.registry/official`]?.isLatest===!0,a=r.version??``,o=t.get(r.name);if(o&&(o.latest===n?xi(o.version,a)>=0:o.latest))continue;let s=bi(r),c=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+\//i.test(r.name)&&!/^io\.github(?:\.|\/)/i.test(r.name),l=r.name.split(`/`).pop()??r.name,u=c&&/^(mcp|mcp-server|server)$/i.test(l)?r.name.split(`/`)[0].split(`.`).pop():l;t.set(r.name,{version:a,latest:n,found:s?{name:r.name,title:r._meta?.[`io.modelcontextprotocol.registry/publisher-provided`]?.github?.displayName??r.title??u,description:r.description??``,...c?{verified:!0}:{},...e.curated?{curated:!0}:{},...s}:void 0})}}var Ci=class{sources=[{url:`https://api.mcp.github.com/v0.1/servers`,curated:!0,rows:new Map,ready:!1,failed:!1},{url:`https://registry.modelcontextprotocol.io/v0.1/servers`,curated:!1,rows:new Map,ready:!1,failed:!1}];refreshAt=0;timer;controller;closed=!1;inFlight;async response(e,t){(e.now??Date.now)()>=this.refreshAt&&this.refresh(e);let n=t.trim().toLowerCase(),r=n?await Promise.all(this.sources.map(async t=>{let r=new Map;if(!t.ready)try{let i=new URLSearchParams({search:n,limit:`100`}),a=await(e.fetch??fetch)(`${t.url}?${i}`,{headers:{accept:`application/json`},signal:AbortSignal.any([this.controller.signal,AbortSignal.timeout(2e4)])});if(!a.ok)throw Error(`Registry unavailable`);let{servers:o}=await a.json();Si(t,r,o)}catch{}return r})):[],i=this.sources.map((e,t)=>{let n=r[t];if(!n?.size)return e.rows;let i=new Map(e.rows);for(let[e,t]of n)i.has(e)||i.set(e,t);return i});if(!this.inFlight&&this.sources.some(e=>e.failed)&&!i.some(e=>[...e.values()].some(e=>e.found)))return d({error:`The MCP registry did not answer. Try again.`},502);let a=new Set,o=this.sources.flatMap((e,t)=>[...i[t]].flatMap(([t,{found:r}],i)=>{if(a.has(t)||(a.add(t),!r))return[];let o=r.verified?r.name.split(`/`)[0].split(`.`).pop().toLowerCase():void 0,s=[r.name.split(`/`).pop(),r.title,...o?[o]:[]].map(e=>e.toLowerCase()),c=!n||s.includes(n)?0:s.some(e=>e.startsWith(n))?1:s.some(e=>e.includes(n))?2:r.description.toLowerCase().includes(n)?3:4;if(c===4)return[];let l=!n||c===3?2:o===n?0:r.verified?1:2;return[{found:r,curated:e.curated,order:i,vendor:l,quality:c}]})),s=e=>Number(e===3);return o.sort((e,t)=>s(e.quality)-s(t.quality)||Number(t.curated)-Number(e.curated)||(e.curated?e.order-t.order:e.vendor-t.vendor||e.quality-t.quality||e.found.name.localeCompare(t.found.name))),d(o.slice(0,30).map(({found:e})=>e),200,this.sources.every(e=>e.ready)?{}:{partial:`true`})}refresh(e){if(this.inFlight||this.closed)return;this.timer&&clearTimeout(this.timer);let t=this.controller=new AbortController;this.inFlight=Promise.all(this.sources.map(n=>this.fill(e,n,t.signal))).then(()=>{}).finally(()=>{this.inFlight=void 0,this.refreshAt=(e.now??Date.now)()+36e5,this.closed||(this.timer=setTimeout(()=>this.refresh(e),36e5),this.timer.unref())}),e.waitUntil?.(this.inFlight)}async fill(e,t,n){let r=new Map,i=new Set,a;try{do{let o=new URLSearchParams({limit:`100`});a&&o.set(`cursor`,a);let s=await(e.fetch??fetch)(`${t.url}?${o}`,{headers:{accept:`application/json`},signal:AbortSignal.any([n,AbortSignal.timeout(2e4)])});if(!s.ok)throw Error(`Registry unavailable`);let{servers:c,metadata:l}=await s.json();if(Si(t,r,c),t.ready||(t.rows=new Map(r)),a=l?.nextCursor,a&&i.has(a))throw Error(`Registry cursor repeated`);a&&i.add(a)}while(a);t.rows=r,t.ready=!0,t.failed=!1}catch{t.failed=!0}}close(){this.closed=!0,this.timer&&clearTimeout(this.timer),this.controller?.abort()}};async function wi(e,t,n){let r=t.settings??={};return await(r.registry??=new Ci).response(t,n.searchParams.get(`q`)??``)}const Ti=[z(`GET`,`/runner/:file`,x),z(`GET`,Xn,Ft),z(`GET`,gr,_r,{guard:M}),z(`GET`,vr,yr,{guard:M}),z(`GET`,br,xr,{guard:M}),z(`GET`,`/health`,(e,t)=>Ar(t)),z(`GET`,new URL(o).pathname,An),z(`GET`,`/`,bt,{guard:ve}),z(`GET`,`/login`,Wt,{guard:wt}),...U(`/login`,Et,wt).filter(e=>e.method!==`GET`),z(`POST`,`/dash/token`,Ct,{guard:Fe}),...U(`/dash/:org/operator`,k,ht),...U(`/dash`,k,cn)],Ei=[z(`GET`,`/api/auth/capabilities`,(e,t)=>d({wular:t.auth?.issuer??null})),...U(`/api/auth`,(e,t)=>t.auth.handler(e),fe),z(`GET`,`/me`,tn,{guard:et})],Di=[...H(`/tasks`,[z(`GET`,`/:id/messages`,On,{guard:A}),z(`POST`,`/:id/ack`,zn,{guard:A}),z(`POST`,`/:id/heartbeat`,sn,{guard:A}),z(`POST`,`/:id/logs`,zt,{guard:T}),z(`POST`,`/:id/result`,_n,{guard:N}),z(`POST`,`/:id/credential`,Un,{guard:N}),z(`POST`,`/:id/connection`,Zt,{guard:W}),z(`POST`,`/:id/reply`,Ut,{guard:W}),z(`POST`,`/:id/react`,Yn,{guard:W}),z(`GET`,`/:id/history`,on,{guard:W}),z(`GET`,`/:id/history/:conversation`,Nt,{guard:W}),z(`POST`,`/:id/history`,Dn,{guard:N}),z(`GET`,`/:id`,Pt,{guard:Ve})]),...H(`/logins`,[z(`GET`,`/:id/input`,Vr,{guard:lr}),z(`GET`,`/:id`,Hr,{guard:lr}),z(`POST`,`/:id`,Ur,{guard:lr})]),...H(`/runners`,[z(`POST`,`/register`,he)])],Oi=[...H(`/create`,[z(`GET`,`/:id`,qr,{guard:V}),z(`POST`,`/:id`,Yr,{guard:V}),z(`GET`,`/:id/callback`,Qr,{guard:V}),z(`POST`,`/:id/callback`,$r,{guard:V})]),...H(`/install`,[z(`GET`,`/:id`,ge,{guard:O}),z(`POST`,`/:id`,ge,{guard:O}),z(`GET`,`/:id/callback`,Ge,{guard:O}),z(`POST`,`/:id/callback`,Ge,{guard:O})])],ki=H(`/connect`,[z(`GET`,`/:integration`,Ot,{guard:xe}),z(`GET`,`/:integration/callback`,kn,{guard:xe})]),Ai=[...H(`/hooks`,[z(`POST`,`/*`,(e,t,n)=>fn(e,t,n[`*`]),{guard:(e,t,n)=>t.integrations[n[`*`]]?t:p()})]),...Oi,...ki],ji=[z(`GET`,`/metrics`,async(e,t)=>d(await Mr(t),200,{"cache-control":`no-store`}),{guard:$n}),z(`GET`,`/usage`,en,{approvalPolicy:`allow`}),z(`GET`,`/usage/totals`,jt,{approvalPolicy:`allow`})],Mi=H(``,[z(`GET`,`/folders`,(e,t)=>d(Qe(t.local.cwd))),z(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return d(De(n?.path))}),z(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return d(await Pe(n?.url))}),z(`POST`,`/folders/pick`,async(e,t)=>d(await dr()))],Me),Ni=H(``,[z(`GET`,`/engines/status`,async(e,t)=>d(await Sn(t))),z(`POST`,`/engines/:engine/login`,Gt),z(`POST`,`/engines/:engine/logout`,Gn)],Re),Pi=[z(`POST`,`/apps/:id/install`,(e,t,n,r)=>bn(e,t,n.id,r.searchParams.get(`back`))),z(`POST`,`/apps/create/:integration`,Xr),z(`GET`,`/apps`,At),z(`DELETE`,`/apps/:id`,Lt),z(`GET`,`/apps/:id/drift`,cr),z(`POST`,`/apps/:id/update`,nt),z(`GET`,`/installations`,Qn),z(`DELETE`,`/installations/:id`,ir,{guard:(e,t)=>Mn(t,`Only an owner or admin can uninstall an app.`)}),z(`GET`,`/connections`,dt,{guard:D,approvalPolicy:`allow`}),z(`POST`,`/connections`,mt,{guard:D}),z(`PATCH`,`/connections/:id`,be,{guard:D}),z(`DELETE`,`/connections/:id`,we,{guard:D}),z(`POST`,`/connections/:id/authorize`,fr,{guard:D}),z(`GET`,`/integrations`,(e,t,n,r)=>$t(t,r)),z(`GET`,`/repositories`,(e,t)=>rn(t)),z(`POST`,`/repositories/refresh`,(e,t)=>rn(t,!0))],Fi=[z(`GET`,`/agents/import`,ni),z(`POST`,`/agents/import`,ri),z(`GET`,`/agents`,St,{approvalPolicy:`allow`}),z(`PATCH`,`/agents/:slug/settings`,ke,{guard:it,approvalPolicy:`ask`,change:`agent-settings`}),z(`GET`,`/agents/:slug/versions`,yt),z(`GET`,`/agents/:slug/versions/:version`,Ye,{approvalPolicy:`allow`}),z(`GET`,`/agents/:slug`,Tt,{approvalPolicy:`allow`}),z(`DELETE`,`/agents/:slug`,je,{guard:(e,t)=>Mn(t,`Only an owner or admin can delete an agent.`)}),z(`PUT`,`/agents/:slug`,Nn,{approvalPolicy:`ask`,change:`agent-version`})],Ii=[z(`GET`,`/credentials`,Dt,{approvalPolicy:`allow`}),z(`POST`,`/credentials`,Fn,{guard:te}),z(`DELETE`,`/credentials/:name`,xt),z(`POST`,`/logins`,Nr,{guard:j}),z(`GET`,`/logins/:id`,Pr,{guard:j}),z(`POST`,`/logins/:id`,Fr,{guard:j}),z(`DELETE`,`/logins/:id`,Ir,{guard:j})],Li=[z(`GET`,`/runners`,nr,{approvalPolicy:`allow`}),z(`POST`,`/runners`,rt),z(`POST`,`/runners/pair`,st),z(`POST`,`/runners/:id/test`,ar),z(`PATCH`,`/runners/:id`,We,{approvalPolicy:`ask`,change:`runner-default`}),z(`DELETE`,`/runners/:id`,se)],Ri=[z(`GET`,`/composer`,tt),z(`GET`,`/tasks`,ae,{approvalPolicy:`allow`}),z(`POST`,`/tasks`,kt,{guard:qt,approvalPolicy:`allow`}),z(`GET`,`/tasks/:id`,at,{guard:S(),approvalPolicy:`allow`}),z(`DELETE`,`/tasks/:id`,pe,{guard:S()}),z(`GET`,`/tasks/:id/logs`,He,{guard:S(),approvalPolicy:`allow`}),z(`GET`,`/tasks/:id/stream`,ii,{guard:S(),approvalPolicy:`allow`}),z(`POST`,`/tasks/:id/steer`,le,{guard:S(!0),approvalPolicy:`allow`}),z(`POST`,`/tasks/:id/ask`,It,{guard:S(!0),approvalPolicy:`allow`}),z(`POST`,`/tasks/:id/approve`,Zn,{guard:S(!0),approvalPolicy:`allow`}),z(`POST`,`/tasks/:id/requests/:approval`,Ee,{guard:S()}),z(`GET`,`/approvals/pending`,(e,t)=>Ne(t),{guard:$n}),z(`POST`,`/tasks/:id/cancel`,rr,{guard:S(),approvalPolicy:`allow`}),z(`POST`,`/tasks/:id/archive`,sr,{guard:S(),approvalPolicy:`allow`}),z(`GET`,`/events`,di,{approvalPolicy:`allow`})],zi=[z(`GET`,`/config`,nn),z(`PATCH`,`/config`,yn)],Bi=[z(`POST`,`/models/probe`,(e,t)=>gt(e,t)),z(`GET`,`/models`,lt,{approvalPolicy:`allow`}),z(`POST`,`/models`,ur),z(`DELETE`,`/models/:name`,E),z(`PATCH`,`/models/:name`,ye,{approvalPolicy:`ask`,change:`model-update`}),z(`POST`,`/models/:name/alias`,Ze,{approvalPolicy:`ask`,change:`model-alias`}),z(`POST`,`/models/:name/disable`,ft,{approvalPolicy:`ask`,change:`model-disable`}),z(`POST`,`/models/:name/enable`,Se,{approvalPolicy:`ask`,change:`model-enable`})],Vi=[z(`GET`,`/mcp-registry`,(e,t,n,r)=>wi(e,t,r))],Hi=H(`/operator`,[z(`GET`,`/apps`,ot),z(`POST`,`/apps/:integration`,me),z(`GET`,`/apps/:integration/drift`,ue),z(`POST`,`/apps/:integration/update`,Ue),z(`GET`,`/audit`,tr)],ct),Ui=[z(`GET`,`/flows`,w),z(`GET`,`/pulls`,ln),z(`POST`,`/flows/:name/run`,ze),z(`POST`,`/review`,Ie)],Wi=H(`/admin`,[...ji,...Mi,...Ni,...Pi,...Fi,...Ii,...Li,...Ri,...zi,...Bi,...Vi,...Ui,...Hi]).map(e=>({...e,guard:ie(e.guard,e)})),Gi=[z(`GET`,`/connections/oauth/callback`,(e,t,n,r)=>or(e,t,r),{guard:ce}),...Di,...Wi,...Ei,...Ai,...Ti];async function Ki(e,t,n){if(!Te(e,t))return p();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await Wn(Gi,e,t,r)??k(e,t))}async function qi(e,t,n={}){t.limits??=new Cn((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new pi,t.logWatcher??=new hi,t.dashboardHosts??=new Pn;let r=()=>Ji(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function Ji(e,t,n){let r=await m(e,v(new URL(e.url).pathname));if(r instanceof Response)return r;let i=Ae(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await Rn(i.req,i.ctx,r),s=u(o instanceof Response?o:await Ki(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,d=c[1]===`admin`&&c[2]===`tasks`;if(e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&!(o instanceof Response)){let e=o.scope instanceof Response?void 0:o.scope??i.ctx;e&&Oe(e,e.organizationId)}return e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&[`heartbeat`,`logs`].includes(c[3]))&&!(d&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||d||c[1]===`admin`&&c[2]===`review`||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&Kt(t,d&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?f(s,i.end):s}finally{a||i.end()}}async function Yi(t={}){let n=t.env??K.env,r=y(n,t.host??`node`),i=t.runner??r.runner;if((t.host===`vercel`||n.VERCEL)&&(i===`local`||i===`local-docker`))throw new e(`invalid-option`,`The ${i} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(r.store===`memory`&&i!==`local`&&i!==`local-docker`)throw new e(`invalid-option`,`The ${i} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!r.publicUrl)throw new e(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let a=[];if(r.store===`memory`&&!t.local&&a.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!n.SERVER_ENCRYPTION_KEY&&!t.local&&a.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),r.store===`postgres`&&!r.encryptionKey)throw new e(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let o=s(r.integrations),c=r.store===`memory`&&!r.adminToken?Er(18).toString(`base64url`):void 0;r.store===`postgres`&&r.adminToken&&a.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let l={...r,...r.store===`postgres`?{adminToken:void 0}:{},...c?{adminToken:c}:{},...t.runner?{runner:t.runner}:{}},u=await pn(l,{local:!!t.local});try{l.store===`memory`&&await hr(u.store(u.defaultOrganizationId),Date.now());let r=u.connection&&l.auth?await(await import(`./auth-oCvlHitk.js`)).createAuth(u.connection.db,l):void 0,i=t.cwd??K.cwd(),s=u.store(u.defaultOrganizationId),d=pt({kind:l.runner,workDir:l.workDir,config:l.runnerConfig,local:!(t.host===`vercel`||n.VERCEL),sandbox:{region:ut(l.databaseUrl),snapshots:_t(s)}});if(!d[l.runner])throw await u.close(),new e(`invalid-option`,`Runner ${l.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let f=new Pn,p=new Cn,m=new Ci,h=new Map,g=new Map,_=new pi,v=new hi,y=e=>{let n=h.get(e);if(n)return n;let a=u.store(e),s=new Map,c={registry:m},b={limits:p,...u.connection?{databaseHealth:async()=>{let{sql:e}=await import(`./drizzle-orm-CYU7WOQS.js`).then(e=>e.t);await u.connection.db.execute(e`select 1`)},statementTimeout:u.connection.statementTimeout}:{},config:l,settings:c,organizationId:e,integrations:o,runners:d,store:a,queue:u.queue,requestScopes:g,taskWatcher:_,logWatcher:v,dashboardHosts:f,dbProfile:u.connection?.profile,chatState:u.chatState,fileReads:s,repositoryLists:new Map,loadAgent:Be(o,{...t.local?{cwd:i}:{},config:l,store:a,fileReads:s,settings:c}),...r?{auth:r}:{},scope:y,webhookTarget:(e,t)=>u.webhookTarget(e,t),appRecord:e=>u.appRecord(e),apps:e=>u.apps(e),installationOrganization:e=>u.installationOrganization(e),installations:e=>u.installations(e),serverOrganizationId:u.defaultOrganizationId,taskOrganization:(e,t)=>u.taskOrganization(e,t),...t.local?{local:t.local}:{}};return h.set(e,b),b};globalThis.__coder={handle:e=>qi(e,y(u.defaultOrganizationId),{inProcess:!0})};let b=y(u.defaultOrganizationId);b.local&&Sn(b).catch(()=>{});let x;return t.local&&(await Hn(b),x=setImmediate(()=>{Jn(b).catch(()=>void 0)})),{config:l,context:y,defaultContext:b,warnings:a,...c?{mintedToken:c}:{},sweep:u.sweep,close:async()=>{m.close(),_.close(),v.close(),x&&clearImmediate(x),await b.local?.usageSync?.catch(()=>void 0),await Rt(b),await u.close()}}}catch(e){throw await u.close(),e}}const $=36e5;function Xi(e){try{let t=new URL(e);return G.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function Zi(e=K.env,t=e.VERCEL?`vercel`:`node`){b();let n,r,i=()=>n??=Yi({env:e,host:t}).catch(e=>{throw n=void 0,e}),a=e=>Promise.all([e.sweep(),ee(e.defaultContext,!1,!0),qe(e.defaultContext)]).then(()=>void 0);return Object.assign(async(t,n)=>{let o=await i(),s=n?e=>n(e):e=>void e.catch(()=>{}),c=Date.now();(r===void 0||c-r>=$)&&(r=c,s(o.defaultContext.store.create(`delivery`,`maintenance:${o.config.publicUrl}`,{at:c},{ttlMs:$}).then(e=>e?a(o):void 0).catch(e=>console.error(`coder server: maintenance failed`,e))));let l=e=>({...o.context(e),waitUntil:s,scope:l});return qi(t,l(o.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await i();await a(e)},close:async()=>{let e=n;n=void 0,r=void 0,await(await e)?.close()}})}function Qi(e){let t=wr(`lsof`,[`-nP`,`-iTCP:${e}`,`-sTCP:LISTEN`,`-t`],{encoding:`utf8`}),n=Number(t.stdout?.split(`
|
|
12
|
-
`)[0]);if(n)return{pid:n,command:wr(`ps`,[`-o`,`command=`,`-p`,String(n)],{encoding:`utf8`}).stdout?.trim().slice(0,120)||`another process`}}function $i(t){let n=Qi(t),r=n&&/\bcoder (dash|server serve)\b/.test(n.command);return new e(`server`,n?r?`Coder is already running on port ${t} (pid ${n.pid}): http://localhost:${t}`:`Port ${t} is in use by ${n.command} (pid ${n.pid}).`:`Port ${t} is in use.`,{hint:n?`Stop it with \`kill ${n.pid}\`, or use another port: --port ${t+1}`:`Use another port: --port ${t+1}`})}async function ea(n={}){b();let r=n.env??K.env;if(n.runner&&!re.includes(n.runner))throw new e(`invalid-option`,`Invalid --runner value: use ${re.join(`, `)}`);if(n.port!==void 0&&(!Number.isInteger(n.port)||n.port<1||n.port>65535))throw new e(`invalid-option`,`Invalid port: use 1 through 65535.`);let i=r.PORT&&/^\d+$/.test(r.PORT)?Number(r.PORT):void 0,a=Xi(r.PUBLIC_URL),o=n.port??i??a??8787;if(!Number.isInteger(o)||o<1||o>65535)throw new e(`invalid-option`,`Invalid PORT: use 1 through 65535.`);let s=r.PUBLIC_URL?r:{...r,PUBLIC_URL:`http://localhost:${o}`},c=!!(r.DATABASE_URL||r.POSTGRES_URL);if(c&&n.memory)throw new e(`invalid-option`,`A memory server cannot use DATABASE_URL.`,{hint:`Unset DATABASE_URL, or drop --memory.`});let l=(n.host??r.HOST??(c?void 0:`127.0.0.1`))?.replace(/^\[(.*)\]$/,`$1`),u=!c&&!n.memory;if(u&&!G.has(l))throw new e(`invalid-option`,`A local server listens on loopback only.`,{hint:`Reach it through a tunnel or a proxy on this machine; set DATABASE_URL for a deployment, or use --memory for a test server.`});if(n.memory&&r.VERCEL)throw new e(`invalid-option`,`A memory server cannot run on Vercel.`,{hint:`Set DATABASE_URL for a real deployment.`});let d,f,p=u?new Promise((e,n)=>{f=n,d=()=>{t().then(e,n)}}):void 0,m=p?.then(()=>void 0).catch(()=>void 0),h=u?{cwd:n.cwd??K.cwd(),port:o,cacheMaintenance:m}:void 0,g=await Yi({cwd:n.cwd,env:s,runner:n.runner,...h?{local:h}:{}}),v=g.defaultContext,y=()=>{g.sweep().catch(e=>console.error(`coder server: sweep failed`,e))};y();let x=setInterval(y,$);x.unref();let S=setInterval(()=>{ee(v,!1,!0).catch(e=>console.error(`coder server: scheduled kick failed`,e)),qe(v).catch(e=>console.error(`coder server: inbox flush failed`,e))},6e4);S.unref();let C=Or.createServer(_((e,t)=>qi(e,v,{clientIp:t}),{admit:e=>c||Je(e.socket.remoteAddress,e.url??`/`)})),te=g.config.publicUrl;a!==void 0&&a!==o&&g.warnings.push(`PUBLIC_URL points at port ${a} but the server listens on ${o}`),await new Promise((e,t)=>{C.once(`error`,t),C.listen(o,l,e)}).catch(async e=>{throw f?.(e),clearInterval(S),clearInterval(x),await g.close(),e.code===`EADDRINUSE`?$i(o):e}),d?.();let w=!1,ne=async()=>{w||(w=!0,clearInterval(S),clearInterval(x),v.taskWatcher?.close(),v.logWatcher?.close(),await new Promise((e,t)=>C.close(n=>n?t(n):e())),await m,await g.close())},T=v.auth?`Wular Auth (${v.auth.issuer})`:void 0,E=`http://localhost:${o}`,D=vt(v),ie=D===`local`?E:te,ae=g.config.store===`memory`?g.mintedToken??r.ADMIN_TOKEN:void 0;return{address:E,publicUrl:te,warnings:g.warnings,close:ne,runner:g.config.runner,store:g.config.store,mode:D,...p?{cacheMigration:p}:{},maxTasks:g.config.maxTasks??g.config.limits?.concurrentTasks??10,...T?{signIn:T}:{},...g.mintedToken?{mintedToken:g.mintedToken}:{},...g.config.store===`postgres`&&r.DATABASE_URL?{database:(await import(`./client-nBo9Mhsr.js`).then(e=>e.n)).describeDatabase(r.DATABASE_URL)}:{},...G.has(new URL(ie).hostname)?{dashboard:`${ie}/dash${ae?`#token=${encodeURIComponent(ae)}`:``}`}:{}}}async function ta(t={}){try{return await ea(t)}catch(t){if(t instanceof e)throw t;let n=t instanceof Error&&t.cause instanceof Error?`: ${t.cause.message}`:``;throw new e(`server`,`${t instanceof Error?t.message:String(t)}${n}`)}}export{ta as serve,Zi as serverHandler};
|