@wular/coder 0.4.12 → 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 -7
- package/dist/builtin/coder/system.md +5 -6
- package/dist/chat-4AiZEqKh.js +13 -0
- package/dist/{chat-bwKd3y6V.js → chat-Bfu9XKRa.js} +1 -1
- package/dist/cli.js +16 -11
- 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 +1686 -1428
- 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.0de14cb4e30bd70d.js → index.54c45900f2153d34.js} +57 -77
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.60308a11f7001eb7.js → view.e20379d8f741754a.js} +78 -48
- 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.be791a5eaf328738.js → load.252f972b42c690e2.js} +18 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.70913bd4075da914.js → page.11efd0e175db9053.js} +24 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.e348ec45e9ed951b.js → loading.56c14183236be231.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.61aab176baeefebd.js → notify.59ae138dc182d7c3.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.815371ed0d5dd4fa.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.1d6af804f9ec043d.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.2ed0e66d131fc148.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.f43bcc1148ce3650.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.fac1132ad9c4248e.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.a795379254982121.js → layout.8d2f0997462fc958.js} +90 -33
- 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.a2cb6d1f1714259a.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.4da9e2ba3fea937f.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.996172c951739b35.js → page.cf5cf9afe38ab0e4.js} +51 -111
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.8e7ca54dd1821e98.js → platform-actions.c44c7df7841719f2.js} +235 -109
- 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.aa9e157d141481d7.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.ad1a4c9b000d269a.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.44d886e60ae04303.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.521c9e7b8d77f557.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.828cfb8112404792.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.8f998a9c511e1fb3.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.45e18b6dc3019af4.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.c8d76988c734dda2.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.b1367e864b4fb406.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.dd11f2618e08becd.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.f987c12bcbc5c850.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.1579dc8acbaacf92.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.ad5cc342db794e5d.js → hero.0ae015a4fbe6321e.js} +6 -6
- 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.43b4b28f194ea842.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.776856fe1ed1a642.js → editor.6548f8f757578f90.js} +164 -116
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.eafa5b41a2ed571f.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.ee001af7a96e3972.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.7d84ef2b178b34d2.js → page.2b326d00ccef5544.js} +9 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.393cf7429eea189e.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.980adfb7c5714752.js → page.5aa3ddc669366703.js} +37 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.24a1987405ed7b17.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.683476f62a9ecde7.js → credentials-list.fc4cff0289267551.js} +120 -103
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.b43dd3d97c536c2a.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.dfed4ae6ffc74434.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.3afa989490bbe77c.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.0d175ee815b22cd7.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.3e8289f888fa444c.js → layout.4eb70f2de8674f93.js} +7 -7
- 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.06feaa5fbb06f1e6.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.bbc7ced8dd5491eb.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.ff95e4b6977d0474.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.894c73f9abee3ce1.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.f06fda0df59beeb5.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.3c79cf14feff12bf.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.47cbb34ea8d2e33f.js → loading.779ecdd9c9d2ff09.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.abed2a8424ef3da0.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.dc294bb94b7437e1.js → task-view.0cd3ec2655f44cc7.js} +53 -44
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.309a194fc7fa34be.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.5072aacdce127689.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.d2c05c397780b833.js +25 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.0a1b5878dccd3b37.js → task.a25847399a4dfb30.js} +14 -18
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.1162926f7498c732.js → tasks-list.e486cbd16ea3e963.js} +62 -39
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.1d687c986db53a73.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.d5d8cb5033823c9c.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.97d277dbab9c15cf.js → loading.5b973a8bb29197d5.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.fb21ebe90d49dac1.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.2197d8f43216d104.js → range-bar.0b9038e9df707843.js} +5 -5
- 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.185dbc99875e208a.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.1f4217895ff1e835.js → foreign-link.1d4f63a0379cbd1d.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.cc76fc9708142525.js → loading-card.77bea8c5870b5d3c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.85f15db7b648d48c.js → page-head.2eb1e0213eb50349.js} +5 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e2915852cf82c86b.js → stream.e3800e736f832124.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.0ed8ccaae81b9d53.js → task-toasts.3b7eeee29fc327de.js} +29 -19
- 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.180765bdadf6d602.js → back.7aa0ae82dbec38cd.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.572ad93c7707ab27.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.ce9e6cdb08ca86db.js → button.b62fa52e18fa338b.js} +2 -2
- 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.c1281f9b12854210.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.3a452a262f040973.js → filter.0730dccad6332327.js} +6 -6
- 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/{modal.25d53e5b41b9c4e5.js → modal.08ac85d31f4c76c1.js} +8 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.a533234c7c831be4.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.a08dc08338d080e9.js → segmented.633abe26ff760e37.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/segmented.c6f30b839fd27f35.css.pnext-asset.js +0 -0
- 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/{sentinel.17cffebfc3103b9f.js → sentinel.0ddf515b8f09ef9f.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.d17e2bfcbeb9df31.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tabs.025b532d6cc51736.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.66b2e54963f6901b.js → tabs.1600a0b563a5c7dd.js} +1 -1
- 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.24036899654de6df.js → toolbar.ff8367c641d28c1e.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.b9a5c37272250e82.js → action.f22057e7dfac40fe.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.a3928fa2dcd27b75.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-fa9d6e37f9828093.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-86f3e11d1f6f6cee.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-c29a1db0130638d2.js → confirm-d6b2c5b1deccd1e8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-0de82daaf654b1d3.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-445c11202f136275.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-b82a0f895266791c.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-5cf575a5e6921a5d.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-f646bfa8aa0aa449.js +1 -0
- 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-b1c46587301ef397.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-CVd5klMH.js → dist-DX0JzVC6.js} +990 -990
- package/dist/{adapter-CU9H4g6c.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-BgeqsCkC.js +11 -0
- 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-COWDSO4a.js +1 -0
- package/dist/http-615JJgHo.js +5 -0
- package/dist/http-DRk8cDjf.js +1 -0
- package/dist/{index-BdkdNI1v.d.ts → index-ezhbF5wC.d.ts} +369 -413
- 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 +3264 -1601
- 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 -12
- package/docs/agents/index.md +53 -82
- package/docs/approvals.md +47 -0
- package/docs/cli/agent.md +40 -19
- package/docs/cli/auth.md +1 -1
- package/docs/cli/connection.md +27 -26
- package/docs/cli/flow.md +9 -9
- package/docs/cli/index.md +17 -15
- package/docs/cli/model.md +23 -21
- package/docs/cli/runner.md +1 -1
- package/docs/cli/server.md +2 -2
- package/docs/cli/task.md +50 -50
- package/docs/config.md +37 -75
- package/docs/connections.md +80 -0
- package/docs/dash.md +23 -19
- package/docs/flows.md +46 -213
- package/docs/models.md +48 -77
- 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/.claude-plugin/plugin.json +1 -1
- package/plugins/claude/skills/dispatch/SKILL.md +3 -3
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/plugins/cursor/README.md +3 -3
- package/plugins/cursor/skills/coder/SKILL.md +3 -3
- package/dist/actions-BT7_eKXm.js +0 -10
- package/dist/adapter-BT8ECcRG.js +0 -1
- package/dist/agent-BA6xr8QY.js +0 -8
- package/dist/apps-D-v5sQJk.js +0 -367
- package/dist/args-CbO_Ck9Z.js +0 -11
- package/dist/async-XNO3nqum.js +0 -3
- package/dist/auth-DuXnSNf9.js +0 -1
- package/dist/base64url-CsVsW4Id.js +0 -1
- package/dist/chat-CgQdDRhs.js +0 -13
- package/dist/cmd-DX5ByXo3.js +0 -119
- package/dist/connection-DNxi2btM.js +0 -1
- package/dist/context-65bOofts.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.dac8eb211c500271.js +0 -141
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.1b615366c56838a1.js +0 -57
- 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.0fbfdba5254f7ae5.js +0 -26
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.f3af8cc8540719d7.js +0 -36
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.c6efd5432c1a4a75.js +0 -65
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a244f3199e7cf09c.js +0 -144
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.21ec9dc73ce68656.js +0 -642
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/engines-list.9e116751bd34e2cc.js +0 -73
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.083f5c665df04b1b.js +0 -156
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.537f63f8e5dd085d.js +0 -410
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.a96c11d11674f598.js +0 -100
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.587da79d68ab8d14.js +0 -151
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/status.16190fdd5fd7daad.js +0 -16
- package/dist/dash/standalone/static/assets/chunks/action-71685b2d5ad9f359.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-pills-15da36c2cb81991b.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-6e6a87d6e673daa8.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-toggle-ca98586e3b4ce9ae.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agents-grid-29c399e46b4e9e2b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-85e0ec7163ae18b7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-910bb87127972f62.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-data-5fed6c271a4791ca.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-b73490e04ae6398d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-c50f58b4b28d10bb.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-6d64a2d5f9ce6de0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/credentials-list-bee95799b2319b3b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/custom-range-a0630599f907b30e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/defaults-52f30e83d7666f7a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/editor-b9951819f21b2e43.js +0 -6
- package/dist/dash/standalone/static/assets/chunks/engines-list-2720c3e8fa12b2f7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/format-a27067f0186e78ac.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-affaaeff366b1725.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/instructions-fd7402ac5aa8b50e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/list-d918f79562d497eb.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-12bc7aceaa52f5b0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/notice-57db7a1f05b7308c.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-b219595be320108a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-1d27d2ba7eee9ff1.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-dba96dcb0f6513db.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/runners-list-36f8c5ecfcf8e9ae.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-d7dbafd24dd18481.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/segmented-8f809ebe712e92a7.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-cc13a835f3508618.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/shared-init-f475017dd5811e33.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/side-toggle-0aa237eba3dfe9c1.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-681061023bdf0a49.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/task-actions-c9e46e81604e85c5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-134186a544917ceb.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/tasks-list-352a3222d878de0f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/versions-list-21cb854e6a7108a7.js +0 -1
- package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +0 -1
- package/dist/dash/standalone/static/assets/create-param-id-da3f7e20689fe51a.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-account-9471bec93c444232.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-64500e78caae32df.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-c067c22928a2d7cc.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-9dec87710e04f949.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-779c474301e04440.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-c7d594b5232630c2.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-a80e62570716fdb9.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-ce278252012297b9.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-d3b6d701eb8e1403.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-bcfa3de29341d5ba.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-operator-b7bc6447cc27c9ce.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-6d6902345d88a687.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-85c7af9a89eef06e.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-setup-173efecd7b990c2e.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-ae0bc03f468e63cc.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-7325d8cff5be3592.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-usage-517b2a7ae462ac57.css +0 -1
- package/dist/dash/standalone/static/assets/global-87e1762113874559.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-05df74b071ddb0b3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2c19cca257f78ae6.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2db05dfa62642a65.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-36b0d6085a073880.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-576c06599e241231.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6aa0f19a30d58d63.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6b30b71f452f2f07.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6ccb4d4fff812db3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-74eb465defba421e.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-8c692d12b2fd90d6.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-92e17d39063a9ced.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-93246aea268c2682.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-9954dcbc0c579e0d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c0dfa1cdde9a9855.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c28d38d4aafd4af6.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c2c30dcb6dc31d60.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-dbf741073e11eac0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-e29194a27280333f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-f8a7e692b27caad9.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-fc5b8cfcba2a9f63.js +0 -1
- package/dist/discover-CPZdprlQ.js +0 -1
- package/dist/dist-node-Bv1kCqyi.js +0 -20
- package/dist/docs-x-l7gjFE.js +0 -2
- package/dist/drive-Y-ZlgiUW.js +0 -1
- package/dist/env-B9JG6gwo.js +0 -1
- package/dist/errors-XBA-Ls4n.js +0 -10
- package/dist/exec-iFssTO5V.js +0 -3
- package/dist/executor-Dt2FFT-y.js +0 -11
- package/dist/http-BZfjbiov.js +0 -1
- package/dist/integrations-DyInAa5g.js +0 -2
- package/dist/load-zhcrwSRF.js +0 -2
- package/dist/local-D55UkW93.js +0 -5
- package/dist/log-view-CL3_S0IQ.js +0 -3
- package/dist/maintenance-BfxcatXH.js +0 -1
- package/dist/match-Bq4sDuCy.js +0 -1
- package/dist/mcp-Bta09QCU.js +0 -13
- package/dist/mcp-CUITALl1.js +0 -1
- package/dist/models-C1O2DrXx.js +0 -1
- package/dist/output-D95NoAA9.js +0 -16
- package/dist/prompt-onpyIyXK.js +0 -8
- package/dist/prompts-B8pKhMcu.js +0 -4
- package/dist/refresh-D-0K9fo3.js +0 -1
- package/dist/remote-CDm0YUU3.js +0 -3
- package/dist/runner-CTFTuaz_.js +0 -1
- package/dist/runners-CYTicTb7.js +0 -36
- package/dist/serve-Bzs_lEg-.js +0 -1
- package/dist/serve-CWtLyyTz.js +0 -12
- package/dist/serve-DE6A-rBk.js +0 -4
- package/dist/slack-Bo5l13Rs.js +0 -5
- package/dist/task-BU1JEK9X.js +0 -7
- package/dist/task-CPzBITsp.js +0 -1
- package/dist/tools-BMaKWTa6.js +0 -1
- package/dist/tools-CM4UCsId.js +0 -1
- package/dist/turn-DMvPfhb5.js +0 -3
- package/dist/types-D_xnfP7m.js +0 -1
- package/dist/views-DEdKqLm_.js +0 -5
- package/dist/wire-JMNPv8f6.js +0 -1
- package/dist/worker-BuP_Lem1.js +0 -9
- package/dist/worker-C1tuzq5n.js +0 -1
- package/dist/zod-BoqHoRCH.js +0 -1
- package/docs/mcp.md +0 -54
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.0a735590a5412ea6.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.c811938ae8a8f1df.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/hero.1bef5dca89b5942c.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/{agent/instructions.446bccc375f30eeb.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]/agents/{editor/editor.c496247a81ed832c.css.pnext-asset.js → [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]/{layout.a4efa8d807fe5416.css.pnext-asset.js → agents/agent/hero.243d85cac1f22df2.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.57990cfd2bdf5c11.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.abbbc9ace4d866e5.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.c8fd2b8b01e7077b.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/page-head.364ec93a8e7857b3.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/frame/task-toasts.d13d9f628e530552.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/badge.0cb1513f8b077560.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/button.d7f4433f4e7faa80.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/card.f80288cc42f9bcae.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/filter.b53f21acc3e2cfef.css.pnext-asset.js → frame/page-head.9fcc49ddf7119d75.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/{modal.9db07d368dcf5981.css.pnext-asset.js → badge.8e2a9842b28f44a6.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.0bd8652fdbc05eb0.css.pnext-asset.js → button.2b18ba19ae01e2bb.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.1e3ec9bd6008d811.css.pnext-asset.js → card.4ab7ad42a0770726.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.ca13e40ff54128d0.css.pnext-asset.js → filter.6fdff1e7355aaa0e.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 → menu.cd96fa0495fe0fde.css.pnext-asset.js} +0 -0
package/dist/output-D95NoAA9.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import{Rt as e,Zt as t,en as n,qi as r,wi as i}from"./core-DwsAMCnL.js";import{$ as a,$t as o,Cn as s,Ct as c,En as l,F as u,I as d,K as f,O as p,P as m,Qt as h,Rt as g,Sn as _,St as v,U as y,Z as ee,_ as b,a as x,bt as S,cn as C,ct as w,d as T,dn as E,en as D,et as te,fn as O,g as k,gn as ne,gt as A,ht as re,i as ie,it as ae,j as oe,ln as se,mn as j,mt as ce,n as le,nn as ue,on as de,pn as M,pt as fe,q as pe,r as me,rn as he,st as ge,tt as _e,vn as ve,wn as ye,wt as be,x as xe,yn as Se}from"./errors-XBA-Ls4n.js";import N from"node:path";import P from"node:process";import{fileURLToPath as Ce}from"node:url";import F from"node:fs";import{spawn as we,spawnSync as I}from"node:child_process";import{createHash as Te,randomUUID as L}from"node:crypto";import R from"node:os";import Ee from"node:net";import De from"node:readline";import{setImmediate as Oe}from"node:timers/promises";var z=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 B={conversationCompactTokens:7e4,chain:[`codex`,`claude`,`custom`],engines:{codex:{model:`gpt-6.1-sol`,effort:`high`,permissions:`auto`},claude:{model:`opus`,effort:`medium`,permissions:`auto`}},models:{},approvals:{escalationTimeoutMs:12e4,allowedNetworkHosts:[]}},ke=B.chain[0],Ae=`__EMPTY__`,je=`Skipped: the agent chose not to reply.`,Me=`The agent returned no reply.`,Ne=e=>e===`failed`?0:e===`completed`?3:e===`cancelled`?2:1,Pe=(e,t)=>e<t?-1:+(e>t),Fe=(e,t)=>e.rank-t.rank||t.createdAt-e.createdAt||Pe(t.id,e.id);function Ie(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t;let n=e&&typeof e==`object`&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):{};for(let[e,r]of Object.entries(t))r===null?delete n[e]:Object.defineProperty(n,e,{value:Ie(Object.hasOwn(n,e)?n[e]:void 0,r),writable:!0,enumerable:!0,configurable:!0});return n}function Le(e,t){for(let n of Object.values(e??{}))n.repository=t}function Re(e){let t={...e.url?{url:e.url}:{command:e.command,args:e.args??[]},headers:Object.keys(e.headers??{}).sort(),env:Object.keys(e.env??{}).sort()};return Te(`sha256`).update(JSON.stringify(t)).digest(`hex`)}function ze(){try{let e=JSON.parse(F.readFileSync(b(`state`,`global`,`mcp-approvals.json`),`utf8`));return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}catch(e){if(e.code===`ENOENT`||e instanceof SyntaxError)return{};throw e}}function Be(e){return ze()[Re(e)]===!0}async function Ve(e,t,n){if(!t)throw Error(`Usage: coder connection approve <name> [--agent <id>]`);let r=G(e).mcp?.[t],i=[];r&&!n&&i.push(r);let{loadAgents:a}=await import(`./load-zhcrwSRF.js`).then(e=>e.s),{INTEGRATIONS:o}=await import(`./integrations-DyInAa5g.js`).then(e=>e.r);for(let r of await a(e,o,{includeDisabled:!0})){let e=r.definition.mcp?.[t];e&&(!n||r.id===n)&&i.push(e)}if(!i.length)throw Error(`No MCP server "${t}". Use --cwd to select its repository.`);if(i.some(e=>e.connection))throw Error(`MCP server "${t}" uses a connection and needs no repository approval.`);let s=new Set(i.map(Re));if(s.size!==1)throw Error(`MCP server "${t}" has different definitions. Select one with --agent <id>.`);let c=b(`state`,`global`,`mcp-approvals.json`);F.mkdirSync(N.dirname(c),{recursive:!0});let u=ze();return u[[...s][0]]=!0,l(c,u),F.chmodSync(c,384),{name:t,file:c}}function He(e){return!/\$\{[^}]+\}/.test(e)&&(/^(?:Bearer\s+\S+|ghp_|github_pat_|xox[a-z]-|sk-|lin_api_)/i.test(e)||/^[A-Za-z0-9_+\/.=-]{32,}$/.test(e))}function Ue(e,t){if(!t||typeof t!=`object`)return[];let{url:n,headers:r,env:i}=t,a=e=>e&&typeof e==`object`&&!Array.isArray(e)?Object.entries(e).filter(e=>typeof e[1]==`string`):[],o=[];typeof n==`string`&&[n,...a(r).map(([,e])=>e)].some(e=>/\$\{[^}]+\}/.test(e))&&o.push(`MCP server "${e}" keeps remote URL and header variables literal. Use a connection for credentials.`);for(let[t,n]of[[`headers`,r],[`env`,i]])for(let[r,i]of a(n))He(i)&&o.push(`MCP server "${e}" has a literal secret in ${t}.${r}. Use a connection instead.`);return o}const V={luna:`gpt-6-luna`,sol:`gpt-6.1-sol`,astra:`gpt-6-astra`},We=new Set([`low`,`medium`,`high`]),Ge={sonnet:`sonnet`,opus:`opus`,fable:`fable`},Ke=new Set([`low`,`medium`,`high`]),qe={"read-only":{sandbox:`read-only`,approvalPolicy:`never`,approvalMode:null},"workspace-write":{sandbox:`workspace-write`,approvalPolicy:`never`,approvalMode:null},auto:{sandbox:`workspace-write`,approvalPolicy:`on-request`,approvalMode:`auto`}},Je={"read-only":[`--permission-mode`,`dontAsk`,`--disallowedTools`,`Edit`,`Write`,`MultiEdit`,`NotebookEdit`],"workspace-write":[`--permission-mode`,`acceptEdits`],auto:[`--permission-mode`,`auto`]},Ye=[`--permission-mode`,`dontAsk`,`--disallowedTools`,`Edit`,`Write`,`MultiEdit`,`NotebookEdit`,`Bash`,`WebFetch`,`WebSearch`,`Task`],Xe=/failIfUnavailable|sandbox\b[^.\n]*?(?:failed|could ?n[o']t|cannot|unavailable|not available|not supported)/i,Ze=`CODER_MACHINE_SANDBOX`,Qe=new Set([`localhost`,`127.0.0.1`,`::1`,`[::1]`]);function $e(e){return e.flatMap(e=>Ee.isIPv6(e)?[`[${e}]`]:e.startsWith(`[`)||e.includes(`:`)||Ee.isIP(e)?[e]:[e,`*.${e}`])}function et(e,t,n=[],r=[],i=!0){let a=r.length?{permissions:{additionalDirectories:r}}:{};return JSON.stringify(i?e===`read-only`?{...a,sandbox:{enabled:!0,failIfUnavailable:!0,autoAllowBashIfSandboxed:!0,network:{strictAllowlist:!0},filesystem:{denyWrite:[t,...r]}}}:{...a,sandbox:{enabled:!0,autoAllowBashIfSandboxed:!0,network:{strictAllowlist:!0,...e===`auto`&&n.length?{allowedDomains:$e(n),...n.some(e=>Qe.has(e))?{allowLocalBinding:!0}:{}}:{}}}}:{permissions:{additionalDirectories:r,allow:[`Bash`],...e===`read-only`?{deny:[`Edit`,`Write`,`MultiEdit`,`NotebookEdit`]}:{}},sandbox:{enabled:!1}})}const tt=h([`codex`,`claude`]),nt=h([`codex`,`claude`,`custom`]),rt=h([`low`,`medium`,`high`]),it=h([`read-only`,`workspace-write`,`auto`]),at=se(M({model:j().check(e(1)),effort:rt,permissions:it})),ot=se(M({model:j().check(e(1)),effort:rt,permissions:it,network:D()})),st=M({baseUrl:ve(),model:j().check(e(1)),envKey:C(j().check(e(1))),wireApi:C(h([`chat`,`responses`])),disabled:C(D())}),ct=M({provider:tt,model:j().check(e(1)),effort:C(rt),disabled:C(D())}),lt=M({disabled:D()}),ut=ne([st,ct,lt]),dt=M({escalationTimeoutMs:de().check(t()),allowedNetworkHosts:o(j())}),ft=h([`read`,`write`]),pt=j().check(n(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),mt=M({allowedEvents:C(o(j()))}),ht=ne([D(),M({engine:C(j()),model:C(j()),effort:C(rt),permissions:C(it),access:C(ft),runner:C(h([`local`,`local-docker`,`vercel-sandbox`,`github-actions`])),integrations:C(E(j(),mt)),connections:C(o(j())),disabled:C(D())})]),gt=M({connection:C(j().check(e(1))),command:C(j().check(e(1))),args:C(o(j())),env:C(E(j(),j())),url:C(j().check(e(1))),type:C(h([`stdio`,`http`],{error:`Use type stdio or http; legacy SSE servers are not supported, use their streamable HTTP URL`})),headers:C(E(j(),j())),tools:C(o(j())),description:C(j())}).check(O(e=>e.connection?[e.url,e.command,e.args,e.env,e.headers,e.type].every(e=>e===void 0):!!e.command!=!!e.url,`Use a connection alone, without url, command, args, env, headers or type; otherwise supply one of command or url`)),_t=M({conversationCompactTokens:de().check(he(),t()),chain:o(nt).check(e(1)),engines:se(M({codex:ot,claude:at,custom:at})),models:C(E(j().check(n(/^[a-z0-9][a-z0-9./_-]*$/i,`model name`)),ut)),agents:C(E(pt,ht)),mcp:C(E(pt,gt)),approvals:dt}),vt=se(ue(_t,{approvals:se(dt)}));function H(e){return`baseUrl`in e}function yt(e){return`provider`in e}function bt(e,t){return t??e===`auto`}const xt=/^(?!-)[a-z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-z0-9-]{1,63}(?<!-))*(?::\d{1,5})?$/i;function St(e){if(Ee.isIP(e))return!0;let t=/^\[([^\]]+)\](?::\d{1,5})?$/.exec(e);return t?Ee.isIPv6(t[1]):e.length<=253&&xt.test(e)}function Ct(e,t){delete e.models?.[t];for(let n of Object.values(e.engines??{}))n?.model===t&&delete n.model}function U(e){let t=vt.safeParse(e);if(!t.success)return t.error.issues.map(e=>`${e.path.join(`.`)||`config`}: ${e.message}`);let n=Et(B,t.data),r=[];for(let[e,n]of(t.data.approvals?.allowedNetworkHosts??[]).entries())St(n)||r.push(`approvals.allowedNetworkHosts.${e}: "${n}" is not a host name or IP address`);for(let[e,i]of Object.entries(t.data.models??{})){if(e===`codex`||e===`claude`||e===`custom`){r.push(`models.${e}: reserved engine name`);continue}if(yt(i)){let t=n.models?.[i.model];t&&!H(t)&&r.push(`models.${e}: alias target "${i.model}" is itself a config entry`)}}return r}function wt(e){if(!F.existsSync(e))return null;try{return JSON.parse(F.readFileSync(e,`utf8`))}catch(t){let n=t instanceof Error?t.message:String(t);throw Error(`Invalid JSON in ${e}: ${n}`)}}function Tt(e){return Et(B,e)}function Et(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t??e;let n={...e},r=e;for(let[e,i]of Object.entries(t))n[e]=i&&typeof i==`object`&&!Array.isArray(i)&&r?.[e]&&typeof r[e]==`object`?Et(r[e],i):i;return n}function W(){return b(`config.json`)}function Dt(e){return N.join(e,`.coder`,`config.json`)}const Ot=`CODER_WORKSPACE_CONFIG`;function kt(e,t){let n=t.approvals?.allowedNetworkHosts?.filter(t=>e.approvals.allowedNetworkHosts.includes(t)),r=Object.fromEntries(Object.entries(t.engines??{}).map(([e,t])=>[e,{...t?.model?{model:t.model}:{},...t?.effort?{effort:t.effort}:{}}])),i=Object.entries(t.models??{}).filter(([,e])=>e.disabled===!0);return{...t.mcp?{mcp:t.mcp}:{},...t.chain?{chain:t.chain.filter(t=>e.chain.includes(t))}:{},engines:r,models:Object.fromEntries(i.map(([e])=>[e,{disabled:!0}])),...n?{approvals:{...e.approvals,allowedNetworkHosts:n}}:{}}}function G(e){let t=f(e),n=process.env[Ot],r=[[W(),wt(W())],...n?[[`the workspace config`,JSON.parse(n)]]:[]],i=Dt(t);r.push([i,wt(i)]);let a=B,o=new Set;for(let[e,t]of r){if(!t)continue;let r=U(t);if(r.length)throw Error(`Invalid config in ${e}:\n ${r.join(`
|
|
2
|
-
`)}`);let s=n&&e===i?kt(a,t):t,c={...a.mcp,...s.mcp};for(let t of Object.keys(s.mcp??{}))e===i?o.add(t):o.delete(t);a={...Et(a,s),...Object.keys(c).length?{mcp:c}:{}}}let s=U(a);if(s.length)throw Error(`Invalid merged config:\n ${s.join(`
|
|
3
|
-
`)}`);for(let[e,t]of Object.entries(a.mcp??{}))Le({[e]:t},o.has(e));return a}function At(e){return e.replace(/\/+$/,``).replace(/\/(chat\/completions|completions|responses)$/,``)}function jt(e,t,n){let r=[Dt(f(e)),W()];for(let e of r){let r;try{r=wt(e)}catch{continue}if(r?.models?.[t])return Object.assign(r.models[t],n),!U(r).length&&(F.writeFileSync(e,`${JSON.stringify(r,null,2)}\n`,`utf8`),!0)}return!1}function Mt(e){return/\/(chat\/completions|completions|responses)\/*$/.test(e)}function Nt(e,t){let n=At(e);return Mt(e)||/\/v\d+(alpha|beta)?$/.test(n)?[`${n}/${t}`]:[`${n}/${t}`,`${n}/v1/${t}`]}function Pt(e,t,n){let r=t?e.models?.[t]:void 0;if(!t||!r||!H(r))return null;let i=`coder-${t}`;return{model:r.model,modelProvider:i,configOverrides:{[`model_providers.${i}`]:{name:t,base_url:n?.url??At(r.baseUrl),...r.envKey&&!n?{env_key:r.envKey}:{},wire_api:`responses`}}}}function Ft(e){return e?V[e]??e:null}function It(e){return e in V||e in Ge}function Lt(e,t){return!!(t&&e.models?.[t]?.disabled)}function Rt(e,t){if(Lt(e,t))throw Error(`model "${t}" is disabled in config`)}function zt(e,t){if(!e)return null;let n=String(e).trim().split(`:`).map(e=>e.trim());if(!n.length||n.length>3||n.some(e=>!e))throw Error(`Invalid engine spec "${e}".`);let r=null,i=null,a=null,o=e=>We.has(e)||Ke.has(e);for(let t of n)if(t===`codex`||t===`claude`||t===`custom`){if(r)throw Error(`Invalid engine spec "${e}".`);r=t}else if(o(t)&&!a)a=t;else if(!i)i=t;else throw Error(`Invalid engine spec "${e}".`);let s=i?t.models?.[i]:void 0;if(s&&yt(s)){if(s.disabled)throw Error(`model "${i}" is disabled in config`);if(r&&r!==s.provider)throw Error(`Alias "${i}" runs on ${s.provider}, not ${r}.`);r=s.provider,a=a??s.effort??null,i=s.model}r||=i&&i in Ge?`claude`:i&&s&&H(s)?`custom`:`codex`;let c=t.engines[r]??{},l=i??c.model??null;return Rt(t,l),{engine:r,model:l,effort:a??c.effort??null}}function Bt(e){let t=W();return F.mkdirSync(N.dirname(t),{recursive:!0}),F.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,`utf8`),t}function Vt(e,t){return t.split(`.`).reduce((e,t)=>e?.[t],e)}function Ht(e,t){return t?Dt(f(e)):W()}function Ut(e,t){let n=G(e);return t?Vt(n,t):n}function Wt(e,t,n,r={}){let i=Ht(e,r.workspace);Gt(i,e=>{let i=t.split(`.`),a=i.at(-1),o=e;for(let e of i.slice(0,-1))(typeof o[e]!=`object`||o[e]===null)&&(o[e]={}),o=o[e];r.unset?delete o[a]:o[a]=n});let a=Vt(G(e),t)??null;return{file:i,key:t,...r.unset?{unset:!0}:{value:n},effective:a}}function Gt(e,t){let n=F.existsSync(e)?JSON.parse(F.readFileSync(e,`utf8`)):{};t(n),n.models&&Object.keys(n.models).length===0&&delete n.models;let r=U(n);if(r.length)throw Error(`Refusing to write invalid config:\n ${r.join(`
|
|
4
|
-
`)}`);F.mkdirSync(N.dirname(e),{recursive:!0}),F.writeFileSync(e,`${JSON.stringify(n,null,2)}\n`,`utf8`)}const Kt={get:(e,t={})=>Ut(N.resolve(t.cwd??`.`),e),set:(e,t,n={})=>Wt(N.resolve(n.cwd??`.`),e,t,n)};function qt(e,t){let n=`${e}.${L()}.tmp`;F.writeFileSync(n,JSON.stringify(t),{flag:`wx`}),F.renameSync(n,e)}function Jt(e,t){let n=F.mkdtempSync(N.join(R.tmpdir(),e)),r=new Map,i=!1,a=()=>{try{for(let e of F.readdirSync(n)){if(!e.endsWith(`.request.json`))continue;let a=e.slice(0,-13),o=N.join(n,e),s=N.join(n,`${a}.response.json`);if(F.existsSync(s)){F.rmSync(o,{force:!0});continue}if(r.has(a))continue;let c=`${o}.processing`;F.renameSync(o,c);let l=(async()=>{let e;try{let n=JSON.parse(F.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}}}qt(s,e),F.rmSync(c,{force:!0})})();r.set(a,l),l.finally(()=>r.delete(a)).catch(()=>{})}}catch{}},o=ye(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 Oe(),!(!F.existsSync(n)||!F.readdirSync(n).some(e=>e.endsWith(`.reader`))||Date.now()>=e);)await o.wait(e-Date.now())}finally{o.close(),F.rmSync(n,{recursive:!0,force:!0})}}}}async function Yt(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=ye(i),o=N.join(i,`${L()}.reader`),s=!1;try{F.writeFileSync(o,``);let e=N.join(i,`${t.id}.response.json`);F.existsSync(e)||qt(N.join(i,`${t.id}.request.json`),t),s=!0;let c=Date.now()+n;await Oe();let l=await a.until(()=>{try{let n=JSON.parse(F.readFileSync(e,`utf8`));if((!t.command||n?.error?.retryable)&&F.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(!F.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(),F.rmSync(o,{force:!0})}}const Xt=/^([a-f0-9-]{36})\.(?:req|applying)\.json$/;function Zt(e){if(!e)return L();if(!e.task||!Number.isInteger(e.generation)||e.generation<0||!Number.isInteger(e.seq)||e.seq<0)throw Error(`Invalid command key`);let t=Te(`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 Qt=[`hint`,`taskId`,`payload`,`approval`,`result`,`runId`,`status`];function $t(e,t){let n=`${e}.${L()}.tmp`;F.writeFileSync(n,JSON.stringify(t),{encoding:`utf8`,flag:`wx`}),F.renameSync(n,e)}async function en(e,t,n){let{dir:r}=n,i=n.id??L(),a=N.join(r,`${i}.res.json`);F.existsSync(a)||$t(N.join(r,`${i}.req.json`),{kind:e,payload:t});let o=Date.now();for(;!F.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(F.readFileSync(a,`utf8`));if(n.keepReply||F.rmSync(a,{force:!0}),c){let{code:e,message:t,...n}=c;throw new z(e,t,n)}return s}function tn(e,t){F.mkdirSync(e,{recursive:!0});let n=new Set,r=async(r,i)=>{let a;try{let n=N.join(e,r);if(!F.lstatSync(n).isFile())throw Error(`mailbox request is not a regular file`);let{kind:o,payload:s}=JSON.parse(F.readFileSync(n,`utf8`)),c=N.join(e,`${i}.applying.json`);F.existsSync(c)||$t(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 z?e:void 0;a={error:{code:t?.code??`invalid-option`,message:e instanceof Error?e.message:String(e),...Object.fromEntries(Qt.flatMap(e=>t?.[e]===void 0?[]:[[e,t[e]]]))}}}try{$t(N.join(e,`${i}.res.json`),a),F.rmSync(N.join(e,`${i}.req.json`),{force:!0}),F.rmSync(N.join(e,`${i}.applying.json`),{force:!0}),n.delete(i)}catch{}},i=setInterval(()=>{let t=[];try{t=F.readdirSync(e)}catch{return}for(let i of t){let t=Xt.exec(i)?.[1];if(t){if(F.existsSync(N.join(e,`${t}.res.json`))){F.rmSync(N.join(e,i),{force:!0});continue}n.has(t)||(n.add(t),r(i,t))}}},100);return()=>clearInterval(i)}function nn(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 K(e,t,n){return Object.assign(Error(e),{retryable:t,...n===void 0?{}:{rpcCode:n}})}function rn(e,t,n,r){if(!e||e.id!==t||e.method!==`turn/steer`&&e.method!==`turn/interrupt`)throw K(`Invalid Codex control request.`,!1);let i=e.params;if(!i||typeof i!=`object`||i.threadId!==n)throw K(`Codex control request does not match its owning thread.`,!1);if(e.method===`turn/interrupt`){if(i.turnId!==r)throw K(`Codex turn/interrupt request does not match its owning active turn.`,!1);return{method:e.method,params:i}}if(i.expectedTurnId!==r)throw K(`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 K(`Invalid Codex turn/steer input schema.`,!1);return{method:e.method,params:i}}async function an(e,{threadId:t,turnId:n}){return Jt(`coder-codex-control-`,async(r,i)=>{if(i)throw K(`Codex owner endpoint is shutting down.`,!0);let a=rn(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 K(e instanceof Error?e.message:String(e),nn(e),e.rpcCode)}})}function on(e){if(e?.startsWith(`file:`)&&e.length>5){let t=N.resolve(e.slice(5)),n=N.resolve(R.tmpdir());N.dirname(t)===n&&N.basename(t).startsWith(`coder-codex-control-`)&&F.rmSync(t,{recursive:!0,force:!0})}}async function sn(e,t,n,r=3e3,i){return Yt(e,{id:Zt(i),method:t,params:n,command:i},r,`Codex control`)}const cn=`Coder Task`;function ln(e,t=72){let n=String(e??``).trim().replace(/\s+/g,` `);return n?n.length<=t?n:`${n.slice(0,t-3)}...`:``}function un(e){let t=ln(e,56);return t?`${cn}: ${t}`:cn}function dn(e){return e?.params?.threadId??null}function fn(e){return e?.params?.turnId?e.params.turnId:e?.params?.turn?.id?e.params.turn.id:null}function pn(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 mn(e){try{let t=F.readFileSync(e,`utf8`),n=t?t.split(/\r\n|\r|\n/).length-+!!t.endsWith(`
|
|
5
|
-
`):0;return n>0?[n===1?`L1`:`L1-L${n}`]:[]}catch{return[]}}function hn(e,t,n){let r=typeof e.kind==`string`?e.kind:e.kind?.type??`change`,i=e.path||`(unknown path)`,a=pn(e.diff??``,r),o=a.length||r!==`add`||!t?a:mn(i),c=typeof e.kind==`object`&&e.kind?.move_path?` -> ${n?s(n,e.kind.move_path):e.kind.move_path}`:``;return`${r} ${n?s(n,i):i}${c}${o.length?` ${o.join(`, `)}`:``}`}function gn(e,t=!1,n){return(e.changes??[]).map(e=>hn(e,t,n)).join(`; `)}function _n(e){let t=e.trim().split(` `)[0]??``;return t===`/dev/null`?``:t.replace(/^[ab]\//,``)}function vn(e,t){let n=new Map,r=``,i=``;for(let t of e.split(/\r?\n/)){if(t.startsWith(`--- `)){r=_n(t.slice(4));continue}if(t.startsWith(`+++ `)){i=_n(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?s(t,e):e} ${n.join(`, `)}`).join(`; `)}function yn(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 bn(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 xn(e){return String(e??``).replace(/\s+/g,` `).trim()}function q(e){if(!e)return[];if(typeof e==`string`){let t=xn(e);return t?[t]:[]}if(Array.isArray(e))return e.flatMap(e=>q(e));if(typeof e==`object`){let t=e;if(typeof t.text==`string`)return q(t.text);if(`summary`in t)return q(t.summary);if(`content`in t)return q(t.content);if(`parts`in t)return q(t.parts)}return[]}function Sn(e,t){let n=[];for(let r of[...e,...t]){let e=xn(r);!e||n.includes(e)||n.push(e)}return n}function J(e,t,n=null,r={}){!e||t==null||e({message:t,phase:n,...r})}function Cn(e,t){t&&J(e,t.message,t.phase??null,t.extra??{})}function wn(e){return e.replace(/^\/(?:usr\/)?bin\/\w*sh\s+-l?c\s+/,``)}function Tn(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 Y(e){return e==null?``:typeof e==`string`?e:JSON.stringify(e)}function En(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?Y(n):``;return{message:r?`${t} ${r}`:t,phase:`investigating`,extra:{kind:`tool`,tool:t}}}function Dn(e,t){switch(e.type){case`commandExecution`:return{message:wn(String(e.command??``).trim())||`command`,phase:`running`,extra:{kind:`tool`,tool:`command`}};case`fileChange`:return{message:gn(e,!1,t)||`edit`,phase:`editing`,extra:{kind:`tool`,tool:`edit`}};case`mcpToolCall`:return{message:[`${e.server}/${e.tool}`,Y(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(`/`),Y(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()||Y(t);return{message:r?`search: ${r}`:`search`,phase:`investigating`,extra:{kind:`tool`,tool:`search`}}}case`agentMessage`:case`reasoning`:case`userMessage`:return null;default:return En(e)}}function On(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=q(e.summary).join(`
|
|
6
|
-
`);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:gn(e,!0,t)||`(details unavailable)`,phase:`editing`,extra:{kind:`tool-result`,tool:`edit`,isError:e.status!==`completed`}};case`mcpToolCall`:return{message:Y(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:Y(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:Y(e.error??e.result??e.results??e.output??e.action??e),phase:`investigating`,extra:{kind:`tool-result`,tool:Dn(e,t)?.extra?.tool,durationMs:e.durationMs,isError:e.status===`failed`||e.status===`declined`||e.success===!1||e.error!=null}}}}function kn(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 An(e){e.completionTimer&&=(clearTimeout(e.completionTimer),null)}function jn(e,t=null){e.completed||(An(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 Mn(e){e.completed||e.finalTurn||!e.finalAnswerSeen||e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||(An(e),e.completionTimer=setTimeout(()=>{e.completionTimer=null,!(e.completed||e.finalTurn||!e.finalAnswerSeen)&&(e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||jn(e,null))},250),e.completionTimer.unref?.())}function Nn(e,t){let n=dn(t);if(!n||!e.threadIds.has(n))return!1;let r=e.threadTurnIds.get(n)??null,i=fn(t);return r===null||i===null||i===r}function Pn(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),Mn(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,Mn(e)));return}if(t.type===`reasoning`&&n===`completed`){e.reasoningSummary=Sn(e.reasoningSummary,q(t.summary));return}if(t.type===`fileChange`&&n===`completed`){e.fileChanges.push(t);return}t.type===`commandExecution`&&n===`completed`&&e.commandExecutions.push(t)}function Fn(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),J(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()),Pn(e,t.params.item,`started`,t.params.threadId??null),Cn(e.onProgress,Tn(Dn(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(Pn(e,n,`completed`,t.params.threadId??null),n?.type===`fileChange`)for(let t of n.changes??[])t.path&&e.reportedChanges.add(s(e.cwd,t.path));let r=Tn(On(n,e.cwd),n);if(r?.extra?.kind===`tool-result`){let t=Dn(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()))})}Cn(e.onProgress,r);break}case`thread/tokenUsage/updated`:{let n=yn(t.params?.tokenUsage?.last),r=dn(t);r===e.threadId&&t.params?.tokenUsage?.last&&(e.contextTokens=n?.total);let i=yn(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=bn(e);t&&(!e.loggedTokens||t.total-e.loggedTokens>=1e3)&&(e.loggedTokens=t.total,e.onProgress?.({kind:`usage`,tokens:t}))}break}case`turn/diff/updated`:{let n=vn(String(t.params?.diff??``),e.cwd).split(`; `).filter(t=>!e.reportedChanges.has(t.split(` `)[0]??``)).join(`; `);n&&n!==e.lastDiffSummary&&(e.lastDiffSummary=n,J(e.onProgress,`changed: ${n}`,`editing`,{kind:`status`}));break}case`item/autoApprovalReview/completed`:{let n=t.params?.review??{},r=t.params?.action??{},i=wn(String(r.command??r.type??``).trim());J(e.onProgress,`Auto-review ${n.status}. ${ln(i,48)}${n.rationale?`. ${ln(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,J(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),Mn(e);break}J(e.onProgress,`Turn ${t.params.turn.status}.`,`finalizing`,{kind:`status`}),jn(e,t.params.turn)}}async function In(e,t,n,r={}){let i=kn(t,r),a=e.notificationHandler;e.setNotificationHandler(e=>{if(!i.turnId){i.bufferedNotifications.push(e);return}if(e.method===`thread/started`){Fn(i,e);return}if(!Nn(i,e)){a?.(e);return}Fn(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)Nn(i,e)?Fn(i,e):a?.(e);i.bufferedNotifications.length=0,t.turn?.status&&t.turn.status!==`inProgress`&&jn(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{An(i),e.setNotificationHandler(a??null),e.setServerRequestHandler(null)}}function Ln(e,t,n=[]){return e!==`workspace-write`||!n.length?null:{type:`workspaceWrite`,writableRoots:n,networkAccess:t??!1}}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}:{}},...n.tools?.length?{enabled_tools:n.tools}:{},default_tools_approval_mode:`approve`}}return Object.keys(r).length?{mcp_servers:r}:{}}async function zn(e,t,n,r){let i=Object.entries(n).filter(([,e])=>e.enabled!==!1).map(([e])=>e);await Promise.all(i.map(async n=>{let i=await e.request(`mcpServerStatus/list`,{threadId:t,serverName:n,detail:`toolsAndAuthOnly`}).catch(e=>{J(r,`MCP server ${n} status unavailable. ${me(e)}`,null,{kind:`warning`})});for(let e of i?.data??[])e.name===n&&e.runtimeStatus===`failed`&&J(r,`MCP server ${e.name} failed to start. ${e.toolsError??``}`.trim(),null,{kind:`error`})}))}function Bn(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(`
|
|
7
|
-
`)}async function Vn(e,t,n={}){let r=n.connect??ce.connect,i={...n.networkAccess===void 0?{}:{networkAccess:n.networkAccess},nativeMcp:n.nativeMcp??!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 X(e){let t=process.env.CODEX_AUTH_JSON;if(t){let e=N.join(R.homedir(),`.codex`),n=N.join(e,`auth.json`);if(!F.existsSync(n)){F.mkdirSync(e,{recursive:!0,mode:448});try{F.writeFileSync(n,t,{encoding:`utf8`,flag:`wx`,mode:384})}catch(e){if(e.code!==`EEXIST`)throw e}}}let n=re(`codex`,[`--version`],{cwd:e,env:g()});if(!n.available)return n;let r=re(`codex`,[`app-server`,`--help`],{cwd:e,env:g()});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 Hn(e){let t=X(e);if(!t.available)return{available:!1,loggedIn:!1,detail:t.detail};let n=null;try{n=await ce.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=I(`codex`,[`login`,`status`],{encoding:`utf8`,env:g()}),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 Un(e,{endpoint:t,threadId:n,turnId:r}){if(!n||!r)return{interrupted:!1,detail:`missing threadId or turnId`};let i=await sn(t,`turn/interrupt`,{threadId:n,turnId:r});return i.ok?{interrupted:!0,detail:`Interrupted ${r} on ${n}.`}:{interrupted:!1,detail:i.detail}}async function Wn(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 sn(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 Gn(e,t={},n={}){if(!t.availabilityChecked){let t=X(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.configOverrides&&Object.keys(t.configOverrides).length?t.configOverrides:null,s=Ln(i,t.networkAccess,t.writableRoots),c=async n=>{let i=null,c;A(`codex.config.start`);let l=await n.request(`config/read`,{cwd:e,includeLayers:!1});A(`codex.config.done`);let u={...t.modelProvider?{}:{model_reasoning_summary:`auto`},...o,...Rn(t.mcpServers,Object.keys(l.config?.mcp_servers??{}),t.nativeMcp),...t.nativeMcp?{}:{"features.apps":!1,"features.plugins":!1}},d=t.developerInstructions?{developerInstructions:t.developerInstructions}:{},f;if(t.resumeThreadId&&(J(t.onProgress,`Resuming thread ${t.resumeThreadId}.`,`starting`,{kind:`status`}),ge(t.resumeThreadId)&&await w(t.resumeThreadId),f=await n.request(`thread/resume`,{threadId:t.resumeThreadId,cwd:e,model:t.model??null,modelProvider:t.modelProvider??null,config:u,approvalPolicy:t.approvalPolicy??`never`,...a,...t.approvalsReviewer?{approvalsReviewer:t.approvalsReviewer}:{},...d}).catch(e=>{J(t.onProgress,_e,`starting`,{kind:`warning`,detail:String(e?.message??e)})})),f)c=f.thread.id;else if(J(t.onProgress,`Starting Codex task thread.`,`starting`,{kind:`status`}),A(`codex.thread.start`),c=(await n.request(`thread/start`,{cwd:e,model:t.model??null,modelProvider:t.modelProvider??null,config:u,approvalPolicy:t.approvalPolicy??`never`,...a,...t.approvalsReviewer?{approvalsReviewer:t.approvalsReviewer}:{},...d,serviceName:`coder_runtime`,ephemeral:t.ephemeral??!1})).thread.id,!(t.ephemeral??!1))try{await n.request(`thread/name/set`,{threadId:c,name:un(r)})}catch(e){let t=String(e?.message??e??``);if(!t.includes(`unknown variant`)&&!t.includes(`unknown method`))throw e}A(`codex.thread.ready`),J(t.onProgress,`Thread ready (${c}).`,`starting`,{kind:`status`,threadId:c}),await zn(n,c,u.mcp_servers??{},t.onProgress);let p;try{p=await In(n,c,()=>n.request(`turn/start`,{threadId:c,input:[{type:`text`,text:r,text_elements:[]}],model:t.model??null,effort:t.effort??null,outputSchema:t.outputSchema??null,...s?{sandboxPolicy:s}:{}}),{cwd:e,onProgress:t.onProgress,onHeartbeat:t.onHeartbeat,onApprovalRequest:t.onApprovalRequest,onTurnStarted:t.onControlReady?async e=>{i=await an(n,{threadId:c,turnId:e}),t.onControlReady?.(i.endpoint,c,e)}:void 0}),A(`codex.result`),t.onResult?.({status:p.finalTurn?.status===`completed`?0:1,threadId:c,turnId:p.turnId,finalMessage:p.lastAgentMessage,error:p.error??p.finalTurn?.error??null})}finally{await i?.close()}return{status:p.finalTurn?.status===`completed`?0:1,threadId:c,turnId:p.turnId,finalMessage:p.lastAgentMessage,reasoningSummary:p.reasoningSummary,turn:p.finalTurn,error:p.error??p.finalTurn?.error??null,stderr:Bn(n.stderr),fileChanges:p.fileChanges,tokens:bn(p),contextTokens:p.contextTokens,model:t.model??null,commandExecutions:p.commandExecutions}},l=async e=>{e.setNoticeHandler?.(e=>J(t.onProgress,e,`starting`,{kind:`status`}));try{let t=await c(e);return ie(t.error?.message)&&await Kn(e),t}catch(t){throw ie(me(t))&&await Kn(e),t}},u=()=>Vn(e,l,{...n,networkAccess:t.networkAccess,nativeMcp:t.nativeMcp}),d=!1,f=()=>(d=!0,J(t.onProgress,`Codex login changed; restarted the Codex app-server and retrying the turn once.`,`starting`,{kind:`status`}),u());try{let e=await u().catch(e=>{if(!ie(me(e)))throw e;return f()}),n=!e.fileChanges?.length&&!e.commandExecutions.length;!d&&n&&ie(e.error?.message)&&(e=await f());let r=le(e.error?.message,t.model);return r?{...e,error:{...e.error,message:r}}:e}catch(e){let n=le(me(e),t.model);throw n?Error(n):e}}async function Kn(e){e.transport===`broker`&&await e.request(fe,{}).catch(()=>{})}const qn=`@wular/coder`,Jn=`https://registry.npmjs.org/${qn}/latest`,Yn={npm:[`npm`,`install`,`-g`,`${qn}@latest`],pnpm:[`pnpm`,`add`,`-g`,`${qn}@latest`],yarn:[`yarn`,`global`,`add`,`${qn}@latest`],bun:[`bun`,`add`,`-g`,`${qn}@latest`]};function Xn(){return k(`update-check.json`)}function Zn(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 Qn(){try{return JSON.parse(F.readFileSync(Xn(),`utf8`))}catch{return null}}function $n(e){try{F.mkdirSync(k(),{recursive:!0}),F.writeFileSync(Xn(),JSON.stringify(e))}catch{}}function er(){try{F.rmSync(Xn(),{force:!0})}catch{}}function tr(e,t){if(P.env.CODER_NO_UPDATE_CHECK||P.env.CI)return;let n=Qn();if(!n?.checkedAt||Date.now()-n.checkedAt>864e5)try{we(P.execPath,[t,`upgrade`,`refresh`],{detached:!0,stdio:`ignore`}).unref()}catch{}return n?.latest&&Zn(n.latest,e)>0?n.latest:void 0}async function nr(e){let t=Qn()?.latest??null;try{let e=await fetch(Jn,{signal:AbortSignal.timeout(3e3),headers:{accept:`application/json`}});if(e.ok){let n=await e.json();n?.version&&(t=n.version)}}catch{}$n({checkedAt:Date.now(),latest:t,current:e})}function rr(e){let t=e;try{t=F.realpathSync(e)}catch{}let n=t.replace(/\\/g,`/`);return/\/\.bun\//.test(n)?{pm:`bun`,command:Yn.bun}:/\/\.pnpm\//.test(n)||/\/pnpm(-global)?\//i.test(n)||/\/Library\/pnpm\//.test(n)?{pm:`pnpm`,command:Yn.pnpm}:/\/\.config\/yarn\/global\//.test(n)||/\/yarn\/global\//.test(n)||/\/Yarn\/Data\/global\//.test(n)?{pm:`yarn`,command:Yn.yarn}:{pm:`npm`,command:Yn.npm}}var ir=r({MIN_CODEX_VERSION:()=>fr,agentsSkillDir:()=>or,ensureCodexInstalled:()=>dr,ensureCodexUpToDate:()=>gr,installAgentsSkill:()=>cr,installClaudePlugin:()=>ar,modelVersionWarning:()=>hr,parseVersion:()=>mr,readAgentsSkillVersion:()=>sr,registerCodexMcp:()=>lr,registerCursorMcp:()=>ur,setupHost:()=>yr,setupHostCore:()=>_r,upgradeCore:()=>vr});function ar(e){I(`claude`,[`plugin`,`marketplace`,`remove`,`coder-plugins`],{encoding:`utf8`});let t=I(`claude`,[`plugin`,`marketplace`,`add`,e],{encoding:`utf8`}),n=I(`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 or(){return N.join(R.homedir(),`.agents`,`skills`,`coder`)}function sr(){try{let e=F.readFileSync(N.join(or(),`SKILL.md`),`utf8`);return/^\s*version:\s*(\S+)/m.exec(e)?.[1]??null}catch{return null}}function cr(e){let t=or();try{let n=N.join(e,`plugins`,`agents`,`skills`,`coder`);F.rmSync(t,{recursive:!0,force:!0}),F.mkdirSync(t,{recursive:!0}),F.cpSync(n,t,{recursive:!0});let r=N.join(t,`SKILL.md`),i=F.readFileSync(r,`utf8`).replace(`
|
|
8
|
-
---
|
|
9
|
-
`,`\nmetadata:\n version: ${c()}\n---\n`);return F.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 lr(){let e=`codex`;if(I(`codex`,[`mcp`,`get`,`coder`],{encoding:`utf8`}).status===0)return{marketplace:e,installed:!0,note:`Coder MCP server already registered with Codex.`};let t=I(`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 ur(){let e=N.join(R.homedir(),`.cursor`,`mcp.json`);try{let t=F.existsSync(e)?JSON.parse(F.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.`}:(F.mkdirSync(N.dirname(e),{recursive:!0}),F.writeFileSync(e,JSON.stringify({...t,mcpServers:{...r,coder:{type:`stdio`,command:`coder`,args:[`mcp`]}}},null,2)+`
|
|
10
|
-
`,{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 dr(e){if(e.available)return null;let t=I(`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 fr=`0.159.1`,pr={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 mr(e){let t=/(\d+\.\d+\.\d+)/.exec(String(e??``));return t?t[1]:null}function hr(e,t,n){let r=t?pr[e][t]:void 0,i=mr(n.detail);return!r||!i||Zn(i,r)>=0?null:`${e} ${i} predates ${t} (needs ${r}), so it may fail or run another model. Run: ${e} update`}function gr(e){if(!e.available)return null;let t=mr(e.detail);if(!t||Zn(t,`0.159.1`)>=0)return null;let n=I(`codex`,[`update`],{encoding:`utf8`});return n.status!==0&&(n=I(`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 >= ${fr}); auto-update failed: ${(n.stderr||`codex/npm not found`).trim()}. Run: codex update`}}async function _r(e,t={},n){let r=t.hosts??[],i=r.find(e=>![`claude`,`agents`,`codex`,`cursor`].includes(e));if(i)throw new z(`invalid-option`,`Unknown host "${i}". Use claude, agents, codex or cursor.`,{hint:`Codex, Pi, OpenCode, and other Agent Skills hosts: coder setup-host agents`});let a=e=>r.includes(e);n?.();let o=X(e),s=gr(o);s?.updated&&(o=X(e));let c=o.available?await Hn(e):{loggedIn:!1,detail:o.detail},l=Pr(),u=l.available?Fr():{loggedIn:!1,detail:l.detail},d=W();if(!F.existsSync(d)){let e=o.available?[`codex`,`claude`]:l.available?[`claude`,`codex`]:[`codex`,`claude`];Bt({...B,chain:e})}let f=be(),p=a(`claude`)?ar(f):null,m=a(`agents`)||a(`codex`)||a(`cursor`)?cr(f):null,h=[];(a(`codex`)||o.available&&(a(`agents`)||!r.length))&&h.push(lr()),(a(`cursor`)||!r.length&&F.existsSync(N.join(R.homedir(),`.cursor`)))&&h.push(ur()),p&&h.push({...p,note:p.installed?`Coder MCP server is declared by the Claude Code plugin.`:`Install the Claude Code plugin to register its Coder MCP server.`});let g=G(e),_=o.available&&c.loggedIn||l.available&&u.loggedIn;return{codex:{available:o.available,detail:o.detail,auth:c.detail,loggedIn:c.loggedIn},...s?{codexUpdate:s}:{},claude:{available:l.available,detail:l.detail,auth:u.detail,loggedIn:u.loggedIn},configFile:d,runtime:Ce(new URL(`../bin/coder.mjs`,import.meta.url)),...p?{claudePlugin:p}:{},...m?{agentsSkill:m}:{},mcp:h,config:g,ready:_}}async function vr(e={},t){let n=!e.pluginsOnly,r=!e.cliOnly,i=be(),a=N.join(i,`plugins/claude/.claude-plugin/plugin.json`),o={cli:c(),claude:v(a)},s={};if(n){let n=rr(S),[r,...i]=e.pm&&Yn[e.pm]||n.command,a=e.pm??n.pm;t?.(`via ${a}`);let l=I(r,i,{encoding:`utf8`});if(l.error?.code===`ENOENT`)throw new z(`invalid-option`,`${a} not found on PATH. Re-run with --pm <npm|pnpm|yarn|bun>, or update manually: ${r} ${i.join(` `)}`);if(l.status!==0){let e=(l.stderr||l.stdout||``).trim();throw new z(`invalid-option`,`CLI update failed (${a}).${e?`\n${e}`:``}\nRun manually: ${r} ${i.join(` `)}`)}er();let u=c();s.cli={pm:a,from:o.cli,to:u,changed:u!==o.cli}}if(r){if(e.claude||!e.codex&&Pr().available){let e=ar(i);s.claudePlugin={installed:e.installed,note:e.note,from:o.claude,to:v(a)}}if(F.existsSync(or())){let e=sr(),t=cr(i);s.agentsSkill={installed:t.installed,note:t.note,from:e,to:sr()}}}return s}function yr(e=[],t={}){return _r(N.resolve(t.cwd??`.`),{hosts:e})}function br(){let e=process.env.CLAUDE_CONFIG_DIR||N.join(R.homedir(),`.claude`);return N.join(e,`projects`)}async function xr(e,t,n){if(!/^[a-zA-Z0-9_-]+$/.test(e))return null;let r=n?N.join(n,`projects`):br(),i=null;for(let n of await F.promises.readdir(r).catch(()=>[])){let a=N.join(r,n,`${e}.jsonl`);if(!F.existsSync(a))continue;let o=F.createReadStream(a,{encoding:`utf8`}),s=De.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 Sr(e){if(!e)return!1;let t=br(),n=!1;try{for(let r of F.readdirSync(t)){let i=N.join(t,r,`${e}.jsonl`);F.existsSync(i)&&(F.rmSync(i,{force:!0}),n=!0)}}catch{}return n}const Cr=`coder-mcp-status`,wr=new Map,Tr=`CODER_CLAUDE_VERSION`;function Er(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 Dr(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 Or(e,t,n=!1){if(!t)return[];let r;try{r=F.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=Dr(r.slice(0,e))+1,s=Math.max(1,Dr(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 kr(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 Ar(e,t,n){let r=String(t.file_path??t.notebook_path??t.path??``),i=r?N.isAbsolute(r)?r:N.resolve(n,r):``,a=r?s(n,i)||r:`(unknown path)`,o=t.path?` in ${s(n,String(t.path))}`:``;if(e===`Write`){let e=Dr(String(t.content??``));return`Write ${a} ${e?`L1-L${e}`:`(empty file)`}`}if(e===`Edit`){let e=Or(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=>Or(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)}: `:``}${kr(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 c=Object.entries(t??{}).map(([e,t])=>`${e}=${kr(t)}`).join(` `);return c?`${e} ${c}`:e}function Z(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 jr(e,t,n){let r=P.platform===`win32`?t[Object.keys(t).sort().find(e=>e.toLowerCase()===`path`)??`PATH`]??P.env.PATH??``:t.PATH??`/usr/bin:/bin`,i=/[\\/]/.test(e)?[``]:[...P.platform===`win32`?[n]:[],...r.split(N.delimiter)],a=P.platform===`win32`&&!N.extname(e)?[``,...(t.PATHEXT??`.EXE;.COM`).split(`;`)]:[``];for(let t of i)for(let r of a){let i=N.resolve(n,t,e+r);try{if(F.accessSync(i,F.constants.X_OK),F.statSync(i).isFile())return F.realpathSync(i)}catch{}}return N.resolve(n,e)}function Mr(e,t){let n=jr(`claude`,g(e),t),r=wr.get(n);return{[Tr]:r===void 0?void 0:JSON.stringify({executable:n,detail:r})}}function Nr(e,t,n){let r=jr(e,t,n),i=wr.get(r);if(i!==void 0)return i;try{let e=JSON.parse(t[Tr]??`null`);if(e?.executable===r&&typeof e.detail==`string`)return wr.set(r,e.detail),e.detail}catch{}return Pr(e,t,n).detail}function Pr(e=`claude`,t=P.env,n=P.cwd()){t=g(t);let r=jr(e,t,n),i=I(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 wr.set(r,o),{available:a,detail:o}}function Fr(){if(P.env.CLAUDE_CODE_OAUTH_TOKEN)return{loggedIn:!0,detail:`CLAUDE_CODE_OAUTH_TOKEN configured`};if(P.env.ANTHROPIC_API_KEY)return{loggedIn:!0,detail:`ANTHROPIC_API_KEY configured`};let e=I(`claude`,[`auth`,`status`,`--json`],{encoding:`utf8`,env:g()});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 Ir=(e,t)=>[`mcp`,e,...t===void 0?[]:[t]].map(e=>e.replace(/[^A-Za-z0-9_-]/g,`_`)).join(`__`),Lr=`coder-approval`;function Rr(e,t){let n=t.permissions??`auto`,r=t.mcpServers??[],i={};n===`auto`&&t.approvalTaskId&&(i[Lr]={type:`stdio`,command:P.execPath,args:[S,`task`,`mcp`,t.approvalTaskId,`--cwd`,e],env:{[li]:`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 zr(e,t,n,r,i,a){let o=[`-p`,`--input-format`,`stream-json`,`--output-format`,`stream-json`,`--verbose`,`--replay-user-messages`],s=mr(i);if(s&&Zn(s,`2.1.94`)>=0&&o.push(`--thinking-display`,`summarized`),o.push(t.resumeSessionId?`--resume`:`--session-id`,n),t.model&&o.push(`--model`,t.model),t.effort&&o.push(`--effort`,t.effort),t.systemPrompt&&o.push(`--append-system-prompt-file`,a??N.join(t.taskRoot??e,`.claude-system.md`)),t.excludeDynamicSections&&o.push(`--exclude-dynamic-system-prompt-sections`),t.settingSources&&o.push(`--setting-sources`,t.settingSources),t.outputSchema){let{$schema:e,...n}=t.outputSchema;o.push(`--json-schema`,JSON.stringify(n))}let c=t.permissions??`auto`,l=t.additionalDirectories??[],u=c===`read-only`?t.readOnlyAllowedTools??[]:[],d=t.mcpServers??[],f=Rr(e,t),p=c===`auto`&&t.approvalTaskId,m=d.flatMap(e=>e.tools?.length?e.tools.map(t=>Ir(e.name,t)):[Ir(e.name)]),h=(t.deniedMcpTools??[]).map(([e,t])=>Ir(e,t)),g=Object.keys(f).length?[`--mcp-config`,r??N.join(t.taskRoot??e,`.claude-mcp.json`)]:t.nativeMcp?[]:[`--mcp-config`,`{"mcpServers":{}}`];t.nativeMcp||o.push(`--strict-mcp-config`,`--no-chrome`),p?(o.push(`--permission-mode`,`default`,...g,`--permission-prompt-tool`,Ir(Lr,`approval_prompt`)),m.length&&o.push(`--allowedTools`,...m)):u.length?o.push(...Ye.filter(e=>P.env.CODER_MACHINE_SANDBOX!==`1`||e!==`Bash`),...g,`--allowedTools`,...u,...m):(o.push(...Je[c]??Je.auto,...g),m.length&&o.push(`--allowedTools`,...m)),h.length&&o.push(`--disallowedTools`,...h);for(let e of l)o.push(`--add-dir`,e);let _=et(c,e,t.allowedNetworkHosts??[],l,P.env[Ze]!==`1`),v={..._?JSON.parse(_):{},...t.nativeMcp?{}:{disableClaudeAiConnectors:!0},...t.promptCacheTtl&&s&&Zn(s,`2.1.242`)>=0?{promptCacheTtl:t.promptCacheTtl}:{}};return Object.keys(v).length&&o.push(`--settings`,JSON.stringify(v)),o}function Br(e,t){return Object.assign(Error(e),{retryable:t})}function Vr(e,t){let n=t&&Zt(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 Hr(e){let t=!0;return{sendInitial(t,n){return new Promise((r,i)=>{e(`${JSON.stringify(Vr(t,n))}\n`,e=>{e?i(e):r()})})},sendSteer(n,r){return t?new Promise((t,i)=>{e(`${JSON.stringify(Vr(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(Br(`Failed to write Claude live steer: ${e.message}`,r))})}):Promise.reject(Br(`Claude turn is no longer accepting live input.`,!0))},stopAccepting(){t=!1}}}async function Ur(e){return Jt(`coder-claude-steer-`,async(t,n)=>{if(n)throw Br(`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 Br(`Invalid Claude steer request.`,!1);return await e(r,t.command),{accepted:!0}})}async function Wr(e,t,n=3e3,r){if(!t.trim())return{steered:!1,retryable:!1,detail:`empty follow-up`};let i=await Yt(e,{id:Zt(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 Gr(e,t){let n=await Kr(e,t);return!t.resumeSessionId||!n.error?.message?.includes(`No conversation found with session ID`)?n:(t.onProgress?.({kind:`warning`,message:_e}),Kr(e,{...t,resumeSessionId:null}))}async function Kr(e,t){let n=t.resumeSessionId??L(),r=Rr(e,t),i=Object.keys(r).length?N.join(t.taskRoot??e,`.claude-mcp-${L()}.json`):void 0,a=t.systemPrompt?N.join(t.taskRoot??e,`.claude-system-${L()}.md`):void 0;for(let[e,n]of[[i,`${JSON.stringify({mcpServers:r})}\n`],[a,t.systemPrompt]])e&&(F.mkdirSync(N.dirname(e),{recursive:!0}),F.writeFileSync(e,n,{encoding:`utf8`,flag:`wx`,mode:384}));A(`claude.prepare`,{resume:!!t.resumeSessionId});let o=g({...P.env,...t.env}),s=zr(e,t,n,i,Nr(t.executable??`claude`,o,e),a),c=()=>{for(let e of[i,a])if(e)try{F.unlinkSync(e)}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 l=we(t.executable??`claude`,s,{cwd:e,stdio:[`pipe`,`pipe`,`pipe`],env:o}),u=``,d=``,f=[],p=null,m=n,h=null,g=!1,_=Hr((e,t)=>l.stdin.write(e,t)),v=Date.now(),y=new Map,ee=0,b=0,x=null,S,C=0,w=n=>{if(!(!n||typeof n!=`object`)){if(c(),t.onHeartbeat?.(),n.type===`system`&&n.subtype===`init`&&n.session_id)m=n.session_id,n.mcp_servers?.some(e=>e.status===`failed`)&&l.stdin.write(`${JSON.stringify({type:`control_request`,request_id:Cr,request:{subtype:`mcp_status`}})}\n`);else if(n.type===`control_response`&&n.response?.request_id===Cr)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`?(S=e.message?.id,x=e.message?.usage):e?.type===`message_delta`&&(x={...x,...e.usage});let t=Z(x);b=t?t.input+t.cachedInput:0}else if(n.type===`assistant`||n.type===`user`){let r=n.type===`assistant`?Z(n.message?.usage):null;if(n.type===`assistant`&&!n.parent_tool_use_id){(!S||S!==n.message?.id)&&(x=null),S=n.message?.id,(!x||r&&r.input+r.cachedInput>0)&&(x=n.message?.usage);let e=Z(x);b=e?e.input+e.cachedInput:0}if(r){ee+=r.output;let e=r.input+r.cachedInput+ee;(!C||e-C>=1e3)&&(C=e,t.onProgress?.({kind:`usage`,tokens:{...r,output:ee,total:e},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:Ar(n,r.input??{},e),threadId:m})}else if(r?.type===`tool_result`||r?.type?.endsWith(`_tool_result`)){let e=Er(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(),l.stdin.end());v=Date.now()}};l.stdout.on(`data`,e=>{u+=e;let t;for(;(t=u.indexOf(`
|
|
11
|
-
`))>=0;){let e=u.slice(0,t).trim();if(u=u.slice(t+1),e)try{w(JSON.parse(e))}catch(e){f.push(`Invalid Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}}}),l.stderr.on(`data`,e=>{d+=e});let T=()=>{_.stopAccepting(),l.kill(`SIGTERM`),c();let e=h?.endpoint;e?.startsWith(`file:`)&&F.rmSync(e.slice(5),{recursive:!0,force:!0}),P.exit(143)};P.on(`SIGTERM`,T),(async()=>{t.onSteerReady&&(h=await Ur((e,t)=>_.sendSteer(e,t))),await _.sendInitial(t.prompt,t.command),h&&t.onSteerReady?.(h.endpoint)})().catch(e=>{g||(g=!0,_.stopAccepting(),l.kill(`SIGTERM`),c(),P.removeListener(`SIGTERM`,T),h?.close(),i(e))}),l.on(`error`,e=>{g||(g=!0,_.stopAccepting(),P.removeListener(`SIGTERM`,T),c(),h?.close(),i(Error(`claude spawn failed: ${e.message}`)))}),l.on(`close`,async e=>{if(g)return;g=!0,_.stopAccepting(),P.removeListener(`SIGTERM`,T),c(),A(`claude.exit`),await h?.close(),A(`claude.teardown.done`);let n=u.trim();if(n)try{w(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),s=e!==0||p?.is_error===!0||p==null||f.length>0;A(`claude.usage.start`);let l=Z(p?.usage);if(!b&&p){let e=Z(await xr(m,a,o.CLAUDE_CONFIG_DIR).catch(()=>null)),t=e&&e.input+e.cachedInput>0?e:l;b=t?t.input+t.cachedInput:0}A(`claude.usage.done`),r({status:+!!s,threadId:p?.session_id??m,turnId:null,finalMessage:i,tokens:l,contextTokens:b,model:p?.modelUsage&&Object.keys(p.modelUsage).join(`+`)||t.model||null,error:s?{message:f[0]||i||d.trim()||`claude exited ${e}`}:null})})})}const qr=new Set(`commit.checkout.switch.restore.stash.reset.rebase.merge.push.pull.cherry-pick.revert.clean.am.apply.tag.branch.worktree.filter-branch.filter-repo.gc.prune.reflog.remote.submodule.config`.split(`.`)),Jr=[/\bsudo\b/,/\brm\s+(-[a-zA-Z]*r[a-zA-Z]*f|-[a-zA-Z]*f[a-zA-Z]*r)\b.*\s(\/\*?|~\/?|\$HOME\/?)(\s|$)/,/\b(shutdown|reboot|halt|poweroff)\b/,/\bmkfs\b|\bdiskutil\s+erase/i,/\b(chmod|chown)\b.*-R.*\s\/(\s|$)/,/\bkill(all)?\s+-9\s+1\b/,/curl[^|;&]*\|\s*(ba|z|da)?sh\b/,/wget[^|;&]*\|\s*(ba|z|da)?sh\b/,/\blaunchctl\b|\bsystemctl\b/,/\bdefaults\s+write\b/,/>\s*\/dev\/(sd|disk)/],Yr=new Set([`status`,`log`,`diff`,`show`,`blame`,`rev-parse`,`ls-files`,`ls-tree`,`cat-file`,`describe`,`shortlog`,`grep`,`branch`,`stash`]);function Xr(e){return e.match(/^\s*(?:ba|z|da)?sh\s+(?:-[a-zA-Z]+\s+)*(?:-c\s+)?(["'])([\s\S]*)\1\s*$/)?.[2]??e}function Zr(e){return e.trim().split(/\s+/).filter(Boolean)}function Qr(e){let t=e.find((e,t)=>t>0&&!e.startsWith(`-`));if(!t)return{decision:`accept`,reason:`bare git`};if(t===`branch`&&e.some(e=>/^-(d|D|m|M|c|C|f|u)|^--(delete|move|copy|force|set-upstream)/.test(e)))return{decision:`decline`,reason:`git branch write operation (git is read-only for Coder)`};if(t===`stash`){let t=e.find((e,t)=>t>1&&!e.startsWith(`-`));return t===`list`||t===`show`?{decision:`accept`,reason:`git stash ${t} is read-only`}:{decision:`decline`,reason:`git stash write operation (git is read-only for Coder)`}}return Yr.has(t)?{decision:`accept`,reason:`git ${t} is read-only`}:qr.has(t)?{decision:`decline`,reason:`git ${t} is a write operation (git is read-only for Coder)`}:{decision:`escalate`,reason:`unrecognized git subcommand: ${t}`}}function $r(e,t={}){let n=Xr(String(e??``));if(!n.trim())return{decision:`escalate`,reason:`empty command`};for(let e of Jr)if(e.test(n))return{decision:`decline`,reason:`matches hard-deny pattern ${e}`};if(/\$\(|`|<\(/.test(n))return{decision:`escalate`,reason:`contains command substitution`};let r=n.split(/&&|\|\||;|\||\r?\n/).map(e=>e.trim()).filter(Boolean);if(r.length>1){let e={decision:`accept`,reason:`all segments safe`};for(let n of r){let r=$r(n,t);if(r.decision===`decline`)return r;r.decision===`escalate`&&(e=r)}return e}let i=Zr(n),a=N.basename(i[0]??``);if(a===`git`)return Qr(i);let o=t.networkHost;return o?(t.allowedNetworkHosts??[]).some(e=>o===e||o.endsWith(`.${e}`))?{decision:`accept`,reason:`network host ${o} is allowlisted`}:{decision:`escalate`,reason:`network access to ${o}`}:{decision:`escalate`,reason:`command needs approval: ${a||`(unknown)`}`}}function ei(e,t){if(!e.length)return{decision:`escalate`,reason:`file change with no resolvable paths`};for(let n of e){let e=N.resolve(t,n),r=N.relative(t,e);if(r.startsWith(`..`)||N.isAbsolute(r))return{decision:`escalate`,reason:`path outside workspace: ${n}`};if(r===`.git`||r.startsWith(`.git${N.sep}`))return{decision:`decline`,reason:`direct .git modification: ${n}`}}return{decision:`accept`,reason:`all paths inside workspace`}}function ti(e){return N.join(e,`approvals`)}function ni(e){let t=ti(e);return F.existsSync(t)?F.readdirSync(t).filter(e=>e.endsWith(`.request.json`)).flatMap(e=>{let n=e.replace(/\.request\.json$/,``),r=_(N.join(t,e));if(!r)return[];let i=_(N.join(t,`${n}.response.json`));return[{...r,id:n,response:i}]}).sort((e,t)=>String(e.createdAt??``).localeCompare(String(t.createdAt??``))):[]}function ri(e,t,n){let r=ti(e),i=N.join(r,`${t}.request.json`);if(!F.existsSync(i))throw Error(`No pending approval "${t}" for this task.`);F.writeFileSync(N.join(r,`${t}.response.json`),`${JSON.stringify({decision:n,answeredAt:new Date().toISOString()},null,2)}\n`,`utf8`)}async function ii(e,t,{timeoutMs:n,onEvent:r}){let i=ti(e);F.mkdirSync(i,{recursive:!0});let a=`apr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`;F.writeFileSync(N.join(i,`${a}.request.json`),`${JSON.stringify({...t,createdAt:new Date().toISOString()},null,2)}\n`,`utf8`),r?.({kind:`approval-escalated`,approvalId:a,summary:t.summary,message:`Approval needed (${a}): ${t.summary}. Answer with: coder task approve ${N.basename(e)} ${a} [--deny]`});let o=N.join(i,`${a}.response.json`),s=await ye(i).until(()=>_(o)??void 0,n);if(s){let e=s.decision===`accept`?`accept`:`decline`;return r?.({kind:`approval-answered`,approvalId:a,decision:e}),e}return r?.({kind:`approval-timeout`,approvalId:a,message:`Approval ${a} timed out; declining.`}),`decline`}function ai(e,t={}){return ii(e,{method:`simulate`,summary:`simulated approval probe (--simulate-approval)`},{timeoutMs:t.timeoutMs??12e4,onEvent:t.onEvent??null})}function oi({workspaceRoot:e,taskDir:t,mode:n=`auto`,escalationTimeoutMs:r=12e4,allowedNetworkHosts:i=[],onEvent:a=null}){return async(o,s,c)=>{let l=c?.itemIndex?.get(s.itemId??``),u,d;if(o===`item/commandExecution/requestApproval`){let t=s.command??l?.command??``,n=s.cwd??l?.cwd??e;u={method:o,summary:`Run command. ${t||`Unknown command`}${s.reason?`. ${s.reason}`:``}`,command:t,cwd:n,params:s},d=$r(t,{networkHost:s.networkApprovalContext?.host??null,allowedNetworkHosts:i})}else if(o===`item/fileChange/requestApproval`){let t=(l?.changes??[]).map(e=>e.path).filter(e=>!!e);u={method:o,summary:`Apply file changes. ${t.join(`, `)||`Unknown paths`}${s.reason?`. ${s.reason}`:``}`,paths:t,params:s},d=ei(t,e)}else throw a?.({kind:`approval-unsupported`,method:o}),Error(`Coder does not handle server request ${o}; treating as denied.`);return n===`deny`&&(d={decision:`decline`,reason:`deny mode`}),a?.({kind:`approval-decision`,method:o,...d,summary:u.summary}),{decision:d.decision===`escalate`?await ii(t,u,{timeoutMs:r,onEvent:a}):d.decision}}}const si=/usage|quota|rate.?limit|429|401|unauthorized|not authenticated|login|insufficient|exhausted|not available|\bat capacity\b|ENOENT/i;function ci(e){return si.test(e)&&!x(e)}const li=`CODER_WORKER`;var ui=class extends Error{engine;detail;constructor(e,t){super(t),this.engine=e,this.detail=t}};function di(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&&yt(n)?n:void 0},s=e=>{let n=e?t.models?.[e]:void 0;return n&&H(n)?n:void 0},c=e=>{try{return zt(e,t)}catch(e){throw new z(`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 Ge?n=`claude`:i in V?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 V||n in Ge||n in(t.models??{})?` "${n}" is a model; use --model ${n}.`:``;throw new z(`invalid-option`,`Invalid --engine "${n}". Use codex, claude, or custom.${e}`)}let l=t.engines[n]??{},u=i??l.model??null,d=a??l.effort??null;if(o(u)){let e=c(u);e&&(r||(n=e.engine),u=e.model,d=a??e.effort??d)}let f=e.permissions??l.permissions??`auto`;try{Rt(t,u)}catch(e){throw new z(`invalid-option`,e instanceof Error?e.message:String(e))}if(n===`custom`){let e=Object.entries(t.models??{}).filter(([,e])=>H(e)).map(([e])=>e);if(!u&&e.length===1&&(u=e[0]),!u||!s(u))throw new z(`invalid-option`,u?`No custom model named "${u}". 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 p=n===`claude`;if(!(f in qe))throw new z(`invalid-option`,`Invalid --permissions "${f}". Use one of: ${Object.keys(qe).join(`, `)}`);if(!p&&d&&!We.has(d))throw new z(`invalid-option`,`Invalid codex --effort "${d}". Use one of: ${[...We].join(`, `)}`);if(p&&d&&!Ke.has(d))throw new z(`invalid-option`,`Invalid claude --effort "${d}". Use one of: ${[...Ke].join(`, `)}`);return{engine:n,model:u,effort:d,permissions:f}}const{connection:fi,description:pi,...mi}=gt.shape,hi=M({name:j().check(e(1)),...mi}).check(O(e=>!!e.command!=!!e.url,`one of command or url`)),gi=o(hi);function _i(e,t={}){let n=e.trim();return/^[\[{]/.test(n)?yi(n):(n===`all`?Object.keys(t):n.split(`,`).map(e=>e.trim()).filter(Boolean)).map(e=>{let n=t[e];if(!n)throw new z(`invalid-option`,`Unknown MCP server "${e}".`,{hint:`configured: ${Object.keys(t).join(`, `)||`none`}; or pass a JSON array`});return{name:e,...n}})}function vi(e,t={},n={},r={}){typeof e==`string`&&!e.trim()&&(e=void 0);let i=typeof e==`string`?_i(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(...Ue(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 yi(e){let t;try{t=JSON.parse(e)}catch(e){throw new z(`invalid-option`,`Invalid --mcp JSON: ${e instanceof Error?e.message:String(e)}`)}let n=gi.safeParse(t);if(!n.success)throw new z(`invalid-option`,`Invalid --mcp value: ${i(n.error)}`,{hint:`--mcp '[{"name":"docs","command":"npx","args":["-y","docs-mcp"],"tools":["search"]}]'`});return n.data}function bi(e,t=P.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=>P.stderr.write(`coder: ${e}\n`));return(e??[]).flatMap(e=>{let r=e.repository&&!e.resolved;if(r){for(let t of Ue(e.name,e))o(t);if(!i&&!Be(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(N.sep)?[N.resolve(n,f.command)]:(f.env?.PATH??t.PATH??`/usr/bin:/bin`).split(N.delimiter).map(e=>N.resolve(n,e,f.command))).find(e=>{try{return F.accessSync(e,F.constants.X_OK),F.statSync(e).isFile()}catch{return!1}});if(!p)throw new z(`invalid-option`,`MCP server "${e.name}" command cannot be resolved.`);return f.command=F.realpathSync(p),f.args=f.args?.map(e=>{if(e.startsWith(`-`)||N.isAbsolute(e))return e;let t=N.resolve(n,e),r=F.existsSync(t)&&F.statSync(t).isFile();return!r&&!e.startsWith(`./`)&&!e.startsWith(`../`)?e:r?F.realpathSync(t):t}),[f]})}function xi(e,t=[]){let n=[...new Set(t.map(t=>N.resolve(e,t)))];for(let e of n)if(!F.statSync(e,{throwIfNoEntry:!1})?.isDirectory())throw new z(`invalid-option`,`--add-dir ${e} is not a directory.`);return n}function Si(e,t){return e===`read-only`&&Xe.test(t??``)}const Ci=[`read-only`,`workspace-write`,`auto`];function wi(e,t,n){if(!t)return n.permissions;if(Ci.indexOf(t)>Ci.indexOf(n.permissions))throw new z(`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 Ti(e,t,n={},r=!1){let i=y(e,t),o=F.openSync(N.join(i,`worker.log`),`a`),s={...P.env,...n};A(`worker.spawn`,{taskId:t});let c=we(P.execPath,[S,`task`,`worker`,t,`--cwd`,e],{cwd:e,detached:!0,stdio:[`ignore`,o,o,`ipc`],env:{...s,...Mr(s,e),[li]:`1`,CODER_ENGINE_CHECKED:r?`1`:void 0}});return c.on(`error`,()=>{}),c.unref(),c.channel?.unref?.(),F.closeSync(o),a(e,t,{pid:c.pid??null}),c}async function Ei(e,t,n,r,i){let o=n.cwd,s=n.availability?.[t.engine===`custom`?`codex`:t.engine]??(t.engine===`claude`?Pr(`claude`,{...P.env,...n.connectionEnv},o):X(o)),c=t.model?e.models?.[t.model]:void 0;if(!s.available&&c&&H(c)){let e=dr(s);n.onNote?.(e.note),s=X(o)}if(!s.available)throw new ui(t.engine,s.detail);let l=c?null:t.engine===`claude`?hr(`claude`,t.model,s):hr(`codex`,Ft(t.model),s);l&&n.onNote?.(l);let d=n.addDirs??[],f=n.taskId??xe(),h=n.resume?.engine===t.engine?n.resume:void 0,g=a(o,f,{status:`queued`,...n.taskId?{dispatchId:L()}:{},name:r.name??null,system:n.system??null,promptParts:{cwd:o,...n.agentPrompt,instructions:n.system??void 0,conversation:n.conversation,local:P.env.CODER_MCP_MODE!==`cloud`},engine:t.engine,prompt:n.prompt,...n.outputSchema?{outputSchema:n.outputSchema}:{},model:t.model,effort:t.effort,permissions:t.permissions,resumeThreadId:h?.threadId??null,...h?{threadId:h.threadId,...h.previousThreadIds?{previousThreadIds:h.previousThreadIds}:{},...h.pendingRollover?{pendingRollover:h.pendingRollover}:{}}:{},cwd:o,...r.simulateApproval?{simulateApproval:!0}:{},...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,...d.length?{addDirs:d}:{}});for(let e of new Set(n.mcpWarnings??[]))T(o,f,{kind:`warning`,message:e});n.resume&&!h&&T(o,f,{kind:`warning`,message:_e});let v=N.join(y(o,f),`log.jsonl`),b=F.existsSync(v)?F.statSync(v).size:0,x=Ti(o,f,n.connectionEnv,!0);if(n.onWorker?.(f,x),!i)return{taskId:f,task:p(o,f)??g,engine:t.engine,startupCheck:`pending`};let S=ee(o,f,x),C=Se(v,b),w=!1,E=!1,D=()=>{let e=C().map(e=>{try{return JSON.parse(e)}catch{return{kind:`unknown`}}});return E||=e.some(e=>e.kind===`tool`||e.kind===`reply`),e.some(e=>e.phase!==`starting`&&![`status`,`usage`].includes(e.kind??``))},te=Date.now()+15e3,O,k=g;try{for(;Date.now()<(O===void 0?te:O+5e3)&&(k=p(o,f)??k,!(ae.includes(k.status)||u(o,f).at(-1)?.status===0||ni(y(o,f)).some(e=>!e.response)||(w=D()||w,k.threadId&&(O??=Date.now(),w))));)await S.wait(Math.min(3e4,(O===void 0?te:O+5e3)-Date.now()))}finally{S.close()}if(k.status===`failed`){D();let e=N.join(y(o,f),`result.json`),n=_(e),r=n?.error?.message??``,i=m(o,f,5).map(e=>e.message??``).join(`
|
|
12
|
-
`),a=r||i;throw Si(t.permissions,a)?new z(`read-only-unavailable`,a):ci(a)&&!Ai(n,E)?new ui(t.engine,a):new z(`startup-failed`,a,{taskId:f})}return{taskId:f,task:k,engine:t.engine,startupCheck:k.threadId?`passed`:`pending`}}function Di(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?{system:r}:{},task:i}}}async function Oi(e,t={}){if(P.env.CODER_WORKER)throw new z(`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 z(`invalid-option`,`outputSchema must be an object.`);if(!e.prompt.trim())throw new z(`invalid-option`,`Missing task text.`,{hint:[`Usage: coder run "<task text>"`,`Help: coder task run --help`]});e={...e,addDirs:xi(e.cwd,e.addDirs)};let n=t.config??G(e.cwd),r=vi(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,simulateApproval:e.simulateApproval};for(;;){let r=di(a,n);try{return await Ei(n,r,i,o,t.waitForStartup!==!1)}catch(t){if(!(t instanceof ui))throw t;let i=ki(t.engine,n);if(!i){let n=Di(t.engine,t.detail,r.permissions,e.system,e.prompt);throw new z(`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,simulateApproval:void 0}}}}function ki(e,t){return t.chain.slice(t.chain.indexOf(e)+1).find(e=>e!==`custom`||Object.values(t.models??{}).some(H))}function Ai(e,t=!1){return!!(t||e?.fileChanges?.length||e?.commandExecutions?.length)}function ji(e,t,n){if(t.status!==`failed`)return;let r=t.result;if(!r||!ci(r.error?.message??``))return;let i=Date.parse(t.turns.at(-2)?.at??t.task.resumedAt??t.task.createdAt);if(!Ai(r,m(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 ki(t.task.engine,n??G(e))??null}function Mi(e,t){return _(N.join(y(e,t),`result.json`))}function Ni(e,t,n=0){if(n===0)return[];let r=m(e,t,2**53-1);return n===`all`?r:pe(r,n)}function Pi(e,t,n={}){let r=p(e,t);if(!r)throw Error(`No task found for "${t}".`);return{taskId:t,status:r.status,result:te.includes(r.status)?null:Mi(e,t),steps:Ni(e,t,n.tail),turns:u(e,t),task:r}}async function Fi(e,t,n={}){let r=p(e,t);if(!r)throw Error(`No task found for "${t}".`);let i=await Ii(e,r,1e3,n);if(i.reason===`approval`){let e=i.approval;throw new z(`approval-pending`,`Approval needed for task ${t}: ${e.summary}`,{taskId:t,approval:e})}n.onSettle?.();let a=i.task;return{taskId:t,status:a.status,result:Mi(e,t),steps:Ni(e,t,n.tail),turns:u(e,t),task:a}}async function Ii(e,t,n=1e3,{turn:r,worker:i,rollover:a=!1,signal:o}={}){let s=t,c=ee(e,t.id,i);try{let t=oe();for(;;){o?.throwIfAborted(),s=p(e,s.id)??s;let i=r===void 0?void 0:u(e,s.id)[r];if(s=i?{...s,status:i.status===0?`completed`:`failed`}:d(e,s,t),a?!s.rollingOver:ae.includes(s.status))return{task:s,reason:`terminal`};let l=ni(y(e,s.id)).find(e=>!e.response);if(l){let e=l.params;return{task:s,reason:`approval`,approval:{id:l.id,summary:String(l.summary??``),cwd:typeof l.cwd==`string`?l.cwd:null,networkHost:e?.networkApprovalContext?.host??null}}}await c.wait(n,o)}}finally{c.close()}}function Li(e=P.stdout){try{return e.getWindowSize?.()[0]??e.columns}catch{return e.columns}}function Ri(e=P.stdout){try{return e.getWindowSize?.()[1]??e.rows}catch{return e.rows}}function zi(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 Bi(e){let t=0;for(let n of e.replace(/\x1b\[[0-9;]*m/g,``))t+=zi(n.codePointAt(0));return t}function Vi(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=zi(a.codePointAt(0));if(n+o>t)return r;n+=o,r+=a.length}return e.length}function Hi(e,t,n){if(t<4||n<1)return[e];let r=[],i=e;for(;Bi(i)>t;){if(r.length===n-1)return[...r,`${i.slice(0,Vi(i,t-1))}…`];let e=Vi(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 Ui(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=zi(o);if(n+c>t-1)return`${r}\x1b[0m${Q.dim(`…`)}`;r+=s,n+=c,i+=s.length}return r}function Wi(){let e=P.stdin;if(!e.isTTY||!P.stdout.isTTY)return()=>{};e.setRawMode(!0),e.resume();let t=e=>{e.includes(3)&&P.kill(P.pid,`SIGINT`),e.includes(26)&&P.kill(P.pid,`SIGTSTP`)};return e.on(`data`,t),e.unref(),()=>{e.off(`data`,t),e.isTTY&&e.setRawMode(!1),e.pause()}}var Gi=class{stream;quietMs;lines=[];painted=[];paintedWidths=[];paintedCols;resizeTimer;tty;constructor(e=P.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=Li(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=Li(this.stream),t=e?this.lines.map(t=>Ui(t,e-1)):this.lines,n=Ri(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(Bi),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 Ki(e){let t=P.env.FORCE_COLOR,n=t!=null&&t!==``&&t!==`0`||t!==`0`&&e.isTTY&&!P.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 Q=Ki(P.stdout),qi=Ki(P.stderr);function Ji(e,t=qi,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(`
|
|
13
|
-
`)}function Yi(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];P.stderr.write(`${qi.red(e)}\n`),i.length&&P.stderr.write(`\n${Ji(i,qi)}\n`),P.exit(n)}function Xi(e){P.stdout.write(`${JSON.stringify(e,null,2)}\n`)}function Zi(e,t=Q){return(JSON.stringify(e,null,2)??`null`).split(`
|
|
14
|
-
`).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(`
|
|
15
|
-
`)}function Qi(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 $i(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 ea(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 ta(e){return`ctx ${$(e.input+e.cachedInput)} · out ${$(e.output)}`}function na(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function ra(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 ia(e,t,n={}){let r=`bold`in n?{style:n}:n,i=r.style??Q,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??Li()??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:na(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?ra(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(`
|
|
16
|
-
`)}\n`}function aa(e){return` ${Q.bold(Q.green(`✔`))} ${e}`}function oa(e){return` ${Q.bold(Q.red(`✘`))} ${e}`}function sa(e,t=0){let n=e.padEnd(t);return e===`running`?Q.green(n):e===`waiting-approval`?Q.yellow(n):e===`failed`||e===`cancelled`?Q.red(n):e===`completed`?Q.blue(n):Q.dim(n)}export{tr as $,bi as A,bt as At,ei as B,Be as Bt,li as C,G as Ct,Si as D,jt as Dt,Oi as E,zt as Et,Ii as F,Tt as Ft,Gr as G,Me as Gt,ni as H,Ue as Ht,Fi as I,Gt as It,Sr as J,Fe as Jt,Wr as K,je as Kt,ri as L,Bt as Lt,vi as M,W as Mt,Ti as N,Dt as Nt,Mi as O,Ct as Ot,ji as P,U as Pt,vr as Q,oi as R,Le as Rt,Hi as S,H as St,wi as T,At as Tt,ai as U,ke as Ut,ii as V,He as Vt,Pr as W,Ae as Wt,ir as X,Ie as Xt,dr as Y,Ne as Yt,yr as Z,z as Zt,Gi as _,Kt as _t,Qi as a,on as at,Ri as b,yt as bt,Zi as c,tn as ct,ta as d,Ye as dt,nr as et,aa as f,We as ft,ia as g,Ot as gt,Xi as h,qe as ht,Yi as i,Wn as it,di as j,Pt as jt,Pi as k,Ft as kt,$ as l,Ke as lt,sa as m,Ze as mt,na as n,Un as nt,$i as o,en as ot,Q as p,V as pt,br as q,Pe as qt,qi as r,Gn as rt,Ji as s,Zt as st,oa as t,X as tt,ea as u,Ge as ut,Wi as v,Ht as vt,Di as w,gt as wt,Bi as x,It as xt,Li as y,Nt as yt,$r as z,Ve as zt};
|
package/dist/prompt-onpyIyXK.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{_ as t}from"./errors-XBA-Ls4n.js";import{Zt as n,p as r,x as i,y as a}from"./output-D95NoAA9.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)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n}),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=await this.tasks.stream(e,r);if(!i.ok||!i.body){let t=await this.tasks.get(e);if(m.has(t.status))return t;if(i.status===401)continue;throw new n(`server`,`The task stream answered ${i.status}.`)}let a=!1;for await(let e of g(i.body))if(e.event===`log`){let n=JSON.parse(e.data);r=n.seq,t.onLog?.(n)}else e.event===`end`&&(a=!0);if(a)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/prompts-B8pKhMcu.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{An as e,Fn as t,Nn as n,On as r,Pn as i}from"./errors-XBA-Ls4n.js";function a(a,o,s,c){let l=e(t(i,{children:[n(`instructions`,{children:[`Answer one question about a Coder task, read-only.`,`You are not the task: never continue, redo or fix its work. The task never sees this question or your answer.`,`Grep or read the files selectively; events can be large.`,`Answer directly and concisely.`].join(`
|
|
2
|
-
`)}),n(`task`,{children:n(r,{value:{id:a.id,name:a.name??void 0,status:a.status,engine:a.engine,model:a.model??void 0,effort:a.effort??void 0,workspace:a.cwd??void 0,created:a.createdAt??void 0,finished:a.completedAt??void 0}})}),n(`task-prompt`,{children:n(r,{children:a.prompt??`(unknown)`})}),n(`files`,{children:[`progress log, one JSON event per line: ${o.log}`,`final result: ${o.result}`,`worker output: ${o.worker}`,a.cwd&&`workspace with the task's code and changes: ${a.cwd}`].filter(Boolean).join(`
|
|
3
|
-
`)}),n(`question`,{children:n(r,{children:s})})]}));return c?`${l}\n\nCoder command ${c}`:l}function o(a,o){return e(t(i,{children:[n(`rules`,{children:[`Review actions a Coder task wants to run outside its OS sandbox.`,`Decline git writes (commit, push, checkout, reset and the like).`,`Decline commands that print secret values, such as env dumps or CLI config and token output.`,`Decline destructive or system-level actions: sudo, rm -rf outside the workspace, killing processes, changing system config, piping downloads to a shell.`,`Temp locations (/tmp, $TMPDIR, OS temp dirs) and paths the task created are workspace scratch; delete them only after checking the progress log.`,`Accept actions the task goal clearly needs: package installs in the workspace, tests, builds, linters, reading system info, network to well-known package registries.`,`Escalate when uncertain, when the action is irreversible beyond the workspace, or when it touches credentials or secrets.`,`Read workspace files or the progress log only when the action line alone is not enough.`,`Reply with only one line of JSON: {"decision":"accept"|"decline"|"escalate","reason":"<short>"}. Acknowledge now with {"decision":"escalate","reason":"ready"}.`].join(`
|
|
4
|
-
`)}),n(`task-goal`,{children:a&&n(r,{children:a.replace(/\s+/g,` `).slice(0,500)})}),n(`progress-log`,{children:o})]}))}const s=e=>`action: ${e.slice(0,500)}`;function c(e){return e?`Reply with only one JSON object matching this JSON Schema, without prose or markdown fences:\n${JSON.stringify(e)}`:`Reply with only one JSON object matching the requested shape, without prose or markdown fences.`}const l=e=>`Your last reply did not match the required JSON: ${e}\nReply again with only the JSON object.`;export{l as a,c as i,o as n,a as r,s as t};
|
package/dist/refresh-D-0K9fo3.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ct as e}from"./errors-XBA-Ls4n.js";import{et as t}from"./output-D95NoAA9.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-CDm0YUU3.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Tn as t}from"./errors-XBA-Ls4n.js";import{Zt as n}from"./output-D95NoAA9.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-onpyIyXK.js";import{o as p}from"./load-zhcrwSRF.js";import{t as m}from"./integrations-DyInAa5g.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:fs/promises";import{promisify as O}from"node:util";import oe from"node:http";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 D.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 O(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 D.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 D.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await D.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=oe.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 D.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-CTFTuaz_.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Zt as t}from"./output-D95NoAA9.js";import{t as n}from"./remote-CDm0YUU3.js";import{t as r}from"./serve-Bzs_lEg-.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-CYTicTb7.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import{Rt as e,qi as t}from"./core-DwsAMCnL.js";import{dn as n,mn as r,sn as i,xt as a}from"./errors-XBA-Ls4n.js";import{mt as o}from"./output-D95NoAA9.js";import{m as s}from"./slack-Bo5l13Rs.js";import{t as c}from"./integrations-DyInAa5g.js";import{n as l,t as u}from"./task-BU1JEK9X.js";import{n as d,t as f}from"./base64url-CsVsW4Id.js";import{_ as ee,g as p,h as te,l as m}from"./http-BZfjbiov.js";import h from"node:path";import g from"node:process";import{existsSync as _,readFileSync as ne}from"node:fs";import{execFile as re}from"node:child_process";import{createCipheriv as v,createDecipheriv as y,createHash as b,createHmac as ie,randomBytes as x,randomUUID as S}from"node:crypto";import C,{isIP as w}from"node:net";import{readFile as ae}from"node:fs/promises";import{lookup as oe}from"node:dns/promises";import{request as se}from"node:https";const ce=i({env:n(r(),r().check(e(1)))}),T=`plain`;function E(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 D(e){return E(e.encryptionKey)}function O(e){let t=E(e);return t?b(`sha256`).update(t).digest().readInt32BE(0):0}function k(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:E(e,t),version:O(e)}))}function A(e){let t=ce.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function le(e,t){let n=D(e);if(!n)return{iv:T,tag:``,ciphertext:Buffer.from(JSON.stringify(A(t))).toString(`base64`)};let r=x(12),i=v(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(A(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function ue(e,t){if(t.iv===T)return A(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of k(e))try{let e=y(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),A(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 de(e,t){let n=D(e);if(!n)return`${T}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=x(12),i=v(`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 j(e,t){if(t.startsWith(`${T}.`))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 k(e))try{let e=y(`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 fe(e,t){if(t.startsWith(`${T}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of k(e))try{let e=y(`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 M(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:G(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`,q(``,`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,K],env:t}}var pe=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=M(e,{...t,CODER_INBOX_SOCKET:l},this.options),r=await p(`docker`,n.args,{PATH:g.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 p(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:g.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 p(`docker`,[`rm`,`-f`,e],{PATH:g.env.PATH??``})}async push(e,t){let n=await p(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,u],{PATH:g.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}},me=t({GithubActionsRunner:()=>F,actionsWorkflow:()=>N});function N(){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: ${U}
|
|
15
|
-
steps:
|
|
16
|
-
- run: |
|
|
17
|
-
sh -c '${q().replaceAll(`'`,`'\\''`)}' coder-task "$TASK" '${K.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 P=e=>f(e);var F=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:G(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}=P(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}=P(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 he(e){if(!w(e))return!0;if(w(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 I=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??oe}async safe(){let e=this.base.hostname.replace(/^\[|\]$/g,``),t=w(e)?[{address:e,family:w(e)}]:await this.resolver(e,{all:!0});if(!t.length)throw Error(`The http runner resolved no address`);if(t.some(e=>he(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??se)(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=x(16).toString(`base64url`),c=ie(`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 L=e=>f(e),R=18e5,ge={"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 _e(e){if(!e)return;let t=(()=>{try{return new URL(e).hostname}catch{return``}})();return Object.entries(ge).find(([e])=>t.includes(e))?.[1]}const z=[{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 `}],ve=`brokered`,B={claude:{api:`api.anthropic.com`,account:[`claude.ai`,`platform.claude.com`]},codex:{api:`api.openai.com`,account:[`auth.openai.com`,`chatgpt.com`]}};function ye(e,t){let n=B[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 be(e={},t,n=z){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=>C.isIP(e)))],o=t.filter(e=>!C.isIP(e)).map(e=>[e,[]]);return{allow:{...Object.fromEntries(o),...Object.fromEntries(i)},...a.length?{subnets:{allow:a.map(e=>`${e}/${C.isIPv6(e)?128:32}`)}}:{}}}function xe(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??[])]}async function Se(){try{return(await import(`@vercel/sandbox`)).Sandbox}catch{throw Error(`The vercel-sandbox runner requires @vercel/sandbox in the adapter app.`)}}function V(e){return e&&typeof e==`object`&&`response`in e&&e.response instanceof Response?e.response.status:void 0}function Ce(e){if(V(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 H=class extends Error{snapshotId;constructor(e,t,n){super(e,n),this.snapshotId=t}},we=class{options;kind=`vercel-sandbox`;sandboxes=new Map;constructor(e={}){this.options=e}api(){return this.options.sandbox?Promise.resolve(this.options.sandbox):Se()}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=[W(),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 H(`Vercel Sandbox ${n.name} is ${n.status}`);return await t(n)}catch(t){let r=V(t);throw(r===404||r===410)&&typeof e==`string`&&this.sandboxes.delete(e),r===410||!n&&typeof e==`string`&&r===404?new H(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=S(),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+R}};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},l;try{c=await this.withSandbox(a.sandbox,async e=>{let t=await e.getCommand(a.command);if(t.exitCode===null&&n-a.startedAt<R)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:2592e6});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(e){if(l=e,e instanceof H){let{failedAt:e,...t}=s;c=t}}let u=await this.withSnapshotLock(e,async t=>{let n=await t.get(e)??{};return n.lease?.owner===r?(await t.put(e,c),c):n});if(l)throw l;return u}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=S(),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+R}};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(e){e instanceof H&&(l=e)}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}}:{}};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&&Ce(t)?new H(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??R)})}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(R)})}}catch(e){throw this.sandboxes.delete(r.name),await this.stopSandbox(r).catch(()=>{}),e}}async start(e,t,n,r={}){t={...t,[o]:`1`,CODER_RUNNER_TARBALL_URL:G(t.CODER_SERVER),CODER_RUNNER_HASH:W()};let i=be(n,r.hosts&&[...xe(t),...r.hosts],r.brokered),a=t=>({cmd:`sh`,args:[`-c`,q(ee().map(e=>`sudo sh -c '${e.replaceAll(`'`,`'\\''`)}'`).join(` && `),``,`setpriv --inh-caps=-all --ambient-caps=-all bun`),`coder-task`,e.id,K],env:t});for(let n=0;;n++){let o;try{o=this.snapshotKey(e);let n=o?await this.snapshot(o,e=>this.detached(e,a({...t,CODER_PREPARE:`1`})),!0,r.waitUntil):void 0,s=await this.detached(n,a({...t,CODER_INBOX_SOCKET:l}),{...i?{networkPolicy:i}:{},...r.timeoutMs?{timeout:r.timeoutMs}:{}});return d({sandbox:s.sandbox,command:s.command})}catch(e){if(!(e instanceof H))throw e;if(o&&e.snapshotId&&this.options.snapshots){let t=e.snapshotId;await this.withSnapshotLock(o,async e=>{let n=await e.get(o);if(n?.snapshotId!==t)return;let{snapshotId:r,sha:i,checkedAt:a,failedAt:s,...c}=n;await e.put(o,c)})}if(n===2)throw e}}}async status(e){let t=L(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(V(e)??0)&&this.sandboxes.delete(t.sandbox),e}}async push(e,t){return this.withSandbox(L(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=L(e).sandbox;try{await(await this.sandbox(t)).stop()}finally{this.sandboxes.delete(t)}}};const U=`ghcr.io/muzam1l/coder-runner:latest`;function W(){let e=new URL(`./runner.json`,import.meta.url),{hash:t}=JSON.parse(ne(_(e)?e:h.join(a,`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 G(e){return`${e.replace(/\/+$/,``)}/runner/${W()}.tgz`}async function Te(e,t,n){if(n.file!==`${W()}.tgz`)return m();try{let e=new URL(`./runner.tgz`,import.meta.url),t=await ae(_(e)?e:h.join(a,`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 m();throw e}}const K=`
|
|
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 q(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 Ee=[`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`];function J(e,t=``){return{get:n=>e.get(`snapshot`,`${t}${n}`),put:(n,r)=>e.put(`snapshot`,`${t}${n}`,r),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)}))}}function De(e){let t=e.kind;return e.local===!1&&(t===`local`||t===`local-docker`)?{}:{[t]:Y(t,e)}}function Y(e,t){let n=t.config??{};if(e===`local`)return new te(t.workDir);if(e===`local-docker`)return new pe(n);if(e===`vercel-sandbox`)return new we({...t.sandbox,...n});if(e===`github-actions`)return new F({...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 I({url:n.url,secret:n.secret,...t.fetch?{fetch:t.fetch}:{}})}function X(e,t){return e.scope===`workspace`||!!(t&&e.owner===t)}function Z(e){return e.local?`local`:`default`}async function Oe(e,t={}){let n=t.runner??t.agent;if(n===Z(e))return{runner:e.config.runner};let r=(await e.store.list(`runner`,{visibleTo:t.requester,...n?{runner:n}:{defaults:!0}})).filter(({value:n})=>X(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 Q(e,t,n){let r={...t.config,...j(e.config,t.secret)};return Y(t.kind,{workDir:e.config.workDir,config:r,fetch:e.fetch,sandbox:{...n?{snapshots:J(e.store,`runner:${n}:`)}:{}}})}async function ke(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}j(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:Q(e,n,t.runnerId)},r.set(t.runnerId,a)),a.runner}function Ae(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 I({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 je(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,...j(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?Q(e,t):e.runners.http;if(!(n instanceof I)||!(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??re)(`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{de as C,le as S,fe as T,I as _,Te as a,ue as b,ke as c,X as d,z as f,_e as g,ye as h,De as i,je as l,B as m,Ee as n,J as o,ve as p,Oe as r,Z as s,U as t,Ae as u,N as v,O as w,j as x,me as y};
|
package/dist/serve-Bzs_lEg-.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{_ as t}from"./errors-XBA-Ls4n.js";import{Zt as n}from"./output-D95NoAA9.js";import{a as r,t as i}from"./remote-CDm0YUU3.js";import{p as a}from"./slack-Bo5l13Rs.js";import{h as o,o as s,s as c,t as l}from"./http-BZfjbiov.js";import u from"node:path";import d from"node:fs";import{createHmac as f,randomBytes as p}from"node:crypto";import m from"node:os";import h from"node:http";var g=e({runnerController:()=>w,serveRunner:()=>x});const _=()=>t(`runners.json`);function v(){try{return JSON.parse(d.readFileSync(_(),`utf8`))}catch{return{}}}function y(e){d.mkdirSync(u.dirname(_()),{recursive:!0}),d.writeFileSync(_(),JSON.stringify(e,null,2),{mode:384})}const b=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 x(e={}){let a=e.port??4100,u=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!u)throw new n(`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:b(a)});let d=e.token?r({...e,server:e.url??e.server,yes:!0}):r(e),f=v(),g=f[d]??{secret:p(32).toString(`base64url`)},_=new o(t(`runner`)),x=w({secret:g.secret,server:d,runner:_}),S=h.createServer(c(async e=>{let t=await s(e,l(new URL(e.url).pathname));return t instanceof Response?t:x(t)}));await new Promise((e,t)=>{S.once(`error`,t),S.listen(a,`127.0.0.1`,e)});let C=()=>new Promise(e=>S.close(()=>e())),T=e.name??m.hostname(),E=async(e,t)=>{let r=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:g.id,organizationId:g.organizationId},name:T,url:u,secret:g.secret,...t?{offline:t}:{}})});if(!r.ok)throw new n(`server`,`Runner registration failed`,{status:r.status});return r.json()},D;try{if(e.token){let t=await E(e.token);D=t,g.organizationId=t.organizationId}else{let t=g.id&&g.organizationId?await E().catch(e=>{if(!(e instanceof n&&e.status===401))throw e}):void 0;if(t)D=t;else{let t=i(e),n=await t.me();D=await t.runners.add({kind:`http`,name:T,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:u,secret:g.secret}}),g.organizationId=n.organization?.id,g.id=D.id,D=await E()}}g.id=D.id,y({...f,[d]:g})}catch(e){throw await C(),e}let O=Promise.resolve(),k=setInterval(()=>{O=O.then(()=>E().then(()=>{})).catch(()=>{})},6e4);return{...D,port:a,server:d,close:async()=>{clearInterval(k),await O,await E(void 0,!0).catch(()=>{}),await C()}}}const S=3e5,C=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function w(e){let t=e.now??Date.now,n=new Map,r=(r,i)=>{let o=r.headers.get(`x-coder-timestamp`)??``,s=r.headers.get(`x-coder-nonce`)??``,c=r.headers.get(`x-coder-signature`)??``,l=Number(o);if(!s||!Number.isFinite(l)||Math.abs(t()-l)>S)return!1;let u=f(`sha256`,e.secret).update(`${i}.${o}.${s}`).digest(`base64url`);if(!a(c,u))return!1;for(let[e,r]of n)r<t()&&n.delete(e);return!n.has(s)&&(n.set(s,l+S),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return C({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 C({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return C({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 C({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&i===`health`&&!a)return C({ok:!0});if(!a)return C({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?C({error:`Invalid messages`},400):C(await e.runner.push(a,t))}return t.method===`GET`&&i===`status`?C(await e.runner.status(a)):t.method===`POST`&&i===`stop`?(await e.runner.stop(a),new Response(null,{status:204})):C({error:`Not found`},404)}catch(e){return C({error:e instanceof Error?e.message:String(e)},400)}}}export{g as n,x as t};
|