@wular/coder 0.4.13 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/actions-CkMAM1Km.js +3 -0
- package/dist/agent-Bi5nbUhA.js +1 -0
- package/dist/app-server-BTpa5GBV.js +6 -0
- package/dist/approvals-CRwkc9vB.js +5 -0
- package/dist/apps-B6mUToTa.js +18 -0
- package/dist/args-CJsHYWbt.js +66 -0
- package/dist/async-CNhQ4wyZ.js +3 -0
- package/dist/auth-oCvlHitk.js +1 -0
- package/dist/builtin/coder/agent.json +6 -6
- package/dist/builtin/coder/system.md +4 -5
- package/dist/chat-4AiZEqKh.js +13 -0
- package/dist/{chat-bwKd3y6V.js → chat-Bfu9XKRa.js} +1 -1
- package/dist/cli.js +18 -13
- package/dist/{client-C4QCT6cG.js → client-nBo9Mhsr.js} +4 -4
- package/dist/cmd-Cu3OquA_.js +122 -0
- package/dist/config-D_RuO6gX.js +5 -0
- package/dist/connection-BXjn7gCC.js +1 -0
- package/dist/connections-Cswv7r8Z.js +2 -0
- package/dist/context-CFrDYenS.js +6 -0
- package/dist/crypto-Ittsv-m4.js +1 -0
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1682 -1444
- package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/event-json.856d33f567e58d0e.js +30 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/http.e78b470f4ecf125b.js +58 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.de1f1311bab4252f.js → index.54c45900f2153d34.js} +46 -72
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.ec6391dbf3063330.js → view.e20379d8f741754a.js} +38 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/types.5bf5a41cedb54154.js +37 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.30ed8c28774a1a82.js → load.252f972b42c690e2.js} +18 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.118a70787eff1761.js → page.11efd0e175db9053.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.fcdfd50c21031895.js → loading.56c14183236be231.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.98dfcd316c306258.js → notify.59ae138dc182d7c3.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.74c59322f5fe8a2c.js → page.e9386951cedea737.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.730aa96b086ac996.js → sign-out.713d3ec10951fde5.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.1be5795272b245c8.js → agent-menu.5c780867b82081b1.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.2c30ace077893029.js → agents-grid.f989d6f2d9ece6e4.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.733f0acc2af5ceda.js → loading.0130f8533d8f1b1e.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.0f88720e52db99a2.js +48 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.b26006f060cd48f0.js → layout.8d2f0997462fc958.js} +89 -32
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{loading.388aeaf0c2edf8f8.js → loading.90bf37c903ce6f0d.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.4b23e9df21433bd3.js → page.bc93891522c8120d.js} +22 -88
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.e06845585ca67abc.js → loading.d56ef50b0694f975.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.4048048acb374c67.js → page.cf5cf9afe38ab0e4.js} +51 -123
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.000f2f87a48bfbc6.js → platform-actions.c44c7df7841719f2.js} +234 -134
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-state.6b6132518ca61635.js +21 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.6e90cbfe308f28a0.js +82 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.ee0bb2dc4d403ec3.js → agent-settings-form.61de585104c2be10.js} +44 -66
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.0e3641f3e4abaa7c.js → loading.2800c65e45a4a1d9.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.649b4ba135ded99b.js → page.4d06f759984a63b3.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.195e168e8e41d797.js → loading.ea2925eab1d2e594.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.96f7573208644f40.js → page.fb069bf82b727d27.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.905293c9aa9afbc9.js → loading.3a615597ca648452.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.5f2b8585db8b27ad.js → page.0a472a0e269b8c01.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.8700f0106f4e8c15.js → versions-list.7ef7dfd5d8f5de43.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.f94b2f9ab04aaf21.js → loading.007326a04f05d46c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.e898c4b5ef16ecb0.js → page.a26aa7bc6ab655f0.js} +10 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.361918fe58349aa1.js +142 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/loading.f0d91d48e2b79e50.js +14 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/page.3f60cf67517d0d31.js +99 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.44e689e546fb042b.js → agent-pills.1012e04bfbc7bffd.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.4c67dfbb7d28a416.js → agent-toggle.ffbf9a8b8b2fbde7.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.9740a8e2f4b41f28.js → hero.0ae015a4fbe6321e.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{instructions.85b1cd986a9edbb5.js → instructions.1b8c9189961c5a4f.js} +13 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.ff8b78a03153239b.js → connect-repositories.9abe365f0098d358.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.471af698b8060eba.js → editor.6548f8f757578f90.js} +164 -127
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.b7b5c89e618e8f89.js → import-picker.577b1d84c7ab84e1.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.ecb9dfd4d0f9d107.js → loading.9b65a8c1cdc8346f.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.880bdac7fe843635.js → page.2b326d00ccef5544.js} +9 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.81f7e055829854a3.js → layout.45a09107b19f0a7e.js} +89 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.f8d679f2d06b0ebc.js +155 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.8f8697b1b6b34ad7.js → page.5aa3ddc669366703.js} +10 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.fe608b8e661aba1d.js → page.5a5188f0fc75dcd2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/advanced-list.73cdadb2968a39d2.js +63 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connection-add.353ec01fbb814f78.js +526 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.cf4061ae909272c3.js +439 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.a4d8338c7f6a5702.js → credentials-list.fc4cff0289267551.js} +116 -101
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.1443bbed1ff1d441.js → credentials.db01de2581ac65f3.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.e7d6a422f6a869ea.js +201 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{loading.7ca95dcb4fb3362b.js → loading.71ca4f6c99a8a9d5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.acb92b39cab1d11c.js +635 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.805d0f8a2c5817d6.js → page.95fe939e36e5be55.js} +67 -41
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.1e83449aa6593224.js → runners-list.5764eac3307d67cc.js} +42 -37
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.17ac06593005b8ba.js → secrets-list.d316bb157f747f6c.js} +19 -17
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/chain-hint.65c4cc04c78e8bfd.js +18 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.8c4a2b31b194ba3e.js → layout.4eb70f2de8674f93.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.dc630cb6e2cbf83a.js +150 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-pick.a143e77f5ed5f9d3.js +160 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.a77996786278cda0.js → page.70cad0e981c33fa5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.705be0b1129b97af.js → settings-head.004ced21e02ffa48.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{tunnel-guide.29eee1a0b1852168.js → tunnel-guide.1bc6bff9d8019098.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.19b4c50ef497aca1.js → create-link.18bd2b92cd23b73f.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.18cf32fa42247b91.js → outcome-dialog.a74e686aaed0c584.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-toast.95f7be49430248eb.js +24 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome.cbbc8cd1bbbee01b.js → outcome.22a83d756e4020a7.js} +3 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.616f0b36bf7925bc.js → page.e39ee9236664d043.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.a911169a820ba604.js → activity.441e82ab00344fb2.js} +12 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.76f851da5cc5268d.js → loading.779ecdd9c9d2ff09.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.ddb594bb6567ee13.js → page.24e121ea6eb578ba.js} +16 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.4a4052a38db4bad3.js +408 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-missing.33ec27a4a5eafefe.js +27 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.3276538e8306fd8a.js → task-view.0cd3ec2655f44cc7.js} +43 -34
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.05fc39e1a7fd1ab7.js → composer-data.73225456d60d63e3.js} +4 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.dbf06b05c5e2eba3.js → composer.ee326fbf5e526fb1.js} +114 -121
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/pending-approvals.7607998094780fdd.js +40 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{status.cb704b48ce86cc7d.js → status.d2c05c397780b833.js} +7 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.f089c1c122ed6dd2.js → task.a25847399a4dfb30.js} +9 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.5a00d69851dae119.js → tasks-list.e486cbd16ea3e963.js} +43 -35
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.36e70c93f7d0feee.js → tasks-section.01510523d1556d59.js} +16 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.185b1ba0c803db3f.js → page.ede64f82388f9480.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{custom-range.2e21c7f891966c15.js → custom-range.fe91164d7a311356.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{day-chart.261b6651df2d3966.js → day-chart.20faaaf57c81ad9e.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.a7e0ec01bfa769e3.js → loading.5b973a8bb29197d5.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.d41fea7676e37bfc.js → page.0499098badd3f5f8.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.69e68c9dae09f238.js → range-bar.0b9038e9df707843.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{top-agents.18fc469e781e2305.js → top-agents.93c916167299ffb6.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.296d70b95894209f.js → layout.94ea3908b03bede6.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.a82be2fd23e9ac67.js → page.4827d64c71c0690a.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.d3e61538dbc8ec39.js → drawer.1a08ff611df7fe38.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.8c6adf9c5a6f467c.js → foreign-link.1d4f63a0379cbd1d.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.1cea8a722c10b998.js → loading-card.77bea8c5870b5d3c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.87b92529dbb53ceb.js → page-head.2eb1e0213eb50349.js} +3 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.c32d78562f75db25.js → stream.e3800e736f832124.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.44075fa7e04575e8.js → task-toasts.3b7eeee29fc327de.js} +28 -18
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.85100ed66d6f9200.js → theme-choices.fc86071c1b634176.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.d6109e72fbd04b45.js → back.7aa0ae82dbec38cd.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.d3abfd4053b711ce.js → org.853d173b55368728.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.489faf1a259479f7.js → side-toggle.be7d2a7529557435.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{badge.c0bc352791a95fd6.js → badge.9f63fd615cf0ee22.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/button.2b18ba19ae01e2bb.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{button.ce9e6cdb08ca86db.js → button.b62fa52e18fa338b.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.4ab7ad42a0770726.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.9f0d45b73bc78b4f.js → card.c0030eafd76587e3.js} +21 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.93e4d1b20c2873ed.js → collapse.eb578fdf42029754.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.54270c0251466fda.js → combo.e4e08287494081a3.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.29e198be34578222.js → confirm.e21b7f5e486dafb8.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.bd6fc1577a393965.js → copy.043e0695c08c72f9.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.81bb9a5c60cd1089.js → filter.0730dccad6332327.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.6fdff1e7355aaa0e.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.e36c72f54750663a.js → icons.f769275420d072ce.js} +4 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu-items.1d082ac4dae8f3d4.js → menu-items.759a1b1f7c5ee365.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.ee45bace979944b6.js → menu.7f558c7c6f6345d5.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.cd96fa0495fe0fde.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.0b69c7fd9db025b9.js → modal.08ac85d31f4c76c1.js} +7 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.2eb33e5bea28d804.js → select.0ee9e8f04ddd8b47.js} +9 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.04132db0c5033d4f.js → tail.7eb303330802ac18.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.cdbd0357f2c5e1fe.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.8b3a460a65edf85a.js → toolbar.ff8367c641d28c1e.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.67dd6f8ab1ae067d.js → action.f22057e7dfac40fe.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.78267fa3d7905d17.js → client.c8d7efefb6194d7d.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/routes/http.394704f4f12ada08.js +165 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/utils/crypto.24a6439ff8d10d3d.js +11 -0
- package/dist/dash/standalone/static/assets/chunks/advanced-list-850a950afe4f6996.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-pills-9f6fa120182db948.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-toggle-521136f20a71400d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agents-grid-bcd13cd7a46224a6.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{back-e29cb10f5548ddae.js → back-2d67134b122334f4.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/chain-hint-53675e299a865420.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{combo-702c94817bf6ac17.js → combo-cb2c62fe580a8903.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-data-890f71bade4f0616.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{confirm-a78147b6ecef3847.js → confirm-d6b2c5b1deccd1e8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-7770ab805160028d.js → connect-repositories-226bf70aa81c29d8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-a33d6637e2d52fcf.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{copy-bdc60bdafe336316.js → copy-294c6052b3b69424.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/credentials-list-90fc1c6d202e1461.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/custom-range-efa1b6a71ba84597.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/editor-53a3e1a893644fff.js +6 -0
- package/dist/dash/standalone/static/assets/chunks/{field-bb8191aa02d07282.js → field-4d374d5ed3f43d7e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-d3dc01b2f90820db.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/list-16247e39898cd20e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/models-list-6d93523660503dfb.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-fde11a52c282301d.js → outcome-dialog-755fc581cbc2836e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-08e9b3816dcd62b1.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-step-5881a8be1e761e00.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/runners-list-dd759d408c643a29.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runtime-6e12333f12903a62-1.js → runtime-9b28886f3cbe0ed3-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-be1f634a1b077baa.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{segmented-0b6dc6b93c35e0f5.js → segmented-f646bfa8aa0aa449.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +9 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-953965859f7bf6b9.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-b42d2c06c25d1e2b.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-f8804b80cf32f8d0.js → tail-d13c4cc0cf11ffd1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/task-423e6a3f2527f534.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-actions-5917357eac6504ca.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/tasks-list-2c5ce592e00fda45.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/versions-list-177ae397ad64dcea.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-6e12333f12903a62-0.js → wular-pnext-9b28886f3cbe0ed3-0.js} +1 -1
- package/dist/dash/standalone/static/assets/create-param-id-2c72f3e32e7f8b8d.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-a7f30a8c5a6fa651.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-account-76fffb9337b633f2.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-cc5d59edfc3cf0b1.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-170499c849114150.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-00243b34eb094b95.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-199a9991de1bf2d9.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-param-app-a6d559f0e26bd01b.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-operator-8d5ef55834d8deba.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-settings-7138821f5422d087.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-586fec34f285e9cb.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-setup-67679c1f84f352cf.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-8a44e171984d32a1.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-usage-c534db20ce538fd2.css +1 -0
- package/dist/dash/standalone/static/assets/global-df2c26ad15039e8a.css +1 -0
- package/dist/dash/standalone/static/assets/{login-9760b85feae40270.css → login-148795638d6ff5d4.css} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7ecbd7a0cbe4e231.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ed31510d4615a5a5.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +1 -0
- package/dist/definition-4on4SG5J.js +1 -0
- package/dist/discover-DvzAbQvU.js +1 -0
- package/dist/dispatch-BaW2X6Sc.js +12 -0
- package/dist/{dist-DAnSqY1s.js → dist-B5qUdWUG.js} +35 -35
- package/dist/{dist-B2jiMMxZ.js → dist-Clxdruuu.js} +3 -3
- package/dist/{dist-ClCNj65n.js → dist-CymLGfHl.js} +4 -4
- package/dist/{adapter-Bz0E-DAY.js → dist-DX0JzVC6.js} +990 -990
- package/dist/{adapter-CsacmMmv.js → dist-DfD9WmV8.js} +39 -39
- package/dist/dist-node-B8VIVzUc.js +20 -0
- package/dist/docs-CbgaMPvq.js +2 -0
- package/dist/drive-Tk6JvQK5.js +1 -0
- package/dist/drizzle-orm-CYU7WOQS.js +2 -0
- package/dist/{emit-BrkJJPUE.js → emit-BgeqsCkC.js} +3 -3
- package/dist/env-_AxrvBXP.js +1 -0
- package/dist/errors-DK_trCff.js +1 -0
- package/dist/exec-CAaYFJD1.js +3 -0
- package/dist/executor-Chc0zawh.js +11 -0
- package/dist/flow/builtin/review/index.d.ts +2 -2
- package/dist/flow/builtin/review/index.js +9 -9
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/github-actions-2RjyRseX.js +36 -0
- package/dist/{hook-CIipj9MJ.js → hook-COWDSO4a.js} +1 -1
- package/dist/http-615JJgHo.js +5 -0
- package/dist/http-DRk8cDjf.js +1 -0
- package/dist/{index-ChcxzFdB.d.ts → index-ezhbF5wC.d.ts} +335 -244
- package/dist/integrations-BVmsk64f.js +9 -0
- package/dist/lib/broker.js +2 -2
- package/dist/load-PqaDHiHX.js +2 -0
- package/dist/local-BMGcCk8N.js +1 -0
- package/dist/local-BzZuOwgI.js +5 -0
- package/dist/login-BDKTNynK.js +8 -0
- package/dist/maintenance-d43Ml540.js +1 -0
- package/dist/mcp-BGam3G_B.js +1 -0
- package/dist/mcp-BGx48pyR.js +25 -0
- package/dist/mcp-BNz_l5TV2.js +1 -0
- package/dist/metadata-D_bBfr3H.js +1 -0
- package/dist/models-D1NXi6ni.js +1 -0
- package/dist/output-BKeyLbvt.js +5 -0
- package/dist/permission-BkYxjiFR.js +1 -0
- package/dist/prompt-CpwbsEWM.js +4 -0
- package/dist/refresh-yfEi5SQs.js +1 -0
- package/dist/remote-BbXx6S9P.js +1 -0
- package/dist/remote-rArUa01V.js +2 -0
- package/dist/runner-DG9jrX5H.js +1 -0
- package/dist/runner.json +1 -1
- package/dist/runner.tgz +0 -0
- package/dist/schema.d.ts +2 -2
- package/dist/schema.js +2 -3
- package/dist/sdk.d.ts +2858 -1376
- package/dist/sdk.js +1 -1
- package/dist/serve-B-5rDiZm.js +1 -0
- package/dist/serve-CvnrGAj7.js +12 -0
- package/dist/serve-DoYbHm_k.js +5 -0
- package/dist/session-Dtje9y-r.js +1 -0
- package/dist/sessions-DIz9fyRN.js +1 -0
- package/dist/shared--aE4olIO.js +1 -0
- package/dist/sign-in-wWkyaq5X.js +3 -0
- package/dist/state-Br-Fuaxg.js +6 -0
- package/dist/store-CzQLgCzt.js +352 -0
- package/dist/task-CFt85vTy.js +1 -0
- package/dist/task-N0qhnKpK.js +7 -0
- package/dist/tool-search-BkdgVolu.js +6 -0
- package/dist/tools-DNgEptor.js +1 -0
- package/dist/tools-oQvFAnh5.js +1 -0
- package/dist/tools-search-D1zArRyJ.js +1 -0
- package/dist/turn-Cc-v-eSy.js +3 -0
- package/dist/types-DHBqXFE2.js +1 -0
- package/dist/update-check-UyRob3yy.js +1 -0
- package/dist/view-D-rbQ1Kz.js +4 -0
- package/dist/views-3TxH367C.js +2 -0
- package/dist/worker-BMuKKiIa.js +1 -0
- package/dist/worker-CIHY9L42.js +7 -0
- package/dist/zod-_-snqfdO.js +1 -0
- package/dist/zod.js +65 -1
- package/docs/agents/coder.md +5 -1
- package/docs/agents/index.md +53 -82
- package/docs/approvals.md +47 -0
- package/docs/cli/agent.md +34 -13
- package/docs/cli/auth.md +1 -1
- package/docs/cli/connection.md +22 -21
- package/docs/cli/index.md +14 -12
- package/docs/cli/model.md +11 -11
- package/docs/cli/task.md +28 -30
- package/docs/config.md +37 -65
- package/docs/connections.md +80 -0
- package/docs/dash.md +23 -19
- package/docs/flows.md +46 -213
- package/docs/models.md +48 -78
- package/docs/review.md +20 -17
- package/docs/runners.md +49 -0
- package/docs/sdk.md +49 -73
- package/docs/self-host.md +79 -81
- package/package.json +4 -5
- package/plugins/agents/skills/coder/SKILL.md +3 -3
- package/plugins/claude/skills/dispatch/SKILL.md +3 -3
- package/plugins/cursor/README.md +3 -3
- package/plugins/cursor/skills/coder/SKILL.md +3 -3
- package/dist/actions-D12xDiQS.js +0 -4
- package/dist/adapter-DzpdWewB.js +0 -1
- package/dist/agent-JJStALIx.js +0 -8
- package/dist/apps-Bnk7F3A2.js +0 -379
- package/dist/args-Dqf5Y1RP.js +0 -1
- package/dist/async-Tj4zKHXR.js +0 -3
- package/dist/auth-BhpnOCbn.js +0 -1
- package/dist/base64url-CsVsW4Id.js +0 -1
- package/dist/chat-CSepnsrK.js +0 -13
- package/dist/cmd-BHZwhrfa.js +0 -118
- package/dist/connection-BkYTuJjV.js +0 -1
- package/dist/context-zhSlmXOp.js +0 -7
- package/dist/conversation-DT-35cEt.js +0 -1
- package/dist/core-DwsAMCnL.js +0 -65
- package/dist/dash/standalone/node_modules/contextjsx/dist/index.mjs +0 -1
- package/dist/dash/standalone/node_modules/contextjsx/dist/jsx-runtime.mjs +0 -1
- package/dist/dash/standalone/node_modules/contextjsx/dist/src-BJ0QFeB8.mjs +0 -2
- package/dist/dash/standalone/node_modules/contextjsx/package.json +0 -70
- package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/turn.6bb73458768e222e.js +0 -129
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.e972c134a1ae918f.js +0 -55
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/auth/sign-in.661b3a4139af5bd7.js +0 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/page.04762872666a6f0a.js +0 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.8a20501ccb244421.js +0 -36
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.d066b77dd3187026.js +0 -65
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.09bf294d753ee9d7.js +0 -115
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.97381888bfdd711b.js +0 -642
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/engines-list.d47db60d7dc01ebd.js +0 -73
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.a5b273558fb7f0f0.js +0 -156
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.31d369f1b7ab45da.js +0 -444
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.73f8d0d54f79d8e3.js +0 -100
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.51fbeac76459433a.js +0 -240
- package/dist/dash/standalone/static/assets/chunks/action-a76e495fb39a73d3.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-pills-4d3c6a2aa9eb1522.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-f7231a66e391f6b6.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-toggle-d7d27123f2070f18.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agents-grid-185ecb3d86c6c447.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-56ebf36d63400423.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-a686289a79f64bae.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-data-f46a9bc7a14b4f9a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-696726aedab42c96.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-07559f145f3e3da3.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-426b0a5871ee41dd.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/credentials-list-f07d090410104148.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/custom-range-6618f32ef6cd4e80.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/editor-0860e370cbfc6b03.js +0 -6
- package/dist/dash/standalone/static/assets/chunks/engines-list-31b9bb7885924b05.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/format-a27067f0186e78ac.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-06b63e558f879da5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-2d9fbcbfadac4f40.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/list-2773686bf8df64c7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-8d2170eebe0d061d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/models-list-03611e64b6a07efe.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/notice-d14fdac28139c0a8.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-d3ba8ef89c59f801.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-2a71c62b9f7eaef3.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-70600c9943320152.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/runners-list-edf536eb8003eab5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-e86122f73525ff95.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-b281027d465e004f.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/shared-init-c3bd249cf1eca6d1.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/side-toggle-9b3af821cfe4c824.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-a37e7c26e82eb77d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-actions-705395565f2d83b8.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-cb21169f38b56d15.js +0 -6
- package/dist/dash/standalone/static/assets/chunks/tasks-list-d7dccfd7e0623ae0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/versions-list-f8f2e71df691efda.js +0 -1
- package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +0 -1
- package/dist/dash/standalone/static/assets/create-param-id-c2c756f652f2fc30.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-account-702f8a1b213e4026.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-aad2f9f93c06e9ab.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-f9dcbcec36586f2b.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-8ff47f5d622c1f9b.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-907036d553cfeb36.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cc77badad15f00c.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-705d7c15868b4fd6.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-04e189c045098772.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-76fcd1ce7b3dae71.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-eccb6bb9297a53e6.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-operator-635a121f7a9a95bd.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-a3297dc4d9e0c961.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-bcb06f81d9e8268d.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-setup-df4be8b188b9777f.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-16f9866a1b4801cd.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-02ae551dcd852b57.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-usage-f2175403069aab99.css +0 -1
- package/dist/dash/standalone/static/assets/global-e1de614478b64717.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-0dc829ba60df5c26.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-14d191f7f1da6602.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-169eaa63783b71fd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1e34cfefafa70fac.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-285d61f00a80f40b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-35b89c3ba23ee845.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6c42784e005d4b87.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6cd93f9bd4cf6ffd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7355f473fade532d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-815c3c297f75efb0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-87fe73c10a4dc33c.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-98b56a142d441260.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b4bafe68a40f720b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-bf61ff39bdc0db48.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c9fa86c244813f74.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d2e7a75e16221224.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d34e774405ea8da8.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d511822afdb41d1d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-e113aa2f25ecfe01.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-eb62f461d0c32266.js +0 -1
- package/dist/discover-CHfF4cEz.js +0 -1
- package/dist/dist-node-Bv1kCqyi.js +0 -20
- package/dist/docs-KHc0_gFX.js +0 -2
- package/dist/drive-Bwl7Bjme.js +0 -1
- package/dist/env-6Y-NNnYD.js +0 -1
- package/dist/errors-DO_IltpP.js +0 -16
- package/dist/exec-BmTa0vcO.js +0 -4
- package/dist/executor-ufWRqhdS.js +0 -11
- package/dist/http-Cg8PSe-c.js +0 -1
- package/dist/integrations-I7fRDk_l.js +0 -4
- package/dist/load-BDlEFetB.js +0 -2
- package/dist/local-COlczLwI.js +0 -5
- package/dist/log-view-CfX9lakH.js +0 -4
- package/dist/maintenance-CKCIWOvn.js +0 -1
- package/dist/match-CufHAZQH.js +0 -1
- package/dist/mcp-BkwmRHI9.js +0 -2
- package/dist/mcp-CGU7aoJ-.js +0 -1
- package/dist/mcp-DAHbhfUh.js +0 -13
- package/dist/models-CzggS7p2.js +0 -1
- package/dist/output-SNqdgh9A.js +0 -17
- package/dist/permission-MWFjKxqX.js +0 -1
- package/dist/prompt-CIx4jwQF.js +0 -8
- package/dist/refresh-CxsaX5R9.js +0 -1
- package/dist/remote-C9Hj2cby.js +0 -2
- package/dist/remote-HUZCWgfl.js +0 -3
- package/dist/runner-DYysY1-G.js +0 -1
- package/dist/runners-CfaGE0nV.js +0 -36
- package/dist/serve-DdAdw7Su.js +0 -4
- package/dist/serve-NQykWAKV.js +0 -1
- package/dist/serve-vKNqVaVy.js +0 -12
- package/dist/slack-BtKvW_4v.js +0 -5
- package/dist/task-CFxs0E_J.js +0 -1
- package/dist/task-iuYQ0zAK.js +0 -7
- package/dist/tools-B6ZxcqRi.js +0 -2
- package/dist/tools-FVop8XYG.js +0 -1
- package/dist/tools-search-kjKKolwp.js +0 -1
- package/dist/turn-DQ13lkPF.js +0 -2
- package/dist/types-DPtbvoo3.js +0 -1
- package/dist/types-DmThhjcW.js +0 -1
- package/dist/views-CMHXBMJp.js +0 -3
- package/dist/wire-C9CupY_A.js +0 -1
- package/dist/worker-BQpx1dPr.js +0 -9
- package/dist/worker-sTJL2eoe.js +0 -1
- package/dist/zod-BoqHoRCH.js +0 -1
- package/docs/access.md +0 -33
- package/docs/mcp.md +0 -54
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.1bd0542d832ae0c0.js → errors.200335e62a9d9564.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.061f6006f2685f5e.css.pnext-asset.js → page.abe7a6d16eb15c41.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.107e622830bff31d.css.pnext-asset.js → page.1c7947d6f79d6447.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{settings/agent-settings-form.ca926c58d15044aa.css.pnext-asset.js → platforms/platform-step.a722e3b8539a0f85.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{agent/instructions.446bccc375f30eeb.css.pnext-asset.js → [slug]/(tabs)/settings/agent-settings-form.bf5430862c505c55.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{editor/editor.1eb1bce282b289c9.css.pnext-asset.js → [slug]/platforms/[app]/@/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.db05694ed4113dab.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.a4efa8d807fe5416.css.pnext-asset.js → agents/[slug]/platforms/[app]/app-cards.d2f5c8d620066e05.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/@/app/dash/[org]/setup/outcome.3ad5f7ec67e5238d.css.pnext-asset.js → agents/agent/instructions.4c31196fcbf9846c.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/connections-list.46786fe36b121a43.css.pnext-asset.js → agents/editor/editor.6b9a1d5c0a490153.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/credentials-list.f7c27f170ec1e868.css.pnext-asset.js → layout.52abe52dcfa736d7.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.9927d602ebe9e7fc.css.pnext-asset.js → advanced-list.819e410e4178b328.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.8cbee173a5aff98d.css.pnext-asset.js → connections-list.87962937438296f1.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.53c7ea80b6fb734c.css.pnext-asset.js → credentials-list.973f91751525bcb6.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/[id]/task-view.42337a0d7c6ad0b6.css.pnext-asset.js → settings/[tab]/list.69d1b62c4066015b.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/composer.5b8687662e1629fa.css.pnext-asset.js → settings/[tab]/models-list.efd3f5781314c1d9.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/list/tasks-list.2f90c4410f843fff.css.pnext-asset.js → settings/[tab]/runners-list.df35d33aba0c8b07.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.f8ac779f0ebf888b.css.pnext-asset.js → dash/[org]/settings/model-pick.74fababc0cc0bba7.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{responsive.ebc5f7d77b4b86a0.css.pnext-asset.js → dash/[org]/tasks/[id]/task-view.aae9fa481b9015d1.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/task-toasts.d13d9f628e530552.css.pnext-asset.js → app/dash/[org]/tasks/composer.33d49ad218253703.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/badge.0cb1513f8b077560.css.pnext-asset.js → app/dash/[org]/tasks/list/pending-approvals.07e59a9cae7ccf29.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/button.d7f4433f4e7faa80.css.pnext-asset.js → app/dash/[org]/tasks/list/tasks-list.f3737549b4696cc8.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.f80288cc42f9bcae.css.pnext-asset.js → app/globals.3b53a3feaa1d72e1.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/filter.b53f21acc3e2cfef.css.pnext-asset.js → app/responsive.2979ffa0161a5afd.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/menu.25b184f68cba7b46.css.pnext-asset.js → frame/task-toasts.682322f6f729b33e.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.19e1ce5224a23acf.css.pnext-asset.js → badge.8e2a9842b28f44a6.css.pnext-asset.js} +0 -0
package/dist/output-SNqdgh9A.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import{Rt as e,qi as t,wi as n}from"./core-DwsAMCnL.js";import{$t as r,A as i,At as a,C as o,Dn as s,Dr as c,Dt as l,Er as u,Et as d,G as f,Gt as p,Ht as m,I as h,It as g,Jt as _,Kt as v,L as y,Lt as b,Mt as x,N as S,Nt as C,On as w,Ot as T,Pt as E,Q as D,Qt as O,R as ee,S as te,Sr as ne,Tn as re,Tr as ie,Un as k,Wt as ae,Y as oe,Zt as se,_ as ce,_r as le,a as ue,at as de,bn as fe,bt as pe,d as me,dt as he,gr as ge,hr as _e,ht as ve,i as ye,in as be,ir as xe,jt as Se,kn as Ce,kt as we,ln as Te,mt as Ee,n as De,ot as Oe,r as ke,rt as Ae,sn as je,st as Me,tt as Ne,un as Pe,xn as A,xt as Fe}from"./errors-DO_IltpP.js";import j from"node:path";import M from"node:process";import{fileURLToPath as Ie}from"node:url";import N from"node:fs";import{spawn as Le,spawnSync as P}from"node:child_process";import{createHash as Re,randomUUID as F}from"node:crypto";import I from"node:os";import ze from"node:readline";import{setImmediate as Be}from"node:timers/promises";var L=class extends Error{code;hint;taskId;payload;approval;result;runId;status;needs;constructor(e,t,n={}){super(t),this.name=`CoderError`,this.code=e,Object.assign(this,n)}};const Ve=`Not allowed here. If the task truly needs this, call the escalate tool with the exact command and why, then continue or end your turn; the decision arrives as a message, in this turn if it is still running.`,He=e=>j.join(e,`approvals`);function R(e){let t=He(e);return N.existsSync(t)?N.readdirSync(t).filter(e=>e.endsWith(`.request.json`)).flatMap(e=>{let n=e.replace(/\.request\.json$/,``),r=ie(j.join(t,e));if(!r)return[];let i=ie(j.join(t,`${n}.response.json`));return[{...r,id:n,response:i}]}).sort((e,t)=>String(e.createdAt).localeCompare(String(t.createdAt))):[]}const Ue=e=>[...new Set(R(e).flatMap(e=>e.response?.decision===`accept`?e.actions:[]))],We=(e,t)=>R(e).find(e=>e.response?.decision===`accept`&&e.actions.some(e=>e.trim()===t.trim())),Ge=e=>R(e).filter(e=>!e.response),Ke=e=>R(e).filter(e=>e.response?.decision===`decline`),qe=e=>`The task was stopped, so approval "${e}" is closed.`,Je=(e=new Date().toISOString())=>({decision:`closed`,answeredAt:e,deliveredAt:e});function Ye(e){let t=Je();return Ge(e).map(n=>(tt(e,n.id,t),{...n,response:t}))}function Xe(e,t){let n=He(e);N.mkdirSync(n,{recursive:!0});let r=`apr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,i={id:r,reason:t.reason,actions:t.actions,createdAt:new Date().toISOString()},{id:a,response:o,...s}=i;return N.writeFileSync(j.join(n,`${r}.request.json`),`${JSON.stringify(s,null,2)}\n`,`utf8`),i}function Ze(e,t,n,r){let i=Xe(n,r);return me(e,t,{kind:`approval-escalated`,approvalId:i.id,summary:i.actions.join(`
|
|
2
|
-
`),actions:i.actions,reason:i.reason,message:`Approval needed (${i.id}): ${i.reason}`}),i}const Qe=`CODER_SIMULATE_APPROVAL`;function $e(e,t,n,r,i){let a=R(e).find(e=>e.id===t);if(!a)throw Error(`No approval "${t}" for this task.`);if(a.response?.decision===`closed`)throw Error(qe(t));if(a.response?.decision===`accept`)throw Error(`Approval "${t}" is already approved.`);let o={decision:n,...r?{reason:r}:{},answeredAt:new Date().toISOString(),...i?{by:i}:{}};return tt(e,t,o),{...a,response:o}}function et(e,t){let n=R(e).find(e=>e.id===t.id)?.response;if(n?.decision!==t.response?.decision||n?.answeredAt!==t.response?.answeredAt)return t;let r={...t.response,deliveredAt:new Date().toISOString()};return tt(e,t.id,r),{...t,response:r}}function tt(e,t,n){N.writeFileSync(j.join(He(e),`${t}.response.json`),`${JSON.stringify(n,null,2)}\n`,`utf8`)}var nt=class extends Error{};function rt(e,t){return e?.response?.decision===`closed`&&t.response?.decision!==`closed`?qe(t.id):e?.response?.decision===`accept`&&t.response?.decision!==`accept`?`Approval "${t.id}" is already approved`:null}function it(e,t){if(!t.length)return;let n=He(e);N.mkdirSync(n,{recursive:!0});for(let{id:e,response:r,...i}of t){let t=j.join(n,`${e}.request.json`);N.existsSync(t)||N.writeFileSync(t,`${JSON.stringify(i,null,2)}\n`,`utf8`),r&&N.writeFileSync(j.join(n,`${e}.response.json`),`${JSON.stringify(r,null,2)}\n`,`utf8`)}}function at(e,t){let n=new Map(e.map(e=>[e.id,e.response])),r=new Set(t.map(e=>e.id)),i=(e,t)=>e?.decision!==`closed`&&(!e||!t||String(t.answeredAt??``)>=String(e.answeredAt??``))?t??e:e;return[...t.map(e=>({...e,response:i(n.get(e.id),e.response)??null})),...e.filter(e=>!r.has(e.id))].sort((e,t)=>String(e.createdAt).localeCompare(String(t.createdAt)))}function ot(e){let{decision:t,reason:n}=e.response,{actions:r}=e,i=r.map((e,t)=>`${t+1}. ${e}`).join(` `);return t===`decline`?`Denied: ${i}${n?`: ${n}`:``}`:t===`closed`?`Closed, the task was stopped: ${i}`:r.length===1?`The user approved doing exactly this outside the sandbox for the rest of this task: ${r[0]}. Retry it outside the sandbox now, exactly as written.`:`The user approved doing exactly these outside the sandbox for the rest of this task: ${i}. Retry them outside the sandbox now, each exactly as written.`}const st=(e,t=[])=>e.map(e=>{let n=t.find(t=>t.response&&ot(t)===e.prompt);return n?{...e,approval:n.id}:e}),ct=e=>e.map((e,t)=>` ${t+1}. ${e.replaceAll(`
|
|
3
|
-
`,`
|
|
4
|
-
`)}`).join(`
|
|
5
|
-
`);function lt(e){let t=e.actions.length;return`${t} action${t===1?``:`s`}`}function ut(e){return async(t,n)=>(e({kind:`approval-decision`,method:t,decision:`decline`,summary:n.command??t,reason:Ve}),{decision:`decline`})}function dt(e,t){let n=`${e}.${F()}.tmp`;N.writeFileSync(n,JSON.stringify(t),{flag:`wx`}),N.renameSync(n,e)}function ft(e,t){let n=N.mkdtempSync(j.join(I.tmpdir(),e)),r=new Map,i=!1,a=()=>{try{for(let e of N.readdirSync(n)){if(!e.endsWith(`.request.json`))continue;let a=e.slice(0,-13),o=j.join(n,e),s=j.join(n,`${a}.response.json`);if(N.existsSync(s)){N.rmSync(o,{force:!0});continue}if(r.has(a))continue;let c=`${o}.processing`;N.renameSync(o,c);let l=(async()=>{let e;try{let n=JSON.parse(N.readFileSync(c,`utf8`));if(n.id!==a)throw Error(`Invalid control request id.`);e={id:a,result:await t(n,i)}}catch(t){let n=t;e={id:a,error:{message:n.message,retryable:n.retryable===!0,rpcCode:n.rpcCode}}}dt(s,e),N.rmSync(c,{force:!0})})();r.set(a,l),l.finally(()=>r.delete(a)).catch(()=>{})}}catch{}},o=c(n,a),s=setInterval(a,3e4);return s.unref(),{endpoint:`file:${n}`,async close(){if(i)return;i=!0,clearInterval(s);let e=Date.now()+3e3;try{for(;a(),await Promise.allSettled([...r.values()]),await Be(),!(!N.existsSync(n)||!N.readdirSync(n).some(e=>e.endsWith(`.reader`))||Date.now()>=e);)await o.wait(e-Date.now())}finally{o.close(),N.rmSync(n,{recursive:!0,force:!0})}}}}async function pt(e,t,n,r){if(!e)return{ok:!1,retryable:!0,detail:`${r} endpoint is not ready.`};if(!e.startsWith(`file:`)||e.length===5)return{ok:!1,retryable:!1,detail:`Unsupported ${r} endpoint: ${e}`};let i=e.slice(5),a=c(i),o=j.join(i,`${F()}.reader`),s=!1;try{N.writeFileSync(o,``);let e=j.join(i,`${t.id}.response.json`);N.existsSync(e)||dt(j.join(i,`${t.id}.request.json`),t),s=!0;let c=Date.now()+n;await Be();let l=await a.until(()=>{try{let n=JSON.parse(N.readFileSync(e,`utf8`));if((!t.command||n?.error?.retryable)&&N.rmSync(e,{force:!0}),n?.id!==t.id)throw Error(`Malformed ${r} response id.`);if(n.error)return{ok:!1,retryable:n.error.retryable===!0,detail:String(n.error.message)};if(!(`result`in n))throw Error(`Malformed ${r} response.`);return{ok:!0,retryable:!1,result:n.result,detail:`${r} accepted control.`}}catch(e){if(e.code!==`ENOENT`)throw e;if(!N.existsSync(i))throw Error(`${r} endpoint closed after control publication; acceptance is unknown.`)}},Math.max(0,c-Date.now()));if(l)return l;throw Error(`Timed out waiting for ${r} acknowledgement.`)}catch(e){return{ok:!1,retryable:!s&&e.code===`ENOENT`,detail:e instanceof Error?e.message:String(e)}}finally{a.close(),N.rmSync(o,{force:!0})}}const mt=/^([a-f0-9-]{36})\.(?:req|applying)\.json$/,ht=2**40;function gt(e,t){let n=Re(`sha256`).update(t).digest();return{task:e,generation:0,seq:ht+n.readUInt32BE(0)}}function _t(e){if(!e)return F();if(!e.task||!Number.isInteger(e.generation)||e.generation<0||!Number.isInteger(e.seq)||e.seq<0)throw Error(`Invalid command key`);let t=Re(`sha256`).update(JSON.stringify([e.task,e.generation,e.seq])).digest(`hex`).slice(0,32);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}const vt=[`hint`,`taskId`,`payload`,`approval`,`result`,`runId`,`status`];function yt(e,t){let n=`${e}.${F()}.tmp`;N.writeFileSync(n,JSON.stringify(t),{encoding:`utf8`,flag:`wx`}),N.renameSync(n,e)}async function bt(e,t,n){let{dir:r}=n,i=n.id??F(),a=j.join(r,`${i}.res.json`);N.existsSync(a)||yt(j.join(r,`${i}.req.json`),{kind:e,payload:t});let o=Date.now();for(;!N.existsSync(a);){if(n.timeoutMs&&Date.now()-o>=n.timeoutMs)throw Error(`Worker control timed out`);await new Promise(e=>setTimeout(e,100))}let{result:s,error:c}=JSON.parse(N.readFileSync(a,`utf8`));if(n.keepReply||N.rmSync(a,{force:!0}),c){let{code:e,message:t,...n}=c;throw new L(e,t,n)}return s}function xt(e,t){N.mkdirSync(e,{recursive:!0});let n=new Set,r=async(r,i)=>{let a;try{let n=j.join(e,r);if(!N.lstatSync(n).isFile())throw Error(`mailbox request is not a regular file`);let{kind:o,payload:s}=JSON.parse(N.readFileSync(n,`utf8`)),c=j.join(e,`${i}.applying.json`);N.existsSync(c)||yt(c,{kind:o,payload:s});let l=Object.hasOwn(t,o)?t[o]:void 0;if(!l)throw Error(`unknown mailbox request "${o}"`);a={result:await l(s??{})??null}}catch(e){let t=e instanceof L?e:void 0;a={error:{code:t?.code??`invalid-option`,message:e instanceof Error?e.message:String(e),...Object.fromEntries(vt.flatMap(e=>t?.[e]===void 0?[]:[[e,t[e]]]))}}}try{yt(j.join(e,`${i}.res.json`),a),N.rmSync(j.join(e,`${i}.req.json`),{force:!0}),N.rmSync(j.join(e,`${i}.applying.json`),{force:!0}),n.delete(i)}catch{}},i=setInterval(()=>{let t=[];try{t=N.readdirSync(e)}catch{return}for(let i of t){let t=mt.exec(i)?.[1];if(t){if(N.existsSync(j.join(e,`${t}.res.json`))){N.rmSync(j.join(e,i),{force:!0});continue}n.has(t)||(n.add(t),r(i,t))}}},100);return()=>clearInterval(i)}function St(e){let t=e instanceof Error?e.message:String(e);return/no active turn|active turn.*(?:ended|completed)|turn.*(?:already )?(?:ended|completed)|turn.*not active/i.test(t)}function z(e,t,n){return Object.assign(Error(e),{retryable:t,...n===void 0?{}:{rpcCode:n}})}function Ct(e,t,n,r){if(!e||e.id!==t||e.method!==`turn/steer`&&e.method!==`turn/interrupt`)throw z(`Invalid Codex control request.`,!1);let i=e.params;if(!i||typeof i!=`object`||i.threadId!==n)throw z(`Codex control request does not match its owning thread.`,!1);if(e.method===`turn/interrupt`){if(i.turnId!==r)throw z(`Codex turn/interrupt request does not match its owning active turn.`,!1);return{method:e.method,params:i}}if(i.expectedTurnId!==r)throw z(`Codex turn/steer request does not match its owning active turn.`,!1);let a=i.input;if(!Array.isArray(a)||a.length!==1||a[0]?.type!==`text`||typeof a[0]?.text!=`string`||!a[0].text.trim())throw z(`Invalid Codex turn/steer input schema.`,!1);return{method:e.method,params:i}}async function wt(e,{threadId:t,turnId:n}){return ft(`coder-codex-control-`,async(r,i)=>{if(i)throw z(`Codex owner endpoint is shutting down.`,!0);let a=Ct(r,r.id,t,n);try{let n=await e.request(a.method,a.params);return a.method===`turn/interrupt`&&await e.request(`thread/backgroundTerminals/clean`,{threadId:t}),n}catch(e){throw z(e instanceof Error?e.message:String(e),St(e),e.rpcCode)}})}function Tt(e){if(e?.startsWith(`file:`)&&e.length>5){let t=j.resolve(e.slice(5)),n=j.resolve(I.tmpdir());j.dirname(t)===n&&j.basename(t).startsWith(`coder-codex-control-`)&&N.rmSync(t,{recursive:!0,force:!0})}}async function Et(e,t,n,r=3e3,i){return pt(e,{id:_t(i),method:t,params:n,command:i},r,`Codex control`)}const Dt=`Coder Task`;function Ot(e,t=72){let n=String(e??``).trim().replace(/\s+/g,` `);return n?n.length<=t?n:`${n.slice(0,t-3)}...`:``}function kt(e){let t=Ot(e,56);return t?`${Dt}: ${t}`:Dt}function At(e){return e?.params?.threadId??null}function jt(e){return e?.params?.turnId?e.params.turnId:e?.params?.turn?.id?e.params.turn.id:null}function Mt(e,t){let n=[];for(let r of e.matchAll(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/gm)){let e=t===`delete`,i=Number(e?r[1]:r[3]),a=Number((e?r[2]:r[4])??1);!Number.isFinite(i)||!Number.isFinite(a)||n.push(a<=1?`L${i}`:`L${i}-L${i+a-1}`)}return n}function Nt(e){try{let t=N.readFileSync(e,`utf8`),n=t?t.split(/\r\n|\r|\n/).length-+!!t.endsWith(`
|
|
6
|
-
`):0;return n>0?[n===1?`L1`:`L1-L${n}`]:[]}catch{return[]}}function Pt(e,t,n){let r=typeof e.kind==`string`?e.kind:e.kind?.type??`change`,i=e.path||`(unknown path)`,a=Mt(e.diff??``,r),o=a.length||r!==`add`||!t?a:Nt(i),s=typeof e.kind==`object`&&e.kind?.move_path?` -> ${n?u(n,e.kind.move_path):e.kind.move_path}`:``;return`${r} ${n?u(n,i):i}${s}${o.length?` ${o.join(`, `)}`:``}`}function Ft(e,t=!1,n){return(e.changes??[]).map(e=>Pt(e,t,n)).join(`; `)}function It(e){let t=e.trim().split(` `)[0]??``;return t===`/dev/null`?``:t.replace(/^[ab]\//,``)}function Lt(e,t){let n=new Map,r=``,i=``;for(let t of e.split(/\r?\n/)){if(t.startsWith(`--- `)){r=It(t.slice(4));continue}if(t.startsWith(`+++ `)){i=It(t.slice(4));continue}let e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/.exec(t);if(!e)continue;let a=Number(e[1]),o=Number(e[2]??1),s=Number(e[3]),c=Number(e[4]??1),l=c===0,u=(l?r:i)||i||r||`(unknown path)`,d=l?a:s,f=l?o:c,p=f<=1?`L${d}`:`L${d}-L${d+f-1}`,m=n.get(u)??[];m.push(p),n.set(u,m)}return[...n].map(([e,n])=>`${t?u(t,e):e} ${n.join(`, `)}`).join(`; `)}function Rt(e){if(!e||typeof e!=`object`)return null;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=t(e.inputTokens),r=t(e.cachedInputTokens),i=t(e.outputTokens);return{input:n,cachedInput:r,output:i,total:t(e.totalTokens)||n+r+i}}function zt(e){if(e.tokenUsageByThread.size===0)return null;let t={input:0,cachedInput:0,output:0,total:0};for(let[n,r]of e.tokenUsageByThread){let i=e.tokenUsageBaselineByThread.get(n);t.input+=Math.max(0,r.input-(i?.input??0)),t.cachedInput+=Math.max(0,r.cachedInput-(i?.cachedInput??0)),t.output+=Math.max(0,r.output-(i?.output??0)),t.total+=Math.max(0,r.total-(i?.total??0))}return t}function Bt(e){return String(e??``).replace(/\s+/g,` `).trim()}function B(e){if(!e)return[];if(typeof e==`string`){let t=Bt(e);return t?[t]:[]}if(Array.isArray(e))return e.flatMap(e=>B(e));if(typeof e==`object`){let t=e;if(typeof t.text==`string`)return B(t.text);if(`summary`in t)return B(t.summary);if(`content`in t)return B(t.content);if(`parts`in t)return B(t.parts)}return[]}function Vt(e,t){let n=[];for(let r of[...e,...t]){let e=Bt(r);!e||n.includes(e)||n.push(e)}return n}function V(e,t,n=null,r={}){!e||t==null||e({message:t,phase:n,...r})}function Ht(e,t){t&&V(e,t.message,t.phase??null,t.extra??{})}function Ut(e){return e.replace(/^\/(?:usr\/)?bin\/\w*sh\s+-l?c\s+/,``)}function Wt(e,t){let n=e?.extra?.kind;return!e||n!==`tool`&&n!==`tool-result`||typeof t.id!=`string`?e:{...e,extra:{...e.extra,callId:t.id}}}function H(e){return e==null?``:typeof e==`string`?e:JSON.stringify(e)}function Gt(e){let t=String(e.tool||e.name||e.kind||e.type||`tool`),n=Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null&&![`id`,`type`,`kind`,`name`,`tool`,`status`,`result`,`results`,`output`,`error`,`contentItems`,`success`,`durationMs`,`exitCode`].includes(e))),r=Object.keys(n).length?H(n):``;return{message:r?`${t} ${r}`:t,phase:`investigating`,extra:{kind:`tool`,tool:t}}}function Kt(e,t){switch(e.type){case`commandExecution`:return{message:Ut(String(e.command??``).trim())||`command`,phase:`running`,extra:{kind:`tool`,tool:`command`}};case`fileChange`:return{message:Ft(e,!1,t)||`edit`,phase:`editing`,extra:{kind:`tool`,tool:`edit`}};case`mcpToolCall`:return{message:[`${e.server}/${e.tool}`,H(e.arguments)].filter(Boolean).join(` `),phase:`investigating`,extra:{kind:`tool`,tool:String(e.tool??``)}};case`dynamicToolCall`:return{message:[[e.namespace,e.tool||`tool`].filter(Boolean).join(`/`),H(e.arguments)].filter(Boolean).join(` `),phase:`investigating`,extra:{kind:`tool`,tool:String(e.tool??``)}};case`webSearch`:{let t=e.action,n=Array.isArray(t?.queries)?t.queries.filter(e=>typeof e==`string`&&e.trim()):[],r=n.length?n.join(`; `):String(t?.query||e.query||``).trim()||H(t);return{message:r?`search: ${r}`:`search`,phase:`investigating`,extra:{kind:`tool`,tool:`search`}}}case`agentMessage`:case`reasoning`:case`userMessage`:return null;default:return Gt(e)}}function qt(e,t){switch(e.type){case`agentMessage`:{let t=String(e.text??``).trim();return t?{message:t,phase:null,extra:{kind:`assistant`}}:null}case`reasoning`:{let t=B(e.summary).join(`
|
|
7
|
-
`);return t?{message:t,phase:null,extra:{kind:`reasoning`}}:null}case`commandExecution`:{let t=typeof e.exitCode==`number`?e.exitCode:null;return{message:String(e.aggregatedOutput??``).trim(),phase:`running`,extra:{kind:`tool-result`,tool:`command`,command:String(e.command??``).trim(),durationMs:e.durationMs,...t===null?{isError:e.status!==`completed`}:{exitCode:t}}}}case`fileChange`:return{message:Ft(e,!0,t)||`(details unavailable)`,phase:`editing`,extra:{kind:`tool-result`,tool:`edit`,isError:e.status!==`completed`}};case`mcpToolCall`:return{message:H(e.error??e.result)||`${e.server}/${e.tool} ${e.status}`,phase:`investigating`,extra:{kind:`tool-result`,tool:String(e.tool??``),durationMs:e.durationMs,isError:e.status!==`completed`||e.error!=null}};case`dynamicToolCall`:return{message:H(e.contentItems)||`${e.tool} ${e.status}`,phase:`investigating`,extra:{kind:`tool-result`,tool:String(e.tool??``),durationMs:e.durationMs,isError:e.status!==`completed`||e.success===!1}};case`userMessage`:return null;default:return{message:H(e.error??e.result??e.results??e.output??e.action??e),phase:`investigating`,extra:{kind:`tool-result`,tool:Kt(e,t)?.extra?.tool,durationMs:e.durationMs,isError:e.status===`failed`||e.status===`declined`||e.success===!1||e.error!=null}}}}function Jt(e,t={}){let n,r,i=new Promise((e,t)=>{n=e,r=t});return{threadId:e,rootThreadId:e,threadIds:new Set([e]),threadTurnIds:new Map,turnId:null,bufferedNotifications:[],completion:i,resolveCompletion:n,rejectCompletion:r,finalTurn:null,completed:!1,finalAnswerSeen:!1,pendingCollaborations:new Set,activeSubagentTurns:new Set,completionTimer:null,lastAgentMessage:``,reasoningSummary:[],reasoningStartedAt:new Map,error:null,fileChanges:[],commandExecutions:[],tokenUsageByThread:new Map,tokenUsageBaselineByThread:new Map,lastDiffSummary:``,loggedTokens:0,reportedChanges:new Set,cwd:t.cwd??``,itemIndex:new Map,onProgress:t.onProgress??null,onHeartbeat:t.onHeartbeat??null}}function Yt(e){e.completionTimer&&=(clearTimeout(e.completionTimer),null)}function Xt(e,t=null){e.completed||(Yt(e),e.completed=!0,t?(e.finalTurn=t,e.turnId||=t.id??null):e.finalTurn||={id:e.turnId??`inferred-turn`,status:`completed`},e.resolveCompletion(e))}function Zt(e){e.completed||e.finalTurn||!e.finalAnswerSeen||e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||(Yt(e),e.completionTimer=setTimeout(()=>{e.completionTimer=null,!(e.completed||e.finalTurn||!e.finalAnswerSeen)&&(e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||Xt(e,null))},250),e.completionTimer.unref?.())}function Qt(e,t){let n=At(t);if(!n||!e.threadIds.has(n))return!1;let r=e.threadTurnIds.get(n)??null,i=jt(t);return r===null||i===null||i===r}function $t(e,t,n,r=null){if(t.id&&e.itemIndex.set(t.id,t),t.type===`collabAgentToolCall`){(!r||r===e.threadId)&&(n===`started`||t.status===`inProgress`?e.pendingCollaborations.add(t.id):n===`completed`&&(e.pendingCollaborations.delete(t.id),Zt(e)));for(let n of t.receiverThreadIds??[])e.threadIds.add(n)}if(t.type===`agentMessage`){t.text&&(!r||r===e.threadId)&&(e.lastAgentMessage=t.text.trim(),n===`completed`&&t.phase===`final_answer`&&(e.finalAnswerSeen=!0,Zt(e)));return}if(t.type===`reasoning`&&n===`completed`){e.reasoningSummary=Vt(e.reasoningSummary,B(t.summary));return}if(t.type===`fileChange`&&n===`completed`){e.fileChanges.push(t);return}t.type===`commandExecution`&&n===`completed`&&e.commandExecutions.push(t)}function en(e,t){switch(e.onHeartbeat?.(),t.method){case`thread/started`:e.threadIds.add(t.params.thread.id);break;case`turn/started`:e.threadIds.add(t.params.threadId),e.threadTurnIds.set(t.params.threadId,t.params.turn.id),(t.params.threadId??null)!==e.threadId&&e.activeSubagentTurns.add(t.params.threadId),V(e.onProgress,`Turn started (${t.params.turn.id}).`,`starting`,{kind:`status`,threadId:t.params.threadId??null,turnId:t.params.turn.id??null});break;case`item/started`:t.params.item?.type===`reasoning`&&t.params.item.id&&e.reasoningStartedAt.set(`${t.params.threadId}:${t.params.item.id}`,Date.now()),$t(e,t.params.item,`started`,t.params.threadId??null),Ht(e.onProgress,Wt(Kt(t.params.item,e.cwd),t.params.item));break;case`item/completed`:{let n={...e.itemIndex.get(t.params.item.id),...t.params.item};if($t(e,n,`completed`,t.params.threadId??null),n?.type===`fileChange`)for(let t of n.changes??[])t.path&&e.reportedChanges.add(u(e.cwd,t.path));let r=Wt(qt(n,e.cwd),n);if(r?.extra?.kind===`tool-result`){let t=Kt(n,e.cwd);r.extra={...r.extra,callMessage:n.type===`fileChange`?r.message:t?.message}}if(n?.type===`reasoning`){let i=`${t.params.threadId}:${n.id}`,a=e.reasoningStartedAt.get(i);e.reasoningStartedAt.delete(i),r&&(r.extra={...r.extra,durationMs:Math.max(0,Date.now()-(a??Date.now()))})}Ht(e.onProgress,r);break}case`thread/tokenUsage/updated`:{let n=Rt(t.params?.tokenUsage?.last),r=At(t);r===e.threadId&&t.params?.tokenUsage?.last&&(e.contextTokens=n?.total);let i=Rt(t.params?.tokenUsage?.total??t.params?.tokenUsage);if(i&&r){n&&!e.tokenUsageByThread.has(r)&&e.tokenUsageBaselineByThread.set(r,{input:Math.max(0,i.input-n.input),cachedInput:Math.max(0,i.cachedInput-n.cachedInput),output:Math.max(0,i.output-n.output),total:Math.max(0,i.total-n.total)}),e.tokenUsageByThread.set(r,i);let t=zt(e);t&&(!e.loggedTokens||t.total-e.loggedTokens>=1e3)&&(e.loggedTokens=t.total,e.onProgress?.({kind:`usage`,tokens:t,context:e.contextTokens??null}))}break}case`turn/diff/updated`:{let n=Lt(String(t.params?.diff??``),e.cwd).split(`; `).filter(t=>!e.reportedChanges.has(t.split(` `)[0]??``)).join(`; `);n&&n!==e.lastDiffSummary&&(e.lastDiffSummary=n,V(e.onProgress,`changed: ${n}`,`editing`,{kind:`status`}));break}case`item/autoApprovalReview/completed`:{let n=t.params?.review??{},r=t.params?.action??{},i=Ut(String(r.command??r.type??``).trim());V(e.onProgress,`Auto-review ${n.status}. ${Ot(i,48)}${n.rationale?`. ${Ot(n.rationale,320)}`:``}`,null,{kind:`auto-review`,decision:String(n.status??``),...n.riskLevel?{riskLevel:String(n.riskLevel)}:{},...i?{summary:`run command: ${i}`}:{},...n.rationale?{reason:String(n.rationale)}:{}});break}case`error`:e.error=t.params.error,V(e.onProgress,`Codex error: ${t.params.error.message}`,`failed`,{kind:`error`});break;case`turn/completed`:if((t.params.threadId??null)!==e.threadId){e.activeSubagentTurns.delete(t.params.threadId),Zt(e);break}V(e.onProgress,`Turn ${t.params.turn.status}.`,`finalizing`,{kind:`status`}),Xt(e,t.params.turn)}}async function tn(e,t,n,r={}){let i=Jt(t,r),a=e.notificationHandler;e.setNotificationHandler(e=>{if(!i.turnId){i.bufferedNotifications.push(e);return}if(e.method===`thread/started`){en(i,e);return}if(!Qt(i,e)){a?.(e);return}en(i,e)});let o=r.onApprovalRequest;o&&e.setServerRequestHandler((e,t)=>o(e,t,i));try{let t=await n();i.turnId=t.turn?.id??null,i.turnId&&(i.threadTurnIds.set(i.threadId,i.turnId),await r.onTurnStarted?.(i.turnId));for(let e of i.bufferedNotifications)Qt(i,e)?en(i,e):a?.(e);i.bufferedNotifications.length=0,t.turn?.status&&t.turn.status!==`inProgress`&&Xt(i,t.turn);let o=e.exitPromise?.then(()=>{throw e.exitError??Error(`codex app-server connection closed before the turn completed.`)});return await(o?Promise.race([i.completion,o]):i.completion)}finally{Yt(i),e.setNotificationHandler(a??null),e.setServerRequestHandler(null)}}function nn(e,t,n=[]){return e===`read-only`?t?{type:`readOnly`,networkAccess:t}:null:e!==`workspace-write`||!n.length?null:{type:`workspaceWrite`,writableRoots:n,networkAccess:t??!1,excludeTmpdirEnvVar:!0,excludeSlashTmp:!0}}function rn(e=[],t=[],n=!1){let r=Object.fromEntries((n?[]:t).map(e=>[e,{enabled:!1}])),i=new Set([...t,...e.map(e=>e.name)]);for(let n of e){let e=n.name;if(t.includes(e)){for(let t=1;i.has(e);t++)e=`${n.name}_coder_${t}`;i.add(e)}r[e]={...n.url?{url:n.url,...n.headers?{http_headers:n.headers}:{}}:{command:n.command,args:n.args??[],...n.env?{env:n.env}:{}},default_tools_approval_mode:`approve`}}return Object.keys(r).length?{mcp_servers:r}:{}}function an(e){return e.split(/\r?\n/).map(e=>e.trimEnd()).filter(e=>e&&!e.startsWith(`WARNING: proceeding, even though we could not update PATH:`)).join(`
|
|
8
|
-
`)}async function on(e,t,n={}){let r=n.connect??Fe.connect,i={...n.networkAccess===void 0?{}:{networkAccess:n.networkAccess},nativeMcp:n.nativeMcp??!1,disableBroker:n.disableBroker??!1},a=null;try{a=await r(e,i);let n=await t(a);return await a.close(),n}catch(n){let o=n,s=a?.transport===`broker`||!!process.env.CODER_APP_SERVER_ENDPOINT,c=a?.transport===`broker`&&o?.rpcCode===-32001||s&&(o?.code===`ENOENT`||o?.code===`ECONNREFUSED`);if(a&&=(await a.close().catch(()=>{}),null),!c)throw n;let l=await r(e,{...i,disableBroker:!0});try{return await t(l)}finally{await l.close()}}}function U(e){let t=process.env.CODEX_AUTH_JSON;if(t){let e=j.join(I.homedir(),`.codex`),n=j.join(e,`auth.json`);if(!N.existsSync(n)){N.mkdirSync(e,{recursive:!0,mode:448});try{N.writeFileSync(n,t,{encoding:`utf8`,flag:`wx`,mode:384})}catch(e){if(e.code!==`EEXIST`)throw e}}}let n=fe(`codex`,[`--version`],{cwd:e,env:k()});if(!n.available)return n;let r=fe(`codex`,[`app-server`,`--help`],{cwd:e,env:k()});return r.available?{available:!0,detail:`${n.detail}; app-server runtime available`}:{available:!1,detail:`${n.detail}; app-server runtime unavailable: ${r.detail}`}}async function sn(e){let t=U(e);if(!t.available)return{available:!1,loggedIn:!1,detail:t.detail};let n=null;try{n=await Fe.connect(e,{reuseExistingBroker:!0});let t=await n.request(`account/read`,{refreshToken:!1}),r=t?.account??null;return r?.type===`chatgpt`?{available:!0,loggedIn:!0,detail:r.email?`ChatGPT login active for ${r.email}`:`ChatGPT login active`}:r?.type===`apiKey`?{available:!0,loggedIn:!0,detail:`API key configured`}:t?.requiresOpenaiAuth===!1?{available:!0,loggedIn:!0,detail:`Active provider does not require OpenAI authentication`}:{available:!0,loggedIn:!1,detail:"Not authenticated. Run `codex login`."}}catch(e){let t=P(`codex`,[`login`,`status`],{encoding:`utf8`,env:k()}),n=`${t.stdout??``}${t.stderr??``}`.trim();return t.status===0?{available:!0,loggedIn:!0,detail:n||`Logged in`}:{available:!0,loggedIn:!1,detail:n||(e instanceof Error?e.message:String(e))}}finally{await n?.close().catch(()=>{})}}async function cn(e,{endpoint:t,threadId:n,turnId:r}){if(!n||!r)return{interrupted:!1,detail:`missing threadId or turnId`};let i=await Et(t,`turn/interrupt`,{threadId:n,turnId:r});return i.ok?{interrupted:!0,detail:`Interrupted ${r} on ${n}.`}:{interrupted:!1,detail:i.detail}}async function ln(e,{endpoint:t,threadId:n,turnId:r,text:i,command:a}){if(!n)return{steered:!1,retryable:!0,detail:`missing active threadId`};if(!r)return{steered:!1,retryable:!0,detail:`missing active turnId`};let o=i.trim();if(!o)return{steered:!1,retryable:!1,detail:`empty follow-up`};let s=await Et(t,`turn/steer`,{threadId:n,input:[{type:`text`,text:o,text_elements:[]}],expectedTurnId:r},3e3,a);return s.ok?s.result?.turnId===r?{steered:!0,retryable:!1,detail:`Steered follow-up into ${r} on ${n}.`}:{steered:!1,retryable:!1,detail:`turn/steer returned unexpected turnId ${String(s.result?.turnId??`(missing)`)}; expected ${r}`}:{steered:!1,retryable:s.retryable,detail:s.detail}}async function un(e,t={},n={}){if(!t.availabilityChecked){let t=U(e);if(!t.available)throw Error(`Codex CLI is not available: ${t.detail}`)}let r=t.prompt?.trim();if(!r)throw Error(`A prompt is required.`);let i=process.env.CODER_MACHINE_SANDBOX===`1`&&(t.sandbox??`read-only`)!==`read-only`?`danger-full-access`:t.sandbox,a={sandbox:i??`read-only`},o=t.approvalsReviewer??((t.approvalPolicy??`never`)===`never`?null:`user`),s=t.configOverrides&&Object.keys(t.configOverrides).length?t.configOverrides:null,c=nn(i,t.networkAccess,t.writableRoots),l=async n=>{let i=null,l;A(`codex.config.start`);let u=await n.request(`config/read`,{cwd:e,includeLayers:!1});A(`codex.config.done`);let d=t.customModel?O(t.customModel.alias,t.customModel.entry,n.bridgeUrl??dn()):null,f=t.customModel?.entry.model??t.model??null,p={...d?{}:{model_reasoning_summary:`auto`},...d?.configOverrides,...s,...rn(t.mcpServers,Object.keys(u.config?.mcp_servers??{}),t.nativeMcp),...t.nativeMcp?{}:{"features.apps":!1,"features.plugins":!1},"features.shell_snapshot":!1},m=t.developerInstructions?{developerInstructions:t.developerInstructions}:{},h;if(t.resumeThreadId&&(V(t.onProgress,`Resuming thread ${t.resumeThreadId}.`,`starting`,{kind:`status`}),Ee(t.resumeThreadId)&&await ve(t.resumeThreadId),h=await n.request(`thread/resume`,{threadId:t.resumeThreadId,cwd:e,model:f,modelProvider:d?.modelProvider??null,config:p,approvalPolicy:t.approvalPolicy??`never`,...a,...o?{approvalsReviewer:o}:{},...m}).catch(e=>{V(t.onProgress,Me,`starting`,{kind:`warning`,detail:String(e?.message??e)})})),h)l=h.thread.id;else if(V(t.onProgress,`Starting Codex task thread.`,`starting`,{kind:`status`}),A(`codex.thread.start`),l=(await n.request(`thread/start`,{cwd:e,model:f,modelProvider:d?.modelProvider??null,config:p,approvalPolicy:t.approvalPolicy??`never`,...a,...o?{approvalsReviewer:o}:{},...m,serviceName:`coder_runtime`,ephemeral:t.ephemeral??!1})).thread.id,!(t.ephemeral??!1))try{await n.request(`thread/name/set`,{threadId:l,name:kt(r)})}catch(e){let t=String(e?.message??e??``);if(!t.includes(`unknown variant`)&&!t.includes(`unknown method`))throw e}A(`codex.thread.ready`),V(t.onProgress,`Thread ready (${l}).`,`starting`,{kind:`status`,threadId:l});let g,_=null,v=()=>{_&&n.request(`turn/interrupt`,{threadId:l,turnId:_}).catch(()=>{})};t.signal?.addEventListener(`abort`,v,{once:!0});try{g=await tn(n,l,()=>n.request(`turn/start`,{threadId:l,input:[{type:`text`,text:r,text_elements:[]}],model:f,effort:t.effort??null,outputSchema:t.outputSchema??null,approvalPolicy:t.approvalPolicy??`never`,...o?{approvalsReviewer:o}:{},...c?{sandboxPolicy:c}:{}}),{cwd:e,onProgress:t.onProgress,onHeartbeat:t.onHeartbeat,onApprovalRequest:t.onApprovalRequest,onTurnStarted:async e=>{_=e,t.signal?.aborted&&v(),t.onControlReady&&(i=await wt(n,{threadId:l,turnId:e}),t.onControlReady(i.endpoint,l,e))}}),A(`codex.result`),t.onResult?.({status:g.finalTurn?.status===`completed`?0:1,threadId:l,turnId:g.turnId,finalMessage:g.lastAgentMessage,error:g.error??g.finalTurn?.error??null})}finally{t.signal?.removeEventListener(`abort`,v),await i?.close()}return{status:g.finalTurn?.status===`completed`?0:1,threadId:l,turnId:g.turnId,finalMessage:g.lastAgentMessage,reasoningSummary:g.reasoningSummary,turn:g.finalTurn,error:g.error??g.finalTurn?.error??null,stderr:an(n.stderr),fileChanges:g.fileChanges,tokens:zt(g),contextTokens:g.contextTokens,model:t.customModel?.alias??t.model??null,commandExecutions:g.commandExecutions}},u=async e=>{e.setNoticeHandler?.(e=>V(t.onProgress,e,`starting`,{kind:`status`}));try{let t=await l(e);return ye(t.error?.message)&&await fn(e),t}catch(t){throw ye(ke(t))&&await fn(e),t}},d=()=>on(e,u,{...n,networkAccess:t.networkAccess,nativeMcp:t.nativeMcp}),f=!1,p=()=>(f=!0,V(t.onProgress,`Codex login changed; restarted the Codex app-server and retrying the turn once.`,`starting`,{kind:`status`}),d());try{let e=await d().catch(e=>{if(!ye(ke(e)))throw e;return p()}),n=!e.fileChanges?.length&&!e.commandExecutions.length;!f&&n&&ye(e.error?.message)&&(e=await p());let r=De(e.error?.message,t.model);return r?{...e,error:{...e.error,message:r}}:e}catch(e){let n=De(ke(e),t.model);throw n?Error(n):e}}function dn(){throw Error(`The Codex app-server has no custom-model bridge; restart the Coder broker.`)}async function fn(e){e.transport===`broker`&&await e.request(pe,{}).catch(()=>{})}const W=`@wular/coder`,pn=`https://registry.npmjs.org/${W}/latest`,G={npm:[`npm`,`install`,`-g`,`${W}@latest`],pnpm:[`pnpm`,`add`,`-g`,`${W}@latest`],yarn:[`yarn`,`global`,`add`,`${W}@latest`],bun:[`bun`,`add`,`-g`,`${W}@latest`]};function mn(){return ce(`update-check.json`)}function K(e,t){let n=String(e).split(`.`).map(e=>parseInt(e,10)||0),r=String(t).split(`.`).map(e=>parseInt(e,10)||0);for(let e=0;e<3;e+=1){if((n[e]??0)>(r[e]??0))return 1;if((n[e]??0)<(r[e]??0))return-1}return 0}function hn(){try{return JSON.parse(N.readFileSync(mn(),`utf8`))}catch{return null}}function gn(e){try{N.mkdirSync(ce(),{recursive:!0}),N.writeFileSync(mn(),JSON.stringify(e))}catch{}}function _n(){try{N.rmSync(mn(),{force:!0})}catch{}}function vn(e,t){if(M.env.CODER_NO_UPDATE_CHECK||M.env.CI)return;let n=hn();if(!n?.checkedAt||Date.now()-n.checkedAt>864e5)try{Le(M.execPath,[t,`upgrade`,`refresh`],{detached:!0,stdio:`ignore`}).unref()}catch{}return n?.latest&&K(n.latest,e)>0?n.latest:void 0}async function yn(e){let t=hn()?.latest??null;try{let e=await fetch(pn,{signal:AbortSignal.timeout(3e3),headers:{accept:`application/json`}});if(e.ok){let n=await e.json();n?.version&&(t=n.version)}}catch{}gn({checkedAt:Date.now(),latest:t,current:e})}function bn(e){let t=e;try{t=N.realpathSync(e)}catch{}let n=t.replace(/\\/g,`/`);return/\/\.bun\//.test(n)?{pm:`bun`,command:G.bun}:/\/\.pnpm\//.test(n)||/\/pnpm(-global)?\//i.test(n)||/\/Library\/pnpm\//.test(n)?{pm:`pnpm`,command:G.pnpm}:/\/\.config\/yarn\/global\//.test(n)||/\/yarn\/global\//.test(n)||/\/Yarn\/Data\/global\//.test(n)?{pm:`yarn`,command:G.yarn}:{pm:`npm`,command:G.npm}}var xn=t({MIN_CODEX_VERSION:()=>kn,agentsSkillDir:()=>Cn,ensureCodexInstalled:()=>On,ensureCodexUpToDate:()=>Nn,installAgentsSkill:()=>Tn,installClaudePlugin:()=>Sn,modelVersionWarning:()=>Mn,parseVersion:()=>jn,readAgentsSkillVersion:()=>wn,registerCodexMcp:()=>En,registerCursorMcp:()=>Dn,setupHost:()=>In,setupHostCore:()=>Pn,upgradeCore:()=>Fn});function Sn(e){P(`claude`,[`plugin`,`marketplace`,`remove`,`coder-plugins`],{encoding:`utf8`});let t=P(`claude`,[`plugin`,`marketplace`,`add`,e],{encoding:`utf8`}),n=P(`claude`,[`plugin`,`install`,`coder@coder-plugins`],{encoding:`utf8`}),r=t.status===0&&n.status===0;return{marketplace:e,installed:r,note:r?`Plugin installed; restart any running Claude Code session to load it.`:`Automatic install failed (${(n.stderr||t.stderr||`claude not found`).trim()}); run: claude plugin marketplace add "${e}" && claude plugin install coder@coder-plugins`}}function Cn(){return j.join(I.homedir(),`.agents`,`skills`,`coder`)}function wn(){try{let e=N.readFileSync(j.join(Cn(),`SKILL.md`),`utf8`);return/^\s*version:\s*(\S+)/m.exec(e)?.[1]??null}catch{return null}}function Tn(e){let t=Cn();try{let n=j.join(e,`plugins`,`agents`,`skills`,`coder`);N.rmSync(t,{recursive:!0,force:!0}),N.mkdirSync(t,{recursive:!0}),N.cpSync(n,t,{recursive:!0});let r=j.join(t,`SKILL.md`),i=N.readFileSync(r,`utf8`).replace(`
|
|
9
|
-
---
|
|
10
|
-
`,`\nmetadata:\n version: ${w()}\n---\n`);return N.writeFileSync(r,i),{marketplace:t,installed:!0,note:`Skill installed to ~/.agents/skills/coder; restart running sessions to load it.`}}catch(e){return{marketplace:t,installed:!1,note:`Skill install failed: ${e instanceof Error?e.message:String(e)}`}}}function En(){let e=`codex`;if(P(`codex`,[`mcp`,`get`,`coder`],{encoding:`utf8`}).status===0)return{marketplace:e,installed:!0,note:`Coder MCP server already registered with Codex.`};let t=P(`codex`,[`mcp`,`add`,`coder`,`--`,`coder`,`mcp`],{encoding:`utf8`});return{marketplace:e,installed:t.status===0,note:t.status===0?`Coder MCP server registered with Codex; restart running sessions to load it.`:`MCP registration failed; run: codex mcp add coder -- coder mcp`}}function Dn(){let e=j.join(I.homedir(),`.cursor`,`mcp.json`);try{let t=N.existsSync(e)?JSON.parse(N.readFileSync(e,`utf8`)):{},n=e=>typeof e==`object`&&!!e&&!Array.isArray(e);if(!n(t)||t.mcpServers!==void 0&&!n(t.mcpServers))throw Error(`Invalid MCP configuration`);let r=t.mcpServers??{};return Object.hasOwn(r,`coder`)?{marketplace:e,installed:!0,note:`Coder MCP server already registered with Cursor.`}:(N.mkdirSync(j.dirname(e),{recursive:!0}),N.writeFileSync(e,JSON.stringify({...t,mcpServers:{...r,coder:{type:`stdio`,command:`coder`,args:[`mcp`]}}},null,2)+`
|
|
11
|
-
`,{mode:384}),{marketplace:e,installed:!0,note:`Coder MCP server registered in ~/.cursor/mcp.json; restart running sessions to load it.`})}catch{return{marketplace:e,installed:!1,note:`MCP registration failed; merge a coder entry with command "coder" and args ["mcp"] into ~/.cursor/mcp.json.`}}}function On(e){if(e.available)return null;let t=P(`npm`,[`install`,`-g`,`@openai/codex@latest`],{encoding:`utf8`});return t.status===0?{installed:!0,note:`codex CLI installed (runs your custom models; no login needed for them)`}:{installed:!1,note:`custom models run on the codex CLI and it is not installed; auto-install failed: ${(t.stderr||`npm not found`).trim()}. Run: npm install -g @openai/codex`}}const kn=`0.159.1`,An={codex:{"gpt-6-astra":`0.154.0`,"gpt-6-sol":`0.156.1`,"gpt-6-luna":`0.156.1`,"gpt-6.1-sol":`0.159.1`},claude:{sonnet:`2.1.197`,fable:`2.1.257`,opus:`2.1.280`}};function jn(e){let t=/(\d+\.\d+\.\d+)/.exec(String(e??``));return t?t[1]:null}function Mn(e,t,n){let r=t?An[e][t]:void 0,i=jn(n.detail);return!r||!i||K(i,r)>=0?null:`${e} ${i} predates ${t} (needs ${r}), so it may fail or run another model. Run: ${e} update`}function Nn(e){if(!e.available)return null;let t=jn(e.detail);if(!t||K(t,`0.159.1`)>=0)return null;let n=P(`codex`,[`update`],{encoding:`utf8`});return n.status!==0&&(n=P(`npm`,[`install`,`-g`,`@openai/codex@latest`],{encoding:`utf8`})),n.status===0?{updated:!0,from:t}:{updated:!1,from:t,note:`codex ${t} is too old for the default codex model (needs >= ${kn}); auto-update failed: ${(n.stderr||`codex/npm not found`).trim()}. Run: codex update`}}async function Pn(e,t={},n){let i=t.hosts??[],a=i.find(e=>![`claude`,`agents`,`codex`,`cursor`].includes(e));if(a)throw new L(`invalid-option`,`Unknown host "${a}". Use claude, agents, codex or cursor.`,{hint:`Codex, Pi, OpenCode, and other Agent Skills hosts: coder setup-host agents`});let o=e=>i.includes(e);n?.();let s=U(e),c=Nn(s);c?.updated&&(s=U(e));let l=s.available?await sn(e):{loggedIn:!1,detail:s.detail},u=J(),d=u.available?Qn():{loggedIn:!1,detail:u.detail},f=r();if(!N.existsSync(f)){let e=s.available?[`codex`,`claude`]:u.available?[`claude`,`codex`]:[`codex`,`claude`];be({...Pe,chain:e})}let m=Ce(),h=o(`claude`)?Sn(m):null,g=o(`agents`)||o(`codex`)||o(`cursor`)?Tn(m):null,_=[];(o(`codex`)||s.available&&(o(`agents`)||!i.length))&&_.push(En()),(o(`cursor`)||!i.length&&N.existsSync(j.join(I.homedir(),`.cursor`)))&&_.push(Dn()),h&&_.push({...h,note:h.installed?`Coder MCP server is declared by the Claude Code plugin.`:`Install the Claude Code plugin to register its Coder MCP server.`});let v=p(e),y=s.available&&l.loggedIn||u.available&&d.loggedIn;return{codex:{available:s.available,detail:s.detail,auth:l.detail,loggedIn:l.loggedIn},...c?{codexUpdate:c}:{},claude:{available:u.available,detail:u.detail,auth:d.detail,loggedIn:d.loggedIn},configFile:f,runtime:Ie(new URL(`../bin/coder.mjs`,import.meta.url)),...h?{claudePlugin:h}:{},...g?{agentsSkill:g}:{},mcp:_,config:v,ready:y}}async function Fn(e={},t){let n=!e.pluginsOnly,r=!e.cliOnly,i=Ce(),a=j.join(i,`plugins/claude/.claude-plugin/plugin.json`),o={cli:w(),claude:s(a)},c={};if(n){let n=bn(re),[r,...i]=e.pm&&G[e.pm]||n.command,a=e.pm??n.pm;t?.(`via ${a}`);let s=P(r,i,{encoding:`utf8`});if(s.error?.code===`ENOENT`)throw new L(`invalid-option`,`${a} not found on PATH. Re-run with --pm <npm|pnpm|yarn|bun>, or update manually: ${r} ${i.join(` `)}`);if(s.status!==0){let e=(s.stderr||s.stdout||``).trim();throw new L(`invalid-option`,`CLI update failed (${a}).${e?`\n${e}`:``}\nRun manually: ${r} ${i.join(` `)}`)}_n();let l=w();c.cli={pm:a,from:o.cli,to:l,changed:l!==o.cli}}if(r){if(e.claude||!e.codex&&J().available){let e=Sn(i);c.claudePlugin={installed:e.installed,note:e.note,from:o.claude,to:s(a)}}if(N.existsSync(Cn())){let e=wn(),t=Tn(i);c.agentsSkill={installed:t.installed,note:t.note,from:e,to:wn()}}}return c}function In(e=[],t={}){return Pn(j.resolve(t.cwd??`.`),{hosts:e})}function Ln(){let e=process.env.CLAUDE_CONFIG_DIR||j.join(I.homedir(),`.claude`);return j.join(e,`projects`)}async function Rn(e,t,n){if(!/^[a-zA-Z0-9_-]+$/.test(e))return null;let r=n?j.join(n,`projects`):Ln(),i=null;for(let n of await N.promises.readdir(r).catch(()=>[])){let a=j.join(r,n,`${e}.jsonl`);if(!N.existsSync(a))continue;let o=N.createReadStream(a,{encoding:`utf8`}),s=ze.createInterface({input:o,crlfDelay:1/0});try{for await(let e of s){let n;try{n=JSON.parse(e)}catch{continue}n.type===`assistant`&&!n.isSidechain&&Date.parse(n.timestamp)>=t&&(i=n.message?.usage??null)}}finally{s.close(),o.destroy()}}return i}function zn(e){if(!e)return!1;let t=Ln(),n=!1;try{for(let r of N.readdirSync(t)){let i=j.join(t,r,`${e}.jsonl`);N.existsSync(i)&&(N.rmSync(i,{force:!0}),n=!0)}}catch{}return n}var Bn=t({buildClaudeMcpConfig:()=>tr,buildClaudeTurnArgs:()=>nr,claudeToolName:()=>Y,claudeVersionEnvironment:()=>Xn,describeClaudeToolUse:()=>Jn,getClaudeAuthStatus:()=>Qn,getClaudeAvailability:()=>J,runClaudeTurn:()=>sr,steerClaudeTurn:()=>or});const Vn=`coder-mcp-status`,Hn=new Map,Un=`CODER_CLAUDE_VERSION`;function Wn(e){let t=e=>e&&typeof e==`object`&&(typeof e.data==`string`||typeof e.blob==`string`||Object.values(e).some(t)),n=e=>typeof e==`string`?e:t(e)||[`image`,`document`,`audio`,`video`,`file`].includes(e?.type)?`[${e?.type??`binary`}]`:typeof e?.text==`string`?e.text:e==null?``:JSON.stringify(e);return Array.isArray(e)?e.map(n).join(``):n(e)}function Gn(e){if(!e)return 0;let t=e.split(/\r\n|\r|\n/);return t.at(-1)===``&&t.pop(),Math.max(1,t.length)}function Kn(e,t,n=!1){if(!t)return[];let r;try{r=N.readFileSync(e,`utf8`)}catch{return[]}let i=[],a=0;for(;a<=r.length;){let e=r.indexOf(t,a);if(e<0)break;let o=Gn(r.slice(0,e))+1,s=Math.max(1,Gn(t));if(i.push(s===1?`L${o}`:`L${o}-L${o+s-1}`),!n)break;a=e+Math.max(t.length,1)}return i.length>4?[...i.slice(0,4),`+${i.length-4} matches`]:i}function qn(e){let t=(typeof e==`string`?e:JSON.stringify(e)??String(e)).replace(/\s+/g,` `).trim();return t.length>80?`${t.slice(0,80)}…`:t}function Jn(e,t,n){let r=String(t.file_path??t.notebook_path??t.path??``),i=r?j.isAbsolute(r)?r:j.resolve(n,r):``,a=r?u(n,i)||r:`(unknown path)`,o=t.path?` in ${u(n,String(t.path))}`:``;if(e===`Write`){let e=Gn(String(t.content??``));return`Write ${a} ${e?`L1-L${e}`:`(empty file)`}`}if(e===`Edit`){let e=Kn(i,String(t.old_string??``),t.replace_all===!0);return`Edit ${a}${e.length?` ${e.join(`, `)}`:``}`}if(e===`MultiEdit`){let e=Array.isArray(t.edits)?t.edits:[],n=e.flatMap(e=>Kn(i,String(e?.old_string??``),e?.replace_all===!0));return`MultiEdit ${a}${n.length?` ${n.join(`, `)}`:``} (${e.length} edits)`}if(e===`NotebookEdit`){let e=t.cell_id??t.cell_number;return`NotebookEdit ${a}${e==null?``:` cell ${e}`}`}if(e===`Read`){let e=Number(t.offset??0),n=Number(t.limit??0);return`Read ${a}${e&&n?` L${e}-L${e+n-1}`:e?` from L${e}`:``}`}if(e===`Bash`)return`Bash ${String(t.command??``).trim()||`(no command)`}`;if(e===`Glob`)return`Glob ${String(t.pattern??``)}${o}`;if(e===`Grep`){let e=t.glob?` (${String(t.glob)})`:``;return`Grep ${String(t.pattern??``)}${o}${e}`}if(e===`Task`)return`Task ${t.subagent_type?`${String(t.subagent_type)}: `:``}${qn(t.description??t.prompt??``)}`;if(e===`WebFetch`)return`WebFetch ${String(t.url??``)}`;if(e===`WebSearch`)return`WebSearch ${String(t.query??``)}`;if(e===`TodoWrite`){let e=Array.isArray(t.todos)?t.todos:[];return`TodoWrite ${e.length} item${e.length===1?``:`s`}`}let s=Object.entries(t??{}).map(([e,t])=>`${e}=${qn(t)}`).join(` `);return s?`${e} ${s}`:e}function q(e){if(!e||typeof e!=`object`)return null;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=t(e.input_tokens),r=t(e.cache_read_input_tokens)+t(e.cache_creation_input_tokens),i=t(e.output_tokens);return{input:n,cachedInput:r,output:i,total:n+r+i}}function Yn(e,t,n){let r=M.platform===`win32`?t[Object.keys(t).sort().find(e=>e.toLowerCase()===`path`)??`PATH`]??M.env.PATH??``:t.PATH??`/usr/bin:/bin`,i=/[\\/]/.test(e)?[``]:[...M.platform===`win32`?[n]:[],...r.split(j.delimiter)],a=M.platform===`win32`&&!j.extname(e)?[``,...(t.PATHEXT??`.EXE;.COM`).split(`;`)]:[``];for(let t of i)for(let r of a){let i=j.resolve(n,t,e+r);try{if(N.accessSync(i,N.constants.X_OK),N.statSync(i).isFile())return N.realpathSync(i)}catch{}}return j.resolve(n,e)}function Xn(e,t){let n=Yn(`claude`,k(e),t),r=Hn.get(n);return{[Un]:r===void 0?void 0:JSON.stringify({executable:n,detail:r})}}function Zn(e,t,n){let r=Yn(e,t,n),i=Hn.get(r);if(i!==void 0)return i;try{let e=JSON.parse(t[Un]??`null`);if(e?.executable===r&&typeof e.detail==`string`)return Hn.set(r,e.detail),e.detail}catch{}return J(e,t,n).detail}function J(e=`claude`,t=M.env,n=M.cwd()){t=k(t);let r=Yn(e,t,n),i=P(e,[`--version`],{encoding:`utf8`,env:t,cwd:n}),a=!i.error&&i.status===0,o=a?String(i.stdout||``).trim():`claude CLI not found on PATH (npm install -g @anthropic-ai/claude-code)`;return Hn.set(r,o),{available:a,detail:o}}function Qn(){if(M.env.CLAUDE_CODE_OAUTH_TOKEN)return{loggedIn:!0,detail:`CLAUDE_CODE_OAUTH_TOKEN configured`};if(M.env.ANTHROPIC_API_KEY)return{loggedIn:!0,detail:`ANTHROPIC_API_KEY configured`};let e=P(`claude`,[`auth`,`status`,`--json`],{encoding:`utf8`,env:k()});if(e.error||e.status!==0)return{loggedIn:!1,detail:`not logged in`};try{let t=JSON.parse(String(e.stdout||``));return t.loggedIn?{loggedIn:!0,detail:[t.email,t.subscriptionType].filter(Boolean).join(`, `)||`logged in`}:{loggedIn:!1,detail:`not logged in`}}catch{return{loggedIn:!1,detail:`unknown`}}}const Y=(e,t)=>[`mcp`,e,...t===void 0?[]:[t]].map(e=>e.replace(/[^A-Za-z0-9_-]/g,`_`)).join(`__`),$n=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,er=`coder-approval`;function tr(e,t){let n=t.permissions??`auto`,r=t.mcpServers??[],i={};n===`auto`&&t.approvalTaskId&&(i[er]={type:`stdio`,command:M.execPath,args:[re,`task`,`mcp`,t.approvalTaskId,`--cwd`,e],env:{[dr]:`1`}});for(let e of r)i[e.name]={...e.url?{type:e.type??`http`,url:e.url,...e.headers?{headers:e.headers}:{}}:{type:`stdio`,command:e.command,args:e.args??[],...e.env?{env:e.env}:{}},...e.alwaysLoad?{alwaysLoad:!0}:{}};return i}function nr(e,t,n,r,i,o,s){let c=[`-p`,`--input-format`,`stream-json`,`--output-format`,`stream-json`,`--verbose`,`--replay-user-messages`],l=jn(i);if(l&&K(l,`2.1.94`)>=0&&c.push(`--thinking-display`,`summarized`),c.push(t.resumeSessionId?`--resume`:`--session-id`,n),t.model&&c.push(`--model`,t.model),t.effort&&c.push(`--effort`,t.effort),t.systemPrompt&&c.push(`--append-system-prompt-file`,o??j.join(t.taskRoot??e,`.claude-system.md`)),t.excludeDynamicSections&&c.push(`--exclude-dynamic-system-prompt-sections`),t.settingSources&&c.push(`--setting-sources`,t.settingSources),t.outputSchema){let{$schema:e,...n}=t.outputSchema;c.push(`--json-schema`,JSON.stringify(n))}let u=t.permissions??`auto`,d=t.additionalDirectories??[],f=u===`read-only`?t.readOnlyAllowedTools??[]:[],p=t.mcpServers??[],m=tr(e,t),h=u===`auto`&&t.approvalTaskId,g=p.flatMap(e=>e.tools?.length?e.tools.map(t=>Y(e.name,t)):[Y(e.name)]),_=Object.keys(m).length?[`--mcp-config`,r??j.join(t.taskRoot??e,`.claude-mcp.json`)]:t.nativeMcp?[]:[`--mcp-config`,`{"mcpServers":{}}`];t.nativeMcp||c.push(`--strict-mcp-config`,`--no-chrome`),h?(c.push(...T.auto,..._,`--permission-prompt-tool`,Y(er,`approval_prompt`)),g.length&&c.push(`--allowedTools`,...g)):f.length?c.push(...a.filter(e=>M.env.CODER_MACHINE_SANDBOX!==`1`||e!==`Bash`),..._,`--allowedTools`,...f,...g):(c.push(...T[u]??T.auto,..._),g.length&&c.push(`--allowedTools`,...g)),h&&c.push(`--disallowedTools`,Y(er,`approval_prompt`));for(let e of d)c.push(`--add-dir`,e);let v=p.filter(e=>e.readOnly),y=t.approvalTaskId?[M.execPath,re,`task`,`hook`,t.approvalTaskId,...v.length?[`--servers`,s??j.join(t.taskRoot??e,`.claude-read-only.json`)]:[],`--cwd`,e].map($n).join(` `):void 0,x=b(u,e,t.allowedNetworkHosts??[],d,M.env[C]!==`1`,t.scratch,t.local??!0,y),S=x?JSON.parse(x):{},w=y?v.map(e=>({matcher:`${Y(e.name)}__.*`,hooks:[{type:`command`,command:y}]})):[],E={...S,...w.length?{hooks:{PreToolUse:[...S.hooks?.PreToolUse??[],...w]}}:{},...t.nativeMcp?{}:{disableClaudeAiConnectors:!0},...t.promptCacheTtl&&l&&K(l,`2.1.242`)>=0?{promptCacheTtl:t.promptCacheTtl}:{}};return Object.keys(E).length&&c.push(`--settings`,JSON.stringify(E)),c}function X(e,t){return Object.assign(Error(e),{retryable:t})}function rr(e,t){let n=t&&_t(t),r=n&&`${n.slice(0,14)}5${n.slice(15,19)}${(Number.parseInt(n[19],16)&3|8).toString(16)}${n.slice(20)}`;return{type:`user`,...r?{uuid:r}:{},message:{role:`user`,content:[{type:`text`,text:e}]}}}function ir(e){let t=!0;return{sendInitial(t,n){return new Promise((r,i)=>{e(`${JSON.stringify(rr(t,n))}\n`,e=>{e?i(e):r()})})},sendSteer(n,r){return t?new Promise((t,i)=>{e(`${JSON.stringify(rr(n,r))}\n`,e=>{if(!e){t();return}let n=e.code,r=n===`EPIPE`||n===`ERR_STREAM_DESTROYED`||n===`ERR_STREAM_WRITE_AFTER_END`;i(X(`Failed to write Claude live steer: ${e.message}`,r))})}):Promise.reject(X(`Claude turn is no longer accepting live input.`,!0))},stopAccepting(){t=!1}}}async function ar(e){return ft(`coder-claude-steer-`,async(t,n)=>{if(n)throw X(`Claude turn is no longer accepting live input.`,!0);let r=typeof t?.params?.text==`string`?t.params.text.trim():``;if(t.method!==`turn/steer`||!r)throw X(`Invalid Claude steer request.`,!1);return await e(r,t.command),{accepted:!0}})}async function or(e,t,n=3e3,r){if(!t.trim())return{steered:!1,retryable:!1,detail:`empty follow-up`};let i=await pt(e,{id:_t(r),method:`turn/steer`,params:{text:t.trim()},command:r},n,`Claude live steer`);return{steered:i.ok&&i.result?.accepted===!0,retryable:i.retryable,detail:i.detail}}async function sr(e,t){let n=await cr(e,t);return!t.resumeSessionId||!n.error?.message?.includes(`No conversation found with session ID`)?n:(t.onProgress?.({kind:`warning`,message:Me}),cr(e,{...t,resumeSessionId:null}))}async function cr(e,t){let n=t.resumeSessionId??F(),r=tr(e,t),i=Object.keys(r).length?j.join(t.taskRoot??e,`.claude-mcp-${F()}.json`):void 0,a=t.systemPrompt?j.join(t.taskRoot??e,`.claude-system-${F()}.md`):void 0,o=(t.mcpServers??[]).filter(e=>e.readOnly),s=o.length?j.join(t.taskRoot??e,`.claude-read-only-${F()}.json`):void 0;for(let[e,n]of[[i,`${JSON.stringify({mcpServers:r})}\n`],[a,t.systemPrompt],[s,JSON.stringify(o)]])e&&(N.mkdirSync(j.dirname(e),{recursive:!0}),N.writeFileSync(e,n,{encoding:`utf8`,flag:`wx`,mode:384}));A(`claude.prepare`,{resume:!!t.resumeSessionId});let c=k({...M.env,...t.env}),l=nr(e,t,n,i,Zn(t.executable??`claude`,c,e),a,s),u=(e=!0)=>{for(let t of[i,a,...e?[s]:[]])if(t)try{N.unlinkSync(t)}catch{}};return t.onProgress?.({kind:`status`,message:`claude turn started (session ${n})`,threadId:n}),new Promise((r,i)=>{let a=Date.now();A(`claude.spawn`);let o=Le(t.executable??`claude`,l,{cwd:e,stdio:[`pipe`,`pipe`,`pipe`],env:c}),s=``,d=``,f=[],p=null,m=n,h=null,g=!1,_=ir((e,t)=>o.stdin.write(e,t)),v=Date.now(),y=new Map,b=0,x=0,S=null,C,w=0,T=n=>{if(!(!n||typeof n!=`object`)){if(u(!1),t.onHeartbeat?.(),n.type===`system`&&n.subtype===`init`&&n.session_id)m=n.session_id,n.mcp_servers?.some(e=>e.status===`failed`)&&o.stdin.write(`${JSON.stringify({type:`control_request`,request_id:Vn,request:{subtype:`mcp_status`}})}\n`);else if(n.type===`control_response`&&n.response?.request_id===Vn)for(let e of n.response.response?.mcpServers??[])e.status===`failed`&&t.onProgress?.({kind:`error`,message:`MCP server ${e.name} failed to start. ${e.error??``}`.trim()});else if(n.type===`stream_event`&&!n.parent_tool_use_id){let e=n.event;e?.type===`message_start`?(C=e.message?.id,S=e.message?.usage):e?.type===`message_delta`&&(S={...S,...e.usage});let t=q(S);x=t?t.input+t.cachedInput:0}else if(n.type===`assistant`||n.type===`user`){let r=n.type===`assistant`?q(n.message?.usage):null;if(n.type===`assistant`&&!n.parent_tool_use_id){(!C||C!==n.message?.id)&&(S=null),C=n.message?.id,(!S||r&&r.input+r.cachedInput>0)&&(S=n.message?.usage);let e=q(S);x=e?e.input+e.cachedInput:0}if(r){b+=r.output;let e=r.input+r.cachedInput+b;(!w||e-w>=1e3)&&(w=e,t.onProgress?.({kind:`usage`,tokens:{...r,output:b,total:e},context:x,threadId:m}))}for(let r of n.message?.content??[])if(r?.type===`tool_use`||r?.type?.endsWith(`_tool_use`)){let n=String(r.name??`Tool`);r.id&&y.set(String(r.id),{name:n,at:Date.now()}),t.onProgress?.({kind:`tool`,tool:n,...r.id?{callId:String(r.id)}:{},message:Jn(n,r.input??{},e),threadId:m})}else if(r?.type===`tool_result`||r?.type?.endsWith(`_tool_result`)){let e=Wn(r.content).trim(),n=r.is_error===!0||r.content?.type?.endsWith(`_error`)===!0,i=r.tool_use_id?y.get(String(r.tool_use_id)):void 0;r.tool_use_id&&y.delete(String(r.tool_use_id)),t.onProgress?.({kind:`tool-result`,...r.tool_use_id?{callId:String(r.tool_use_id)}:{},...i?{tool:i.name,durationMs:Date.now()-i.at}:{},...n?{isError:!0}:{},message:e||(n?`(tool failed with no output)`:`(no output)`),threadId:m})}else n.type===`assistant`&&r?.type===`text`&&typeof r.text==`string`&&r.text.trim()?t.onProgress?.({kind:`assistant`,message:r.text.trim(),threadId:m}):n.type===`assistant`&&r?.type===`thinking`&&typeof r.thinking==`string`&&r.thinking.trim()&&t.onProgress?.({kind:`reasoning`,message:r.thinking.trim(),durationMs:Math.max(0,Date.now()-v),threadId:m})}else n.type===`result`&&(A(`claude.result`),p=n,t.onResult?.({status:n.is_error||f.length?1:0,threadId:n.session_id??m,finalMessage:n.structured_output===void 0?String(n.result??``).trim():JSON.stringify(n.structured_output),error:n.is_error||f.length?{message:f[0]||String(n.result??``)}:null}),n.session_id&&(m=n.session_id),_.stopAccepting(),o.stdin.end());v=Date.now()}};o.stdout.on(`data`,e=>{s+=e;let t;for(;(t=s.indexOf(`
|
|
12
|
-
`))>=0;){let e=s.slice(0,t).trim();if(s=s.slice(t+1),e)try{T(JSON.parse(e))}catch(e){f.push(`Invalid Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}}}),o.stderr.on(`data`,e=>{d+=e});let E=()=>{_.stopAccepting(),o.kill(`SIGTERM`),u();let e=h?.endpoint;e?.startsWith(`file:`)&&N.rmSync(e.slice(5),{recursive:!0,force:!0}),M.exit(143)};M.on(`SIGTERM`,E);let D=()=>{_.stopAccepting(),o.kill(`SIGTERM`)};t.signal?.aborted?D():t.signal?.addEventListener(`abort`,D,{once:!0}),(async()=>{t.onSteerReady&&(h=await ar((e,t)=>_.sendSteer(e,t))),await _.sendInitial(t.prompt,t.command),h&&t.onSteerReady?.(h.endpoint)})().catch(e=>{g||(g=!0,_.stopAccepting(),o.kill(`SIGTERM`),u(),M.removeListener(`SIGTERM`,E),h?.close(),i(e))}),o.on(`error`,e=>{g||(g=!0,_.stopAccepting(),M.removeListener(`SIGTERM`,E),u(),h?.close(),i(Error(`claude spawn failed: ${e.message}`)))}),o.on(`close`,async e=>{if(g)return;g=!0,_.stopAccepting(),M.removeListener(`SIGTERM`,E),u(),A(`claude.exit`),await h?.close(),A(`claude.teardown.done`);let n=s.trim();if(n)try{T(JSON.parse(n))}catch(e){f.push(`Invalid trailing Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}let i=p?.structured_output===void 0?(p?.result??``).trim():JSON.stringify(p.structured_output),o=e!==0||p?.is_error===!0||p==null||f.length>0;A(`claude.usage.start`);let l=q(p?.usage);if(!x&&p){let e=q(await Rn(m,a,c.CLAUDE_CONFIG_DIR).catch(()=>null)),t=e&&e.input+e.cachedInput>0?e:l;x=t?t.input+t.cachedInput:0}A(`claude.usage.done`),r({status:+!!o,threadId:p?.session_id??m,turnId:null,finalMessage:i,tokens:l,contextTokens:x,model:p?.modelUsage&&Object.keys(p.modelUsage).join(`+`)||t.model||null,error:o?{message:f[0]||i||d.trim()||`claude exited ${e}`}:null})})})}const lr=/usage|quota|rate.?limit|429|401|unauthorized|not authenticated|login|insufficient|exhausted|not available|\bat capacity\b|ENOENT/i;function ur(e){return lr.test(e)&&!ue(e)}const dr=`CODER_WORKER`;var fr=class extends Error{engine;detail;constructor(e,t){super(t),this.engine=e,this.detail=t}};function pr(e,t){let n=e.engine,r=!!n,i=e.model,a=e.effort,o=e=>{let n=e?t.models?.[e]:void 0;return n&&m(n)?n:void 0},s=e=>{let n=e?t.models?.[e]:void 0;return n&&ae(n)?n:void 0},c=e=>{try{return _(e,t)}catch(e){throw new L(`invalid-option`,e instanceof Error?e.message:String(e))}};if(o(i)){let e=c(i);e&&(r||(n=e.engine),i=e.model??void 0,a=a??e.effort??void 0)}if(!n&&i&&(i in l?n=`claude`:i in x?n=`codex`:s(i)?n=`custom`:/^(?:claude-|opus|sonnet|haiku|fable)/i.test(i)&&(n=`claude`)),n=n??t.chain[0]??`codex`,n!==`codex`&&n!==`claude`&&n!==`custom`){let e=n in x||n in l||n in(t.models??{})?` "${n}" is a model; use --model ${n}.`:``;throw new L(`invalid-option`,`Invalid --engine "${n}". Use codex, claude, or custom.${e}`)}let u=t.engines[n]??{},f=i??u.model??null,p=a??u.effort??null;if(o(f)){let e=c(f);e&&(r||(n=e.engine),f=e.model,p=a??e.effort??p)}let h=e.permissions??u.permissions??`auto`;try{g(t,f)}catch(e){throw new L(`invalid-option`,e instanceof Error?e.message:String(e))}if(n===`custom`){let e=Object.entries(t.models??{}).filter(([,e])=>ae(e)).map(([e])=>e);if(!f&&e.length===1&&(f=e[0]),!f||!s(f))throw new L(`invalid-option`,f?`No custom model named "${f}". Configured: ${e.join(`, `)||`none`}.`:`No custom model to run: pass --model <name> or set engines.custom.model.`,{hint:`Add one: coder model add <name> --base-url <url> --model <id>`})}let v=n===`claude`;if(!(h in E))throw new L(`invalid-option`,`Invalid --permissions "${h}". Use one of: ${Object.keys(E).join(`, `)}`);if(!v&&p&&!Se.has(p))throw new L(`invalid-option`,`Invalid codex --effort "${p}". Use one of: ${[...Se].join(`, `)}`);if(v&&p&&!d.has(p))throw new L(`invalid-option`,`Invalid claude --effort "${p}". Use one of: ${[...d].join(`, `)}`);return{engine:n,model:f,effort:p,permissions:h}}const{connection:mr,description:hr,...gr}=v.shape,_r=ge({name:le().check(e(1)),...gr}).check(_e(e=>!!e.command!=!!e.url,`one of command or url`)),vr=xe(_r);function yr(e,t={}){let n=e.trim();return/^[\[{]/.test(n)?xr(n):(n===`all`?Object.keys(t):n.split(`,`).map(e=>e.trim()).filter(Boolean)).map(e=>{let n=t[e];if(!n)throw new L(`invalid-option`,`Unknown MCP server "${e}".`,{hint:`configured: ${Object.keys(t).join(`, `)||`none`}; or pass a JSON array`});return{name:e,...n}})}function br(e,t={},n={},r={}){typeof e==`string`&&!e.trim()&&(e=void 0);let i=typeof e==`string`?yr(e,{...t,...n}):e??Object.entries(n).map(([e,t])=>({name:e,...t})),a=[],o=i.filter(e=>e.connection).map(({name:e,connection:t,tools:n})=>({name:e,connection:t,...n?{tools:n}:{}})),s=new Set,c=[];for(let e of i){if(!e.connection||e.resolved){e.connection&&s.add(e.connection),e.repository&&a.push(...Te(e.name,e)),c.push(e);continue}let t=Object.hasOwn(r,e.connection)?r[e.connection]:void 0;if(!t){a.push(`MCP server "${e.name}" skipped because connection "${e.connection}" was not granted to this task.`);continue}if(s.has(e.connection))continue;s.add(e.connection);let n=e.tools?.length?e.tools.filter(e=>!t.tools?.length||t.tools.includes(e)):t.tools;if(e.tools?.length&&!n?.length){a.push(`MCP server "${e.name}" skipped because its tools are not granted by connection "${e.connection}".`);continue}c.push({...t,name:e.name,connection:e.connection,resolved:!0,...n?{tools:n}:{}})}for(let[e,t]of Object.entries(r)){if(s.has(e))continue;let n=c.findIndex(e=>e.name===t.name);n>=0&&c.splice(n,1),c.push({...t,resolved:!0})}return{mcp:c,...o.length?{mcpBindings:o}:{},nativeMcp:typeof e==`string`&&e.trim()===`all`,...a.length?{warnings:a}:{}}}function xr(e){let t;try{t=JSON.parse(e)}catch(e){throw new L(`invalid-option`,`Invalid --mcp JSON: ${e instanceof Error?e.message:String(e)}`)}let r=vr.safeParse(t);if(!r.success)throw new L(`invalid-option`,`Invalid --mcp value: ${n(r.error)}`,{hint:`--mcp '[{"name":"docs","command":"npx","args":["-y","docs-mcp"],"tools":["search"]}]'`});return r.data}function Sr(e,t=M.env,n,r={}){let i=r.cloud??t.CODER_MCP_MODE===`cloud`,a=r.connectionEnv??JSON.parse(t.CODER_MCP_CONNECTION_ENV??`{}`),o=r.onWarning??(e=>M.stderr.write(`coder: ${e}\n`));return(e??[]).flatMap(e=>{let r=e.repository&&!e.resolved;if(r){for(let t of Te(e.name,e))o(t);if(!i&&!je(e))return o(`MCP server "${e.name}" skipped pending local approval. Run coder connection approve ${e.name} in its repository.`),[]}let s=new Set,c=new Set,l=n=>e.resolved?n.replace(/^\$\{(CODER_CONNECTION_[A-F0-9]{24})\}$/,(e,n)=>t[n]??``):n.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g,(e,n,o)=>r&&i?a[n]===null?(c.add(n),``):Object.hasOwn(a,n)?a[n]:(s.add(n),``):t[n]??o??``),u=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,l(t)])),d=r&&!!e.url,f={...e,...e.command?{command:l(e.command)}:{},...e.args?{args:e.args.map(l)}:{},...e.url?{url:d?e.url:l(e.url)}:{},...e.env?{env:u(e.env)}:{},...e.headers?{headers:d?e.headers:u(e.headers)}:{}};if(c.size)return o(`MCP server "${e.name}" skipped because connection variables ${[...c].join(`, `)} are ambiguous.`),[];if(s.size&&o(`MCP server "${e.name}" has unresolved connection variables ${[...s].join(`, `)}; expanded to empty.`),!n||!f.command)return[f];let p=(f.command.includes(j.sep)?[j.resolve(n,f.command)]:(f.env?.PATH??t.PATH??`/usr/bin:/bin`).split(j.delimiter).map(e=>j.resolve(n,e,f.command))).find(e=>{try{return N.accessSync(e,N.constants.X_OK),N.statSync(e).isFile()}catch{return!1}});if(!p)throw new L(`invalid-option`,`MCP server "${e.name}" command cannot be resolved.`);return f.command=N.realpathSync(p),f.args=f.args?.map(e=>{if(e.startsWith(`-`)||j.isAbsolute(e))return e;let t=j.resolve(n,e),r=N.existsSync(t)&&N.statSync(t).isFile();return!r&&!e.startsWith(`./`)&&!e.startsWith(`../`)?e:r?N.realpathSync(t):t}),[f]})}function Cr(e,t=[]){let n=[...new Set(t.map(t=>j.resolve(e,t)))];for(let e of n)if(!N.statSync(e,{throwIfNoEntry:!1})?.isDirectory())throw new L(`invalid-option`,`--add-dir ${e} is not a directory.`);return n}function wr(e){return e===`local`||e===`http`?void 0:`--add-dir ignored: this task runs on a ${e} machine`}function Tr(e,t){return e===`read-only`&&we.test(t??``)}const Er=[`read-only`,`workspace-write`,`auto`];function Dr(e,t,n){if(!t)return n.permissions;if(Er.indexOf(t)>Er.indexOf(n.permissions))throw new L(`invalid-option`,`task "${e??`task`}" asks for ${t} but agent "${n.agent}" is ${n.permissions}: lower the task's permissions or raise the agent's`);return t}function Or(e,t,n={},r=!1){let a=f(e,t),s=N.openSync(j.join(a,`worker.log`),`a`),c={...M.env,...n},l=i(e,t);A(`worker.spawn`,{taskId:t});let u;try{u=Le(M.execPath,[re,`task`,`worker`,t,`--cwd`,e],{cwd:e,detached:!0,stdio:[`ignore`,s,s,`ipc`],env:{...c,...Xn(c,e),[dr]:`1`,CODER_ENGINE_CHECKED:r?`1`:void 0}})}finally{N.closeSync(s)}let d=n=>{let r=i(e,t);if(!r||r.dispatchId!==l?.dispatchId||r.resumedAt!==l?.resumedAt||r.pid!==(u.pid??null)||!Oe.includes(r.status)&&!(r.status===`completed`&&o(e,t)))return;let a=`Task worker exited without finishing: ${n}`;de(e,t,{status:`failed`,error:a,completedAt:new Date().toISOString(),steerClosed:!0,resumeOwner:void 0}),me(e,t,{kind:`error`,message:a})};return u.on(`error`,e=>d(e.message)),u.on(`exit`,(e,t)=>d(t?`signal ${t}`:`exit ${e}`)),u.unref(),u.channel?.unref?.(),de(e,t,{pid:u.pid??null}),u}async function kr(e,t,n,r,a){let o=n.cwd,s=n.availability?.[t.engine===`custom`?`codex`:t.engine]??(t.engine===`claude`?J(`claude`,{...M.env,...n.connectionEnv},o):U(o)),c=t.model?e.models?.[t.model]:void 0;if(!s.available&&c&&ae(c)){let e=On(s);n.onNote?.(e.note),s=U(o)}if(!s.available)throw new fr(t.engine,s.detail);let l=c?null:t.engine===`claude`?Mn(`claude`,t.model,s):Mn(`codex`,se(t.model),s);l&&n.onNote?.(l);let u=n.addDirs??[],d=n.taskId??te(),p=n.resume?.engine===t.engine?n.resume:void 0,m=oe(d);N.mkdirSync(m,{recursive:!0}),it(f(o,d),n.approvals??[]);let g=de(o,d,{status:`queued`,...n.taskId?{dispatchId:F()}:{},name:r.name??null,appendSystem:n.appendSystem??null,promptParts:{cwd:o,...n.agentPrompt,appendSystem:n.appendSystem??void 0,conversation:n.conversation,local:M.env.CODER_MCP_MODE!==`cloud`,scratch:m,writes:t.permissions!==`read-only`,...n.structured||n.outputSchema?{structured:!0}:{}},engine:t.engine,prompt:n.prompt,...n.outputSchema?{outputSchema:n.outputSchema}:{},model:t.model,effort:t.effort,permissions:t.permissions,resumeThreadId:p?.threadId??null,...p?{threadId:p.threadId,...p.previousThreadIds?{previousThreadIds:p.previousThreadIds}:{}}:{},cwd:o,...n.flowRunId?{flowRunId:n.flowRunId}:{},...n.agentId?{agentId:n.agentId}:{},...n.conversation?{conversation:!0}:{},...n.source?{source:n.source}:{},...n.author?{author:n.author}:{},...n.repo?{repo:n.repo}:{},...n.mcp?.length?{mcp:n.mcp}:{},...n.mcpBindings?{mcpBindings:n.mcpBindings}:{},...n.connections?{connections:n.connections}:{},...n.connectionSource?{connectionSource:n.connectionSource}:{},nativeMcp:n.nativeMcp??!1,...u.length?{addDirs:u}:{}});for(let e of new Set(n.mcpWarnings??[]))me(o,d,{kind:`warning`,message:e});n.resume&&!p&&me(o,d,{kind:`warning`,message:Me});let _=j.join(f(o,d),`log.jsonl`),v=N.existsSync(_)?N.statSync(_).size:0,b=Or(o,d,n.connectionEnv,!0);if(n.onWorker?.(d,b),!a)return{taskId:d,task:i(o,d)??g,engine:t.engine,startupCheck:`pending`};let x=Ae(o,d,b),S=ne(_,v),C=!1,w=!1,T=()=>{let e=S().map(e=>{try{return JSON.parse(e)}catch{return{kind:`unknown`}}});return w||=e.some(e=>e.kind===`tool`||e.kind===`reply`),e.some(e=>e.phase!==`starting`&&![`status`,`usage`].includes(e.kind??``))},E=Date.now()+15e3,D,O=g;try{for(;Date.now()<(D===void 0?E:D+5e3)&&(O=i(o,d)??O,!(he.includes(O.status)||y(o,d).at(-1)?.status===0||Ge(f(o,d)).length||(C=T()||C,O.threadId&&(D??=Date.now(),C))));)await x.wait(Math.min(3e4,(D===void 0?E:D+5e3)-Date.now()))}finally{x.close()}if(O.status===`failed`){T();let e=j.join(f(o,d),`result.json`),n=ie(e),r=n?.error?.message??``,i=h(o,d,5).map(e=>e.message??``).join(`
|
|
13
|
-
`),a=r||i;throw Tr(t.permissions,a)?new L(`read-only-unavailable`,a):ur(a)&&!Nr(n,w)?new fr(t.engine,a):new L(`startup-failed`,a,{taskId:d})}return{taskId:d,task:O,engine:t.engine,startupCheck:O.threadId?`passed`:`pending`}}function Ar(e,t,n,r,i){return{error:`${e} failed to start: ${t}`,fallback:{action:`run-native-subagent`,reason:`no-engine-available`,permissions:n,instructions:`Mention the engine failure to the user, including any limit reset time. If your harness has a native subagent facility, spawn one subagent with fallback.task verbatim, prefixed with: "NEVER run git write operations (commit, checkout, stash, reset, push, etc.); leave changes uncommitted." If fallback.permissions is "read-only", append: "Investigate and report without modifying anything." If it is "workspace-write", append: "Never touch anything outside the workspace." Relay its output when it completes. If your harness has no native subagent facility, report the failure and stop; do not implement the task yourself.`,note:`Every coder engine failed to start. Spawn your own native subagent and forward the task verbatim; tell it to never run git write operations (commit, checkout, stash, reset, push, ...) and to honor the permissions.`,...r?{appendSystem:r}:{},task:i}}}async function jr(e,t={}){if(M.env.CODER_WORKER)throw new L(`nested-dispatch`,`Nested dispatch is disabled inside a worker; do the work directly.`);if(e.outputSchema!==void 0&&(!e.outputSchema||typeof e.outputSchema!=`object`||Array.isArray(e.outputSchema)))throw new L(`invalid-option`,`outputSchema must be an object.`);if(!e.prompt.trim())throw new L(`invalid-option`,`Missing task text.`,{hint:[`Usage: coder run "<task text>"`,`Help: coder task run --help`]});e={...e,addDirs:Cr(e.cwd,e.addDirs)};let n=t.config??p(e.cwd),r=br(e.mcp,n.mcp),i={...e,mcp:r.mcp,mcpBindings:e.mcpBindings??r.mcpBindings,mcpWarnings:[...e.mcpWarnings??[],...r.warnings??[]],nativeMcp:e.nativeMcp??r.nativeMcp},a={engine:e.engine,model:e.model,effort:e.effort,permissions:e.permissions},o={name:e.name};for(;;){let r=pr(a,n);try{return await kr(n,r,i,o,t.waitForStartup!==!1)}catch(t){if(!(t instanceof fr))throw t;let i=Mr(t.engine,n);if(!i){let n=Ar(t.engine,t.detail,r.permissions,e.appendSystem,e.prompt);throw new L(`chain-exhausted`,n.error,{payload:n})}e.onFallback?.({engine:t.engine,detail:t.detail,next:i}),a={engine:i,permissions:e.permissions},o={name:void 0}}}}function Mr(e,t){return t.chain.slice(t.chain.indexOf(e)+1).find(e=>e!==`custom`||Object.values(t.models??{}).some(ae))}function Nr(e,t=!1){return!!(t||e?.fileChanges?.length||e?.commandExecutions?.length)}function Pr(e,t,n){if(t.status!==`failed`)return;let r=t.result;if(!r||!ur(r.error?.message??``))return;let i=Date.parse(t.turns.at(-2)?.at??t.task.resumedAt??t.task.createdAt);if(!Nr(r,h(e,t.taskId,2**53-1).some(e=>(e.kind===`tool`||e.kind===`reply`)&&(!e.at||Date.parse(e.at)>=i)))&&!t.turns.at(-1)?.lastReply)return Mr(t.task.engine,n??p(e))??null}function Fr(e,t,n){return n&&(Oe.includes(n.status)||n.status===`failed`&&n.error)?null:ie(j.join(f(e,t),`result.json`))}function Ir(e,t,n=0){if(n===0)return[];let r=h(e,t,2**53-1);return n===`all`?r:D(r,n)}function Lr(e,t,n={}){let r=n.task??i(e,t);if(!r)throw Error(`No task found for "${t}".`);return{taskId:t,status:r.status,result:Fr(e,t,r),steps:Ir(e,t,n.tail),turns:y(e,t),task:r}}async function Rr(e,t,n={}){let r=i(e,t);if(!r)throw Error(`No task found for "${t}".`);let a=await zr(e,r,1e3,n);if(a.reason===`approval`){let e=a.approval;throw new L(`approval-pending`,`Approval needed for task ${t}: ${e.reason}`,{taskId:t,approval:e})}n.onSettle?.();let o=a.task;return{taskId:t,status:o.status,result:Fr(e,t,o),steps:Ir(e,t,n.tail),turns:y(e,t),task:o}}async function zr(e,t,n=1e3,{turn:r,worker:a,signal:o,seen:s=[]}={}){let c=t,l=Ae(e,t.id,a);try{let t=S();for(;;){o?.throwIfAborted(),c=i(e,c.id)??c;let a=r===void 0?void 0:y(e,c.id)[r];c=a?{...c,status:a.status===0?`completed`:`failed`}:ee(e,c,t);let u=Ge(f(e,c.id)).find(e=>!s.includes(e.id));if(u)return{task:c,reason:`approval`,approval:{id:u.id,reason:u.reason,actions:u.actions}};if(he.includes(c.status)&&(r!==void 0||!Ne(e,c)))return{task:c,reason:`terminal`};await l.wait(n,o)}}finally{l.close()}}function Br(e=M.stdout){try{return e.getWindowSize?.()[0]??e.columns}catch{return e.columns}}function Vr(e=M.stdout){try{return e.getWindowSize?.()[1]??e.rows}catch{return e.rows}}function Hr(e){return e>=768&&e<=879||e>=8203&&e<=8207||e>=65024&&e<=65039?0:e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=129791||e>=131072&&e<=262141?2:1}function Ur(e){let t=0;for(let n of e.replace(/\x1b\[[0-9;]*m/g,``))t+=Hr(n.codePointAt(0));return t}function Wr(e,t){let n=0;for(let r=0;r<e.length;){let i=e[r]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(r)):null;if(i){r+=i[0].length;continue}let a=String.fromCodePoint(e.codePointAt(r)),o=Hr(a.codePointAt(0));if(n+o>t)return r;n+=o,r+=a.length}return e.length}function Gr(e,t,n){if(t<4||n<1)return[e];let r=[],i=e;for(;Ur(i)>t;){if(r.length===n-1)return[...r,`${i.slice(0,Wr(i,t-1))}…`];let e=Wr(i,t),a=i.lastIndexOf(` `,e),o=a>t*.66?a:e;r.push(i.slice(0,o).trimEnd()),i=i.slice(o).replace(/^\s+/,``)}return[...r,i]}function Kr(e,t){let n=0,r=``;for(let i=0;i<e.length;){let a=e[i]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(i)):null;if(a){r+=a[0],i+=a[0].length;continue}let o=e.codePointAt(i),s=String.fromCodePoint(o),c=Hr(o);if(n+c>t-1)return`${r}\x1b[0m${Z.dim(`…`)}`;r+=s,n+=c,i+=s.length}return r}function qr(){let e=M.stdin;if(!e.isTTY||!M.stdout.isTTY)return()=>{};e.setRawMode(!0),e.resume();let t=e=>{e.includes(3)&&M.kill(M.pid,`SIGINT`),e.includes(26)&&M.kill(M.pid,`SIGTSTP`)};return e.on(`data`,t),e.unref(),()=>{e.off(`data`,t),e.isTTY&&e.setRawMode(!1),e.pause()}}var Jr=class{stream;quietMs;lines=[];painted=[];paintedWidths=[];paintedCols;resizeTimer;tty;constructor(e=M.stdout,t=250){this.stream=e,this.quietMs=t,this.tty=!!e.isTTY,this.tty&&e.on(`resize`,this.onResize)}set(e){this.lines=e,!(!this.tty||this.resizeTimer)&&this.paint()}commit(e){this.clear(),this.stream.write(e)}clear(){if(!this.painted.length)return;let e=Br(this.stream),t=this.painted.length;e&&this.paintedCols&&e!==this.paintedCols&&(t=this.paintedWidths.reduce((t,n)=>t+Math.max(1,Math.ceil(n/e)),0)),this.stream.write(`\x1b[${t}A\x1b[0J`),this.painted=[],this.paintedWidths=[]}done(){this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=void 0,this.paint()),this.tty&&this.stream.off(`resize`,this.onResize)}paint(){this.clear();let e=Br(this.stream),t=e?this.lines.map(t=>Kr(t,e-1)):this.lines,n=Vr(this.stream);n&&t.length>n-1&&(t=n>1?t.slice(-(n-1)):[]);for(let e of t)this.stream.write(`${e}\n`);this.painted=t,this.paintedWidths=t.map(Ur),this.paintedCols=e}onResize=()=>{this.clear(),this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{this.resizeTimer=void 0,this.paint()},this.quietMs),this.resizeTimer.unref?.()}};function Yr(e){let t=M.env.FORCE_COLOR,n=t!=null&&t!==``&&t!==`0`||t!==`0`&&e.isTTY&&!M.env.NO_COLOR,r=(e,t)=>n?`\x1b[${e}m${t}\x1b[0m`:t;return{blue:e=>r(`34`,e),bold:e=>r(`1`,e),cyan:e=>r(`36`,e),dim:e=>r(`2`,e),light:e=>r(`38;5;246`,e),green:e=>r(`32`,e),red:e=>r(`31`,e),yellow:e=>r(`33`,e)}}const Z=Yr(M.stdout),Q=Yr(M.stderr);function Xr(e,t=Q,n=t.blue,r=`Related`){let i=e.map(e=>{let t=e.search(/(?:\b[A-Z][A-Z0-9_]*=\S+\s+)*coder /);if(t===-1)return{text:e};let n=e.slice(0,t).trim().replace(/:$/,``);return{command:e.slice(t),label:n.charAt(0).toLowerCase()+n.slice(1)}}),a=Math.max(0,...i.map(e=>e.command?.length??0))+2;return[t.bold(`${r}:`),...i.map(e=>e.command===void 0?` ${t.dim(e.text)}`:` ${n(e.label?e.command.padEnd(a):e.command)}${t.dim(e.label)}`)].join(`
|
|
14
|
-
`)}function Zr(e,t={}){let n=typeof t==`number`?t:t.code??1,r=typeof t==`object`?t.hint:null,i=r==null?[]:Array.isArray(r)?r:[r];M.stderr.write(`${Q.red(e)}\n`),i.length&&M.stderr.write(`\n${Xr(i,Q)}\n`),M.exit(n)}function Qr(e){M.stdout.write(`${JSON.stringify(e,null,2)}\n`)}function $r(e,t=Z){return(JSON.stringify(e,null,2)??`null`).split(`
|
|
15
|
-
`).map(e=>e.replace(/"((?:[^"\\]|\\.)*)":/g,(e,n)=>`${t.light(`"${n}"`)}:`).replace(/: (-?\d[\d.eE+-]*|true|false|null)(,?)$/,(e,n,r)=>`: ${t.blue(n)}${r}`)).join(`
|
|
16
|
-
`)}function ei(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h${n%60}m`}function ti(e){let t=Math.max(0,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60)%60,i=Math.floor(t/3600),a=e=>String(e).padStart(2,`0`);return i?`${i}:${a(r)}:${a(n)}`:`${r}:${a(n)}`}function $(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}function ni(e,t){let n=[`in ${$(e.input)}`,...e.cachedInput?[`cached ${$(e.cachedInput)}`]:[],`out ${$(e.output)}`];return`${$(e.total)} (${n.join(` · `)}) on ${t||`default model`}`}function ri(e){return`ctx ${$(e.input+e.cachedInput)} · out ${$(e.output)}`}function ii(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function ai(e,t){let n=[],r=e;for(;r.length>t;){let e=r.lastIndexOf(` `,t);e<=0&&(e=t),n.push(r.slice(0,e).trimEnd()),r=r.slice(e).trimStart()}return n.push(r),n}function oi(e,t,n={}){let r=`bold`in n?{style:n}:n,i=r.style??Z,a=t.length&&typeof t[0]==`object`&&t[0]!==null&&`rows`in t[0]?t:[{rows:t}],o=a.flatMap(e=>e.rows),s=e.length-1,c=e.map((e,t)=>t===s&&!r.border?0:Math.min(e.max??40,Math.max(e.header.length,...o.map(t=>e.value(t).length))));if(r.border){let t=r.width??Br()??120,n=c.slice(0,s).reduce((e,t)=>e+t+3,0)+4,i=Math.max(e[s].header.length,...o.map(t=>e[s].value(t).length));c[s]=Math.max(e[s].header.length,Math.min(i,t-n))}let l=(e,t,n)=>i.light(`${e}${c.map(e=>`─`.repeat(e+2)).join(t)}${n}`),u=e=>r.border?`${i.light(`│`)} ${e.join(` ${i.light(`│`)} `)} ${i.light(`│`)}`:e.join(` `),d=(e,t)=>t===s&&!r.border?e:ii(e,c[t]),f=[];return r.border&&f.push(l(`┌`,`┬`,`┐`)),f.push(i.bold(i.light(u(e.map((e,t)=>d(e.header,t)))))),r.border&&f.push(l(`├`,`┼`,`┤`)),a.forEach((t,n)=>{n&&!r.border&&f.push(``),t.header&&f.push(r.border?`${i.light(`│`)} ${t.header}`:t.header),t.rows.forEach((n,i)=>{r.border&&(i||t.header)&&f.push(l(`├`,`┼`,`┤`));let a=e.map((e,t)=>r.border?ai(e.value(n),c[t]):[e.value(n)]),o=Math.max(...a.map(e=>e.length));for(let t=0;t<o;t++)f.push(u(e.map((e,r)=>{let i=d(a[r][t]??``,r);return e.paint&&a[r][t]!==void 0?e.paint(i,n):i})))})}),r.border&&f.push(l(`└`,`┴`,`┘`)),`${f.join(`
|
|
17
|
-
`)}\n`}function si(e){return` ${Z.bold(Z.green(`✔`))} ${e}`}function ci(e){return` ${Z.bold(Z.red(`✘`))} ${e}`}function li(e,t=0){let n=e.padEnd(t);return e===`running`?Z.green(n):e===`waiting-approval`?Z.yellow(n):e===`failed`||e===`cancelled`?Z.red(n):e===`completed`?Z.blue(n):Z.dim(n)}export{un as $,Lr as A,J as B,dr as C,Ge as Ct,wr as D,L as Dt,jr as E,st as Et,Or as F,On as G,or as H,Pr as I,Fn as J,xn as K,zr as L,Sr as M,pr as N,Tr as O,br as P,cn as Q,Rr as R,Gr as S,at as St,Dr as T,qe as Tt,Ln as U,sr as V,zn as W,yn as X,vn as Y,U as Z,Jr as _,ut as _t,ei as a,xt as at,Vr as b,R as bt,$r as c,Qe as ct,ri as d,lt as dt,ln as et,si as f,We as ft,oi as g,Je as gt,Qr as h,Ye as ht,Zr as i,gt as it,Cr as j,Fr as k,$ as l,ct as lt,li as m,Ue as mt,ii as n,bt as nt,ti as o,nt as ot,Z as p,ot as pt,In as q,Q as r,_t as rt,Xr as s,Ve as st,ci as t,Tt as tt,ni as u,$e as ut,qr as v,Ke as vt,Ar as w,rt as wt,Ur as x,et as xt,Br as y,Ze as yt,Bn as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{G as e,Tr as t,d as n,kr as r}from"./errors-DO_IltpP.js";import{ft as i,st as a}from"./output-SNqdgh9A.js";import o from"node:path";function s(e,t,r){let i=String(r.tool_name??``),o=r.input??r.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return n(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,r,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,r),o):void 0;return s?(n(t,r,{kind:`approval-decision`,method:`Bash`,decision:`accept`,approvalId:s.id,summary:`run command: ${o.trim()}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`allow`,permissionDecisionReason:`Coder: approved action ${s.id}`,updatedInput:a.tool_input}}):null}async function l(i,a,s,c){let l=String(s.tool_name??``);if(!c||!l.startsWith(`mcp__`))return null;let[{claudeToolName:u},{listServerTools:d}]=await Promise.all([import(`./output-SNqdgh9A.js`).then(e=>e.z),import(`./mcp-BkwmRHI9.js`)]),f=t(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&t(p)?.[f.name],h=`This task is read-only.`;if(f&&!m)try{m=(await d(f)).filter(e=>e.annotations?.readOnlyHint===!0).map(e=>e.name),r(p,{...t(p),[f.name]:m})}catch(e){h=`This task is read-only, and MCP server "${f.name}" did not list its tools (${e instanceof Error?e.message:String(e)}).`}return f&&m?.some(e=>u(f.name,e)===l)?null:(n(i,a,{kind:`approval-decision`,method:l,decision:`decline`,reason:h,summary:`${l}: ${JSON.stringify(s.tool_input??{}).slice(0,200)}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`deny`,permissionDecisionReason:h}})}export{s as n,l as r,c as t};
|
package/dist/prompt-CIx4jwQF.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{v as t}from"./errors-DO_IltpP.js";import{Dt as n,p as r,x as i,y as a}from"./output-SNqdgh9A.js";import o from"node:path";import s from"node:process";import c from"node:fs";import{spawn as l}from"node:child_process";var u=class extends n{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};function d(e){try{let t=new URL(e).hostname.toLowerCase();return t===`localhost`||t===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(t)}catch{return!1}}function f(e){let t;try{t=new URL(e)}catch{throw new n(`invalid-option`,`Give the server as a URL, e.g. https://agents.example.com.`)}if(t.protocol!==`https:`&&!(t.protocol===`http:`&&d(t.origin)))throw new n(`invalid-option`,`Coder servers require HTTPS unless they are loopback.`,{hint:`Use https://, or http://localhost for a local server.`});if(t.username||t.password||t.search||t.hash)throw new n(`invalid-option`,`The server must be an origin without credentials, query, or fragment.`);return t.toString().replace(/\/+$/,``)}const p=(e,t)=>{let n=new URLSearchParams;`cursor`in t&&typeof t.cursor==`string`&&n.set(`cursor`,t.cursor);for(let[e,r]of Object.entries(t))e!==`cursor`&&r!==void 0&&r!==!1&&r!==``&&n.set(e,r===!0?`1`:Array.isArray(r)?r.join(`,`):String(r));return`${e}?${n}`},m=new Set([`completed`,`failed`,`cancelled`]);var h=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,t,r={}){if(this.cookie=`cookie`in t,this.url=e?f(e):``,!this.cookie&&!this.url)throw new n(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in t?t.token:void 0,this.fetchImpl=r.fetch??((e,t)=>fetch(e,t)),this.organization=r.organization,this.renewal=r.renewal,this.onError=r.onError}request(e,t={}){let n=this.read(e,t);return n.catch(()=>{}),n}async read(e,t){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,t);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,t));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new n(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(!r.ok){let e=new u(r.status,a.error??a.message??o??`The server answered ${r.status}.`,r.headers.get(`www-authenticate`)??``,a.hint,a.needs===`key`?a.needs:void 0);throw this.onError?.(e),e}return a}send(e,t){let r=new Headers(t.headers);return t.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.cookie||r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...t,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof n||e.name===`AbortError`?e:new n(`server`,this.url?`No Coder server answers at ${this.url}: ${e.message}`:`The server did not answer. Check the connection and try again.`)})}post(e,t){return this.request(e,{method:`POST`,...t===void 0?{}:{body:JSON.stringify(t)}})}me(){return this.request(`/me`)}info(){return this.request(`/api/auth/capabilities`)}linkAccount(e){return this.post(`/connect`,{token:e})}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(p(`/admin/agents`,{...e,...e?.connect?{connect:1}:{}})),get:(e,t)=>this.request(p(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{}})),versions:(e,t={})=>this.request(p(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(p(`/admin/agents/import`,{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)}).then(t=>({id:e,version:t.version,unchanged:t.unchanged,...t.apps?.length?{apps:t.apps}:{}})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:`PATCH`,body:JSON.stringify(t)}),import:(e,t,n)=>this.post(`/admin/agents/import`,{repo:e,ref:t,...n?{agents:n}:{}})};composer(){return this.request(`/admin/composer`)}folders={list:()=>this.request(`/admin/folders`),check:e=>this.post(`/admin/folders/check`,{path:e}),clone:e=>this.post(`/admin/folders/clone`,{url:e}),pick:()=>this.post(`/admin/folders/pick`,{})};tasks={list:e=>this.request(p(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(p(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:n})),stream:(e,t=-1,n)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:`text/event-stream`},signal:n}),events:(e,t,n)=>this.send(p(`/admin/events`,{tasks:e}),{headers:{accept:`text/event-stream`,...t?{"last-event-id":t}:{}},signal:n}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...n}),ask:(e,t)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t}),approve:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n,...r}),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:`DELETE`}),create:e=>this.post(`/admin/tasks`,e),wait:async(e,t={})=>{let r=-1;for(;;){let i=new AbortController,a=await this.tasks.stream(e,r,i.signal);if(!a.ok||!a.body){let t=await this.tasks.get(e);if(m.has(t.status))return t;if(a.status===401)continue;throw new n(`server`,`The task stream answered ${a.status}.`)}let o=!1;for await(let e of g(a.body))if(e.event===`log`){let n=JSON.parse(e.data);r=n.seq,t.onLog?.(n)}else if(e.event===`end`||e.event===`approval`){o=!0;break}if(o)return this.tasks.get(e)}}};credentials={list:e=>this.request(p(`/admin/credentials`,e??{})),add:e=>this.post(`/admin/credentials`,e),remove:(e,{workspace:t}={})=>this.request(`/admin/credentials/${encodeURIComponent(e)}${t?`?workspace`:``}`,{method:`DELETE`}),login:e=>this.post(`/admin/logins`,{engine:e}),loginStatus:(e,t)=>this.request(`/admin/logins/${encodeURIComponent(e)}${t?`?state=${encodeURIComponent(t)}`:``}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:`DELETE`})};runners={list:()=>this.request(`/admin/runners`),add:e=>this.post(`/admin/runners`,e),pair:e=>this.post(`/admin/runners/pair`,e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`DELETE`})};integrations={list:e=>this.request(p(`/admin/integrations`,{agent:e}))};repositories={list:()=>this.request(`/admin/repositories`),refresh:()=>this.post(`/admin/repositories/refresh`,{})};engines={status:()=>this.request(`/admin/engines/status`),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(p(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(p(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t})),remove:e=>this.request(`/admin/apps/${encodeURIComponent(e)}`,{method:`DELETE`}),update:e=>this.post(`/admin/apps/${encodeURIComponent(e)}/update`,{}),drift:e=>this.request(`/admin/apps/${encodeURIComponent(e)}/drift`),create:(e,t)=>this.post(`/admin/apps/create/${encodeURIComponent(e)}`,t),start:(e,t)=>this.post(p(`/create/${encodeURIComponent(e)}`,t)),finish:(e,t)=>this.request(`/create/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)})};operator={apps:()=>this.request(`/admin/operator/apps`),setUp:(e,t)=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}`,t),audit:()=>this.request(`/admin/operator/audit`)};installations={list:(e,t={})=>this.request(p(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}}))};connections={list:(e,t)=>this.request(p(`/admin/connections`,{authorization:e,wait:t})),add:e=>this.post(`/admin/connections`,e),update:(e,t)=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),remove:e=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),authorize:e=>this.post(`/admin/connections/${encodeURIComponent(e)}/authorize`)};config={get:()=>this.request(`/admin/config`),patch:e=>this.request(`/admin/config`,{method:`PATCH`,headers:{"content-type":`application/merge-patch+json`},body:JSON.stringify(e)})};models={list:()=>this.request(`/admin/models`),add:e=>this.post(`/admin/models`,e),probe:e=>this.post(`/admin/models/probe`,e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`DELETE`}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={search:e=>this.request(p(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(p(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(p(`/admin/pulls`,{repo:e}))};review(e){return this.post(`/admin/review`,e)}usage(e={}){return this.request(p(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(p(`/admin/usage`,{installation:e}))}};async function*g(e){let t=new TextDecoder,n=``;for await(let r of e){n+=t.decode(r,{stream:!0});let e;for(;(e=n.indexOf(`
|
|
2
|
-
|
|
3
|
-
`))>=0;){let t=n.slice(0,e);n=n.slice(e+2);let r=`message`,i,a=[];for(let e of t.split(`
|
|
4
|
-
`))e.startsWith(`event: `)?r=e.slice(7):e.startsWith(`data: `)?a.push(e.slice(6)):e.startsWith(`id: `)&&(i=e.slice(4));(a.length||i)&&(yield{event:r,data:a.join(`
|
|
5
|
-
`),...i?{id:i}:{}})}}}function _(){return t(`session.json`)}function v(){try{let e=JSON.parse(c.readFileSync(_(),`utf8`));return Object.fromEntries(Object.entries(e).filter(e=>!!(e[1].token&&e[1].refreshToken&&e[1].user)))}catch{return{}}}function y(){try{return JSON.parse(c.readFileSync(_(),`utf8`))}catch{return{}}}const b=e=>e.replace(/\/+$/,``),x=`https://coder.wular.ai`,S=e=>b((e===!0?void 0:e)??process.env.CODER_SERVER??`https://coder.wular.ai`);function C(e){return f(S(e))}function w(e){let t=b(e);return t===`https://coder.wular.ai`||!!y()[t]}function T(e){let t=y(),n=b(e),r=t[n]??{};O({...t,[n]:{...r,confirmedAt:Date.now()}})}function E(e){return v()[b(e)]}function D(e){let t=y(),n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,{confirmedAt:t.confirmedAt??Date.now()}]));O(Object.fromEntries(Object.entries({...n,...e}).map(([e,n])=>[e,{...n,...t[e]?{confirmedAt:t[e].confirmedAt??Date.now()}:{}}])))}function O(e){let t=_();c.mkdirSync(o.dirname(t),{recursive:!0}),c.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,{mode:384}),c.chmodSync(t,384)}var k=e({PromptCancelled:()=>M,ask:()=>B,askSecret:()=>z,canPrompt:()=>N,openUrl:()=>V,pick:()=>L,pickDetailed:()=>R});function A(e){let t=a()??80;return Math.max(1,Math.ceil(i(e)/t))}const j={tab:[` `],up:[`\x1B[A`,`k`],down:[`\x1B[B`,`j`],enter:[`\r`,`
|
|
6
|
-
`],space:[` `],backspace:[``,`\b`],cancel:[``,`\x1B`]};var M=class extends Error{constructor(){super(`Cancelled.`)}};function N(){return!!(s.stdin.isTTY&&s.stdout.isTTY)}function P(e){let t=[];for(let n=0;n<e.length;)if(e[n]===`\x1B`&&e[n+1]===`[`){let r=n+2;for(;r<e.length&&!/[@-~]/.test(e[r]);)r++;t.push(e.slice(n,r+1)),n=r+1}else t.push(e[n]),n++;return t}const F=[];function I(){return F.length?Promise.resolve(F.shift()):new Promise(e=>{let t=n=>{s.stdin.off(`data`,t);let r=P(n.toString(`utf8`));F.push(...r.slice(1)),e(r[0])};s.stdin.on(`data`,t)})}async function L(e){return(await R(e)).values}async function R(e){let t=r,n=s.stdout,i=Math.max(3,e.window??8),a=new Set(e.selected??[]),o=Math.max(0,e.options.findIndex(e=>a.has(e.value))),c=0,l=``,u=0,d=``,f=new Map(e.options.flatMap(e=>e.input?.value?[[e.value,e.input.value]]:[])),p=!1,m=e.options.some(e=>e.input),h=()=>e.options.filter(e=>!l||e.value.toLowerCase().includes(l.toLowerCase())||(e.label??``).toLowerCase().includes(l.toLowerCase())),g=(r=!1)=>{u&&n.write(`\x1b[${u}A\x1b[J`);let s=h();o=Math.min(o,Math.max(0,s.length-1)),o<c&&(c=o),o>=c+i&&(c=o-i+1);let g=m?` · tab to edit`:``,_=p?`type to edit · enter when done · esc to discard`:e.multi?`↑↓ to move · space to toggle · type to filter${g} · enter to continue · esc to cancel`:`↑↓ to move · type to filter${g} · enter to choose · esc to cancel`,v=[`${t.bold(e.title)} ${t.dim(_)}`];if(r){let r=[...a].map(e=>f.get(e)?`${e} (${f.get(e)})`:e).join(`, `)||`-`;n.write(`${t.green(`✔`)} ${t.bold(e.title)} ${t.cyan(r)}\n\n`),u=0;return}e.hint&&v.push(` ${t.light(e.hint)}`),e.multi&&v.push(` ${t.light(`selected:`)} ${[...a].join(`, `)||t.dim(`none`)}`),l&&v.push(` ${t.light(`filter:`)} ${l}${t.dim(`▏`)}`),s.length||v.push(` ${t.dim(`no matches`)}`),c>0&&v.push(` ${t.dim(`↑ ${c} more`)}`);let y=Math.max(0,...s.map(e=>(e.label??e.value).length));s.slice(c,c+i).forEach((n,r)=>{let i=c+r===o,s=`${e.multi?a.has(n.value)?`◉`:`◯`:i?`●`:`○`} ${(n.label??n.value).padEnd(y)}${n.hint?` ${t.light(n.hint)}`:``}`,l=f.get(n.value)??``,u=n.input&&(l||i&&p)?` ${t.light(`${n.input.label}:`)} ${l}${i&&p?t.dim(`▏`):``}`:n.input&&i&&n.input.placeholder?` ${t.dim(n.input.placeholder)}`:``;v.push(`${i?t.cyan(`❯ `):` `}${i?t.cyan(s):s}${u}`)});let b=s.length-(c+i);b>0&&v.push(` ${t.dim(`↓ ${b} more`)}`),d&&v.push(` ${t.red(d)}`),n.write(`${v.join(`
|
|
7
|
-
`)}\n`),u=v.reduce((e,t)=>e+A(t),0)},_=s.stdin,v=_.isRaw;_.setRawMode(!0),_.resume(),n.write(`\x1B[?25l`);try{for(g();;){let t=await I();d=``;let n=h(),r=n[o];if(p&&r?.input){let e=f.get(r.value)??``;if(j.cancel.includes(t))f.delete(r.value),p=!1;else if(j.enter.includes(t)){let t=e?r.input.validate?.(e):void 0;t?d=t:p=!1}else j.backspace.includes(t)?f.set(r.value,e.slice(0,-1)):t.length===1&&t>=` `&&f.set(r.value,e+t);g();continue}if(j.cancel.includes(t))throw new M;if(j.tab.includes(t)&&r?.input){p=!0,e.multi&&a.add(r.value),g();continue}if(j.up.includes(t)&&!(t===`k`&&l))o=Math.max(0,o-1);else if(j.down.includes(t)&&!(t===`j`&&l))o=Math.min(n.length-1,o+1);else if(j.enter.includes(t))if(!e.multi&&n[o]&&(a.clear(),a.add(n[o].value)),e.required&&!a.size)d=`Pick at least one.`;else{g(!0);let e={};for(let[t,n]of f)n&&a.has(t)&&(e[t]=n);return{values:[...a],inputs:e}}else if(e.multi&&j.space.includes(t)&&n[o]){let e=n[o].value;a.has(e)?a.delete(e):a.add(e)}else j.backspace.includes(t)?l=l.slice(0,-1):t.length===1&&t>=` `&&t!==` `&&(l+=t,o=0,c=0);g()}}finally{n.write(`\x1B[?25h`),_.setRawMode(!!v),_.pause()}}async function z(e){let t=s.stdin;if(!t.isTTY){let e=``;for await(let n of t)e+=n.toString();return e.replace(/\r?\n$/,``)}s.stderr.write(`${r.bold(e)} `),t.setRawMode(!0),t.resume();let n=``;try{for(;;){let e=await I();if(j.cancel.includes(e))throw new M;if(j.enter.includes(e))return n;j.backspace.includes(e)?n=n.slice(0,-1):e.length===1&&e>=` `&&(n+=e)}}finally{t.setRawMode(!1),t.pause(),s.stderr.write(`
|
|
8
|
-
`)}}async function B(e,t=``,n,i){let a=r;i&&s.stdout.write(`${a.bold(e)}\n ${a.light(i)}\n`);let o=(await import(`node:readline/promises`)).createInterface({input:s.stdin,output:s.stdout}),c=i?A(e)+A(` ${i}`):0;try{for(;;){let r=i?` ${t?a.dim(`[${t}] `):``}`:`${a.bold(e)} ${t?a.dim(`[${t}] `):``}`,l=(await o.question(r)).trim()||t;c+=A(`${i?` `:`${e} `}${t?`[${t}] `:``}${l}`);let u=n?.(l);if(!u)return s.stdout.write(`\x1b[${c}A\x1b[J${a.green(`✔`)} ${a.bold(e)} ${a.cyan(l||`-`)}\n\n`),l;s.stdout.write(` ${a.red(u)}\n`),c+=A(` ${u}`)}}finally{o?.close()}}function V(e){let t=s.env.BROWSER;if(t===`none`||s.env.CI||s.env.NODE_ENV===`test`)return!1;let[n,r]=t?s.platform===`darwin`?[`open`,[`-a`,t,e]]:[t,[e]]:s.platform===`darwin`?[`open`,[e]]:s.platform===`win32`?[`cmd`,[`/c`,`start`,``,e]]:[`xdg-open`,[e]];try{return l(n,r,{detached:!0,stdio:`ignore`}).unref(),!0}catch{return!1}}export{d as _,L as a,x as c,E as d,v as f,h as g,D as h,V as i,w as l,C as m,B as n,R as o,_ as p,N as r,k as s,M as t,T as u,g as v};
|
package/dist/refresh-CxsaX5R9.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{On as e}from"./errors-DO_IltpP.js";import{X as t}from"./output-SNqdgh9A.js";import{command as n}from"./cli.js";const r=n({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>t(e())});export{r as commandRefreshUpdate};
|
package/dist/remote-C9Hj2cby.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{n as t}from"./log-view-CfX9lakH.js";var n=e({iso:()=>r,remoteAnswer:()=>u,remoteApprovals:()=>c,remoteResult:()=>o,remoteStep:()=>d,remoteTask:()=>s,remoteTurns:()=>l,replyOf:()=>i});const r=e=>e===void 0?void 0:new Date(e).toISOString();function i(e){let t=(e??``).trim().split(`
|
|
2
|
-
`);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n.startsWith(`{`))try{let e=JSON.parse(n).reply;return typeof e==`string`?e:void 0}catch{return}}}function a(e,t,n,r){if(e?.trimStart().startsWith(`{`))try{let t=JSON.parse(e);if(t&&typeof t.status==`number`&&`threadId`in t)return{...t,error:t.error??(n?{message:n}:null),tokens:t.tokens??r??null}}catch{}let a=i(e)??e;return{status:+!t,threadId:null,...a?{finalMessage:a}:{},error:n?{message:n}:null,tokens:r??null}}function o(e){return e.result?a(e.result.output,e.result.ok,e.error,e.tokens):null}function s(e){let{task:t}=e;return{id:t.id,createdAt:r(e.createdAt),updatedAt:r(e.updatedAt),status:e.status===`waiting`?`running`:e.status,name:t.name??null,engine:t.usage?.engine??t.definition?.engine,prompt:t.prompt??t.event?.text,model:o(e)?.model??t.usage?.model??t.definition?.model??null,effort:t.usage?.effort??null,...t.permissions?{permissions:t.permissions}:{},...t.cwd?{cwd:t.cwd}:{},...t.appendSystem?{appendSystem:t.appendSystem}:{},...t.addDirs?.length?{addDirs:t.addDirs}:{},...e.finishedAt===void 0?{}:{completedAt:r(e.finishedAt)},...e.error?{error:e.error}:{},archived:e.archivedAt!==void 0,...e.archivedAt===void 0?{}:{archivedAt:r(e.archivedAt)},agentId:t.agent,source:t.source}}function c(e){let t=e.approval;return(e.approvals??(t?.id?[t]:[])).map(e=>({id:e.id,reason:e.reason,actions:e.actions,createdAt:e.createdAt,answered:e.response?.decision??null,deniedReason:e.response?.decision===`decline`?e.response.reason??null:null}))}function l(e){return(e.turns??[]).filter(e=>e.finishedAt!==void 0).map(e=>{let t=typeof e.result==`string`?{ok:!0,output:e.result}:e.result;return{at:r(e.finishedAt),prompt:e.prompt,...a(t?.output,t?.ok??!e.error,e.error,void 0)}})}function u(e){let t=s(e),n=o(e);return{taskId:t.id,name:t.name??null,status:e.status,engine:t.engine??null,model:t.model??null,finalMessage:n?.finalMessage??null,error:n?.error?.message??t.error??null,tokens:n?.tokens??null,pendingApprovals:c(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n}))}}function d(e){return{...e.entry??t(e.line)??{kind:e.level===`err`?`error`:`info`,message:e.line},at:e.entry?.at??new Date(e.at).toISOString()}}export{s as a,d as i,c as n,l as o,o as r,n as s,r as t};
|
package/dist/remote-HUZCWgfl.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Or as t}from"./errors-DO_IltpP.js";import{Dt as n}from"./output-SNqdgh9A.js";import{_ as r,d as i,f as a,g as o,h as s,i as c,l,m as u,p as d,u as f}from"./prompt-CIx4jwQF.js";import{o as p}from"./load-BDlEFetB.js";import{t as m}from"./integrations-I7fRDk_l.js";import{_t as h,a as g,c as _,f as ee,h as te,i as ne,l as re,m as v,p as y,r as b,s as x,t as ie,u as ae,vt as S}from"./build-CmtlB7pX.js";import C from"node:path";import w from"node:process";import{execFile as T}from"node:child_process";import{createHash as E}from"node:crypto";import D from"node:http";import O from"node:fs/promises";import{promisify as oe}from"node:util";const se={"**/":`(?:.*/)?`,"/**":`/.*`,"**":`.*`,"*":`[^/]*`,"?":`[^/]`};function ce(e){return e.split(/\r?\n/).flatMap(e=>{let t=e.trimEnd();if(!t||t.startsWith(`#`))return[];let n=t.startsWith(`!`);n&&(t=t.slice(1));let r=t.endsWith(`/`);r&&(t=t.slice(0,-1));let i=t.replace(/^\//,``).replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*\/|\/\*\*$|\*\*|\*|\?/g,e=>se[e]),a=t.includes(`/`);return[{pattern:RegExp(a?`^${i}$`:`^(?:.*/)?${i}$`),negate:n,directory:r}]})}const k=(e,t,n)=>e.reduce((e,r)=>(!r.directory||n)&&r.pattern.test(t)?!r.negate:e,!1);async function A(e,t,n=``){let r=[];for(let i of await O.readdir(C.join(e,n),{withFileTypes:!0})){let a=n?`${n}/${i.name}`:i.name;i.isDirectory()&&!k(t,a,!0)?r.push(...await A(e,t,a)):i.isFile()&&!k(t,a,!1)&&r.push(a)}return r}async function le(e){return(await oe(T)(`git`,[`-C`,e,`ls-files`,`--cached`,`--others`,`--exclude-standard`,`-z`,`--`,`.`],{maxBuffer:67108864}).catch(()=>void 0))?.stdout.split(`\0`).filter(Boolean)}async function ue(e){let t=await le(e)??await A(e,ce(await O.readFile(C.join(e,`.gitignore`),`utf8`).catch(()=>``))),n={};for(let r of t){if(r===`agent.json`||r===`system.md`)continue;let t=C.join(e,r);(await O.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await O.readFile(t,`utf8`))}return n}var j=e({deviceSignIn:()=>z,hasBrowser:()=>de,logoutSession:()=>W,loopbackSignIn:()=>R,refreshSignIn:()=>B,revokeSignIn:()=>V,selectLoginOrganization:()=>H,sessions:()=>G,signIn:()=>U});const M=`openid profile email offline_access organizations:read`,N=e=>`<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>Coder · ${e}</title>
|
|
2
|
-
<style>:root{color-scheme:light dark}body{margin:0;min-height:100vh;display:grid;place-items:center;font:15px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;background:light-dark(#fafafa,#111);color:light-dark(#111,#eee)}main{text-align:center;padding:32px}h1{margin:0 0 8px;font-size:20px}p{margin:0;opacity:.7}</style>
|
|
3
|
-
<main><h1>${e}</h1><p>You can close this tab and return to the terminal.</p></main>`,P=e=>`${e}/.well-known/oauth-cli-client.json`;async function F(e,t){let r=new URL(e).origin,i=await fetch(`${r}/.well-known/oauth-protected-resource`).catch(t=>{throw new n(`login-failed`,`No Coder server answers at ${e}: ${t.message}`)}),a=await i.json().catch(()=>({})),o=Array.isArray(a.authorization_servers)?a.authorization_servers[0]:void 0;if(!i.ok||a.resource!==r||typeof o!=`string`)throw new n(`login-failed`,`${e} does not offer sign-in.`,{hint:`Sign-in needs a Postgres-backed server; see coder docs self-host`});if(t!==void 0&&o!==t)throw new n(`login-failed`,`The server's sign-in issuer has changed. Sign in again before using this session.`);return{config:await _(new URL(o),P(e),void 0,ie(),new URL(o).protocol===`http:`?{execute:[b]}:void 0).catch(e=>{throw new n(`login-failed`,`Wular Auth at ${o} did not answer: ${e.message}`)}),resource:r}}function I(e,t,r){let i=t.claims(),a=t.refresh_token??r?.refreshToken;if(!a)throw new n(`login-failed`,`Wular Auth returned no refresh token.`);return{token:t.access_token,refreshToken:a,expiresAt:Date.now()+(t.expires_in??600)*1e3,issuer:e.serverMetadata().issuer,user:i?{name:typeof i.name==`string`?i.name:``,email:typeof i.email==`string`?i.email:``}:r?.user??{name:``,email:``}}}const L=e=>new n(`login-failed`,e instanceof S||e instanceof h?e.error===`access_denied`?`Sign-in was denied in the browser.`:e.error_description??e.error:e instanceof Error?e.message:String(e));async function R(e,t){let{config:r,resource:i}=await F(e),a=ee(),o=y(),s=D.createServer();await new Promise(e=>s.listen(0,`127.0.0.1`,e));let{port:c}=s.address(),l=`http://127.0.0.1:${c}/callback`;try{let e=new Promise((e,t)=>{let r=setTimeout(()=>t(new n(`login-failed`,`Sign-in timed out.`)),3e5);s.on(`request`,(t,n)=>{let i=new URL(t.url??`/`,l);if(i.pathname!==`/callback`||i.searchParams.get(`state`)!==o){n.writeHead(404).end();return}n.writeHead(200,{"content-type":`text/html; charset=utf-8`}).end(N(i.searchParams.has(`error`)?`Sign-in failed`:`Signed in`)),clearTimeout(r),e(i)})});return t(g(r,{redirect_uri:l,scope:M,resource:i,code_challenge:await x(a),code_challenge_method:`S256`,state:o}).href),I(r,await ne(r,await e,{pkceCodeVerifier:a,expectedState:o},{resource:i}).catch(e=>{throw L(e)}))}finally{s.close(),s.closeAllConnections()}}async function z(e,t){let{config:n,resource:r}=await F(e);try{let e=await re(n,{scope:M,resource:r});return t(e.user_code,e.verification_uri_complete??e.verification_uri),I(n,await ae(n,e,{resource:r}))}catch(e){throw L(e)}}async function B(e,t){let{config:r,resource:i}=await F(e,t.issuer);try{return I(r,await v(r,t.refreshToken,{resource:i}),t)}catch(e){if(e instanceof S&&(e.error===`invalid_grant`||e.error===`invalid_client`))return;throw new n(`server`,`Wular Auth did not refresh the session: ${e instanceof Error?e.message:String(e)}`)}}async function V(e,t){let{config:n}=await F(e,t.issuer);n.serverMetadata().revocation_endpoint&&await te(n,t.refreshToken,{token_type_hint:`refresh_token`})}async function H(e,t,r){if(!e.length)throw new n(`login-failed`,`This account belongs to no workspace.`);if(t){let r=e.find(e=>e.slug===t);if(!r)throw new n(`login-failed`,`You are not a member of workspace "${t}".`);return r}if(e.length<=1)return e[0];if(!r)throw new n(`login-failed`,`Choose a workspace for this server.`,{hint:`Pass --workspace <slug>.`});let i=await r(e);return e.find(e=>e.slug===i)}const de=()=>!w.env.SSH_CONNECTION&&(w.platform!==`linux`||!!(w.env.DISPLAY||w.env.WAYLAND_DISPLAY));async function U(e,t={}){let r=t.device?await z(e,t.onCode??(()=>{})):await R(e,t.open??c),i=await fetch(`${e}/me`,{headers:{authorization:`Bearer ${r.token}`}}).catch(t=>{throw new n(`login-failed`,`No Coder server answers at ${e}: ${t.message}`)}),a=await i.json().catch(()=>({}));if(!i.ok)throw new n(`login-failed`,`Signed in, but the server refused the token.`);let o=await H(a.organizations??[],t.organization,t.chooseOrganization);return{...r,...o?{organization:o}:{},at:Date.now()}}async function W(e){let t=a(),r=t[e];if(!r)throw new n(`login-failed`,`Not signed in to ${e}.`);return await V(e,r).catch(()=>void 0),delete t[e],s(t),{ok:!0,server:e}}const G={async login(e={}){let t=K(e),n=await U(t,e);return e.save!==!1&&s({...a(),[t]:n}),{...n,server:t}},logout:(e={})=>W(K(e)),status:()=>Object.fromEntries(Object.entries(a()).map(([e,t])=>[e,{user:t.user,organization:t.organization,at:t.at}]))};function fe(e,n){let r=n,i;return{expiresAt:()=>r.expiresAt,async renew(){return i||=t(`${d()}.${E(`sha256`).update(e).digest(`hex`)}.lock`,()=>pe(e,r)).finally(()=>{i=void 0}),r=await i,r.token}}}async function pe(e,t){let r=e=>e&&e.refreshToken!==t.refreshToken?e:void 0,i=r(a()[e]);if(i&&i.expiresAt>t.expiresAt)return i;let o=await B(e,t),c=a();if(o){let n={...t,...o};return s({...c,[e]:n}),n}let l=r(c[e]);if(l)return l;throw delete c[e],s(c),new n(`login-failed`,`Signed out of ${e}.`,{hint:`Sign in again: coder auth login`})}var me=e({addCredential:()=>Z,coderClient:()=>J,connect:()=>q,credentials:()=>$,loginCredential:()=>Q,pushAgents:()=>Y,serverFor:()=>K});function K(e={}){let t=u(e.server);if(!l(t)){if(!e.yes)throw new n(`invalid-option`,`First use of Coder server ${new URL(t).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});f(t)}return t}function q(e={}){let t=K(e);return J(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function J(e,{token:t,missingHint:a,organization:s}={}){let c=u(e),l=i(c),d=l?.token,f=w.env.ADMIN_TOKEN,p=t??d??f;if(p&&p===f&&!r(c))throw new n(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!p)throw new n(`login-failed`,`Not signed in to ${c}.`,{...a?{hint:a}:{}});return new o(c,{token:p},{organization:s??l?.organization?.slug,renewal:l&&p===d?fe(c,l):void 0})}async function Y(e,t,r){let i=(await p(t,m)).filter(e=>!e.builtin),a=r?i.filter(e=>e.id===r):i;if(r&&!a.length)throw new n(`invalid-option`,`No workspace agent named "${r}".`);let o=[];for(let t of a)o.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await O.readFile(C.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await ue(t.dir),name:t.name,description:t.definition.description}));return o}const he=/^[A-Z_][A-Z0-9_]*$/,X=(e,t)=>new n(`invalid-option`,e,t?{hint:t}:{});async function ge(){let e=``;for await(let t of w.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function Z(e){let t=e.env;if(!t)throw X(`Missing required --env NAME.`,`Like --env ANTHROPIC_API_KEY`);if(!he.test(t))throw X(`Invalid environment variable name ${JSON.stringify(t)}.`);let n=e.value===`-`?await ge():e.value??w.env[t];if(!n)throw X(`Environment variable ${t} is not set.`);return q(e).credentials.add({env:{[t]:n},workspace:e.workspace,noCheck:e.noCheck})}async function Q(e,t={}){if(e!==`claude`&&e!==`codex`)throw X(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=q(t).credentials,r=await n.login(e);t.onStart?.(()=>n.cancelLogin(r.id));let i=async e=>{for(;!e(r.state);)r=await n.loginStatus(r.id,r.state)};return await i(e=>e!==`starting`),t.onOpen?.(r),e===`claude`&&r.state===`open`&&t.code&&await n.loginCode(r.id,await t.code()),await i(e=>e===`done`||e===`failed`),r}const $={list:(e={})=>q(e).credentials.list(),add:Z,remove:(e,t={})=>q(t).credentials.remove(e,t),login:Q};export{K as a,me as i,$ as n,G as o,Y as r,j as s,q as t};
|
package/dist/runner-DYysY1-G.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Dt as t}from"./output-SNqdgh9A.js";import{t as n}from"./remote-HUZCWgfl.js";import{t as r}from"./serve-NQykWAKV.js";var i=e({addRunner:()=>o,addRunnerFields:()=>d,listRunners:()=>a,pairRunner:()=>s,removeRunner:()=>u,runners:()=>f,testRunner:()=>l,updateRunner:()=>c});const a=(e={})=>n(e).runners.list(),o=(e,t={})=>n(t).runners.add(e),s=(e,t={})=>n(t).runners.pair(e),c=(e,t,r={})=>n(r).runners.update(e,t),l=(e,t={})=>n(t).runners.test(e),u=(e,t={})=>n(t).runners.remove(e);async function d(e,r){let i=n(r),{catalog:a}=await i.runners.list(),o=a.find(t=>t.kind===e);if(!o)throw new t(`invalid-option`,`Unknown runner kind.`);if(!o.available)throw new t(`invalid-option`,o.reason??`Runner unavailable.`);let s={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),i=e.slice(n+1),a=o.fields.find(e=>e.key===r);if(!a)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(a.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(i)||!process.env[i.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);s[r]=process.env[i.slice(4)]}else s[r]=i}let c=r.scope??((await i.me()).user?`personal`:`workspace`);if(c!==`personal`&&c!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return o.connect===`pair`?i.runners.pair({name:r.name,scope:c}):i.runners.add({kind:o.kind,name:r.name??o.name,scope:c,config:s})}const f={list:a,add:o,pair:s,update:c,default:(e,t={})=>c(e,{default:!0},t),test:l,rename:(e,t,n={})=>c(e,{name:t},n),remove:u,serve:r};export{f as n,i as t};
|
package/dist/runners-CfaGE0nV.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import{Rt as e,qi as t}from"./core-DwsAMCnL.js";import{En as n,Nt as r,_r as i,dr as a,mr as o}from"./errors-DO_IltpP.js";import{m as s}from"./slack-BtKvW_4v.js";import{t as c}from"./integrations-I7fRDk_l.js";import{n as l,t as u}from"./task-iuYQ0zAK.js";import{n as d,t as ee}from"./base64url-CsVsW4Id.js";import{_ as te,g as f,h as ne,l as p}from"./http-Cg8PSe-c.js";import m from"node:path";import h from"node:process";import{existsSync as g,readFileSync as re}from"node:fs";import{execFile as ie}from"node:child_process";import{createCipheriv as _,createDecipheriv as v,createHash as ae,createHmac as oe,randomBytes as y,randomUUID as b}from"node:crypto";import x,{isIP as S}from"node:net";import{readFile as se}from"node:fs/promises";import{lookup as ce}from"node:dns/promises";import{request as le}from"node:https";const ue=a({env:o(i(),i().check(e(1)))}),C=`plain`;function w(e,t=`SERVER_ENCRYPTION_KEY`){if(!e)return;let n=Buffer.from(e,`base64`);if(n.length!==32)throw Error(`${t} must be a base64-encoded 32-byte key`);return n}function T(e){return w(e.encryptionKey)}function E(e){let t=w(e);return t?ae(`sha256`).update(t).digest().readInt32BE(0):0}function D(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:w(e,t),version:E(e)}))}function O(e){let t=ue.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function de(e,t){let n=T(e);if(!n)return{iv:C,tag:``,ciphertext:Buffer.from(JSON.stringify(O(t))).toString(`base64`)};let r=y(12),i=_(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(O(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function fe(e,t){if(t.iv===C)return O(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of D(e))try{let e=v(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),O(JSON.parse(Buffer.concat([e.update(Buffer.from(t.ciphertext,`base64`)),e.final()]).toString(`utf8`)))}catch{}throw Error(`Stored credential was sealed with an unavailable encryption key`)}function pe(e,t){let n=T(e);if(!n)return`${C}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=y(12),i=_(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(t),`utf8`),i.final()]);return[r,i.getAuthTag(),a].map(e=>e.toString(`base64`)).join(`.`)}function k(e,t){if(t.startsWith(`${C}.`))return JSON.parse(Buffer.from(t.slice(6),`base64`).toString(`utf8`));let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=v(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),JSON.parse(Buffer.concat([e.update(i),e.final()]).toString(`utf8`))}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function me(e,t){if(t.startsWith(`${C}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=v(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),e.update(i),e.final(),t.version}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function he(e,t,n={}){let r=`coder-${e.id.replace(/[^a-zA-Z0-9_.-]/g,`-`).slice(0,48)}-${Date.now()}`;t={...t,CODER_RUNNER_IMAGE:n.image??`ghcr.io/muzam1l/coder-runner:latest`,CODER_RUNNER_TARBALL_URL:U(t.CODER_SERVER)};let i=Object.keys(t).flatMap(e=>[`-e`,e]);return{args:[`run`,`-d`,`--name`,r,`--memory`,String(n.memory??`4g`),`--cpus`,String(n.cpus??2),`--pids-limit`,String(n.pidsLimit??512),`--network`,n.network??`bridge`,...i,n.image??`ghcr.io/muzam1l/coder-runner:latest`,`sh`,`-c`,G(``,`for binary in node bun git curl tar claude codex github-mcp-server; do command -v "$binary" >/dev/null 2>&1 || { printf "Docker image %s is missing required binary %s\\n" "$CODER_RUNNER_IMAGE" "$binary"; exit 127; }; done`),`coder-task`,e.id,W],env:t}}var ge=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=he(e,{...t,CODER_INBOX_SOCKET:l},this.options),r=await f(`docker`,n.args,{PATH:h.env.PATH??``,...n.env});if(r.code!==0)throw Error(r.stderr.trim()||`docker run failed`);return r.stdout.trim()}async status(e){let t=await f(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:h.env.PATH??``});if(t.code!==0)return{state:`exited`};let[n,r]=t.stdout.trim().split(/\s+/);return n===`true`?{state:`running`}:{state:`exited`,code:Number(r)||0}}async stop(e){await f(`docker`,[`rm`,`-f`,e],{PATH:h.env.PATH??``})}async push(e,t){let n=await f(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,u],{PATH:h.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}},_e=t({GithubActionsRunner:()=>M,actionsWorkflow:()=>A});function A(){return`name: Coder agent
|
|
2
|
-
run-name: Coder agent \${{ inputs.task }}
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
inputs:
|
|
6
|
-
task: { required: true, type: string }
|
|
7
|
-
server: { required: true, type: string }
|
|
8
|
-
token: { required: true, type: string }
|
|
9
|
-
mode: { required: true, type: string }
|
|
10
|
-
tarball: { required: true, type: string }
|
|
11
|
-
jobs:
|
|
12
|
-
run:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
container: ${V}
|
|
15
|
-
steps:
|
|
16
|
-
- run: |
|
|
17
|
-
sh -c '${G().replaceAll(`'`,`'\\''`)}' coder-task "$TASK" '${W.replaceAll(`'`,`'\\''`).trim().replaceAll(`
|
|
18
|
-
`,` `)}'
|
|
19
|
-
env:
|
|
20
|
-
TASK: \${{ inputs.task }}
|
|
21
|
-
CODER_SERVER: \${{ inputs.server }}
|
|
22
|
-
CODER_TASK_TOKEN: \${{ inputs.token }}
|
|
23
|
-
CODER_INBOX_MODE: \${{ inputs.mode }}
|
|
24
|
-
CODER_RUNNER_TARBALL_URL: \${{ inputs.tarball }}
|
|
25
|
-
`}const j=e=>ee(e);var M=class{options;kind=`github-actions`;fetcher;constructor(e={}){this.options=e,this.fetcher=e.fetch??fetch}async request(e,t={},n=1e4){if(!this.options.token)throw Error(`RUNNER_CONFIG.token is required for github-actions`);let r=AbortSignal.timeout(n);for(let n=0;;n++){let i=await this.fetcher(`https://api.github.com${e}`,{...t,signal:r,redirect:`manual`,headers:{accept:`application/vnd.github+json`,authorization:`Bearer ${this.options.token}`,"content-type":`application/json`,"user-agent":`coder`,"x-github-api-version":`2022-11-28`,...t.headers}});if((t.method??`GET`)!==`GET`||n===2||i.status!==429&&i.status<500)return i;let a=Number(i.headers.get(`retry-after`));await i.body?.cancel(),await new Promise((e,t)=>{let i=()=>{clearTimeout(s),r.removeEventListener(`abort`,o)},o=()=>{i(),t(r.reason)},s=setTimeout(()=>{i(),e()},Number.isFinite(a)&&a>0?a*1e3:100*2**n);r.addEventListener(`abort`,o,{once:!0}),r.aborted&&o()})}}async start(e,t){let n=this.options.repo??(e.event?.repo&&`${e.event.repo.owner}/${e.event.repo.name}`);if(!n)throw Error(`The github-actions runner requires a repository`);let r=Date.now()+(this.options.lookupTimeoutMs??25e3),i=encodeURIComponent(this.options.workflow??`coder-agent.yml`),a=e.event?.repo,o=this.options.ref??(a&&`${a.owner}/${a.name}`===n?a.defaultBranch:void 0);if(!o){let e=await this.request(`/repos/${n}`,{},Math.max(1,r-Date.now()));if(!e.ok)throw Error(`GitHub repository lookup failed: ${e.status}`);let t=await e.json();if(!t.default_branch)throw Error(`GitHub repository has no default branch`);o=t.default_branch}let s=await this.request(`/repos/${n}/actions/workflows/${i}/dispatches`,{method:`POST`,headers:{"x-github-api-version":`2026-03-10`},body:JSON.stringify({ref:o,inputs:{task:e.id,server:t.CODER_SERVER,token:t.CODER_TASK_TOKEN,mode:t.CODER_INBOX_MODE,tarball:U(t.CODER_SERVER)}})},Math.max(1,r-Date.now()));if(s.status!==200)throw Error(`GitHub workflow dispatch failed: ${s.status}`);let c=await s.json();if(!Number.isSafeInteger(c.workflow_run_id)||c.workflow_run_id<=0)throw Error(`GitHub workflow dispatch returned no run id`);return d({repo:n,run:c.workflow_run_id})}async status(e){let{repo:t,run:n}=j(e),r=await this.request(`/repos/${t}/actions/runs/${n}`);if(r.status===404)return{state:`exited`,code:1};if(!r.ok)throw Error(`GitHub workflow status failed: ${r.status}`);let i=await r.json();return i.status===`completed`?{state:`exited`,code:i.conclusion===`success`?0:1}:{state:`running`}}async stop(e){let{repo:t,run:n}=j(e),r=await this.request(`/repos/${t}/actions/runs/${n}/cancel`,{method:`POST`});if(r.status!==202&&r.status!==409)throw Error(`GitHub workflow cancellation failed: ${r.status}`)}};function ve(e){if(!S(e))return!0;if(S(e)===6){let t=new URL(`https://[${e}]/`).hostname.slice(1,-1).split(`::`),n=t[0]?t[0].split(`:`):[],r=t[1]?t[1].split(`:`):[],i=[...n,...Array(8-n.length-r.length).fill(`0`),...r].map(e=>parseInt(e,16));if(i.every(e=>e===0)||i.slice(0,7).every(e=>e===0)&&i[7]===1||(i[0]&65024)==64512||(i[0]&65472)==65152||(i[0]&65280)==65280)return!0;let a;if(i.slice(0,5).every(e=>e===0)&&(i[5]===0||i[5]===65535))a=i.slice(6);else if(i.slice(0,4).every(e=>e===0)&&i[4]===65535&&i[5]===0)a=i.slice(6);else if((i[4]===0||i[4]===512)&&i[5]===24318)a=i.slice(6);else if(i[0]===100&&i[1]===65435&&i.slice(2,6).every(e=>e===0))a=i.slice(6);else if(i[0]===8194)a=i.slice(1,3);else if(i[0]===8193&&(i[1]===0||i[1]===3512)||i[0]===100&&i[1]===65435&&i[2]===1)return!0;if(!a)return!1;e=a.flatMap(e=>[e>>8,e&255]).join(`.`)}let t=e.split(`.`).map(Number);return t[0]===0||t[0]===10||t[0]===127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168||t[0]===192&&t[1]===0&&(t[2]===0||t[2]===2)||t[0]===198&&t[1]>=18&&t[1]<=19||t[0]===198&&t[1]===51&&t[2]===100||t[0]===203&&t[1]===0&&t[2]===113||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]>=224}var N=class{options;kind=`http`;base;fetcher;resolver;constructor(e){if(this.options=e,!e?.url)throw Error(`The http runner requires RUNNER_CONFIG.url`);if(this.base=new URL(`${e.url.replace(/\/+$/,``)}/`),this.base.protocol!==`https:`)throw Error(`The http runner requires an HTTPS URL`);if(this.base.username||this.base.password)throw Error(`The http runner URL cannot contain credentials`);if(!e.secret)throw Error(`RUNNER_CONFIG.secret is required for the http runner`);this.fetcher=e.fetch,this.resolver=e.lookup??ce}async safe(){let e=this.base.hostname.replace(/^\[|\]$/g,``),t=S(e)?[{address:e,family:S(e)}]:await this.resolver(e,{all:!0});if(!t.length)throw Error(`The http runner resolved no address`);if(t.some(e=>ve(e.address)))throw Error(`The http runner refuses private and metadata addresses`);return t[0]}send(e,t,n){return this.fetcher?this.fetcher(e,t):new Promise((r,i)=>{let a=(this.options.request??le)(e,{method:t.method,headers:t.headers,signal:t.signal??void 0,agent:!1,lookup:(e,t,r)=>{t.all?r(null,[n]):r(null,n.address,n.family)}},e=>{let t=[];e.on(`data`,e=>t.push(Buffer.from(e))),e.on(`error`,i),e.on(`end`,()=>r(new Response(e.statusCode===204?null:Buffer.concat(t),{status:e.statusCode})))});a.on(`error`,i),a.end(t.body)})}async request(e,t=`GET`,n,r){let i=await this.safe(),a=n===void 0?``:JSON.stringify(n),o=String(Date.now()),s=y(16).toString(`base64url`),c=oe(`sha256`,this.options.secret).update(`${a}.${o}.${s}`).digest(`base64url`),l=await this.send(new URL(e.replace(/^\//,``),this.base),{method:t,redirect:`manual`,headers:{...this.options.headers,"content-type":`application/json`,"x-coder-timestamp":o,"x-coder-nonce":s,"x-coder-signature":c},...a?{body:a}:{},signal:r??AbortSignal.timeout(e===`/start`?3e4:1e4)},i);if(l.status>=300&&l.status<400)throw Error(`The http runner refuses redirects`);if(!l.ok)throw Error(`HTTP runner request failed: ${l.status}`);if(l.status===204)return;let u=await l.text();return u?JSON.parse(u):void 0}health(e){return this.request(`/health`,`GET`,void 0,e)}async start(e,t){let n=await this.request(`/start`,`POST`,{task:e.id,env:t});if(!n.handle)throw Error(`HTTP runner returned no handle`);return n.handle}status(e){return this.request(`/status/${encodeURIComponent(e)}`)}async stop(e){await this.request(`/stop/${encodeURIComponent(e)}`,`POST`,{})}push(e,t){return this.request(`/messages/${encodeURIComponent(e)}`,`POST`,{entries:t})}};const P=e=>ee(e),F=18e5,I=864e5,ye={"eu-north-1":`arn1`,"ap-south-1":`bom1`,"eu-west-3":`cdg1`,"us-east-2":`cle1`,"af-south-1":`cpt1`,"eu-west-1":`dub1`,"eu-central-1":`fra1`,"sa-east-1":`gru1`,"ap-east-1":`hkg1`,"ap-northeast-1":`hnd1`,"us-east-1":`iad1`,"ap-northeast-2":`icn1`,"ap-northeast-3":`kix1`,"eu-west-2":`lhr1`,"us-west-2":`pdx1`,"us-west-1":`sfo1`,"ap-southeast-1":`sin1`,"ap-southeast-2":`syd1`,"ca-central-1":`yul1`};function be(e){if(!e)return;let t=(()=>{try{return new URL(e).hostname}catch{return``}})();return Object.entries(ye).find(([e])=>t.includes(e))?.[1]}const L=[{name:`ANTHROPIC_API_KEY`,host:`api.anthropic.com`,header:`x-api-key`,prefix:``},{name:`OPENAI_API_KEY`,host:`api.openai.com`,header:`authorization`,prefix:`Bearer `}],xe=`brokered`,R={claude:{api:`api.anthropic.com`,account:[`claude.ai`,`platform.claude.com`]},codex:{api:`api.openai.com`,account:[`auth.openai.com`,`chatgpt.com`]}};function Se(e,t){let n=R[e],r=t.CLAUDE_CODE_OAUTH_TOKEN||t.CODEX_AUTH_JSON,i=[t.ANTHROPIC_BASE_URL,t.OPENAI_BASE_URL].filter(e=>e&&URL.canParse(e));return[...n?[n.api,...r?n.account:[]]:[],...i.map(e=>new URL(e).hostname)]}function Ce(e={},t,n=L){let r={};for(let t of n)e[t.name]&&((r[t.host]??={})[t.header]=`${t.prefix}${e[t.name]}`);let i=Object.entries(r).map(([e,t])=>[e,[{transform:[{headers:t}]}]]);if(!t)return i.length?{allow:{...Object.fromEntries(i),"*":[]}}:void 0;let a=[...new Set(t.filter(e=>x.isIP(e)))],o=t.filter(e=>!x.isIP(e)).map(e=>[e,[]]);return{allow:{...Object.fromEntries(o),...Object.fromEntries(i)},...a.length?{subnets:{allow:a.map(e=>`${e}/${x.isIPv6(e)?128:32}`)}}:{}}}function we(e){return[...[e.CODER_SERVER,e.CODER_RUNNER_TARBALL_URL].filter(e=>e&&URL.canParse(e)).map(e=>new URL(e).hostname),...Object.values(c).flatMap(e=>e.tools.installHosts??[])]}function Te(e,t,n){return Ce(t,n.hosts&&[...we(e),...n.hosts],n.brokered)}async function Ee(){try{let{Sandbox:e,Snapshot:t}=await import(`@vercel/sandbox`);return{create:t=>e.create(t),get:t=>e.get(t),deleteSnapshot:async e=>(await t.get(e)).delete()}}catch{throw Error(`The vercel-sandbox runner requires @vercel/sandbox in the adapter app.`)}}function z(e){return e&&typeof e==`object`&&`response`in e&&e.response instanceof Response?e.response.status:void 0}function De(e){if(z(e)!==410||!e||typeof e!=`object`||!(`json`in e))return!1;let t=e.json;if(!t||typeof t!=`object`||!(`error`in t))return!1;let n=t.error;return!!n&&typeof n==`object`&&`code`in n&&n.code===`snapshot_not_found`}var B=class extends Error{snapshotId;constructor(e,t,n){super(e,n),this.snapshotId=t}},Oe=class{options;kind=`vercel-sandbox`;sandboxes=new Map;constructor(e={}){this.options=e}api(){return this.options.sandbox?Promise.resolve(this.options.sandbox):Ee()}async sandbox(e){for(let[e,t]of this.sandboxes)t.expiresAt<=this.now()&&this.sandboxes.delete(e);return this.sandboxes.get(e)?.sandbox??(await this.api()).get({...this.auth(),name:e})}now(){return(this.options.now??Date.now)()}auth(){return{...this.options.token?{token:this.options.token,projectId:this.options.projectId??process.env.VERCEL_PROJECT_ID,teamId:this.options.team??process.env.VERCEL_TEAM_ID}:{}}}base(e){return{...e?{source:{type:`snapshot`,snapshotId:e}}:this.options.image?{image:this.options.image}:{},...this.options.region?{region:this.options.region}:{},...this.auth(),resources:{vcpus:this.options.vcpus??1},persistent:!1}}snapshotKey(e){let t=e.event?.repo;if(!t)return;let n=[H(),this.options.image??null,e.event.appId,e.event.installationId,t.owner,t.name];return`repo:${this.options.region??``}:${s(JSON.stringify(n))}`}async stopSandbox(e){try{await e.stop()}finally{this.sandboxes.delete(e.name)}}async withSandbox(e,t){let n;try{if(n=typeof e==`string`?await this.sandbox(e):e,n.status!==`running`&&n.status!==`pending`)throw new B(`Vercel Sandbox ${n.name} is ${n.status}`);return await t(n)}catch(t){let r=z(t);throw(r===404||r===410)&&typeof e==`string`&&this.sandboxes.delete(e),r===410||!n&&typeof e==`string`&&r===404?new B(t instanceof Error?t.message:`Vercel Sandbox expired`,void 0,{cause:t}):t}}withSnapshotLock(e,t){let n=this.options.snapshots;return n.withLock?n.withLock(e,t):t(n)}async finalizeSnapshot(e,t){let n=this.now(),r=b(),i=await this.withSnapshotLock(e,async i=>{let a=await i.get(e)??{};if(!a.build||a.lease&&a.lease.expiresAt>n||t?.build&&(a.build.sandbox!==t.build.sandbox||a.build.command!==t.build.command||a.build.startedAt!==t.build.startedAt))return a;let o={...a,lease:{owner:r,expiresAt:n+F}};return await i.put(e,o),o});if(i.lease?.owner!==r||!i.build)return i;let{build:a,lease:o,...s}=i,c={...s,build:a};try{c=await this.withSandbox(a.sandbox,async e=>{let t=await e.getCommand(a.command);if(t.exitCode===null&&n-a.startedAt<F)return c;if(t.exitCode===0){let r=/^coder-snapshot (\S+)$/m.exec(await t.stdout())?.[1];if(r&&r===i.sha)return await this.stopSandbox(e).catch(()=>{}),{...s,checkedAt:n};let a=await e.snapshot({expiration:I});return this.sandboxes.delete(e.name),{...s,snapshotId:a.snapshotId,...r?{sha:r}:{},checkedAt:n}}return await this.stopSandbox(e).catch(()=>{}),{...s,failedAt:n}})}catch(t){if(t instanceof B){let{failedAt:e,...t}=s;c=t}else console.error(`coder server: snapshot ${e} failed; tasks start without a new one`,t),await this.withSandbox(a.sandbox,e=>this.stopSandbox(e)).catch(()=>{}),c={...s,failedAt:n}}let l=await this.withSnapshotLock(e,async t=>{let n=await t.get(e)??{};return n.lease?.owner===r?(await t.put(e,c),c):n});return l===c&&s.snapshotId&&c.snapshotId!==s.snapshotId&&await this.deleteSnapshot(s.snapshotId),l}async deleteSnapshot(e){try{await(await this.api()).deleteSnapshot({...this.auth(),snapshotId:e})}catch(t){[404,410].includes(z(t)??0)||console.error(`coder server: could not delete replaced snapshot ${e}`,t)}}async snapshot(e,t,n,r){if(!this.options.snapshots)return;let i=await this.finalizeSnapshot(e);if(i.build)return i.snapshotId;let a=this.now(),o=b(),s=await this.withSnapshotLock(e,async t=>{let r=await t.get(e)??{},i=!r.snapshotId||n&&a-(r.checkedAt??0)>=9e5,s=r.failedAt!==void 0&&a-r.failedAt<36e5;if(r.build||r.lease&&r.lease.expiresAt>a||!i||s)return r;let c={...r,lease:{owner:o,expiresAt:a+F}};return await t.put(e,c),c});if(s.lease?.owner!==o)return s.snapshotId;let c,l;try{c=await t(s.snapshotId)}catch(t){t instanceof B?l=t:console.error(`coder server: snapshot ${e} failed; tasks start without a new one`,t)}let u=await this.withSnapshotLock(e,async t=>{let n=await t.get(e)??{};if(n.lease?.owner!==o)return n;let{lease:r,...i}=n,s={...i,...c?{build:{sandbox:c.sandbox,command:c.command,startedAt:a}}:l?{}:{failedAt:a}};return await t.put(e,s),s});if(c)if(u.build?.sandbox===c.sandbox&&u.build.command===c.command){let t=(async()=>{await c.wait(),await this.finalizeSnapshot(e,u)})().catch(()=>{});r?.(t)}else await this.withSandbox(c.sandbox,e=>this.stopSandbox(e)).catch(()=>{});if(l)throw l;return u.snapshotId}async detached(e,t,n={}){let r=await(await this.api()).create({...this.base(e),timeout:this.options.timeoutMs??18e5,...n}).catch(t=>{throw e&&De(t)?new B(t.message,e,{cause:t}):t});if(!t.env?.CODER_PREPARE){for(let[e,t]of this.sandboxes)t.expiresAt<=this.now()&&this.sandboxes.delete(e);this.sandboxes.size>=1e3&&this.sandboxes.delete(this.sandboxes.keys().next().value),this.sandboxes.set(r.name,{sandbox:r,expiresAt:this.now()+Number(n.timeout??this.options.timeoutMs??F)})}try{let e=await this.withSandbox(r,e=>e.runCommand({...t,detached:!0}));return{sandbox:r.name,command:e.cmdId,wait:()=>e.wait({signal:AbortSignal.timeout(F)})}}catch(e){throw this.sandboxes.delete(r.name),await this.stopSandbox(r).catch(()=>{}),e}}async start(e,t,n,i={}){t={...t,[r]:`1`,CODER_RUNNER_TARBALL_URL:U(t.CODER_SERVER),CODER_RUNNER_HASH:H()};let a=Te(t,n,i),o=t=>({cmd:`sh`,args:[`-c`,G(te().map(e=>`sudo sh -c '${e.replaceAll(`'`,`'\\''`)}'`).join(` && `),``,`setpriv --inh-caps=-all --ambient-caps=-all bun`),`coder-task`,e.id,W],env:t});for(let n=0;;n++){let r;try{r=this.snapshotKey(e);let n=r?await this.snapshot(r,e=>this.detached(e,o({...t,CODER_PREPARE:`1`})),!0,i.waitUntil).catch(e=>{if(e instanceof B)throw e;console.error(`coder server: snapshot ${r} failed; starting without one`,e)}):void 0,s=e=>this.detached(e,o({...t,CODER_INBOX_SOCKET:l}),{...a?{networkPolicy:a}:{},...i.timeoutMs?{timeout:i.timeoutMs}:{}}),c=n?await s(n).catch(e=>{if(e instanceof B)throw e;return console.error(`coder server: starting from snapshot ${n} failed`,e),s()}):await s();return d({sandbox:c.sandbox,command:c.command})}catch(e){if(!(e instanceof B))throw e;if(r&&e.snapshotId&&this.options.snapshots){let t=e.snapshotId;await this.withSnapshotLock(r,async e=>{let n=await e.get(r);if(n?.snapshotId!==t)return;let{snapshotId:i,sha:a,checkedAt:o,failedAt:s,...c}=n;await e.put(r,c)})}if(n===2)throw e}}}async status(e){let t=P(e);try{let e=await this.sandbox(t.sandbox);if(e.status===`pending`)return{state:`running`};if(e.status!==`running`)return this.sandboxes.delete(t.sandbox),{state:`exited`,code:1};let n=await e.getCommand(t.command);return n.exitCode===null?{state:`running`}:{state:`exited`,code:n.exitCode}}catch(e){throw[404,410].includes(z(e)??0)&&this.sandboxes.delete(t.sandbox),e}}async push(e,t){return this.withSandbox(P(e).sandbox,async e=>{let n=await e.runCommand({cmd:`node`,args:[`-e`,u],detached:!1,env:{CODER_INBOX_MESSAGES:JSON.stringify(t)}}),r=await n.stdout();if(n.exitCode!==0)throw Error(`Sandbox inbox delivery failed`);return JSON.parse(r)})}async stop(e){let t=P(e).sandbox;try{await(await this.sandbox(t)).stop()}finally{this.sandboxes.delete(t)}}};const V=`ghcr.io/muzam1l/coder-runner:latest`;function H(){let e=new URL(`./runner.json`,import.meta.url),{hash:t}=JSON.parse(re(g(e)?e:m.join(n,`dist/runner.json`),`utf8`));if(typeof t!=`string`||!/^[a-f0-9]{64}$/.test(t))throw Error(`The runner package is missing; run bun run build.`);return t}function U(e){return`${e.replace(/\/+$/,``)}/runner/${H()}.tgz`}async function ke(e,t,r){if(r.file!==`${H()}.tgz`)return p();try{let e=new URL(`./runner.tgz`,import.meta.url),t=await se(g(e)?e:m.join(n,`dist/runner.tgz`));return new Response(t,{headers:{"content-type":`application/gzip`,"cache-control":`public, max-age=31536000, immutable`}})}catch(e){if(e.code===`ENOENT`)return p();throw e}}const W=`
|
|
26
|
-
const [file, id] = process.argv.slice(1);
|
|
27
|
-
const lines = require('fs').readFileSync(file, 'utf8').split('\\n').map(line => line.trim()).filter(Boolean);
|
|
28
|
-
const error = 'The machine failed: ' + lines.slice(-6).join(' ').slice(-800);
|
|
29
|
-
const login = process.env.CODER_LOGIN;
|
|
30
|
-
const url = process.env.CODER_SERVER.replace(/\\/+$/, '') + (login ? '/logins/' : '/tasks/') + encodeURIComponent(id) + (login ? '' : '/result');
|
|
31
|
-
fetch(url, {
|
|
32
|
-
method: 'POST', signal: AbortSignal.timeout(10000),
|
|
33
|
-
headers: { authorization: 'Bearer ' + process.env.CODER_TASK_TOKEN, 'content-type': 'application/json' },
|
|
34
|
-
body: JSON.stringify(login ? { error } : { status: 'failed', error, machine: true }),
|
|
35
|
-
}).then(response => { if (!response.ok) process.exitCode = 1; }).catch(() => { process.exitCode = 1; });
|
|
36
|
-
`;function G(e=``,t=``,n=`bun`){let r=[`rm -rf .coder-runner/package && tar -xzf .coder-runner/package.tgz -C .coder-runner`,`mkdir -p .coder-runner/bin`,`printf '#!/bin/sh\nexec ${n} "$(dirname "$0")/../package/bin/coder.mjs" "$@"\n' > .coder-runner/bin/coder`,`chmod +x .coder-runner/bin/coder`].join(` && `),i=`node -e 'const fs=require("fs"),crypto=require("crypto");process.exit(/^[a-f0-9]{64}$/.test(process.env.CODER_RUNNER_HASH||"")&&crypto.createHash("sha256").update(fs.readFileSync(".coder-runner/package.tgz")).digest("hex")===process.env.CODER_RUNNER_HASH?0:1)'`,a=[`mkdir -p .coder-runner`,'curl -fsSL --retry 2 --connect-timeout 10 --max-time 30 "${CODER_RUNNER_TARBALL_URL:?Runner package URL is required}" -o .coder-runner/package.tgz',`{ [ -z "$CODER_RUNNER_HASH" ] || ${i}; }`,r,...e?[e]:[],`printf "%s" "$CODER_RUNNER_HASH" > .coder-runner/hash`].join(` && `),o=`[ -n "$CODER_RUNNER_HASH" ] && [ -f .coder-runner/package.tgz ] && [ "$(cat .coder-runner/hash 2>/dev/null)" = "$CODER_RUNNER_HASH" ] && ${i}`;return[`out=$(mktemp)`,`{ (${[...t?[t]:[],`if ${o}; then ${r}; else ${a}; fi`,`PATH="$PWD/.coder-runner/bin:$PATH" CODER_NO_UPDATE_CHECK=1 ${n} .coder-runner/package/bin/coder.mjs agent run --task "$1"`].join(` && `)}) 2>&1; echo $? >"$out.status"; } | tee "$out"`,`status=$(cat "$out.status")`,`[ "$status" = 0 ] || { [ -n "$CODER_PREPARE" ] || { if command -v node >/dev/null 2>&1; then node -e "$2" "$out" "$1"; else bun -e "$2" "$out" "$1"; fi; }; }`,`rm -f "$out" "$out.status"`,`exit "$status"`].join(`; `)}const Ae=[`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`];function K(e,t=``){return{get:n=>e.get(`snapshot`,`${t}${n}`),put:(n,r)=>e.put(`snapshot`,`${t}${n}`,r,{ttlMs:I}),withLock:(n,r)=>e.withAppLock(`snapshot:${t}${n}`,e=>r({get:n=>e.get(`snapshot`,`${t}${n}`),put:(n,r)=>e.put(`snapshot`,`${t}${n}`,r,{ttlMs:I})}))}}function je(e){let t=e.kind;return e.local===!1&&(t===`local`||t===`local-docker`)?{}:{[t]:q(t,e)}}function q(e,t){let n=t.config??{};if(e===`local`)return new ne(t.workDir);if(e===`local-docker`)return new ge(n);if(e===`vercel-sandbox`)return new Oe({...t.sandbox,...n});if(e===`github-actions`)return new M({...n,...t.fetch?{fetch:t.fetch}:{}});if(typeof n.url!=`string`||typeof n.secret!=`string`)throw Error(`HTTP runner requires a URL and secret`);return new N({url:n.url,secret:n.secret,...t.fetch?{fetch:t.fetch}:{}})}function J(e,t){return e.scope===`workspace`||!!(t&&e.owner===t)}function Y(e){return e.local?`local`:`default`}async function Me(e,t={}){let n=t.runner??t.agent;if(n===Y(e))return{runner:e.config.runner};let r=(await e.store.list(`runner`,{visibleTo:t.requester,...n?{runner:n}:{defaults:!0}})).filter(({value:n})=>J(n,t.requester)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`)),i=n?r.find(({id:e,value:t})=>e===n||t.name===n):r.find(({value:e})=>e.scope===`personal`&&e.default)??r.find(({value:e})=>e.scope===`workspace`&&e.default);if(n&&!i)throw Error(`Unknown runner "${n}".`);return i?{runner:i.value.kind,runnerId:i.id}:{runner:e.config.runner}}function X(e,t,n){let r={...t.config,...k(e.config,t.secret)};return q(t.kind,{workDir:e.config.workDir,config:r,fetch:e.fetch,sandbox:{...n?{snapshots:K(e.store,`runner:${n}:`)}:{}}})}async function Z(e,t){if(!t.runnerId)return e.runners[t.runner];let n=await e.store.get(`runner`,t.runnerId);if(!n||n.kind!==t.runner||!e.local&&(n.kind===`local`||n.kind===`local-docker`)){e.settings?.runnerInstances?.delete(t.runnerId);return}k(e.config,n.secret);let r=(e.settings??={}).runnerInstances??=new Map,i=JSON.stringify([n.kind,n.config,n.secret]),a=r.get(t.runnerId);return a?.signature!==i&&(a={signature:i,runner:X(e,n,t.runnerId)},r.set(t.runnerId,a)),a.runner}const Q=e=>`runner-deleted:${e}`;async function Ne(e,t,n){if(t.runner!==`http`||!t.runnerId){await(await Z(e,t))?.remove?.(t.id,n);return}let r=t.runnerId;await e.store.withAppLock(`runners:${e.organizationId}`,async e=>{let n=await e.get(`snapshot`,Q(r));await e.put(`snapshot`,Q(r),{deletedTasks:[...n?.deletedTasks??[],t.id]})})}async function Pe(e,t,n=[]){let r=await e.get(`snapshot`,Q(t)),i=(r?.deletedTasks??[]).filter(e=>!n.includes(e));return!r||i.length===r.deletedTasks.length||(i.length?await e.put(`snapshot`,Q(t),{deletedTasks:i}):await e.delete(`snapshot`,Q(t))),i}function Fe(e,t){if(Object.keys(t).some(t=>!e.fields.some(e=>e.key===t)))throw Error(`Unknown runner field`);for(let n of e.fields)if(!n.optional&&!t[n.key]?.trim())throw Error(`${n.label} is required`);if(e.kind===`http`){if(t.secret.length<32)throw Error(`Secret must contain at least 32 characters`);new N({url:t.url,secret:t.secret})}if(e.kind===`github-actions`&&!/^[\w.-]+\/[\w.-]+$/.test(t.repo))throw Error(`Repository must be owner/repo`);if(e.kind===`local-docker`&&t.cpus&&!(Number(t.cpus)>0&&Number.isFinite(Number(t.cpus))))throw Error(`CPUs must be positive`)}var $=class extends Error{};async function Ie(e,t){let n=Date.now(),r=new AbortController,i,a=new Promise((t,n)=>{i=setTimeout(()=>{r.abort(),n(new $(`Runner check timed out`))},e.runnerTimeoutMs??5e3)});try{return{ok:!0,detail:await Promise.race([a,(async()=>{let n=t?.kind??e.config.runner,i=t?{...t.config,...k(e.config,t.secret)}:e.config.runnerConfig??{};if(n===`local`){if(!e.local)throw new $(`Local runners require a local server`);return`This machine is available`}if(n===`http`){let n=t?X(e,t):e.runners.http;if(!(n instanceof N)||!(await n.health(r.signal)).ok)throw new $(`Runner health check failed`);return`Runner is reachable`}if(n===`local-docker`){if(!e.local)throw new $(`Docker runners require a local server`);return await new Promise((t,n)=>{(e.runnerExec??ie)(`docker`,[`info`],{timeout:5e3,signal:r.signal},e=>e?n(new $(`Docker is unavailable`)):t())}),`Docker is available`}let a=async t=>{let n=await(e.fetch??fetch)(t,{signal:r.signal,redirect:`manual`,headers:{authorization:`Bearer ${i.token}`,accept:`application/json`,"user-agent":`coder`}});if(!n.ok)throw new $(`Runner check failed with HTTP ${n.status}`);return n};if(n===`github-actions`){let e=String(i.repo).split(`/`).map(encodeURIComponent).join(`/`);return await a(`https://api.github.com/repos/${e}`),await a(`https://api.github.com/repos/${e}/actions/workflows/${encodeURIComponent(String(i.workflow))}`),`Repository and workflow are accessible`}let o=await(await a(`https://api.vercel.com/v2/teams?limit=100`)).json();if(!Array.isArray(o.teams))throw new $(`Invalid team response`);if(i.team&&!o.teams.some(e=>e.id===i.team||e.slug===i.team))throw new $(`Team is not accessible`);return`Teams are accessible`})()]),ms:Date.now()-n}}catch(e){return{ok:!1,detail:e instanceof $?e.message:`Runner check failed`,ms:Date.now()-n}}finally{clearTimeout(i)}}export{fe as C,E as D,pe as E,me as O,_e as S,de as T,R as _,Q as a,N as b,ke as c,Z as d,Ie as f,xe as g,L as h,je as i,K as l,J as m,Ae as n,Pe as o,Fe as p,Me as r,Ne as s,V as t,Y as u,Se as v,k as w,A as x,be as y};
|
package/dist/serve-DdAdw7Su.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{F as e,wi as t}from"./core-DwsAMCnL.js";import{n,o as r,s as i,t as a}from"./emit-BrkJJPUE.js";import{Ft as o,Kn as s,Ot as c,Pn as l,bn as u,ir as d,zt as f}from"./zod-BoqHoRCH.js";import{randomUUID as p}from"node:crypto";const m=`2025-11-25`,h=[m,`2025-06-18`,`2025-03-26`,`2024-11-05`],g=(e,t,n)=>({jsonrpc:`2.0`,...e===void 0?{}:{id:e},error:{code:t,message:n}}),_=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return!1;let{jsonrpc:t,method:n,id:r}=e;return t===`2.0`&&(n===void 0||typeof n==`string`)&&(r===void 0||typeof r==`string`||typeof r==`number`)},v=e=>{let t=e?.id;return typeof t==`string`||typeof t==`number`?t:void 0};function y(e){let t=new Map;return async({id:n,method:r,params:i={}},a=``)=>{if(r===void 0)return;if(n===void 0){r===`notifications/cancelled`&&t.get(a)?.get(i.requestId)?.abort();return}let o=t.get(a);o||t.set(a,o=new Map);let s=new AbortController;o.set(n,s);try{if(r===`initialize`){let t=i.protocolVersion;return{jsonrpc:`2.0`,id:n,result:{protocolVersion:h.includes(t)?t:m,capabilities:e.capabilities,serverInfo:{name:e.name,version:`0`},...e.instructions?{instructions:e.instructions}:{}}}}let t=r===`ping`?()=>({}):Object.hasOwn(e.handlers,r)?e.handlers[r]:void 0;return t?{jsonrpc:`2.0`,id:n,result:await t(i,s.signal)}:g(n,-32601,`Method not found: ${r}`)}catch(e){let t=e.code;return g(n,typeof t==`number`?t:-32603,String(e?.message??e))}finally{o.delete(n),o.size||t.delete(a)}}}function b(e){let t=y(e),n=(e,t,n,r)=>{e.writeHead(t,{...n?{"content-type":`application/json`}:{},...r?{"mcp-session-id":r}:{},...t===405?{allow:`POST`}:{}}),e.end(n?JSON.stringify(n):void 0)},r=async(e,r)=>{if(e.method!==`POST`)return n(r,405);let{origin:i,host:a}=e.headers;if(i!==void 0&&i!==`http://${a}`)return n(r,403);let o=e.headers[`mcp-protocol-version`];if(typeof o==`string`&&!h.includes(o))return n(r,400,g(void 0,-32600,`Unsupported protocol version: ${o}`));let s=``;e.setEncoding(`utf8`);for await(let t of e)s+=t;let c;try{c=JSON.parse(s)}catch{return n(r,400,g(void 0,-32700,`Parse error`))}if(!_(c))return n(r,400,g(v(c),-32600,`Invalid request`));let l=c.method===`initialize`&&c.id!==void 0,u=e.headers[`mcp-session-id`],d=l?crypto.randomUUID():typeof u==`string`?u:``,f=await t(c,d).catch(()=>g(c.id,-32603,`Internal error`));if(!f)return n(r,202);n(r,200,f,l?d:void 0)};return(e,t)=>{r(e,t).catch(()=>t.destroy())}}function x(e){let t=y(e),n=e=>process.stdout.write(`${JSON.stringify(e)}\n`),r=new Promise(e=>process.stdin.once(`end`,e)),i=``,a=e=>{i+=e;for(let e=i.indexOf(`
|
|
2
|
-
`);e>=0;e=i.indexOf(`
|
|
3
|
-
`)){let r=i.slice(0,e).trim();if(i=i.slice(e+1),!r)continue;let a;try{a=JSON.parse(r)}catch{n(g(void 0,-32700,`Parse error`));continue}if(!_(a)){n(g(v(a),-32600,`Invalid request`));continue}let{id:o}=a;t(a).catch(()=>o===void 0?void 0:g(o,-32603,`Internal error`)).then(e=>e&&n(e))}};return process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,a),{close:async()=>{process.stdin.off(`data`,a),process.stdin.pause()},done:r}}const S=e=>({type:`text`,text:e}),C=e=>({content:[S(e)],isError:!0}),w=e=>e.replace(/[^A-Za-z0-9_-]/g,`_`);function T(p){let{commands:m,skills:h}=a(p),g=new Map;for(let e of m)if(e.command.mcp!==!1){if(g.has(e.id))throw Error(`contextjsx: two commands have the tool id "${e.id}"`);g.set(e.id,e)}let _=new Map;for(let e of h){let{name:t}=r(e);if(_.has(t))throw Error(`contextjsx: two skills are named "${t}"`);_.set(t,e)}let v=new Map;for(let e of[...g.keys(),..._.size?[`load_skill`]:[]]){let t=v.get(w(e));if(t!==void 0)throw Error(`contextjsx: tools "${t}" and "${e}" both map to ${w(e)}`);v.set(w(e),e)}let y=l({content:o(d([l({type:u(`text`),text:s()}),l({type:c([`image`,`audio`]),data:s(),mimeType:s()}),l({type:u(`resource_link`),uri:s(),name:s()}),l({type:u(`resource`),resource:d([l({uri:s(),text:s()}),l({uri:s(),blob:s()})])})])),isError:f().optional()}),b=new Map,x=({id:t,command:n})=>{let r=b.get(t);return r||b.set(t,r=e(l(n.args??{}),{io:`input`})),r},T=[...(p.resources??[]).map(e=>({uri:e.uri,name:e.name??e.uri,description:e.description,mimeType:e.mimeType,read:()=>e.read()})),...[...g.values()].map(({id:e,path:t,command:r})=>({uri:`${p.name}://help/${e}`,name:`help ${t.join(` `)}`,description:r.description,mimeType:`text/plain`,read:()=>n(p,r)}))];return{name:p.name,instructions:i(p),capabilities:T.length?{tools:{},resources:{}}:{tools:{}},handlers:{"tools/list":()=>({tools:[...[...g.values()].map(e=>({name:e.id,description:(e.command.mcp||void 0)?.description??e.command.description,inputSchema:x(e),annotations:{readOnlyHint:e.command.access===`read`}})),..._.size?[{name:`load_skill`,description:`Load a skill named in the server instructions; returns its full text`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`skill name`}},required:[`name`]},annotations:{readOnlyHint:!0}}]:[]]}),"tools/call":async(e,n)=>{let i=e.name,a=e.arguments??{};if(i===`load_skill`&&_.size){let e=_.get(a.name);return e?{content:[S(r(e).text)]}:C(`Unknown skill ${JSON.stringify(a.name)}. Skills: ${[..._.keys()].join(`, `)}`)}let o=g.get(i);if(!o)throw Object.assign(Error(`Unknown tool ${i}`),{code:-32602});let{command:s}=o,c=l(s.args??{}).safeParse(a);if(!c.success)return C(`Invalid arguments for ${i}:\n${t(c.error)}\n\nSchema: ${JSON.stringify(x(o))}`);try{let e=await s.run(c.data,{signal:n});if(!(s.mcp||void 0)?.text&&y.safeParse(e).success)return e;let t=s.mcp&&s.mcp.text?s.mcp.text(e):typeof e==`string`?e:JSON.stringify(e)??``,r=s.next?.({result:e,args:c.data}).map(e=>`${e.usage} # ${e.blurb}`);return{content:[S(t),...r?.length?[S(r.join(`
|
|
4
|
-
`))]:[]]}}catch(e){return C(String(e?.message??e))}},"resources/list":()=>({resources:T.map(({uri:e,name:t,description:n,mimeType:r})=>({uri:e,name:t,description:n,...r?{mimeType:r}:{}}))}),"resources/read":async e=>{let t=T.find(t=>t.uri===e.uri);if(!t)throw Object.assign(Error(`Unknown resource ${e.uri}`),{code:-32002});return{contents:[{uri:t.uri,...t.mimeType?{mimeType:t.mimeType}:{},text:await t.read()}]}}}}}async function E(e,t){let n=T(e);if(t===`stdio`)return x(n);let r=`127.0.0.1`,i=p(),a=b(n),{createServer:o}=await import(`node:http`),s=o((t,n)=>{if(t.headers.authorization!==`Bearer ${i}`)return n.statusCode=401,n.end();if((t.url??`/`).split(`?`)[0]!==`/${e.name}`)return n.statusCode=404,n.end();a(t,n)});return await new Promise((e,n)=>{s.once(`error`,n),s.listen(t.http.port??0,r,()=>{s.off(`error`,n),e()})}),{url:`http://${r}:${s.address().port}/${e.name}`,token:i,close:()=>new Promise(e=>{s.closeAllConnections(),s.close(()=>e())})}}export{E as serve};
|
package/dist/serve-NQykWAKV.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{X as t,v as n}from"./errors-DO_IltpP.js";import{Dt as r}from"./output-SNqdgh9A.js";import{a as i,t as a}from"./remote-HUZCWgfl.js";import{p as o}from"./slack-BtKvW_4v.js";import{h as s,o as c,s as l,t as u}from"./http-Cg8PSe-c.js";import d from"node:path";import f from"node:fs";import{createHmac as p,randomBytes as m}from"node:crypto";import h from"node:os";import g from"node:http";var _=e({runnerController:()=>T,serveRunner:()=>S});const v=()=>n(`runners.json`);function y(){try{return JSON.parse(f.readFileSync(v(),`utf8`))}catch{return{}}}function b(e){f.mkdirSync(d.dirname(v()),{recursive:!0}),f.writeFileSync(v(),JSON.stringify(e,null,2),{mode:384})}const x=e=>[`cloudflared tunnel --url http://localhost:${e}`,`ngrok http ${e}`,`tailscale funnel ${e}`,`VS Code: forward port ${e} in the Ports view and set its visibility to Public`];async function S(e={}){let n=e.port??4100,o=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!o)throw new r(`invalid-option`,e.token?`Expose this runner and set CODER_RUNNER_URL or --runner-url to its public HTTPS address.`:`Expose this runner with a tunnel, then pass its public URL with --url.`,{hint:x(n)});let d=e.token?i({...e,server:e.url??e.server,yes:!0}):i(e),f=y(),p=f[d]??{secret:m(32).toString(`base64url`)},_=new s(t()),v=T({secret:p.secret,server:d,runner:_}),S=g.createServer(l(async e=>{let t=await c(e,u(new URL(e.url).pathname));return t instanceof Response?t:v(t)}));await new Promise((e,t)=>{S.once(`error`,t),S.listen(n,`127.0.0.1`,e)});let C=()=>new Promise(e=>S.close(()=>e())),w=e.name??h.hostname(),E=[],D=async(e,t)=>{let n=E,i=await fetch(`${d}/runners/register`,{method:`POST`,redirect:`manual`,signal:AbortSignal.timeout(5e3),headers:{"content-type":`application/json`},body:JSON.stringify({...e?{token:e}:{id:p.id,organizationId:p.organizationId},name:w,url:o,secret:p.secret,...t?{offline:t}:{},...n.length?{removed:n}:{}})});if(!i.ok)throw new r(`server`,`Runner registration failed`,{status:i.status});let{deleted:a=[],...s}=await i.json();E=E.filter(e=>!n.includes(e));for(let e of a)await _.remove(e).then(()=>E.push(e),t=>console.error(`coder runner: folder of deleted task ${e} not removed`,t));return s},O;try{if(e.token){let t=await D(e.token);O=t,p.organizationId=t.organizationId}else{let t=p.id&&p.organizationId?await D().catch(e=>{if(!(e instanceof r&&e.status===401))throw e}):void 0;if(t)O=t;else{let t=a(e),n=await t.me();O=await t.runners.add({kind:`http`,name:w,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:o,secret:p.secret}}),p.organizationId=n.organization?.id,p.id=O.id,O=await D()}}p.id=O.id,b({...f,[d]:p})}catch(e){throw await C(),e}let k=Promise.resolve(),A=setInterval(()=>{k=k.then(()=>D().then(()=>{})).catch(()=>{})},6e4);return{...O,port:n,server:d,close:async()=>{clearInterval(A),await k,await D(void 0,!0).catch(()=>{}),await C()}}}const C=3e5,w=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function T(e){let t=e.now??Date.now,n=new Map,r=(r,i)=>{let a=r.headers.get(`x-coder-timestamp`)??``,s=r.headers.get(`x-coder-nonce`)??``,c=r.headers.get(`x-coder-signature`)??``,l=Number(a);if(!s||!Number.isFinite(l)||Math.abs(t()-l)>C)return!1;let u=p(`sha256`,e.secret).update(`${i}.${a}.${s}`).digest(`base64url`);if(!o(c,u))return!1;for(let[e,r]of n)r<t()&&n.delete(e);return!n.has(s)&&(n.set(s,l+C),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return w({error:`Unauthorized`},401);let[,i,a]=new URL(t.url).pathname.split(`/`).map(decodeURIComponent);try{if(t.method===`POST`&&i===`start`&&!a){let t=JSON.parse(n);if(typeof t.task!=`string`||!t.env)return w({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return w({error:`Invalid start`},400);let i={CODER_SERVER:e.server,CODER_TASK_TOKEN:r,CODER_INBOX_MODE:e.runner.push?`push`:`poll`,...t.env.CODER_LOGIN===`claude`||t.env.CODER_LOGIN===`codex`?{CODER_LOGIN:t.env.CODER_LOGIN}:{}};return w({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&i===`health`&&!a)return w({ok:!0});if(!a)return w({error:`Not found`},404);if(t.method===`POST`&&i===`messages`&&e.runner.push){let{entries:t}=JSON.parse(n);return!Array.isArray(t)||!t.length?w({error:`Invalid messages`},400):w(await e.runner.push(a,t))}return t.method===`GET`&&i===`status`?w(await e.runner.status(a)):t.method===`POST`&&i===`stop`?(await e.runner.stop(a),new Response(null,{status:204})):w({error:`Not found`},404)}catch(e){return w({error:e instanceof Error?e.message:String(e)},400)}}}export{_ as n,S as t};
|