@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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A as e,C as t,E as n,Ea as r,En as i,I as a,O as o,P as s,T as c,_ as l,b as u,g as d,gt as ee,h as f,j as p,k as te,kn as ne,pn as m,x as h,y as re}from"./args-CJsHYWbt.js";import{W as g,bt as ie,p as _,st as v}from"./state-Br-Fuaxg.js";import{t as ae}from"./types-DHBqXFE2.js";import y from"node:path";import b from"node:fs";import x from"node:net";import{createHash as oe}from"node:crypto";function se(e,t){for(let n of Object.values(e??{}))n.repository=t}function ce(e){let t={...e.url?{url:e.url}:{command:e.command,args:e.args??[]},headers:Object.keys(e.headers??{}).sort(),env:Object.keys(e.env??{}).sort()};return oe(`sha256`).update(JSON.stringify(t)).digest(`hex`)}function le(){try{let e=JSON.parse(b.readFileSync(_(`state`,`global`,`mcp-approvals.json`),`utf8`));return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch(e){if(e.code===`ENOENT`||e instanceof SyntaxError)return{};throw e}}function ue(e){return le()[ce(e)]===!0}async function de(e,t,n){if(!t)throw Error(`Usage: coder connection approve <name> [--agent <id>]`);let r=V(e).mcp?.[t],i=[];r&&!n&&i.push(r);let{loadAgents:a}=await import(`./load-PqaDHiHX.js`).then(e=>e.l),{INTEGRATIONS:o}=await import(`./integrations-BVmsk64f.js`).then(e=>e.r);for(let r of await a(e,o,{includeDisabled:!0})){let e=r.definition.mcp?.[t];e&&(!n||r.id===n)&&i.push(e)}if(!i.length)throw Error(`No MCP server "${t}". Use --cwd to select its repository.`);if(i.some(e=>e.connection))throw Error(`MCP server "${t}" uses a connection and needs no repository approval.`);let s=new Set(i.map(ce));if(s.size!==1)throw Error(`MCP server "${t}" has different definitions. Select one with --agent <id>.`);let c=_(`state`,`global`,`mcp-approvals.json`);b.mkdirSync(y.dirname(c),{recursive:!0});let l=le();return l[[...s][0]]=!0,ie(c,l),b.chmodSync(c,384),{name:t,file:c}}function fe(e){return!/\$\{[^}]+\}/.test(e)&&(/^(?:Bearer\s+\S+|ghp_|github_pat_|xox[a-z]-|sk-|lin_api_)/i.test(e)||/^[A-Za-z0-9_+\/.=-]{32,}$/.test(e))}function pe(e,t){if(!t||typeof t!=`object`)return[];let{url:n,headers:r,env:i}=t,a=e=>e&&typeof e==`object`&&!Array.isArray(e)?Object.entries(e).filter(e=>typeof e[1]==`string`):[],o=[];typeof n==`string`&&[n,...a(r).map(([,e])=>e)].some(e=>/\$\{[^}]+\}/.test(e))&&o.push(`MCP server "${e}" keeps remote URL and header variables literal. Use a connection for credentials.`);for(let[t,n]of[[`headers`,r],[`env`,i]])for(let[r,i]of a(n))fe(i)&&o.push(`MCP server "${e}" has a literal secret in ${t}.${r}. Use a connection instead.`);return o}var me=r({ACCESS:()=>ae,ACCESS_MODES:()=>ge,BRIDGE_HEADERS:()=>U,BUILTIN_MODELS:()=>S,CLAUDE_ACCESS_FLAGS:()=>ve,CLAUDE_SANDBOX_UNAVAILABLE_PATTERN:()=>be,CLAUDE_SIDECAR_FLAGS:()=>ye,CONFIG_PATCHES:()=>Ve,CONFIG_SCHEMA_URL:()=>A,CONFIG_VERSION:()=>1,DEFAULT_CONFIG:()=>v,DEFAULT_EFFORT:()=>he,EFFORTS:()=>C,MACHINE_SANDBOX_ENV:()=>xe,MODEL_SPEC_FORMS:()=>T,PUBLIC_REGISTRY_HOSTS:()=>_e,WORKSPACE_CONFIG_ENV:()=>B,accessSchema:()=>w,aliasTarget:()=>X,assertModelEnabled:()=>K,claudeAutoMode:()=>we,claudeTurnSettings:()=>Te,codexTurnNetwork:()=>Fe,config:()=>at,configJsonSchema:()=>Me,configSet:()=>it,configTargetFile:()=>Q,endpointCandidates:()=>Je,isAliasModel:()=>M,isBuiltinAlias:()=>G,isEndpointModel:()=>j,loadConfig:()=>V,mcpEntrySchema:()=>k,migrateConfigFile:()=>Ge,modelName:()=>Z,modelSpecSchema:()=>E,normalizeBaseUrl:()=>H,parseEngineSpec:()=>$e,persistModelPatch:()=>Ke,removeModel:()=>ze,resolveCodexModel:()=>W,resolveCustomModel:()=>Ye,resolveUserConfigFile:()=>R,resolveWorkspaceConfigFile:()=>z,sameModel:()=>et,schemaIssues:()=>N,splitEngineSpec:()=>J,strictestAccess:()=>Ne,toggleModel:()=>Re,turnHosts:()=>Pe,upgradeConfig:()=>P,validateConfig:()=>F,withDefaults:()=>He,writeConfigFile:()=>$,writeUserConfig:()=>tt});const S={luna:`codex/gpt-6-luna`,sol:`codex/gpt-6.1-sol`,astra:`codex/gpt-6-astra`,sonnet:`claude/sonnet`,opus:`claude/opus`,fable:`claude/fable`,codex:`codex/sol`,claude:`claude/opus`},C=new Set([`low`,`medium`,`high`]),he=`medium`,ge={"read-only":{sandbox:`read-only`,approvalPolicy:`never`,approvalMode:null,approvalsReviewer:null},auto:{sandbox:`workspace-write`,approvalPolicy:`on-request`,approvalMode:`auto`,approvalsReviewer:`auto_review`}},_e=[`registry.npmjs.org`,`registry.yarnpkg.com`,`pypi.org`,`files.pythonhosted.org`,`index.crates.io`,`static.crates.io`,`proxy.golang.org`,`sum.golang.org`],ve={"read-only":[`--permission-mode`,`dontAsk`,`--disallowedTools`,`Edit`,`Write`,`MultiEdit`,`NotebookEdit`],auto:[`--permission-mode`,`auto`]},ye=[`--permission-mode`,`dontAsk`,`--disallowedTools`,`Edit`,`Write`,`MultiEdit`,`NotebookEdit`,`Bash`,`WebFetch`,`WebSearch`,`Task`],be=/failIfUnavailable|sandbox\b[^.\n]*?(?:failed|could ?n[o']t|cannot|unavailable|not available|not supported)/i,xe=`CODER_MACHINE_SANDBOX`,Se=new Set([`localhost`,`127.0.0.1`,`::1`,`[::1]`]);function Ce(e){return e.flatMap(e=>x.isIPv6(e)?[`[${e}]`]:e.startsWith(`[`)||e.includes(`:`)||x.isIP(e)?[e]:[e,`*.${e}`])}function we(e,t){return{environment:[`$defaults`,e?`Host containment: an automated coding task on the user's own developer machine with open internet; the working directory is the user's workspace, the task has its own scratch folder under the temp directory, and nothing else on the machine is the task's.`:`Host containment: an automated coding task on a throwaway cloud machine with open internet and no neighbours; nothing on it is the user’s, it holds no cloud identity, and instance-metadata credentials are never task credentials.`,...t.length?[`Trusted internal domains: ${t.join(`, `)}`]:[]],allow:[`$defaults`,`Public Network Reads: fetching public web pages, documentation, search results and downloads, reading package registries, installing packages, and cloning or fetching public repositories into the workspace or the scratch folder are routine, whatever the host, as long as nothing leaves the machine beyond the request itself: no repository content, secrets, environment or user data in the request body, query or headers.`]}}function Te(e,t,n=[],r=[],i=!0,a,o=!0,s,c=[]){let l=r;if(!i)return JSON.stringify({permissions:{additionalDirectories:r,allow:[`Bash`],...e===`read-only`?{deny:[`Edit`,`Write`,`MultiEdit`,`NotebookEdit`]}:{}},sandbox:{enabled:!1}});if(e===`read-only`){let e=Ce(n);return JSON.stringify({...l.length?{permissions:{additionalDirectories:l}}:{},sandbox:{enabled:!0,failIfUnavailable:!0,allowUnsandboxedCommands:!1,autoAllowBashIfSandboxed:!0,network:{strictAllowlist:!0,...e.length?{allowedDomains:e}:{},...c.length?{allowUnixSockets:c}:{}},filesystem:{denyWrite:[t,...r]}}})}let u=[...Ce(n),..._e];return JSON.stringify({...l.length?{permissions:{additionalDirectories:l}}:{},sandbox:{enabled:!0,allowUnsandboxedCommands:!0,autoAllowBashIfSandboxed:!0,network:{allowedDomains:u,...c.length?{allowUnixSockets:c}:{},...n.some(e=>Se.has(e))?{allowLocalBinding:!0}:{}},filesystem:{...a?{allowWrite:[a]}:{},denyWrite:[t,...l].map(e=>y.join(e,`.git`))}},autoMode:we(o,n),...s?{hooks:{PreToolUse:[{matcher:`Bash`,hooks:[{type:`command`,command:s}]}]}}:{}})}f([`codex`,`claude`,`custom`]),f([`low`,`medium`,`high`]);const w=f(ae,{error:`Use read-only or auto`}),T=`Use <name>[/<effort>] or <engine>/<model>[/<effort>], such as sol, sol/low, claude/opus or codex/gpt-6.1-sol/high.`,E=p().check(te(e=>!!Qe(e),T)),Ee=e({baseUrl:a(),model:p().check(m(1)),envKey:c(p().check(m(1))),wireApi:c(f([`chat`,`responses`])),contextWindow:c(t().check(u(),i())),disabled:c(l())}),De=s([E,h(!1),Ee]),D=e({allowedHosts:d(p()),readOnlyTasks:c(l())}),O=p().check(ne(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),Oe=e({allowedEvents:c(d(p()))}),ke=s([l(),e({model:c(E),access:c(w),runner:c(f([`local`,`local-docker`,`vercel-sandbox`,`github-actions`])),integrations:c(o(p(),Oe)),connections:c(d(p())),disabled:c(l())})]),k=e({connection:c(p().check(m(1))),command:c(p().check(m(1))),args:c(d(p())),env:c(o(p(),p())),url:c(p().check(m(1))),type:c(f([`stdio`,`http`],{error:`Use type stdio or http; legacy SSE servers are not supported, use their streamable HTTP URL`})),headers:c(o(p(),p())),tools:c(d(p())),description:c(p()),connect:c(f([`start`,`first-use`]))}).check(te(e=>e.connection?[e.url,e.command,e.args,e.env,e.headers,e.type].every(e=>e===void 0):!!e.command!=!!e.url,`Use a connection alone, without url, command, args, env, headers or type; otherwise supply one of command or url`)),Ae=e({$schema:c(p()),version:h(1),chain:d(E).check(m(1)),reviewModel:E,models:c(o(p().check(ne(/^[a-z0-9][a-z0-9./_-]*$/i,`model name`)),De)),agents:c(o(O,ke)),mcp:c(o(O,k)),network:D}),je=n(re(Ae,{network:n(D)})),A=`https://coder.wular.ai/schema/config.v1.json`,Me=()=>({$id:A,...ee(je,{unrepresentable:`any`})});function j(e){return typeof e==`object`&&!!e}function M(e){return typeof e==`string`}function Ne(...e){return e.includes(`read-only`)?`read-only`:`auto`}const Pe=(e,t)=>e===`auto`||t.readOnlyTasks?t.allowedHosts:[];function Fe(e,t){let n=e===`auto`;if(n||!t.length)return{networkAccess:n,configOverrides:{}};let r=t.map(e=>{let t=e.replace(/^\[(.*)\](?::\d+)?$/,`$1`).replace(/^([^:]+):\d+$/,`$1`);return[x.isIP(t)||Se.has(t)?t:`**.${t}`,`allow`]});return{networkAccess:!0,configOverrides:{"features.network_proxy.enabled":!0,"features.network_proxy.domains":Object.fromEntries(r)}}}const Ie=/^(?!-)[a-z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-z0-9-]{1,63}(?<!-))*(?::\d{1,5})?$/i;function Le(e){if(x.isIP(e))return!0;let t=/^\[([^\]]+)\](?::\d{1,5})?$/.exec(e);return t?x.isIPv6(t[1]):e.length<=253&&Ie.test(e)}function Re(e,t,n){let r=e[t];if(n&&typeof r==`string`)throw Error(`Alias "${t}" can't be turned off; remove it instead.`);j(r)?n?r.disabled=!0:delete r.disabled:n?e[t]=!1:r===!1&&delete e[t]}function ze(e,t){delete e.models?.[t];let n=e=>!q(t)&&typeof e==`string`&&e.split(`/`).slice(0,2).includes(t);n(e.reviewModel)&&delete e.reviewModel;let r=e.chain?.filter(e=>!n(e));r?.length?e.chain=r:delete e.chain}function N(e,t=[]){return e.flatMap(e=>e.code===`invalid_union`?e.errors.flatMap(n=>N(n,[...t,...e.path])):[`${[...t,...e.path].map(String).join(`.`)||`(root)`}: ${e.code===`unrecognized_keys`?`Unrecognized ${e.keys.length===1?`key`:`keys`}: ${e.keys.map(e=>JSON.stringify(e)).join(`, `)}`:e.message}`])}function Be(e){let t=structuredClone(e),n=[],r=(e,t)=>{if(typeof e!=`string`||!e.includes(`:`))return e;let r=e.replaceAll(`:`,`/`);return n.push(`${t}: "${e}" is now "${r}"`),r},i=(e,t,n)=>[e,t??(n?J(S[e]).model:void 0),n].filter(Boolean).join(`/`),a={...t.models};for(let[e,t]of Object.entries(a))typeof t==`string`&&(a[e]=r(t,`models.${e}`)),!(!t||typeof t!=`object`||`baseUrl`in t)&&(`provider`in t||`model`in t?(a[e]=t.disabled?!1:`provider`in t?i(t.provider,t.model,t.effort):String(r(t.model,`models.${e}`)),n.push(`models.${e}: the alias is now ${JSON.stringify(a[e])}`)):t.disabled===!0?(a[e]=!1,n.push(`models.${e}: the toggle is now false`)):(delete a[e],n.push(`models.${e}: an enable toggle is not needed and was removed`)));let o={};for(let[e,r]of Object.entries(t.engines??{})){let{model:t,effort:s}=r??{};(t||s)&&a[e]===void 0&&(t||e!==`custom`)&&(a[e]=i(e,t,s),n.push(`engines.${e}: its model is now the alias models.${e} = "${a[e]}"`)),e===`codex`&&r?.network===!0?(o.readOnlyTasks=!0,n.push(`engines.codex.network is now network.readOnlyTasks, for every engine`)):e===`codex`&&r?.network===!1&&n.push(`engines.codex.network: false was removed; auto tasks keep their network`)}if(delete t.engines,t.approvals&&typeof t.approvals==`object`){let{allowedNetworkHosts:e,...r}=t.approvals;e&&(o.allowedHosts=e,n.push(`approvals.allowedNetworkHosts is now network.allowedHosts`)),Object.keys(r).length?t.approvals=r:delete t.approvals}Object.keys(o).length&&(t.network={...t.network,...o}),Object.keys(a).length&&(t.models=a),Array.isArray(t.chain)&&(t.chain=t.chain.map((e,t)=>r(e,`chain.${t}`))),t.reviewModel&&=r(t.reviewModel,`reviewModel`);for(let[e,o]of Object.entries(t.agents??{}))if(!(!o||typeof o!=`object`))if(o.engine||o.effort){let{engine:r,model:s,effort:c,...l}=o,u=r??(typeof a[s]==`string`?void 0:Y(s,{models:a}));t.agents[e]={...l,model:i(u,s,c)},n.push(`agents.${e}: its engine, model and effort are now model "${t.agents[e].model}"`)}else o.model&&=r(o.model,`agents.${e}.model`);return t.version=1,{config:t,notes:n}}const Ve=[Be];function P(e){let t=typeof e.version==`number`?e.version:0;if(t>1)throw Error(`Written by a newer Coder (config version ${t}); run coder upgrade.`);let n=e,r=[];for(let e of Ve.slice(t)){let t=e(n);n=t.config,r.push(...t.notes)}return{config:n,notes:r,version:t}}function F(e){let t=je.safeParse(e);if(!t.success)return N(t.error.issues);let n=L(v,t.data),r=[];for(let[e,n]of(t.data.network?.allowedHosts??[]).entries())Le(n)||r.push(`network.allowedHosts.${e}: "${n}" is not a host name or IP address`);for(let[e,i]of Object.entries(t.data.models??{})){if(C.has(e)){r.push(`models.${e}: ${e} is an effort, not a model name`);continue}let t=M(i)?X(i,n):void 0,a=t?.model?n.models?.[t.model]:void 0;if(q(e)){t?.engine===e?e===`custom`&&!(a&&j(a))&&r.push(`models.custom: "${t.model??``}" names no custom model`):r.push(`models.${e}: The ${e} alias names a ${e} model, such as ${e}/<model>`);continue}if(t?.engine===`custom`){r.push(`models.${e}: Only custom aliases a custom model`);continue}a&&!j(a)&&r.push(`models.${e}: alias target "${t.model}" is itself a config entry`)}return r}function I(e){if(!b.existsSync(e))return null;try{return JSON.parse(b.readFileSync(e,`utf8`))}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Invalid JSON in ${e}: ${n}`)}}function He(e){return L(v,e)}function L(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t??e;let n={...e},r=e;for(let[e,i]of Object.entries(t))n[e]=i&&typeof i==`object`&&!Array.isArray(i)&&r?.[e]&&typeof r[e]==`object`?L(r[e],i):i;return n}function R(){return _(`config.json`)}function z(e){return y.join(e,`.coder`,`config.json`)}const B=`CODER_WORKSPACE_CONFIG`;function Ue(e,t){let n=t.network?.allowedHosts?.filter(t=>e.network.allowedHosts.includes(t)),r=Object.entries(t.models??{}).filter(([,e])=>e===!1||j(e)&&e.disabled);return{...t.mcp?{mcp:t.mcp}:{},...t.chain?{chain:t.chain.filter(t=>e.chain.includes(t))}:{},...t.reviewModel?{reviewModel:t.reviewModel}:{},models:Object.fromEntries(r.map(([e])=>[e,!1])),...n?{network:{...e.network,allowedHosts:n}}:{}}}function We(e,t,n){let{config:r,version:i}=P(t);return i===1||!e.endsWith(`.json`)?r:n?(process.stderr.write(`${e} is config version ${i}; coder config migrate rewrites it.\n`),r):(b.copyFileSync(e,`${e}.bak`),b.writeFileSync(e,`${JSON.stringify(r,null,2)}\n`,`utf8`),process.stderr.write(`Updated ${e} to config version 1; the old one is ${e}.bak.\n`),r)}function Ge(e,t){let n=Q(e,t),r=I(n);if(!r)return{file:n,version:1,notes:[]};let{config:i,notes:a,version:o}=P(r),s=F(i);if(s.length)throw Error(`Invalid config in ${n}:\n ${s.join(`
|
|
1
|
+
import{A as e,C as t,E as n,Ea as r,En as i,I as a,O as o,P as s,T as c,_ as l,b as u,g as d,gt as ee,h as f,j as p,k as te,kn as ne,pn as m,x as h,y as re}from"./args-CJsHYWbt.js";import{W as g,bt as ie,p as _,st as v}from"./state-CxAUec80.js";import{t as ae}from"./types-DHBqXFE2.js";import y from"node:path";import b from"node:fs";import x from"node:net";import{createHash as oe}from"node:crypto";function se(e,t){for(let n of Object.values(e??{}))n.repository=t}function ce(e){let t={...e.url?{url:e.url}:{command:e.command,args:e.args??[]},headers:Object.keys(e.headers??{}).sort(),env:Object.keys(e.env??{}).sort()};return oe(`sha256`).update(JSON.stringify(t)).digest(`hex`)}function le(){try{let e=JSON.parse(b.readFileSync(_(`state`,`global`,`mcp-approvals.json`),`utf8`));return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch(e){if(e.code===`ENOENT`||e instanceof SyntaxError)return{};throw e}}function ue(e){return le()[ce(e)]===!0}async function de(e,t,n){if(!t)throw Error(`Usage: coder connection approve <name> [--agent <id>]`);let r=V(e).mcp?.[t],i=[];r&&!n&&i.push(r);let{loadAgents:a}=await import(`./load-BtIDghgd.js`).then(e=>e.l),{INTEGRATIONS:o}=await import(`./integrations-DSZSa8Rc.js`).then(e=>e.r);for(let r of await a(e,o,{includeDisabled:!0})){let e=r.definition.mcp?.[t];e&&(!n||r.id===n)&&i.push(e)}if(!i.length)throw Error(`No MCP server "${t}". Use --cwd to select its repository.`);if(i.some(e=>e.connection))throw Error(`MCP server "${t}" uses a connection and needs no repository approval.`);let s=new Set(i.map(ce));if(s.size!==1)throw Error(`MCP server "${t}" has different definitions. Select one with --agent <id>.`);let c=_(`state`,`global`,`mcp-approvals.json`);b.mkdirSync(y.dirname(c),{recursive:!0});let l=le();return l[[...s][0]]=!0,ie(c,l),b.chmodSync(c,384),{name:t,file:c}}function fe(e){return!/\$\{[^}]+\}/.test(e)&&(/^(?:Bearer\s+\S+|ghp_|github_pat_|xox[a-z]-|sk-|lin_api_)/i.test(e)||/^[A-Za-z0-9_+\/.=-]{32,}$/.test(e))}function pe(e,t){if(!t||typeof t!=`object`)return[];let{url:n,headers:r,env:i}=t,a=e=>e&&typeof e==`object`&&!Array.isArray(e)?Object.entries(e).filter(e=>typeof e[1]==`string`):[],o=[];typeof n==`string`&&[n,...a(r).map(([,e])=>e)].some(e=>/\$\{[^}]+\}/.test(e))&&o.push(`MCP server "${e}" keeps remote URL and header variables literal. Use a connection for credentials.`);for(let[t,n]of[[`headers`,r],[`env`,i]])for(let[r,i]of a(n))fe(i)&&o.push(`MCP server "${e}" has a literal secret in ${t}.${r}. Use a connection instead.`);return o}var me=r({ACCESS:()=>ae,ACCESS_MODES:()=>ge,BRIDGE_HEADERS:()=>U,BUILTIN_MODELS:()=>S,CLAUDE_ACCESS_FLAGS:()=>ve,CLAUDE_SANDBOX_UNAVAILABLE_PATTERN:()=>be,CLAUDE_SIDECAR_FLAGS:()=>ye,CONFIG_PATCHES:()=>Ve,CONFIG_SCHEMA_URL:()=>A,CONFIG_VERSION:()=>1,DEFAULT_CONFIG:()=>v,DEFAULT_EFFORT:()=>he,EFFORTS:()=>C,MACHINE_SANDBOX_ENV:()=>xe,MODEL_SPEC_FORMS:()=>T,PUBLIC_REGISTRY_HOSTS:()=>_e,WORKSPACE_CONFIG_ENV:()=>B,accessSchema:()=>w,aliasTarget:()=>X,assertModelEnabled:()=>K,claudeAutoMode:()=>we,claudeTurnSettings:()=>Te,codexTurnNetwork:()=>Fe,config:()=>at,configJsonSchema:()=>Me,configSet:()=>it,configTargetFile:()=>Q,endpointCandidates:()=>Je,isAliasModel:()=>M,isBuiltinAlias:()=>G,isEndpointModel:()=>j,loadConfig:()=>V,mcpEntrySchema:()=>k,migrateConfigFile:()=>Ge,modelName:()=>Z,modelSpecSchema:()=>E,normalizeBaseUrl:()=>H,parseEngineSpec:()=>$e,persistModelPatch:()=>Ke,removeModel:()=>ze,resolveCodexModel:()=>W,resolveCustomModel:()=>Ye,resolveUserConfigFile:()=>R,resolveWorkspaceConfigFile:()=>z,sameModel:()=>et,schemaIssues:()=>N,splitEngineSpec:()=>J,strictestAccess:()=>Ne,toggleModel:()=>Re,turnHosts:()=>Pe,upgradeConfig:()=>P,validateConfig:()=>F,withDefaults:()=>He,writeConfigFile:()=>$,writeUserConfig:()=>tt});const S={luna:`codex/gpt-6-luna`,sol:`codex/gpt-6.1-sol`,astra:`codex/gpt-6-astra`,sonnet:`claude/sonnet`,opus:`claude/opus`,fable:`claude/fable`,codex:`codex/sol`,claude:`claude/opus`},C=new Set([`low`,`medium`,`high`]),he=`medium`,ge={"read-only":{sandbox:`read-only`,approvalPolicy:`never`,approvalMode:null,approvalsReviewer:null},auto:{sandbox:`workspace-write`,approvalPolicy:`on-request`,approvalMode:`auto`,approvalsReviewer:`auto_review`}},_e=[`registry.npmjs.org`,`registry.yarnpkg.com`,`pypi.org`,`files.pythonhosted.org`,`index.crates.io`,`static.crates.io`,`proxy.golang.org`,`sum.golang.org`],ve={"read-only":[`--permission-mode`,`dontAsk`,`--disallowedTools`,`Edit`,`Write`,`MultiEdit`,`NotebookEdit`],auto:[`--permission-mode`,`auto`]},ye=[`--permission-mode`,`dontAsk`,`--disallowedTools`,`Edit`,`Write`,`MultiEdit`,`NotebookEdit`,`Bash`,`WebFetch`,`WebSearch`,`Task`],be=/failIfUnavailable|sandbox\b[^.\n]*?(?:failed|could ?n[o']t|cannot|unavailable|not available|not supported)/i,xe=`CODER_MACHINE_SANDBOX`,Se=new Set([`localhost`,`127.0.0.1`,`::1`,`[::1]`]);function Ce(e){return e.flatMap(e=>x.isIPv6(e)?[`[${e}]`]:e.startsWith(`[`)||e.includes(`:`)||x.isIP(e)?[e]:[e,`*.${e}`])}function we(e,t){return{environment:[`$defaults`,e?`Host containment: an automated coding task on the user's own developer machine with open internet; the working directory is the user's workspace, the task has its own scratch folder under the temp directory, and nothing else on the machine is the task's.`:`Host containment: an automated coding task on a throwaway cloud machine with open internet and no neighbours; nothing on it is the user’s, it holds no cloud identity, and instance-metadata credentials are never task credentials.`,...t.length?[`Trusted internal domains: ${t.join(`, `)}`]:[]],allow:[`$defaults`,`Public Network Reads: fetching public web pages, documentation, search results and downloads, reading package registries, installing packages, and cloning or fetching public repositories into the workspace or the scratch folder are routine, whatever the host, as long as nothing leaves the machine beyond the request itself: no repository content, secrets, environment or user data in the request body, query or headers.`]}}function Te(e,t,n=[],r=[],i=!0,a,o=!0,s,c=[]){let l=r;if(!i)return JSON.stringify({permissions:{additionalDirectories:r,allow:[`Bash`],...e===`read-only`?{deny:[`Edit`,`Write`,`MultiEdit`,`NotebookEdit`]}:{}},sandbox:{enabled:!1}});if(e===`read-only`){let e=Ce(n);return JSON.stringify({...l.length?{permissions:{additionalDirectories:l}}:{},sandbox:{enabled:!0,failIfUnavailable:!0,allowUnsandboxedCommands:!1,autoAllowBashIfSandboxed:!0,network:{strictAllowlist:!0,...e.length?{allowedDomains:e}:{},...c.length?{allowUnixSockets:c}:{}},filesystem:{denyWrite:[t,...r]}}})}let u=[...Ce(n),..._e];return JSON.stringify({...l.length?{permissions:{additionalDirectories:l}}:{},sandbox:{enabled:!0,allowUnsandboxedCommands:!0,autoAllowBashIfSandboxed:!0,network:{allowedDomains:u,...c.length?{allowUnixSockets:c}:{},...n.some(e=>Se.has(e))?{allowLocalBinding:!0}:{}},filesystem:{...a?{allowWrite:[a]}:{},denyWrite:[t,...l].map(e=>y.join(e,`.git`))}},autoMode:we(o,n),...s?{hooks:{PreToolUse:[{matcher:`Bash`,hooks:[{type:`command`,command:s}]}]}}:{}})}f([`codex`,`claude`,`custom`]),f([`low`,`medium`,`high`]);const w=f(ae,{error:`Use read-only or auto`}),T=`Use <name>[/<effort>] or <engine>/<model>[/<effort>], such as sol, sol/low, claude/opus or codex/gpt-6.1-sol/high.`,E=p().check(te(e=>!!Qe(e),T)),Ee=e({baseUrl:a(),model:p().check(m(1)),envKey:c(p().check(m(1))),wireApi:c(f([`chat`,`responses`])),contextWindow:c(t().check(u(),i())),disabled:c(l())}),De=s([E,h(!1),Ee]),D=e({allowedHosts:d(p()),readOnlyTasks:c(l())}),O=p().check(ne(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),Oe=e({allowedEvents:c(d(p()))}),ke=s([l(),e({model:c(E),access:c(w),runner:c(f([`local`,`local-docker`,`vercel-sandbox`,`github-actions`])),integrations:c(o(p(),Oe)),connections:c(d(p())),disabled:c(l())})]),k=e({connection:c(p().check(m(1))),command:c(p().check(m(1))),args:c(d(p())),env:c(o(p(),p())),url:c(p().check(m(1))),type:c(f([`stdio`,`http`],{error:`Use type stdio or http; legacy SSE servers are not supported, use their streamable HTTP URL`})),headers:c(o(p(),p())),tools:c(d(p())),description:c(p()),connect:c(f([`start`,`first-use`]))}).check(te(e=>e.connection?[e.url,e.command,e.args,e.env,e.headers,e.type].every(e=>e===void 0):!!e.command!=!!e.url,`Use a connection alone, without url, command, args, env, headers or type; otherwise supply one of command or url`)),Ae=e({$schema:c(p()),version:h(1),chain:d(E).check(m(1)),reviewModel:E,models:c(o(p().check(ne(/^[a-z0-9][a-z0-9./_-]*$/i,`model name`)),De)),agents:c(o(O,ke)),mcp:c(o(O,k)),network:D}),je=n(re(Ae,{network:n(D)})),A=`https://coder.wular.ai/schema/config.v1.json`,Me=()=>({$id:A,...ee(je,{unrepresentable:`any`})});function j(e){return typeof e==`object`&&!!e}function M(e){return typeof e==`string`}function Ne(...e){return e.includes(`read-only`)?`read-only`:`auto`}const Pe=(e,t)=>e===`auto`||t.readOnlyTasks?t.allowedHosts:[];function Fe(e,t){let n=e===`auto`;if(n||!t.length)return{networkAccess:n,configOverrides:{}};let r=t.map(e=>{let t=e.replace(/^\[(.*)\](?::\d+)?$/,`$1`).replace(/^([^:]+):\d+$/,`$1`);return[x.isIP(t)||Se.has(t)?t:`**.${t}`,`allow`]});return{networkAccess:!0,configOverrides:{"features.network_proxy.enabled":!0,"features.network_proxy.domains":Object.fromEntries(r)}}}const Ie=/^(?!-)[a-z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-z0-9-]{1,63}(?<!-))*(?::\d{1,5})?$/i;function Le(e){if(x.isIP(e))return!0;let t=/^\[([^\]]+)\](?::\d{1,5})?$/.exec(e);return t?x.isIPv6(t[1]):e.length<=253&&Ie.test(e)}function Re(e,t,n){let r=e[t];if(n&&typeof r==`string`)throw Error(`Alias "${t}" can't be turned off; remove it instead.`);j(r)?n?r.disabled=!0:delete r.disabled:n?e[t]=!1:r===!1&&delete e[t]}function ze(e,t){delete e.models?.[t];let n=e=>!q(t)&&typeof e==`string`&&e.split(`/`).slice(0,2).includes(t);n(e.reviewModel)&&delete e.reviewModel;let r=e.chain?.filter(e=>!n(e));r?.length?e.chain=r:delete e.chain}function N(e,t=[]){return e.flatMap(e=>e.code===`invalid_union`?e.errors.flatMap(n=>N(n,[...t,...e.path])):[`${[...t,...e.path].map(String).join(`.`)||`(root)`}: ${e.code===`unrecognized_keys`?`Unrecognized ${e.keys.length===1?`key`:`keys`}: ${e.keys.map(e=>JSON.stringify(e)).join(`, `)}`:e.message}`])}function Be(e){let t=structuredClone(e),n=[],r=(e,t)=>{if(typeof e!=`string`||!e.includes(`:`))return e;let r=e.replaceAll(`:`,`/`);return n.push(`${t}: "${e}" is now "${r}"`),r},i=(e,t,n)=>[e,t??(n?J(S[e]).model:void 0),n].filter(Boolean).join(`/`),a={...t.models};for(let[e,t]of Object.entries(a))typeof t==`string`&&(a[e]=r(t,`models.${e}`)),!(!t||typeof t!=`object`||`baseUrl`in t)&&(`provider`in t||`model`in t?(a[e]=t.disabled?!1:`provider`in t?i(t.provider,t.model,t.effort):String(r(t.model,`models.${e}`)),n.push(`models.${e}: the alias is now ${JSON.stringify(a[e])}`)):t.disabled===!0?(a[e]=!1,n.push(`models.${e}: the toggle is now false`)):(delete a[e],n.push(`models.${e}: an enable toggle is not needed and was removed`)));let o={};for(let[e,r]of Object.entries(t.engines??{})){let{model:t,effort:s}=r??{};(t||s)&&a[e]===void 0&&(t||e!==`custom`)&&(a[e]=i(e,t,s),n.push(`engines.${e}: its model is now the alias models.${e} = "${a[e]}"`)),e===`codex`&&r?.network===!0?(o.readOnlyTasks=!0,n.push(`engines.codex.network is now network.readOnlyTasks, for every engine`)):e===`codex`&&r?.network===!1&&n.push(`engines.codex.network: false was removed; auto tasks keep their network`)}if(delete t.engines,t.approvals&&typeof t.approvals==`object`){let{allowedNetworkHosts:e,...r}=t.approvals;e&&(o.allowedHosts=e,n.push(`approvals.allowedNetworkHosts is now network.allowedHosts`)),Object.keys(r).length?t.approvals=r:delete t.approvals}Object.keys(o).length&&(t.network={...t.network,...o}),Object.keys(a).length&&(t.models=a),Array.isArray(t.chain)&&(t.chain=t.chain.map((e,t)=>r(e,`chain.${t}`))),t.reviewModel&&=r(t.reviewModel,`reviewModel`);for(let[e,o]of Object.entries(t.agents??{}))if(!(!o||typeof o!=`object`))if(o.engine||o.effort){let{engine:r,model:s,effort:c,...l}=o,u=r??(typeof a[s]==`string`?void 0:Y(s,{models:a}));t.agents[e]={...l,model:i(u,s,c)},n.push(`agents.${e}: its engine, model and effort are now model "${t.agents[e].model}"`)}else o.model&&=r(o.model,`agents.${e}.model`);return t.version=1,{config:t,notes:n}}const Ve=[Be];function P(e){let t=typeof e.version==`number`?e.version:0;if(t>1)throw Error(`Written by a newer Coder (config version ${t}); run coder upgrade.`);let n=e,r=[];for(let e of Ve.slice(t)){let t=e(n);n=t.config,r.push(...t.notes)}return{config:n,notes:r,version:t}}function F(e){let t=je.safeParse(e);if(!t.success)return N(t.error.issues);let n=L(v,t.data),r=[];for(let[e,n]of(t.data.network?.allowedHosts??[]).entries())Le(n)||r.push(`network.allowedHosts.${e}: "${n}" is not a host name or IP address`);for(let[e,i]of Object.entries(t.data.models??{})){if(C.has(e)){r.push(`models.${e}: ${e} is an effort, not a model name`);continue}let t=M(i)?X(i,n):void 0,a=t?.model?n.models?.[t.model]:void 0;if(q(e)){t?.engine===e?e===`custom`&&!(a&&j(a))&&r.push(`models.custom: "${t.model??``}" names no custom model`):r.push(`models.${e}: The ${e} alias names a ${e} model, such as ${e}/<model>`);continue}if(t?.engine===`custom`){r.push(`models.${e}: Only custom aliases a custom model`);continue}a&&!j(a)&&r.push(`models.${e}: alias target "${t.model}" is itself a config entry`)}return r}function I(e){if(!b.existsSync(e))return null;try{return JSON.parse(b.readFileSync(e,`utf8`))}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Invalid JSON in ${e}: ${n}`)}}function He(e){return L(v,e)}function L(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t??e;let n={...e},r=e;for(let[e,i]of Object.entries(t))n[e]=i&&typeof i==`object`&&!Array.isArray(i)&&r?.[e]&&typeof r[e]==`object`?L(r[e],i):i;return n}function R(){return _(`config.json`)}function z(e){return y.join(e,`.coder`,`config.json`)}const B=`CODER_WORKSPACE_CONFIG`;function Ue(e,t){let n=t.network?.allowedHosts?.filter(t=>e.network.allowedHosts.includes(t)),r=Object.entries(t.models??{}).filter(([,e])=>e===!1||j(e)&&e.disabled);return{...t.mcp?{mcp:t.mcp}:{},...t.chain?{chain:t.chain.filter(t=>e.chain.includes(t))}:{},...t.reviewModel?{reviewModel:t.reviewModel}:{},models:Object.fromEntries(r.map(([e])=>[e,!1])),...n?{network:{...e.network,allowedHosts:n}}:{}}}function We(e,t,n){let{config:r,version:i}=P(t);return i===1||!e.endsWith(`.json`)?r:n?(process.stderr.write(`${e} is config version ${i}; coder config migrate rewrites it.\n`),r):(b.copyFileSync(e,`${e}.bak`),b.writeFileSync(e,`${JSON.stringify(r,null,2)}\n`,`utf8`),process.stderr.write(`Updated ${e} to config version 1; the old one is ${e}.bak.\n`),r)}function Ge(e,t){let n=Q(e,t),r=I(n);if(!r)return{file:n,version:1,notes:[]};let{config:i,notes:a,version:o}=P(r),s=F(i);if(s.length)throw Error(`Invalid config in ${n}:\n ${s.join(`
|
|
2
2
|
`)}`);return o!==1&&b.writeFileSync(n,`${JSON.stringify(i,null,2)}\n`,`utf8`),{file:n,version:o,notes:a}}function V(e){let t=g(e),n=process.env[B],r=[[R(),I(R())],...n?[[`the workspace config`,JSON.parse(n)]]:[]],i=z(t);r.push([i,I(i)]);let a=v,o=new Set;for(let[e,t]of r){if(!t)continue;let r=We(e,t,e===i),s=F(r);if(s.length)throw Error(`Invalid config in ${e}:\n ${s.join(`
|
|
3
3
|
`)}`);let c=n&&e===i?Ue(a,r):r,l={...a.mcp,...c.mcp};for(let t of Object.keys(c.mcp??{}))e===i?o.add(t):o.delete(t);a={...L(a,c),...Object.keys(l).length?{mcp:l}:{}}}let s=F(a);if(s.length)throw Error(`Invalid merged config:\n ${s.join(`
|
|
4
4
|
`)}`);for(let[e,t]of Object.entries(a.mcp??{}))se({[e]:t},o.has(e));return a}function H(e){return e.replace(/\/+$/,``).replace(/\/(chat\/completions|completions|responses)$/,``)}function Ke(e,t,n){let r=[z(g(e)),R()];for(let e of r){let r;try{r=I(e),r&&=P(r).config}catch{continue}if(j(r?.models?.[t]))return Object.assign(r.models[t],n),!F(r).length&&(b.writeFileSync(e,`${JSON.stringify(r,null,2)}\n`,`utf8`),!0)}return!1}function qe(e){return/\/(chat\/completions|completions|responses)\/*$/.test(e)}function Je(e,t){let n=H(e);return qe(e)||/\/v\d+(alpha|beta)?$/.test(n)?[`${n}/${t}`]:[`${n}/${t}`,`${n}/v1/${t}`]}const U={baseUrl:`x-coder-base-url`,wireApi:`x-coder-wire-api`};function Ye(e,t,n){let r=t.envKey?process.env[t.envKey]:void 0;if(t.envKey&&!r)throw Error(`Missing environment variable: \`${t.envKey}\`.`);let i=`coder-${e}`;return{modelProvider:i,configOverrides:{[`model_providers.${i}`]:{name:e,base_url:`${n}/v1`,wire_api:`responses`,http_headers:{[U.baseUrl]:t.baseUrl,[U.wireApi]:t.wireApi??`chat`,...r?{authorization:`Bearer ${r}`}:{}}},...t.contextWindow?{model_context_window:t.contextWindow}:{}}}}function W(e){if(!e)return null;let[t,n]=(S[e]??``).split(`/`);return t===`codex`&&n?n:e}function G(e){return Object.hasOwn(S,e)}function Xe(e,t){let n=e.models?.[t];return n===void 0?G(t)?S[t]:void 0:M(n)?n:void 0}function Ze(e,t){let n=t?e.models?.[t]:void 0;return n===!1||j(n)&&!!n.disabled}function K(e,t){if(Ze(e,t))throw Error(`model "${t}" is disabled in config`)}const q=e=>e===`codex`||e===`claude`||e===`custom`;function Qe(e){let t=e.split(`/`).map(e=>e.trim()),[n,r,i]=t,a=e=>!!(e&&C.has(e));if(!n||a(n)||t.length>3)return;let o=q(n)?{engine:n}:{model:n};if(t.length===1)return o;if(t.length===2&&a(r))return{...o,effort:r};if(!q(n)||!r||a(r))return;let s=S[r];if(!(s&&!s.startsWith(`${n}/`))&&!(i!==void 0&&!a(i)))return{engine:n,model:r,...i?{effort:i}:{}}}function J(e){let t=Qe(e);if(!t)throw Error(`Invalid model "${e}". ${T}`);return t}function $e(e,t){if(!e)return null;let n=J(String(e).trim()),r=n.engine??null,i=n.model??null,a=n.effort??null;K(t,i??r);let o=Xe(t,i??r??``);if(o){let e=X(o,t),s=e.engine;if(r&&r!==s)throw Error(`Alias "${i??r}" runs on ${s}, not ${r}.`);r=s,a=n.effort??e.effort??null,i=e.model??null}r??=Y(i??void 0,t),K(t,i);let s=r===`codex`?W(i):i;return K(t,s),{engine:r,model:s,effort:a??`medium`}}function Y(e,t){return j(e?t.models?.[e]:void 0)?`custom`:e&&/^(?:claude-|opus|sonnet|haiku|fable)/i.test(e)?`claude`:`codex`}function X(e,t){let n=J(e);return{...n,engine:n.engine??Y(n.model,t)}}function Z(e){let t=`${e.engine}/${e.model}`;return Object.keys(S).find(e=>!q(e)&&S[e]===t)??e.model??e.engine}function et(e,t){return e.engine===t.engine&&W(e.model)===W(t.model)}function tt(e){let t=R();return b.mkdirSync(y.dirname(t),{recursive:!0}),b.writeFileSync(t,`${JSON.stringify({...e,version:1},null,2)}\n`,`utf8`),t}function nt(e,t){return t.split(`.`).reduce((e,t)=>e?.[t],e)}function Q(e,t){return t?z(g(e)):R()}function rt(e,t){let n=V(e);return t?nt(n,t):n}function it(e,t,n,r={}){let i=Q(e,r.workspace);$(i,e=>{let i=t.split(`.`),a=i.at(-1),o=e;for(let e of i.slice(0,-1))(typeof o[e]!=`object`||o[e]===null)&&(o[e]={}),o=o[e];r.unset?delete o[a]:o[a]=n});let a=nt(V(e),t)??null;return{file:i,key:t,...r.unset?{unset:!0}:{value:n},effective:a}}function $(e,t){let n=P(b.existsSync(e)?JSON.parse(b.readFileSync(e,`utf8`)):{}).config;t(n),n.models&&Object.keys(n.models).length===0&&delete n.models;let r=F(n);if(r.length)throw Error(`Refusing to write invalid config:\n ${r.join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{t as n}from"./types-DHBqXFE2.js";import{J as r,Y as i,w as a}from"./config-
|
|
1
|
+
import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{t as n}from"./types-DHBqXFE2.js";import{J as r,Y as i,w as a}from"./config-_32PHl9g.js";import{n as o,o as s}from"./remote-Cl-j8r3W.js";import c from"node:path";import l from"node:process";import{createHash as u}from"node:crypto";var d=e({connection:()=>O});const f=(e,n)=>new t(`invalid-option`,e,n?{hint:n}:{}),p=e=>e.cwd?c.resolve(e.cwd):l.cwd(),m=e=>e.server!==void 0,h=e=>o({...e,organization:e.organization??e.workspace}),g=e=>h(e).connections,_=()=>f(`Signing in needs a Coder server.`,`Repeat with --server <url>, or add it in coder dash`);async function v(e){let[{LocalStore:n},{INTEGRATIONS:r},i]=await Promise.all([import(`./local-CqOUpEtl.js`).then(e=>e.r),import(`./integrations-DSZSa8Rc.js`).then(e=>e.r),import(`./apps-CCqOsEZH.js`).then(e=>e.Ht)]),a={store:new n,config:{store:`memory`,runner:`local`},integrations:r,organizationId:`default`,local:{cwd:e,port:0}},o=async e=>{try{return await e()}catch(e){throw e instanceof i.ConnectionError?new t(`invalid-option`,e.message,{needs:e.needs}):e}};return{ctx:a,list:()=>i.connectionRows(a),add:e=>o(()=>i.addConnection(a,e)),update:(e,t)=>o(()=>i.changeConnection(a,e,t)),remove:e=>o(()=>i.removeConnection(a,e))}}const y=e=>e.owner?{...e,id:e.id.slice(e.owner.id.length+1)}:e,b=e=>`${y(e).id}${e.owner?` --personal`:``}`;async function x(e){return m(e)?g(e).list():(await v(p(e))).list()}async function S(e,t){if(m(e))return(await h(e).credentials.list()).some(n=>n.name===t&&(e.personal||n.scope===`workspace`));let{parseCredentialId:n}=await import(`./apps-CCqOsEZH.js`).then(e=>e.qt),{ctx:r}=await v(p(e));return(await r.store.list(`credential`)).some(e=>n(e.id).name===t)}async function C(e,t){let n=e.key??(await e.askKey?.())?.trim();if(!n)throw f(`${t} needs a key.`,`Give it with --key, on stdin or at the prompt`);return n}async function w(e,t,n,r){let i=new URL(n,s(e)),a=i.searchParams.get(`state`)??i.searchParams.get(`attempt`);if(!a)throw f(`Sign-in did not start.`);let o=u(`sha256`).update(a).digest(`hex`);e.onAuthorize(i.href);let c=Date.now()+6e5;for(;Date.now()<c;){let n=(await g(e).list(o,t)).find(e=>e.id===t);if(!n)throw f(`The connection was removed before sign-in finished.`);if(n.status===`connected`)return y(n)}throw f(`Sign-in did not finish.`,`Try again: coder connection reconnect ${r}`)}async function T(e,t){let[r,...i]=t.command??[],a=t.access&&{access:t.access},o=t.personal?{scope:`personal`}:{};if(r&&t.url)throw f(`Use either --url or a command, not both.`);if(t.access&&!n.includes(t.access))throw f(`Invalid --access value.`,`Use read-only or auto`);if(r||t.url){let n=t.auth??(t.key?`key`:t.url?void 0:`none`);if(n!==void 0&&![`oauth`,`key`,`none`].includes(n))throw f(`Invalid --auth value.`,`Use oauth, key or none`);if(n===`oauth`&&!m(t))throw _();if(r&&n===`key`&&!t.env)throw f(`Name the variable the key goes in with --env.`);let s=t.tools?.length?{tools:t.tools}:{};return{name:e,provider:`mcp`,...o,...a,...n?{auth:n}:{},endpoint:t.url?{url:t.url,...s}:{command:r,...i.length?{args:i}:{},...s},...n===`key`?{key:await C(t,e),keyIn:t.url?{header:t.header??`Authorization`}:{env:t.env}}:{}}}if(t.env){let n=t.key??(t.credential||await S(t,t.env)?void 0:l.env[t.env]??await C(t,e));return{name:e,provider:`env`,...o,keyIn:{env:t.env},...n?{key:n}:{},...t.credential?{credential:t.credential}:{}}}let{INTEGRATIONS:s}=await import(`./integrations-DSZSa8Rc.js`).then(e=>e.r);if(!m(t)&&!s[e]?.auth.user)throw f(`Say what to connect.`,`Give --env <NAME> for an API key, --url <url> or -- <command> for an MCP server, or a platform name`);if(!m(t))throw _();if(t.personal)throw f(`--personal applies to MCP servers and task secrets.`);return{name:e,provider:e}}async function E(e,t){if(!e)throw f(`Name the connection.`,`See them: coder connection list`);let n=(await x(t)).find(n=>!n.agent&&(t.personal?n.asker&&y(n).id===e:!n.owner&&n.id===e));if(!n)throw f(`No ${t.personal?`personal `:``}connection "${e}".`,`See them: coder connection list`);return n}async function D(e){let{loadAgents:t}=await import(`./load-BtIDghgd.js`).then(e=>e.l),{INTEGRATIONS:n}=await import(`./integrations-DSZSa8Rc.js`).then(e=>e.r),r=(e,t,n)=>({name:e,source:t,target:n.connection?`connection ${n.connection}`:n.url??[n.command,...n.args??[]].join(` `),approved:!!n.connection||i(n)}),o=(e={})=>Object.entries(e).filter(([,e])=>e.repository);return[...o(a(e).mcp).map(([e,t])=>r(e,`repo`,t)),...(await t(e,n,{includeDisabled:!0})).flatMap(e=>o(e.definition.mcp).map(([t,n])=>r(t,`agent ${e.id}`,n)))]}const O={async add(e,n={}){if(!e)throw f(`Name the connection.`,`Usage: coder connection add <name> ...`);let r=await T(e,n),i=m(n)?g(n):await v(p(n)),a;try{a=await i.add(r)}catch(o){if(!(o instanceof t)||o.needs!==`key`||!r.endpoint?.url||r.auth||r.key||!n.askKey)throw o;a=await i.add({...r,auth:`key`,key:await C(n,e),keyIn:{header:n.header??`Authorization`}})}return a.authorize&&n.onAuthorize?w(n,a.id,a.authorize,b(a)):y(a)},async list(e={}){let t=(await x(e)).map(y);return m(e)?{connections:t}:{connections:t,declared:await D(p(e))}},async remove(e,t={}){let n=await E(e,t);return m(t)?await g(t).remove(n.id):await(await v(p(t))).remove(n.id),y(n)},async reconnect(e,t={}){let n=await E(e,t);if(n.auth===`oauth`){if(!m(t))throw _();let{url:e}=await g(t).authorize(n.id);return t.onAuthorize?w(t,n.id,e,b(n)):{...y(n),authorize:e}}if(n.auth!==`key`)throw f(`${n.name} uses no key or sign-in.`);let r=await C(t,n.name);return y(m(t)?await g(t).update(n.id,{key:r}):await(await v(p(t))).update(n.id,{key:r}))},approve:(e,t={})=>r(p(t),e,t.agent)};export{d as n,O as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,Ea as t,Gt as n,T as r,j as i,k as a,pn as o,w as s}from"./args-CJsHYWbt.js";import{at as c,nt as l,p as u,rt as d,yt as f}from"./state-Br-Fuaxg.js";import{z as ee}from"./config-D_RuO6gX.js";import p from"node:path";import m from"node:fs";import{execFileSync as h}from"node:child_process";import{createHash as g}from"node:crypto";const _=i().check(o(1)),te=s({access_token:_,token_type:i().check(a(e=>e.toLowerCase()===`bearer`)),refresh_token:r(_),expires_in:r(e().check(n(0))),scope:r(i()),name:r(_),preferred_username:r(_),email:r(_)}),ne=s({error:_,error_description:r(i())});function v(e){let t=new URL(e),n=t.hostname===`localhost`||t.hostname===`[::1]`||/^127\.(?:\d{1,3}\.){2}\d{1,3}$/.test(t.hostname);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&n)||t.username||t.password||t.hash)throw Error(`OAuth URLs require HTTPS or loopback and no credentials or fragment.`);return t}async function y(e,t,n={}){let r=v(t).origin;for(let i=0;i<5;i++){let i=await e(t,{...n,redirect:`manual`,signal:n.signal??AbortSignal.timeout(15e3)});if(i.status<300||i.status>=400)return i;let a=i.headers.get(`location`);if(!a)throw Error(`OAuth redirect has no location.`);let o=v(new URL(a,t).href);if(o.origin!==r)throw Error(`OAuth redirect changed origin.`);if(await i.body?.cancel(),i.status===303||(i.status===301||i.status===302)&&n.method===`POST`)throw Error(`OAuth redirect would discard the request body.`);t=o.href}throw Error(`Too many OAuth redirects.`)}function b(e,t){let n=new Headers({"content-type":`application/x-www-form-urlencoded`,accept:`application/json`}),r=e.tokenEndpointAuthMethod??(e.clientSecret?`client_secret_basic`:`none`);if(r!==`none`&&!e.clientSecret)throw Error(`OAuth client secret is missing.`);if(r===`client_secret_basic`){let t=e=>new URLSearchParams({v:e}).toString().slice(2);n.set(`authorization`,`Basic ${Buffer.from(`${t(e.clientId)}:${t(e.clientSecret)}`).toString(`base64`)}`)}else t.set(`client_id`,e.clientId),r===`client_secret_post`&&t.set(`client_secret`,e.clientSecret);return n}async function x(e,t,n){n.set(`resource`,t.resource);let r=b(t,n),i=await y(e,t.tokenEndpoint,{method:`POST`,headers:r,body:n}),a=await i.json();if(!i.ok){let e=ne.safeParse(a),t={status:i.status,...e.success?e.data:{}};throw n.get(`grant_type`)===`refresh_token`&&i.status>=400&&i.status<500&&e.success&&[`invalid_grant`,`invalid_client`].includes(e.data.error)?new E(`The OAuth connection must be reconnected.`,{cause:t}):Error(`OAuth token request failed.`,{cause:t})}return te.parse(a)}function S(e,t,n){return{...e,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,expiresAt:t.expires_in===void 0?void 0:n+t.expires_in*1e3,scope:t.scope??e.scope}}async function C(e){let{secret:t,now:n}=e;if(!e.force&&t.accessToken&&(t.expiresAt===void 0?!t.refreshToken:t.expiresAt-n>=6e4))return t.accessToken;if(!t.refreshToken)throw new E(`The OAuth connection must be reconnected.`);let r=S(t,await x(e.fetch,t,new URLSearchParams({grant_type:`refresh_token`,refresh_token:t.refreshToken})),n);return await e.save(r),r.accessToken}const w=e=>g(`sha256`).update(e).digest(`hex`).slice(0,16);function T(e,t){return{...e,...t instanceof Error&&`error`in t&&typeof t.error==`string`?{code:t.error}:{},...t instanceof Error&&t.cause&&typeof t.cause==`object`?t.cause:{},reason:t instanceof Error?t.message:String(t)}}var E=class extends Error{},re=t({ConnectionRefused:()=>D,LocalConnections:()=>B,connectionDescription:()=>J,connectionEnvConflicts:()=>k,connectionEnvironment:()=>Z,connectionEnvironmentKey:()=>A,connectionMcp:()=>X,connectionRevoked:()=>N,connectionServerName:()=>Y,connectionToolName:()=>I,connectionUrlAllowed:()=>L,connectionVariables:()=>M,connectionWarning:()=>P,credentialField:()=>K,engineEnvironment:()=>j,localConnectionToken:()=>ie,localConnections:()=>Q,mcpClient:()=>U,narrowConnections:()=>O,withCredential:()=>q}),D=class extends Error{authenticate;constructor(e,t){super(e),this.authenticate=t}};function O(e,t){return t?e?t.filter(t=>e.includes(t)):t:e}function k(e){let t=new Set,n=new Set;for(let r of e){if(r.provider!==`env`||!r.keyIn||!(`env`in r.keyIn))continue;let e=r.keyIn.env;t.has(e)&&n.add(e),t.add(e)}return n}function A(e=process.env){let t=Object.entries(d(e)).sort(([e],[t])=>e.localeCompare(t));return t.length?g(`sha256`).update(JSON.stringify(t)).digest(`hex`):void 0}function j(e=process.env){return{...Object.fromEntries(Object.entries(e).filter(([e])=>!e.startsWith(`CODER_CONNECTION_`)&&e!==`CODER_MCP_CONNECTION_ENV`)),...Object.fromEntries(Object.entries(d(e)).filter(([t])=>e[t]===void 0))}}function M(e){let t={};for(let n of Object.values(e))for(let[e,r]of Object.entries(n.env??{}))t[e]=Object.hasOwn(t,e)?null:r;return t}const N=e=>e instanceof D||e instanceof E,P=(e,t)=>N(t)?`${e} needs reconnecting.`:`${e} is temporarily unavailable; skipped for this task.`;function F(e){if(e.status===401||e.status===403)throw new D(`MCP credential was refused`,e.headers.get(`www-authenticate`)??void 0);if(!e.ok)throw Error(`MCP did not answer`)}const I=e=>/^[a-zA-Z0-9_.-]{1,128}$/.test(e);function L(e,t){return!e.username&&!e.password&&(t||!/^(?:(?:[a-z0-9_-]+\.)*localhost\.?|127\.\d+\.\d+\.\d+|\[::1\]|\[::ffff:7f[0-9a-f]{2}:[0-9a-f]{1,4}\])$/i.test(e.hostname))&&(e.protocol===`https:`||e.protocol===`http:`&&[`localhost`,`127.0.0.1`,`[::1]`].includes(e.hostname))}function R(e,t){try{return JSON.parse(m.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function z(e,t){m.mkdirSync(p.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{m.writeFileSync(n,`${JSON.stringify(t,null,2)}\n`,{mode:384}),m.chmodSync(n,384),m.renameSync(n,e)}finally{m.rmSync(n,{force:!0})}}var B=class{secrets;file;credentialFile;lock;constructor(e=u(),t=process.platform,n){this.file=p.join(e,`connections.json`),this.credentialFile=p.join(e,`local-credentials.json`),this.lock=p.join(e,`state`,`global`,`connections.lock`);let r=p.join(e,`credentials.json`);this.secrets=n??(t===`darwin`?{get(e){try{return h(`security`,[`find-generic-password`,`-s`,`coder`,`-a`,e,`-w`],{encoding:`utf8`,stdio:[`ignore`,`pipe`,`pipe`]}).trimEnd()}catch(e){if(e.status===44)return;throw Error(`Could not read the connection keychain`)}},put(e,t){try{let n=e=>`"`+e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)+`"`;if(/[\r\n\0]/.test(e+t))throw Error(`Invalid keychain value`);h(`security`,[`-i`],{input:`add-generic-password -U -s coder -a ${n(e)} -w ${n(t)}\n`,stdio:[`pipe`,`pipe`,`pipe`]})}catch{throw Error(`Could not save the connection keychain`)}},delete(e){try{h(`security`,[`delete-generic-password`,`-s`,`coder`,`-a`,e],{stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){if(e.status!==44)throw Error(`Could not remove the connection keychain`)}}}:{get:e=>R(r,{})[e],put(e,t){z(r,{...R(r,{}),[e]:t})},delete(e){let t=R(r,{});delete t[e],z(r,t)}})}async withLock(e,t){let n=t===void 0?this.lock:`${this.lock}-${g(`sha256`).update(t).digest(`hex`)}`;return f(n,e)}list(){return Object.values(R(this.file,{}))}get(e){let t=this.list().find(t=>t.id===e);if(!t)return;let n;try{n=t.auth===`none`?void 0:this.secrets.get(e)}catch{return{...t,broken:{at:Date.now(),reason:`Needs reconnecting`}}}return{...t,...n?{secret:n}:{}}}put(e){if(e.provider===`env`&&(e.auth!==`key`||e.access!==`auto`||e.endpoint||e.secret||!e.credential||!e.keyIn||!(`env`in e.keyIn)||!l(e.keyIn.env)))throw Error(`Invalid environment connection`);let{secret:t,...n}=e,r=R(this.file,{});t?this.secrets.put(e.id,t):r[e.id]?.auth!==`none`&&r[e.id]&&this.secrets.delete(e.id),r[e.id]=n,z(this.file,r)}delete(e){let t=R(this.file,{}),n=t[e]&&t[e].auth!==`none`;delete t[e],z(this.file,t),n&&this.secrets.delete(e)}credentials(){return Object.entries(R(this.credentialFile,{})).flatMap(([e,t])=>{let n=this.secrets.get(`credential/${e}`);return n?[{id:e,value:{...t,...JSON.parse(n)}}]:[]})}credential(e){let t=R(this.credentialFile,{})[e];if(!t)return;let n=this.secrets.get(`credential/${e}`);return n?{...t,...JSON.parse(n)}:void 0}putCredential(e,t){let{iv:n,tag:r,ciphertext:i,...a}=t;this.secrets.put(`credential/${e}`,JSON.stringify({iv:n,tag:r,ciphertext:i})),z(this.credentialFile,{...R(this.credentialFile,{}),[e]:a})}deleteCredential(e){let t=R(this.credentialFile,{});delete t[e],z(this.credentialFile,t),this.secrets.delete(`credential/${e}`)}};const V=`2026-07-28`,H=e=>/^[\x21-\x7E]([\x20-\x7E]*[\x21-\x7E])?$/.test(e)?e:`=?base64?${Buffer.from(e).toString(`base64`)}?=`;async function U(e,t=fetch,n){let r=`2025-11-25`,i={name:`coder`,version:`1`},a=e=>n?Promise.race([e,new Promise((e,t)=>{let r=()=>t(n.reason??Error(`MCP startup timed out`));n.aborted&&r(),n.addEventListener(`abort`,r,{once:!0})})]):e,o=await a(e.command?W(e):G(e,t,()=>r)),s=1,c=(e,t,n)=>o.rpc(e,r===V?{...t,_meta:{"io.modelcontextprotocol/protocolVersion":r,"io.modelcontextprotocol/clientInfo":i,"io.modelcontextprotocol/clientCapabilities":{}}}:t,s++,n),l,u={initialize:()=>l??=a(c(`initialize`,{protocolVersion:r,capabilities:{},clientInfo:i},n).then(async e=>(r=e?.protocolVersion??r,await o.rpc(`notifications/initialized`),{instructions:e?.instructions,serverInfo:e?.serverInfo}),async e=>{if(e instanceof D)throw e;r=V;let t=await c(`server/discover`,{},n).catch(()=>{throw e});if(!t?.supportedVersions?.includes(V))throw e;return{instructions:t.instructions,serverInfo:t.serverInfo}})),async tools(){await u.initialize();let e=[],t=new Set,r;do{let i=await a(c(`tools/list`,r===void 0?{}:{cursor:r},n));if(!Array.isArray(i?.tools))throw Error(`Invalid tools`);if(e.push(...i.tools.filter(e=>typeof e.name==`string`)),r=i.nextCursor,r!==void 0){if(typeof r!=`string`||t.has(r))throw Error(`Invalid tools cursor`);t.add(r)}}while(r!==void 0);return e},async call(e,t){return await u.initialize(),c(`tools/call`,{name:e,arguments:t})},close:()=>o.close()};return u}async function W(e){let{spawn:t}=await import(`node:child_process`),n=await import(`node:readline`),r=t(e.command,e.args??[],{env:{...j(process.env),...e.env},stdio:[`pipe`,`pipe`,`inherit`]}),i=new Map,a,o=e=>{a=e;for(let t of i.values())t.reject(e);i.clear()};return r.once(`error`,t=>o(Error(`MCP server ${e.name} could not start: ${t.message}`))),r.once(`close`,t=>o(Error(`MCP server ${e.name} exited with status ${t}`))),r.stdin.on(`error`,o),n.createInterface({input:r.stdout,terminal:!1}).on(`line`,e=>{let t;try{t=JSON.parse(e)}catch{return}let n=t.id===void 0?void 0:i.get(t.id);n&&(i.delete(t.id),t.error?n.reject(Error(t.error.message??`MCP error`)):n.resolve(t.result))}),{rpc(e,t,n,o){if(a)return Promise.reject(a);let s=n===void 0?Promise.resolve(void 0):new Promise((e,t)=>i.set(n,{resolve:e,reject:t}));return r.stdin.write(`${JSON.stringify({jsonrpc:`2.0`,method:e,...n===void 0?{}:{id:n},...t?{params:t}:{}})}\n`),s},async close(){r.stdin.end(),r.kill()}}}async function G(e,t,n){let r,i=()=>({...e.headers,"mcp-protocol-version":n(),...r?{"mcp-session-id":r}:{}});return{async rpc(a,o,s,c){let l=await t(e.url,{method:`POST`,redirect:`manual`,...c?{signal:c}:{},headers:{...i(),...n()===V?{"mcp-method":a,...a===`tools/call`?{"mcp-name":H(String(o.name))}:{}}:{},"content-type":`application/json`,accept:`application/json, text/event-stream`},body:JSON.stringify({jsonrpc:`2.0`,method:a,...s===void 0?{}:{id:s},...o?{params:o}:{}})});if(F(l),r=l.headers.get(`mcp-session-id`)??r,s===void 0){await l.body?.cancel();return}let u=await l.text(),d=(l.headers.get(`content-type`)?.includes(`text/event-stream`)?u.split(/\r?\n\r?\n/).flatMap(e=>{let t=e.split(/\r?\n/).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(`
|
|
1
|
+
import{C as e,Ea as t,Gt as n,T as r,j as i,k as a,pn as o,w as s}from"./args-CJsHYWbt.js";import{at as c,nt as l,p as u,rt as d,yt as f}from"./state-CxAUec80.js";import{z as ee}from"./config-_32PHl9g.js";import p from"node:path";import m from"node:fs";import{execFileSync as h}from"node:child_process";import{createHash as g}from"node:crypto";const _=i().check(o(1)),te=s({access_token:_,token_type:i().check(a(e=>e.toLowerCase()===`bearer`)),refresh_token:r(_),expires_in:r(e().check(n(0))),scope:r(i()),name:r(_),preferred_username:r(_),email:r(_)}),ne=s({error:_,error_description:r(i())});function v(e){let t=new URL(e),n=t.hostname===`localhost`||t.hostname===`[::1]`||/^127\.(?:\d{1,3}\.){2}\d{1,3}$/.test(t.hostname);if(t.protocol!==`https:`&&!(t.protocol===`http:`&&n)||t.username||t.password||t.hash)throw Error(`OAuth URLs require HTTPS or loopback and no credentials or fragment.`);return t}async function y(e,t,n={}){let r=v(t).origin;for(let i=0;i<5;i++){let i=await e(t,{...n,redirect:`manual`,signal:n.signal??AbortSignal.timeout(15e3)});if(i.status<300||i.status>=400)return i;let a=i.headers.get(`location`);if(!a)throw Error(`OAuth redirect has no location.`);let o=v(new URL(a,t).href);if(o.origin!==r)throw Error(`OAuth redirect changed origin.`);if(await i.body?.cancel(),i.status===303||(i.status===301||i.status===302)&&n.method===`POST`)throw Error(`OAuth redirect would discard the request body.`);t=o.href}throw Error(`Too many OAuth redirects.`)}function b(e,t){let n=new Headers({"content-type":`application/x-www-form-urlencoded`,accept:`application/json`}),r=e.tokenEndpointAuthMethod??(e.clientSecret?`client_secret_basic`:`none`);if(r!==`none`&&!e.clientSecret)throw Error(`OAuth client secret is missing.`);if(r===`client_secret_basic`){let t=e=>new URLSearchParams({v:e}).toString().slice(2);n.set(`authorization`,`Basic ${Buffer.from(`${t(e.clientId)}:${t(e.clientSecret)}`).toString(`base64`)}`)}else t.set(`client_id`,e.clientId),r===`client_secret_post`&&t.set(`client_secret`,e.clientSecret);return n}async function x(e,t,n){n.set(`resource`,t.resource);let r=b(t,n),i=await y(e,t.tokenEndpoint,{method:`POST`,headers:r,body:n}),a=await i.json();if(!i.ok){let e=ne.safeParse(a),t={status:i.status,...e.success?e.data:{}};throw n.get(`grant_type`)===`refresh_token`&&i.status>=400&&i.status<500&&e.success&&[`invalid_grant`,`invalid_client`].includes(e.data.error)?new E(`The OAuth connection must be reconnected.`,{cause:t}):Error(`OAuth token request failed.`,{cause:t})}return te.parse(a)}function S(e,t,n){return{...e,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,expiresAt:t.expires_in===void 0?void 0:n+t.expires_in*1e3,scope:t.scope??e.scope}}async function C(e){let{secret:t,now:n}=e;if(!e.force&&t.accessToken&&(t.expiresAt===void 0?!t.refreshToken:t.expiresAt-n>=6e4))return t.accessToken;if(!t.refreshToken)throw new E(`The OAuth connection must be reconnected.`);let r=S(t,await x(e.fetch,t,new URLSearchParams({grant_type:`refresh_token`,refresh_token:t.refreshToken})),n);return await e.save(r),r.accessToken}const w=e=>g(`sha256`).update(e).digest(`hex`).slice(0,16);function T(e,t){return{...e,...t instanceof Error&&`error`in t&&typeof t.error==`string`?{code:t.error}:{},...t instanceof Error&&t.cause&&typeof t.cause==`object`?t.cause:{},reason:t instanceof Error?t.message:String(t)}}var E=class extends Error{},re=t({ConnectionRefused:()=>D,LocalConnections:()=>B,connectionDescription:()=>J,connectionEnvConflicts:()=>k,connectionEnvironment:()=>Z,connectionEnvironmentKey:()=>A,connectionMcp:()=>X,connectionRevoked:()=>N,connectionServerName:()=>Y,connectionToolName:()=>I,connectionUrlAllowed:()=>L,connectionVariables:()=>M,connectionWarning:()=>P,credentialField:()=>K,engineEnvironment:()=>j,localConnectionToken:()=>ie,localConnections:()=>Q,mcpClient:()=>U,narrowConnections:()=>O,withCredential:()=>q}),D=class extends Error{authenticate;constructor(e,t){super(e),this.authenticate=t}};function O(e,t){return t?e?t.filter(t=>e.includes(t)):t:e}function k(e){let t=new Set,n=new Set;for(let r of e){if(r.provider!==`env`||!r.keyIn||!(`env`in r.keyIn))continue;let e=r.keyIn.env;t.has(e)&&n.add(e),t.add(e)}return n}function A(e=process.env){let t=Object.entries(d(e)).sort(([e],[t])=>e.localeCompare(t));return t.length?g(`sha256`).update(JSON.stringify(t)).digest(`hex`):void 0}function j(e=process.env){return{...Object.fromEntries(Object.entries(e).filter(([e])=>!e.startsWith(`CODER_CONNECTION_`)&&!/^APP_TOKEN(?:_|$)/.test(e)&&![`CODER_MCP_CONNECTION_ENV`,`CODER_REPLY_URL`,`CODER_REPLY_TOKEN`,`CODER_TASK_TOKEN`].includes(e))),...Object.fromEntries(Object.entries(d(e)).filter(([t])=>e[t]===void 0))}}function M(e){let t={};for(let n of Object.values(e))for(let[e,r]of Object.entries(n.env??{}))t[e]=Object.hasOwn(t,e)?null:r;return t}const N=e=>e instanceof D||e instanceof E,P=(e,t)=>N(t)?`${e} needs reconnecting.`:`${e} is temporarily unavailable; skipped for this task.`;function F(e){if(e.status===401||e.status===403)throw new D(`MCP credential was refused`,e.headers.get(`www-authenticate`)??void 0);if(!e.ok)throw Error(`MCP did not answer`)}const I=e=>/^[a-zA-Z0-9_.-]{1,128}$/.test(e);function L(e,t){return!e.username&&!e.password&&(t||!/^(?:(?:[a-z0-9_-]+\.)*localhost\.?|127\.\d+\.\d+\.\d+|\[::1\]|\[::ffff:7f[0-9a-f]{2}:[0-9a-f]{1,4}\])$/i.test(e.hostname))&&(e.protocol===`https:`||e.protocol===`http:`&&[`localhost`,`127.0.0.1`,`[::1]`].includes(e.hostname))}function R(e,t){try{return JSON.parse(m.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function z(e,t){m.mkdirSync(p.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{m.writeFileSync(n,`${JSON.stringify(t,null,2)}\n`,{mode:384}),m.chmodSync(n,384),m.renameSync(n,e)}finally{m.rmSync(n,{force:!0})}}var B=class{secrets;file;credentialFile;lock;constructor(e=u(),t=process.platform,n){this.file=p.join(e,`connections.json`),this.credentialFile=p.join(e,`local-credentials.json`),this.lock=p.join(e,`state`,`global`,`connections.lock`);let r=p.join(e,`credentials.json`);this.secrets=n??(t===`darwin`?{get(e){try{return h(`security`,[`find-generic-password`,`-s`,`coder`,`-a`,e,`-w`],{encoding:`utf8`,stdio:[`ignore`,`pipe`,`pipe`]}).trimEnd()}catch(e){if(e.status===44)return;throw Error(`Could not read the connection keychain`)}},put(e,t){try{let n=e=>`"`+e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)+`"`;if(/[\r\n\0]/.test(e+t))throw Error(`Invalid keychain value`);h(`security`,[`-i`],{input:`add-generic-password -U -s coder -a ${n(e)} -w ${n(t)}\n`,stdio:[`pipe`,`pipe`,`pipe`]})}catch{throw Error(`Could not save the connection keychain`)}},delete(e){try{h(`security`,[`delete-generic-password`,`-s`,`coder`,`-a`,e],{stdio:[`ignore`,`pipe`,`pipe`]})}catch(e){if(e.status!==44)throw Error(`Could not remove the connection keychain`)}}}:{get:e=>R(r,{})[e],put(e,t){z(r,{...R(r,{}),[e]:t})},delete(e){let t=R(r,{});delete t[e],z(r,t)}})}async withLock(e,t){let n=t===void 0?this.lock:`${this.lock}-${g(`sha256`).update(t).digest(`hex`)}`;return f(n,e)}list(){return Object.values(R(this.file,{}))}get(e){let t=this.list().find(t=>t.id===e);if(!t)return;let n;try{n=t.auth===`none`?void 0:this.secrets.get(e)}catch{return{...t,broken:{at:Date.now(),reason:`Needs reconnecting`}}}return{...t,...n?{secret:n}:{}}}put(e){if(e.provider===`env`&&(e.auth!==`key`||e.access!==`auto`||e.endpoint||e.secret||!e.credential||!e.keyIn||!(`env`in e.keyIn)||!l(e.keyIn.env)))throw Error(`Invalid environment connection`);let{secret:t,...n}=e,r=R(this.file,{});t?this.secrets.put(e.id,t):r[e.id]?.auth!==`none`&&r[e.id]&&this.secrets.delete(e.id),r[e.id]=n,z(this.file,r)}delete(e){let t=R(this.file,{}),n=t[e]&&t[e].auth!==`none`;delete t[e],z(this.file,t),n&&this.secrets.delete(e)}credentials(){return Object.entries(R(this.credentialFile,{})).flatMap(([e,t])=>{let n=this.secrets.get(`credential/${e}`);return n?[{id:e,value:{...t,...JSON.parse(n)}}]:[]})}credential(e){let t=R(this.credentialFile,{})[e];if(!t)return;let n=this.secrets.get(`credential/${e}`);return n?{...t,...JSON.parse(n)}:void 0}putCredential(e,t){let{iv:n,tag:r,ciphertext:i,...a}=t;this.secrets.put(`credential/${e}`,JSON.stringify({iv:n,tag:r,ciphertext:i})),z(this.credentialFile,{...R(this.credentialFile,{}),[e]:a})}deleteCredential(e){let t=R(this.credentialFile,{});delete t[e],z(this.credentialFile,t),this.secrets.delete(`credential/${e}`)}};const V=`2026-07-28`,H=e=>/^[\x21-\x7E]([\x20-\x7E]*[\x21-\x7E])?$/.test(e)?e:`=?base64?${Buffer.from(e).toString(`base64`)}?=`;async function U(e,t=fetch,n){let r=`2025-11-25`,i={name:`coder`,version:`1`},a=e=>n?Promise.race([e,new Promise((e,t)=>{let r=()=>t(n.reason??Error(`MCP startup timed out`));n.aborted&&r(),n.addEventListener(`abort`,r,{once:!0})})]):e,o=await a(e.command?W(e):G(e,t,()=>r)),s=1,c=(e,t,n)=>o.rpc(e,r===V?{...t,_meta:{"io.modelcontextprotocol/protocolVersion":r,"io.modelcontextprotocol/clientInfo":i,"io.modelcontextprotocol/clientCapabilities":{}}}:t,s++,n),l,u={initialize:()=>l??=a(c(`initialize`,{protocolVersion:r,capabilities:{},clientInfo:i},n).then(async e=>(r=e?.protocolVersion??r,await o.rpc(`notifications/initialized`),{instructions:e?.instructions,serverInfo:e?.serverInfo}),async e=>{if(e instanceof D)throw e;r=V;let t=await c(`server/discover`,{},n).catch(()=>{throw e});if(!t?.supportedVersions?.includes(V))throw e;return{instructions:t.instructions,serverInfo:t.serverInfo}})),async tools(){await u.initialize();let e=[],t=new Set,r;do{let i=await a(c(`tools/list`,r===void 0?{}:{cursor:r},n));if(!Array.isArray(i?.tools))throw Error(`Invalid tools`);if(e.push(...i.tools.filter(e=>typeof e.name==`string`)),r=i.nextCursor,r!==void 0){if(typeof r!=`string`||t.has(r))throw Error(`Invalid tools cursor`);t.add(r)}}while(r!==void 0);return e},async call(e,t){return await u.initialize(),c(`tools/call`,{name:e,arguments:t})},close:()=>o.close()};return u}async function W(e){let{spawn:t}=await import(`node:child_process`),n=await import(`node:readline`),r=t(e.command,e.args??[],{env:{...j(process.env),...e.env},stdio:[`pipe`,`pipe`,`inherit`]}),i=new Map,a,o=e=>{a=e;for(let t of i.values())t.reject(e);i.clear()};return r.once(`error`,t=>o(Error(`MCP server ${e.name} could not start: ${t.message}`))),r.once(`close`,t=>o(Error(`MCP server ${e.name} exited with status ${t}`))),r.stdin.on(`error`,o),n.createInterface({input:r.stdout,terminal:!1}).on(`line`,e=>{let t;try{t=JSON.parse(e)}catch{return}let n=t.id===void 0?void 0:i.get(t.id);n&&(i.delete(t.id),t.error?n.reject(Error(t.error.message??`MCP error`)):n.resolve(t.result))}),{rpc(e,t,n,o){if(a)return Promise.reject(a);let s=n===void 0?Promise.resolve(void 0):new Promise((e,t)=>i.set(n,{resolve:e,reject:t}));return r.stdin.write(`${JSON.stringify({jsonrpc:`2.0`,method:e,...n===void 0?{}:{id:n},...t?{params:t}:{}})}\n`),s},async close(){r.stdin.end(),r.kill()}}}async function G(e,t,n){let r,i=()=>({...e.headers,"mcp-protocol-version":n(),...r?{"mcp-session-id":r}:{}});return{async rpc(a,o,s,c){let l=await t(e.url,{method:`POST`,redirect:`manual`,...c?{signal:c}:{},headers:{...i(),...n()===V?{"mcp-method":a,...a===`tools/call`?{"mcp-name":H(String(o.name))}:{}}:{},"content-type":`application/json`,accept:`application/json, text/event-stream`},body:JSON.stringify({jsonrpc:`2.0`,method:a,...s===void 0?{}:{id:s},...o?{params:o}:{}})});if(F(l),r=l.headers.get(`mcp-session-id`)??r,s===void 0){await l.body?.cancel();return}let u=await l.text(),d=(l.headers.get(`content-type`)?.includes(`text/event-stream`)?u.split(/\r?\n\r?\n/).flatMap(e=>{let t=e.split(/\r?\n/).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(`
|
|
2
2
|
`);return t?[JSON.parse(t)]:[]}):[JSON.parse(u)]).find(e=>e.id===s);if(!d?.result||d.error)throw Error(`Invalid MCP response`);return d.result},async close(){r&&await t(e.url,{method:`DELETE`,redirect:`manual`,headers:i()}).then(e=>e.body?.cancel()).catch(()=>{})}}}function K(e){if(e.endpoint?.command){if(!e.keyIn||!(`env`in e.keyIn))throw Error(`Missing key env`);return{env:e.keyIn.env}}return{header:e.keyIn&&`header`in e.keyIn?e.keyIn.header:`Authorization`}}function q(e,t,n){if(t.env)return{...e,env:{...e.env,[t.env]:n},credentialFields:t};let r=t.header;return{...e,headers:{...e.headers,[r]:r.toLowerCase()===`authorization`?`Bearer ${n}`:n},credentialFields:t}}function J(e){let{url:t,command:n}=e.endpoint??{},r=e.login??e.account;return[e.name,t&&URL.canParse(t)?new URL(t).host:n,r&&`as ${r}`].filter(Boolean).join(`, `)}const Y=e=>e.owner?`${e.provider===`mcp`?e.id.slice(e.owner.length+1):e.provider}-user`:e.id;function X(e,t){if(!e.endpoint)throw Error(`Missing endpoint`);let n={...e.endpoint,name:Y(e)};if(t&&(n=q(n,K(e),t)),n.command){if(e.access===`read-only`&&!n.tools?.length)throw Error(`Read-only requires tools`);return n}return e.access===`read-only`?{...n,readOnly:!0}:n}function Z(e,t={}){let n=new Set(c()),r=Object.keys(t).length?{CODER_CONNECTION_ENV_VALUES:JSON.stringify(t)}:{};return{mcp:Object.fromEntries(Object.entries(e).map(([e,t])=>{let{credentialFields:i,...a}=t,o=a=>t[a]&&Object.fromEntries(Object.entries(t[a]).map(([t,o])=>{if(!(t===i?.[a===`env`?`env`:`header`]||n.has(o)))return[t,o];let s=`CODER_CONNECTION_${g(`sha256`).update(`${e}:${a}:${t}`).digest(`hex`).slice(0,24).toUpperCase()}`;return r[s]=o,[t,"${"+s+`}`]}));return[e,{...a,...t.env?{env:o(`env`)}:{},...t.headers?{headers:o(`headers`)}:{}}]})),env:r}}async function Q(e,t,n=new B,r=`auto`){let i=t??n.list().filter(t=>!t.owner&&(e===void 0||e.includes(t.id))).map(e=>e.id),a={},o={},s=[],c=k(n.list().filter(e=>i.includes(e.id)&&!e.owner));return await Promise.all(i.map(async e=>{let t=n.get(e);if(!t||t.owner||![`mcp`,`env`].includes(t.provider))return;if(t.provider===`env`&&(t.auth!==`key`||t.access!==`auto`||t.endpoint||!t.credential||!t.keyIn||!(`env`in t.keyIn)||!l(t.keyIn.env)||c.has(t.keyIn.env)||process.env[t.keyIn.env]!==void 0)){s.push(P(t.name,Error(`Invalid environment connection`)));return}let i=ee(t.access,r);if(t.auth===`oauth`){a[e]={...X({...t,access:i},void 0),connection:e,credentialOnUse:K(t),description:J(t),access:i};return}if(t.broken){s.push(`${t.name} needs reconnecting.`);return}if(t.provider===`env`){let e=t.keyIn.env;try{let r=n.credential(t.credential),i=r?.iv===`plain`?JSON.parse(Buffer.from(r.ciphertext,`base64`).toString(`utf8`)).env[e]:void 0;if(!i)throw Error(`Missing credential`);o[e]=i}catch(e){s.push(P(t.name,e))}return}try{let r=t.auth===`none`?void 0:(await $(n,e,`key`)).token;if(t.auth!==`none`&&!r)throw Error(`Missing credential`);let o=X({...t,access:i},r);a[e]={...o,description:J(t),access:i}}catch(e){s.push(P(t.name,e))}})),{...Z(a,o),ids:i,warnings:s}}function $(e,t,n,r){return e.withLock(async()=>{let i=e.get(t);if(!i||i.owner||i.broken||i.auth!==n)throw Error(`Connection changed during resolution`);if(!i.secret)throw Error(`Missing credential`);let a=i.secret.startsWith(`plain.`)?JSON.parse(Buffer.from(i.secret.slice(6),`base64`).toString(`utf8`)):{key:i.secret};return i.auth===`key`?{token:a.key,current:i}:{token:await C({secret:a,fetch,now:Date.now(),force:!!a.accessToken&&w(a.accessToken)===r,save:async n=>e.withLock(async()=>{let r=e.get(t);if(!r||r.secret!==i.secret||r.auth!==i.auth||r.owner!==i.owner)throw Error(`Connection changed during refresh`);i.secret=`plain.${Buffer.from(JSON.stringify(n)).toString(`base64`)}`,e.put(i)})}),current:i}},t)}async function ie(e,t,n=new B){let r=n.get(e);if(!(r?.auth!==`oauth`||r.broken||!r.secret))try{return(await $(n,e,`oauth`,t)).token}catch(t){if(console.error(`coder: token refresh failed`,T({connection:e},t)),!N(t))throw t;await n.withLock(async()=>{let t=n.get(e);t&&t.secret===r.secret&&n.put({...t,broken:{at:Date.now(),reason:`Needs reconnecting`}})});return}}export{T as C,x as D,w as E,S as O,C as S,v as T,Q as _,Z as a,q as b,N as c,L as d,M as f,j as g,K as h,k as i,Y as l,re as m,B as n,A as o,P as p,J as r,X as s,D as t,I as u,U as v,y as w,E as x,O as y};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Ca as e,Sa as t,fa as n,ma as r,nr as i,va as a,wa as o,xa as s}from"./args-CJsHYWbt.js";import{t as c}from"./errors-DK_trCff.js";import{ut as l}from"./state-
|
|
1
|
+
import{Ca as e,Sa as t,fa as n,ma as r,nr as i,va as a,wa as o,xa as s}from"./args-CJsHYWbt.js";import{t as c}from"./errors-DK_trCff.js";import{ut as l}from"./state-CxAUec80.js";import{t as u}from"./docs-CxklYa3P.js";import{cli as d}from"./cmd-BH1bmZGs.js";import f from"node:path";import p from"node:process";const m=e=>e.replace(/\s*\(repeatable\)/g,``).replace(/--([a-z][\w-]*)/g,`$1`);function h(e={}){return Object.fromEntries(Object.entries(e).flatMap(([e,t])=>{if(e===`json`)return[];let n=i.get(t);if(!n?.description||m(n.description)===n.description)return[[e,t]];let r=t.clone();return i.add(r,{...n,description:m(n.description)}),[[e,r]]}))}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=new Set([`server`,`workspace`,`yes`,`cwd`,`dir`]);function y(e,t,n){let[r]=e.split(`/`),i=(t&&typeof t==`object`&&t.taskId)??n[`task-id`],a=n.id;return r===`task`?typeof i==`string`?`/tasks/${encodeURIComponent(i)}`:`/tasks`:r===`agent`?typeof a==`string`?`/agents/${encodeURIComponent(a)}`:`/agents`:r===`credentials`?`/settings/credentials`:r===`runner`?`/settings/runners`:r===`model`?`/settings/models`:`/settings/connections`}function b(e,t){let n=[...t,e.name].join(`/`),r=g(e,t),i=Object.fromEntries(Object.entries(r.args??{}).filter(([e])=>!v.has(e))),a=r.mcp&&r.mcp.text;return{...r,args:i,run:async(t,n)=>{try{return{...await r.run({...t,server:!0},n),args:t}}catch(n){if(e.approvalPolicy!==`ask`||!(n instanceof c)||n.code!==`approval-pending`)throw n;let r={pending:!0,reason:n.message};return{value:r,output:r,args:t}}},next:e=>(r.next?.(e)??[]).map(e=>({...e,usage:e.usage.replace(/ --server\b/,``)})),mcp:{...r.mcp,text:e=>{let t=e.value,r=t?.pending?`Asked for approval in the thread. ${t.reason} Nothing changes until someone allowed to approve it does, in the thread or on the task's page.`:(a?a(e):JSON.stringify(e.output)??``).replace(/ --server\b/g,``),i=p.env.CODER_DASHBOARD,o=y(n,e.value,e.args),s=o.startsWith(`/tasks/`)?`the task`:o.startsWith(`/agents/`)?`the agent`:o.split(`/`).at(-1);return i?`${r}\n[Open ${s}](${i}${o})`:r}}}}function x({page:e,action:t,args:n},r,i=p.env.CODER_DASHBOARD??``){let[a,...o]=n,s=e.replace(/:([\w-]+)/g,(e,t)=>encodeURIComponent(String(r[t]??``))),c=new URLSearchParams;c.set(t,s===e?String(r[a]??``):`1`);for(let n of o)r[n]!==void 0&&r[n]!==!1&&(e===`/settings/connections`&&t===`add`&&n===`personal`?c.set(`scope`,`personal`):c.set(n,String(r[n])));return`${i}${s}?${c}`}function S(e,t,n){let{args:r,label:i,button:a}=n,o=g(e,t),s=Object.fromEntries(Object.entries(o.args??{}).filter(([e])=>r.includes(e))),c=e=>x(n,e);return{...o,access:`read`,args:s,run:async e=>({value:{link:c(e)},output:{link:c(e)},args:e}),next:()=>[],mcp:{...o.mcp,text:e=>{let t=e.value.link;return a?`Give the person this link; they check it and click ${a} there. [${i}](${t})`:`Give the person this link; they finish there and any key goes straight to Coder, outside the conversation. [${i}](${t})`}}}}function C(e,t){return e.flatMap(e=>{let{approvalPolicy:n=`allow`}=e;return n===`deny`?[]:[typeof n==`object`?S(e,t,n.handoff):b(e,t)]})}function w(e,t=[]){let n=[...t,e.name],r=C(e.commands,n),i=(e.namespaces??[]).map(e=>w(e,n)).filter(e=>!!e);if(!(!r.length&&!i.length))return{...e,commands:r,namespaces:i}}const T=e=>`# Coder dispatch${e?` (${e} host)`:``}`,E=(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`.":``}`,D=(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 docs; `coder docs <topic>` prints one.",`- ${e}`,...t?[`- ${t}`]:[]].join(`
|
|
2
2
|
`),O=(e,t)=>s({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:[T(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
3
|
|
|
4
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 one access setting (read-only or auto), is steerable mid-run, and falls back down the configured chain when an engine cannot start.`,E(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 doc.\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.",D(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(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":1,"framework":"5c05030a635e53e4","config":{"outDir":"../../../dist/dash","workspaceRoot":"../../..","prefetch":"intent","appDir":"app","publicDir":"public","basePath":"","assetPrefix":"","root":".","appPath":"app","publicPath":"public","outPath":"../../../dist/dash/standalone","outRootPath":"../../../dist/dash","typesPath":"../../../dist/dash/types","checksPath":"../../../dist/dash/typecheck/checks"},"modules":{"server:server:r:app/create/[id]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/create/[id]/page.11efd0e175db9053.js","server:server:r:app/dash/[org]/account/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/loading.56c14183236be231.js","server:server:r:app/dash/[org]/account/notify.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/notify.59ae138dc182d7c3.js","server:server:r:app/dash/[org]/account/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/page.e9386951cedea737.js","server:server:r:app/dash/[org]/account/sign-out.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/sign-out.713d3ec10951fde5.js","server:server:r:app/dash/[org]/agents/(list)/agents-grid.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agents-grid.f989d6f2d9ece6e4.js","server:server:r:app/dash/[org]/agents/(list)/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/loading.0130f8533d8f1b1e.js","server:server:r:app/dash/[org]/agents/(list)/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.0f88720e52db99a2.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/layout.8d2f0997462fc958.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/loading.90bf37c903ce6f0d.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/page.bc93891522c8120d.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.d56ef50b0694f975.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.cf5cf9afe38ab0e4.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.c44c7df7841719f2.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.6e90cbfe308f28a0.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/settings/agent-settings-form.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/agent-settings-form.61de585104c2be10.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/settings/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/loading.2800c65e45a4a1d9.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/settings/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/page.4d06f759984a63b3.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/tasks/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/loading.ea2925eab1d2e594.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/tasks/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/page.fb069bf82b727d27.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/usage/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/loading.3a615597ca648452.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/usage/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/page.0a472a0e269b8c01.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/versions-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/versions-list.7ef7dfd5d8f5de43.js","server:server:r:app/dash/[org]/agents/[slug]/edit/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/loading.007326a04f05d46c.js","server:server:r:app/dash/[org]/agents/[slug]/edit/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/page.a26aa7bc6ab655f0.js","server:server:r:app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.361918fe58349aa1.js","server:server:r:app/dash/[org]/agents/[slug]/platforms/[app]/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/loading.f0d91d48e2b79e50.js","server:server:r:app/dash/[org]/agents/[slug]/platforms/[app]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/page.3f60cf67517d0d31.js","server:server:r:app/dash/[org]/agents/agent/agent-toggle.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-toggle.ffbf9a8b8b2fbde7.js","server:server:r:app/dash/[org]/agents/agent/instructions.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/instructions.1b8c9189961c5a4f.js","server:server:r:app/dash/[org]/agents/editor/connect-repositories.ts":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/connect-repositories.9abe365f0098d358.js","server:server:r:app/dash/[org]/agents/editor/editor.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/editor.6548f8f757578f90.js","server:server:r:app/dash/[org]/agents/editor/import-picker.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/import-picker.577b1d84c7ab84e1.js","server:server:r:app/dash/[org]/agents/new/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/loading.9b65a8c1cdc8346f.js","server:server:r:app/dash/[org]/agents/new/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/page.2b326d00ccef5544.js","server:server:r:app/dash/[org]/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/layout.45a09107b19f0a7e.js","server:server:r:app/dash/[org]/operator/operator-apps.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.f8d679f2d06b0ebc.js","server:server:r:app/dash/[org]/operator/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/page.5aa3ddc669366703.js","server:server:r:app/dash/[org]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/page.5a5188f0fc75dcd2.js","server:server:r:app/dash/[org]/settings/[tab]/advanced-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/advanced-list.73cdadb2968a39d2.js","server:server:r:app/dash/[org]/settings/[tab]/connection-add.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connection-add.353ec01fbb814f78.js","server:server:r:app/dash/[org]/settings/[tab]/connections-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.cf4061ae909272c3.js","server:server:r:app/dash/[org]/settings/[tab]/credentials-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials-list.fc4cff0289267551.js","server:server:r:app/dash/[org]/settings/[tab]/list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.e7d6a422f6a869ea.js","server:server:r:app/dash/[org]/settings/[tab]/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/loading.71ca4f6c99a8a9d5.js","server:server:r:app/dash/[org]/settings/[tab]/models-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.acb92b39cab1d11c.js","server:server:r:app/dash/[org]/settings/[tab]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/page.95fe939e36e5be55.js","server:server:r:app/dash/[org]/settings/[tab]/runners-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/runners-list.5764eac3307d67cc.js","server:server:r:app/dash/[org]/settings/[tab]/secrets-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/secrets-list.d316bb157f747f6c.js","server:server:r:app/dash/[org]/settings/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/layout.4eb70f2de8674f93.js","server:server:r:app/dash/[org]/settings/model-pick.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-pick.a143e77f5ed5f9d3.js","server:server:r:app/dash/[org]/settings/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/page.70cad0e981c33fa5.js","server:server:r:app/dash/[org]/setup/create-link.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/create-link.18bd2b92cd23b73f.js","server:server:r:app/dash/[org]/setup/outcome-dialog.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-dialog.a74e686aaed0c584.js","server:server:r:app/dash/[org]/setup/outcome-toast.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-toast.95f7be49430248eb.js","server:server:r:app/dash/[org]/setup/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/page.e39ee9236664d043.js","server:server:r:app/dash/[org]/tasks/[id]/activity.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/activity.441e82ab00344fb2.js","server:server:r:app/dash/[org]/tasks/[id]/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/loading.779ecdd9c9d2ff09.js","server:server:r:app/dash/[org]/tasks/[id]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/page.24e121ea6eb578ba.js","server:server:r:app/dash/[org]/tasks/[id]/task-actions.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.4a4052a38db4bad3.js","server:server:r:app/dash/[org]/tasks/[id]/task-missing.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-missing.33ec27a4a5eafefe.js","server:server:r:app/dash/[org]/tasks/[id]/task-view.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-view.0cd3ec2655f44cc7.js","server:server:r:app/dash/[org]/tasks/composer.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/composer.ee326fbf5e526fb1.js","server:server:r:app/dash/[org]/tasks/list/pending-approvals.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/pending-approvals.7607998094780fdd.js","server:server:r:app/dash/[org]/tasks/list/tasks-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/tasks-list.e486cbd16ea3e963.js","server:server:r:app/dash/[org]/tasks/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/page.ede64f82388f9480.js","server:server:r:app/dash/[org]/usage/custom-range.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/custom-range.fe91164d7a311356.js","server:server:r:app/dash/[org]/usage/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/loading.5b973a8bb29197d5.js","server:server:r:app/dash/[org]/usage/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/page.0499098badd3f5f8.js","server:server:r:app/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/layout.94ea3908b03bede6.js","server:server:r:app/login/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/login/page.4827d64c71c0690a.js","server:server:r:app/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/page.2c6a0a292ea8ab67.js","server:server:r:app/zone.tsx":"server/modules-server-server-react-server/src/server/dash/app/zone.0515a688ee5ff6ca.js","server:server:r:comps/frame/drawer.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/drawer.1a08ff611df7fe38.js","server:server:r:comps/frame/foreign-link.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/foreign-link.1d4f63a0379cbd1d.js","server:server:r:comps/frame/task-toasts.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/task-toasts.3b7eeee29fc327de.js","server:server:r:comps/frame/theme-choices.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/theme-choices.fc86071c1b634176.js","server:server:r:comps/nav/back.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/back.7aa0ae82dbec38cd.js","server:server:r:comps/nav/current-link.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/current-link.727b350a40b9ca13.js","server:server:r:comps/nav/org.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/org.853d173b55368728.js","server:server:r:comps/nav/side-toggle.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/side-toggle.be7d2a7529557435.js","server:server:r:comps/ui/collapse.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/collapse.eb578fdf42029754.js","server:server:r:comps/ui/confirm.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.e21b7f5e486dafb8.js","server:server:r:comps/ui/copy.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/copy.043e0695c08c72f9.js","server:server:r:comps/ui/menu.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/menu.7f558c7c6f6345d5.js","server:server:r:comps/ui/modal.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/modal.08ac85d31f4c76c1.js","server:server:r:comps/ui/sentinel.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.0ddf515b8f09ef9f.js","server:server:r:utils/action.ts":"server/modules-server-server-react-server/src/server/dash/utils/action.f22057e7dfac40fe.js","server:server:r:utils/client.ts":"server/modules-server-server-react-server/src/server/dash/utils/client.c8d7efefb6194d7d.js"},"conventions":{"app/dash/[org]/settings/[tab]":["loading.tsx","page.tsx"],"app/dash/[org]/settings":["[tab]/","layout.tsx","page.tsx"],"app/dash/[org]/tasks/list":[],"app/dash/[org]/tasks/[id]":["loading.tsx","page.tsx"],"app/dash/[org]/tasks":["[id]/","list/","page.tsx"],"app/dash/[org]/setup":["page.tsx"],"app/dash/[org]/agents/(list)":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/agents/agent":[],"app/dash/[org]/agents/new":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/platforms/[app]":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/platforms":["[app]/"],"app/dash/[org]/agents/[slug]/(tabs)/settings":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)/platforms":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)/tasks":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)/usage":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)":["layout.tsx","loading.tsx","page.css","page.tsx","platforms/","settings/","tasks/","usage/"],"app/dash/[org]/agents/[slug]/edit":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]":["(tabs)/","edit/","platforms/"],"app/dash/[org]/agents/editor":[],"app/dash/[org]/agents":["(list)/","[slug]/","agent/","editor/","new/"],"app/dash/[org]/usage":["loading.tsx","page.tsx"],"app/dash/[org]/account":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/operator":["page.tsx"],"app/dash/[org]":["account/","agents/","layout.css","layout.tsx","operator/","page.tsx","settings/","setup/","tasks/","usage/"],"app/dash":["[org]/"],"app/create/[id]":["page.tsx"],"app/create":["[id]/"],"app/login":["page.css","page.tsx"],"app":["create/","dash/","layout.tsx","login/","page.tsx"]},"clientConventions":[],"documentLayouts":["app/layout.tsx","app/dash/[org]/settings/layout.tsx","app/dash/[org]/agents/[slug]/(tabs)/layout.tsx","app/dash/[org]/layout.tsx"],"globalCss":["app/globals.css","app/responsive.css"]}
|
|
1
|
+
{"version":1,"framework":"5c05030a635e53e4","config":{"outDir":"../../../dist/dash","workspaceRoot":"../../..","prefetch":"intent","appDir":"app","publicDir":"public","basePath":"","assetPrefix":"","root":".","appPath":"app","publicPath":"public","outPath":"../../../dist/dash/standalone","outRootPath":"../../../dist/dash","typesPath":"../../../dist/dash/types","checksPath":"../../../dist/dash/typecheck/checks"},"modules":{"server:server:r:app/create/[id]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/create/[id]/page.ff03c26886d248d2.js","server:server:r:app/dash/[org]/account/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/loading.56c14183236be231.js","server:server:r:app/dash/[org]/account/notify.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/notify.5b9c5a4ab975b01e.js","server:server:r:app/dash/[org]/account/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/page.6e80433ca86c927d.js","server:server:r:app/dash/[org]/account/sign-out.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/sign-out.e419e0eae59a1394.js","server:server:r:app/dash/[org]/agents/(list)/agents-grid.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agents-grid.53dc6597be8d6049.js","server:server:r:app/dash/[org]/agents/(list)/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/loading.0130f8533d8f1b1e.js","server:server:r:app/dash/[org]/agents/(list)/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.82a238c790c19a6c.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/layout.4a5c6f90ebaccf6f.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/loading.90bf37c903ce6f0d.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/page.ed696703c6fb5796.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.d56ef50b0694f975.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.12dbb62edaa16b4f.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.1e7bb5f00112eeac.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.45adc3fb28e7d33b.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/settings/agent-settings-form.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/agent-settings-form.1693e7dc34f5b94a.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/settings/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/loading.2800c65e45a4a1d9.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/settings/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/page.fbbcdf8fde222f1e.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/tasks/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/loading.099f0e549e964a5c.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/tasks/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/page.577e64210260faf2.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/usage/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/loading.3a615597ca648452.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/usage/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/page.2d10853615403293.js","server:server:r:app/dash/[org]/agents/[slug]/(tabs)/versions-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/versions-list.e6088baf4de7f41e.js","server:server:r:app/dash/[org]/agents/[slug]/edit/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/loading.f0dfaf4552b8cde1.js","server:server:r:app/dash/[org]/agents/[slug]/edit/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/page.9f09979ad3435fe3.js","server:server:r:app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.adaebe98ec9d32e8.js","server:server:r:app/dash/[org]/agents/[slug]/platforms/[app]/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/loading.f0d91d48e2b79e50.js","server:server:r:app/dash/[org]/agents/[slug]/platforms/[app]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/page.e2dc60bbcac65b1f.js","server:server:r:app/dash/[org]/agents/agent/agent-toggle.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-toggle.d795b7112534872c.js","server:server:r:app/dash/[org]/agents/agent/instructions.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/instructions.1b8c9189961c5a4f.js","server:server:r:app/dash/[org]/agents/editor/connect-repositories.ts":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/connect-repositories.e27bcba279f82d7b.js","server:server:r:app/dash/[org]/agents/editor/editor.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/editor.288736c2a52c7df4.js","server:server:r:app/dash/[org]/agents/editor/import-picker.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/import-picker.58bad50dd8e60d63.js","server:server:r:app/dash/[org]/agents/new/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/loading.9b65a8c1cdc8346f.js","server:server:r:app/dash/[org]/agents/new/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/page.83a490948f585e69.js","server:server:r:app/dash/[org]/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/layout.61ad05aceb425910.js","server:server:r:app/dash/[org]/operator/operator-apps.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.6f71999915848a2c.js","server:server:r:app/dash/[org]/operator/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/page.4758811b7fc86d84.js","server:server:r:app/dash/[org]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/page.7de674df6cd0e824.js","server:server:r:app/dash/[org]/settings/[tab]/advanced-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/advanced-list.851275e04f8e7305.js","server:server:r:app/dash/[org]/settings/[tab]/connection-add.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connection-add.45a224c5e612b15f.js","server:server:r:app/dash/[org]/settings/[tab]/connections-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.6cacd41c18de261d.js","server:server:r:app/dash/[org]/settings/[tab]/credentials-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials-list.79a1355d894b8642.js","server:server:r:app/dash/[org]/settings/[tab]/list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.fa3b9eff6657bc57.js","server:server:r:app/dash/[org]/settings/[tab]/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/loading.71ca4f6c99a8a9d5.js","server:server:r:app/dash/[org]/settings/[tab]/models-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.2a8f6a5679fc5c4d.js","server:server:r:app/dash/[org]/settings/[tab]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/page.7681780b48e2aa3e.js","server:server:r:app/dash/[org]/settings/[tab]/runners-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/runners-list.e9834546550a3c2c.js","server:server:r:app/dash/[org]/settings/[tab]/secrets-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/secrets-list.ff9f3b3d88f2b8df.js","server:server:r:app/dash/[org]/settings/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/layout.3f8a61434ceaa186.js","server:server:r:app/dash/[org]/settings/model-pick.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-pick.695538b2edf9dd15.js","server:server:r:app/dash/[org]/settings/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/page.e439da4bae9d6d6c.js","server:server:r:app/dash/[org]/setup/create-link.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/create-link.371225925a83e900.js","server:server:r:app/dash/[org]/setup/outcome-dialog.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-dialog.a74e686aaed0c584.js","server:server:r:app/dash/[org]/setup/outcome-toast.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-toast.c7d02e38464dec0b.js","server:server:r:app/dash/[org]/setup/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/page.885e5ae7913d8f5b.js","server:server:r:app/dash/[org]/tasks/[id]/activity.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/activity.f8d48c80747830ee.js","server:server:r:app/dash/[org]/tasks/[id]/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/loading.779ecdd9c9d2ff09.js","server:server:r:app/dash/[org]/tasks/[id]/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/page.70ce5ef3bcf56310.js","server:server:r:app/dash/[org]/tasks/[id]/task-actions.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.783070d7dbd198e4.js","server:server:r:app/dash/[org]/tasks/[id]/task-missing.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-missing.33ec27a4a5eafefe.js","server:server:r:app/dash/[org]/tasks/[id]/task-view.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-view.db256c7f111b8f23.js","server:server:r:app/dash/[org]/tasks/composer.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/composer.6a331de70f3baff4.js","server:server:r:app/dash/[org]/tasks/list/pending-approvals.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/pending-approvals.7ff2eadf13a3ee90.js","server:server:r:app/dash/[org]/tasks/list/tasks-list.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/tasks-list.57c90c66384141a0.js","server:server:r:app/dash/[org]/tasks/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/page.c6b9db3ca88aaa1f.js","server:server:r:app/dash/[org]/usage/custom-range.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/custom-range.fe91164d7a311356.js","server:server:r:app/dash/[org]/usage/loading.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/loading.5b973a8bb29197d5.js","server:server:r:app/dash/[org]/usage/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/page.743fe359f09f5648.js","server:server:r:app/layout.tsx":"server/modules-server-server-react-server/src/server/dash/app/layout.94ea3908b03bede6.js","server:server:r:app/login/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/login/page.4827d64c71c0690a.js","server:server:r:app/page.tsx":"server/modules-server-server-react-server/src/server/dash/app/page.2c6a0a292ea8ab67.js","server:server:r:app/zone.tsx":"server/modules-server-server-react-server/src/server/dash/app/zone.0515a688ee5ff6ca.js","server:server:r:comps/frame/drawer.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/drawer.1a08ff611df7fe38.js","server:server:r:comps/frame/foreign-link.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/foreign-link.1d4f63a0379cbd1d.js","server:server:r:comps/frame/task-toasts.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/task-toasts.b0ba5a1b4976ae27.js","server:server:r:comps/frame/theme-choices.tsx":"server/modules-server-server-react-server/src/server/dash/comps/frame/theme-choices.fc86071c1b634176.js","server:server:r:comps/nav/back.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/back.7aa0ae82dbec38cd.js","server:server:r:comps/nav/current-link.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/current-link.727b350a40b9ca13.js","server:server:r:comps/nav/org.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/org.853d173b55368728.js","server:server:r:comps/nav/side-toggle.tsx":"server/modules-server-server-react-server/src/server/dash/comps/nav/side-toggle.be7d2a7529557435.js","server:server:r:comps/ui/collapse.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/collapse.eb578fdf42029754.js","server:server:r:comps/ui/confirm.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.e21b7f5e486dafb8.js","server:server:r:comps/ui/copy.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/copy.043e0695c08c72f9.js","server:server:r:comps/ui/menu.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/menu.7f558c7c6f6345d5.js","server:server:r:comps/ui/modal.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/modal.08ac85d31f4c76c1.js","server:server:r:comps/ui/sentinel.tsx":"server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.0ddf515b8f09ef9f.js","server:server:r:utils/action.ts":"server/modules-server-server-react-server/src/server/dash/utils/action.44115286faf6c0f8.js","server:server:r:utils/client.ts":"server/modules-server-server-react-server/src/server/dash/utils/client.b9225923da59febe.js"},"conventions":{"app/dash/[org]/settings/[tab]":["loading.tsx","page.tsx"],"app/dash/[org]/settings":["[tab]/","layout.tsx","page.tsx"],"app/dash/[org]/tasks/list":[],"app/dash/[org]/tasks/[id]":["loading.tsx","page.tsx"],"app/dash/[org]/tasks":["[id]/","list/","page.tsx"],"app/dash/[org]/setup":["page.tsx"],"app/dash/[org]/agents/(list)":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/agents/agent":[],"app/dash/[org]/agents/new":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/platforms/[app]":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/platforms":["[app]/"],"app/dash/[org]/agents/[slug]/(tabs)/settings":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)/platforms":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)/tasks":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)/usage":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/agents/[slug]/(tabs)":["layout.tsx","loading.tsx","page.css","page.tsx","platforms/","settings/","tasks/","usage/"],"app/dash/[org]/agents/[slug]/edit":["loading.tsx","page.tsx"],"app/dash/[org]/agents/[slug]":["(tabs)/","edit/","platforms/"],"app/dash/[org]/agents/editor":[],"app/dash/[org]/agents":["(list)/","[slug]/","agent/","editor/","new/"],"app/dash/[org]/usage":["loading.tsx","page.tsx"],"app/dash/[org]/account":["loading.tsx","page.css","page.tsx"],"app/dash/[org]/operator":["page.tsx"],"app/dash/[org]":["account/","agents/","layout.css","layout.tsx","operator/","page.tsx","settings/","setup/","tasks/","usage/"],"app/dash":["[org]/"],"app/create/[id]":["page.tsx"],"app/create":["[id]/"],"app/login":["page.css","page.tsx"],"app":["create/","dash/","layout.tsx","login/","page.tsx"]},"clientConventions":[],"documentLayouts":["app/layout.tsx","app/dash/[org]/settings/layout.tsx","app/dash/[org]/agents/[slug]/(tabs)/layout.tsx","app/dash/[org]/layout.tsx"],"globalCss":["app/globals.css","app/responsive.css"]}
|