@wular/coder 0.4.7 → 0.4.9
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 +2 -2
- package/dist/actions-5TDwmn_z.js +20 -0
- package/dist/adapter-B2RXnvqt.js +49845 -0
- package/dist/adapter-YCvP9H2n.js +94 -0
- package/dist/adapter-sKt1J1Cm.js +1 -0
- package/dist/{add-B3zygDO5.js → add-BftLUw05.js} +1 -1
- package/dist/add-CXAGrCnC.js +1 -0
- package/dist/add-Ck_y_nKX.js +2 -0
- package/dist/{add-DpsjB8Mp.js → add-CvBTpxgY.js} +1 -1
- package/dist/agent-ChnedLBv.js +8 -0
- package/dist/agent-vYm7Geh-.js +1 -0
- package/dist/{alias-CZjD1F0F.js → alias-BpgVDY6_.js} +1 -1
- package/dist/api-qdpx8FD0.js +1 -0
- package/dist/{app-CE5j7IDN.js → app-CJPFaLIV.js} +1 -1
- package/dist/approvals-CE8dXZhE.js +2 -0
- package/dist/approve-CBuGu3du.js +1 -0
- package/dist/{approve-D5Dkw1Lo.js → approve-dWW4qt76.js} +2 -2
- package/dist/apps-B60OpAHX.js +242 -0
- package/dist/{archive-RBPoB4cr.js → archive-C89Z4kSx.js} +2 -2
- package/dist/{archive-Br2eM_A2.js → archive-CmRVm4iS.js} +2 -2
- package/dist/archive-sweep-EiiXIqjr.js +1 -0
- package/dist/args-CxsMr9Un.js +1 -0
- package/dist/{ask-zjX8kQz0.js → ask-Bou8zg-4.js} +2 -2
- package/dist/auth-CImjIcG5.js +1 -0
- package/dist/auth-CWzSsiSC.js +1 -0
- package/dist/build-CmtlB7pX.js +1 -0
- package/dist/builtin/coder/agent.json +19 -4
- package/dist/chat-Bbzlea60.js +1 -0
- package/dist/chat-Djps0Seg.js +13 -0
- package/dist/{chat-bridge-18koyS7c.js → chat-bridge-CvspGKBc.js} +1 -1
- package/dist/chunk-7WDLOIRP-B_IWkVtZ.js +1 -0
- package/dist/cli-ZUdhZnuW.js +9 -0
- package/dist/cli.js +1 -1
- package/dist/config-CF3_A3NX.js +3 -0
- package/dist/config-D2FxHWwi.js +14 -0
- package/dist/connection-BCRJHTgp.js +1 -0
- package/dist/connection-BtUZA2St.js +1 -0
- package/dist/core-DwsAMCnL.js +65 -0
- package/dist/create-Z0QxarzN.js +1 -0
- package/dist/credentials-Dt2uP3AQ.js +1 -0
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +2761 -1589
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.b7c6e5f49704993d.js → index.8e150ef2bc6a5f4e.js} +68 -16
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{defaults.36612942475445c3.js → defaults.e6ce0944639198a2.js} +5 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.e10960fe4c66b9d8.js → errors.5954bd9bd05e8230.js} +1 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.58ba9a3d545808d7.js → log-view.871cbff2605b5cfd.js} +3 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.35be1b07171553e7.js → load.4f942c7f68b2e273.js} +10 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.72b248cd95237fb6.js → page.a2a16ead424b2185.js} +9 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/page.90e312759b87cfa2.js +29 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/loading.fce966caba9308e4.js → [org]/account/loading.787d09fb0b2b6b57.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/notify.fc4ba1b51ee26296.js → [org]/account/notify.5fc5e4346dcbfc32.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/page.6c8e958aeab2678e.js → [org]/account/page.1641da62504df30a.js} +27 -21
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/sign-out.5dac3bf780c74354.js +20 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agent-menu.f1dacbfebc27a656.js +13 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/(list)/agents-grid.0813591f217e9dbb.js → [org]/agents/(list)/agents-grid.5da78e9a741b028a.js} +23 -21
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.722bc3e4ec1f9fad.js +36 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/loading.2815a010098aa676.js +18 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/(list)/page.e0ad2df8b7c9a0af.js → [org]/agents/(list)/page.b01992337eeca2dc.js} +19 -20
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/layout.8aeb0fddffe22ad5.js +120 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/loading.50692149df9abb28.js +5 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/page.1ba2497fa9116713.js → [org]/agents/[slug]/(tabs)/page.e2e23101c05b9548.js} +40 -30
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.31d2c13229ae9222.js +29 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.11c7b50d6119efe6.js +343 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.92ac7aa258e706a4.js +574 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/agent-settings-form.fc530622fa2292a0.js +405 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/loading.bf17bd39f41db826.js +8 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/page.6e95dfe07dfebf4b.js +46 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/tasks/loading.f5c0c1c727da9f57.js → [org]/agents/[slug]/(tabs)/tasks/loading.7b17368ee81275ab.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/tasks/page.9324e2d909d55c6f.js → [org]/agents/[slug]/(tabs)/tasks/page.0bd3da9b3227b12f.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/loading.5e1f922969ab7016.js → [org]/agents/[slug]/(tabs)/usage/loading.d2cc33cf044a92a3.js} +16 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/page.91c43fbc54e37646.js +209 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/versions-list.e2427d618decaf7a.js → [org]/agents/[slug]/(tabs)/versions-list.23e4131cdf71daa5.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/loading.47c4c8f31b4f17cc.js +23 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/edit/page.057807354396ea77.js → [org]/agents/[slug]/edit/page.cbd2bad8fede6fef.js} +20 -16
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-pills.d8e785c45f5410a6.js +100 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-toggle.a6e27ac4171bfdb0.js +42 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/hero.96bdca9762ff3e2e.js +94 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/instructions.2f4229d42e7c99ef.js → [org]/agents/agent/instructions.ca0c09d4849bfc30.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/connect-repositories.329ac182c8242a67.js → [org]/agents/editor/connect-repositories.258f6c2c5f1b1b17.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/editor.d28d4afe11d7ff71.js → [org]/agents/editor/editor.20c42102ed262db7.js} +176 -137
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/import-picker.5e76549e7934b718.js → [org]/agents/editor/import-picker.b8093a7ca97656a5.js} +61 -71
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/loading.6012b36c10c68657.js +28 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/new/page.c3396459a9ba5c13.js → [org]/agents/new/page.1ebdb0247922fc14.js} +13 -12
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{layout.53a8a3b0e4a7917f.js → [org]/layout.6d2242d49ae9dd35.js} +107 -133
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a56516bc0ba79187.js +144 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/page.af19494c89ac62c0.js +84 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/page.c720853404d94114.js +11 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.9b96914a4fa4e2a9.js +637 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials-list.dbaa8f3d82445b90.js +522 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials.c4b01484d183549d.js +44 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/engines-list.6c02a7e6d3c965cc.js → [org]/settings/[tab]/engines-list.5c03e83663a6a9b7.js} +13 -15
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/list.db2e212e3c8b5d32.js → [org]/settings/[tab]/list.df5ee5d74bec0f5b.js} +17 -43
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/loading.480b8f915bae18c1.js +6 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/models-list.052f3ccc66833937.js → [org]/settings/[tab]/models-list.2835a48d1edeb6d1.js} +45 -41
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/page.1d53415d55e77fee.js +133 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/runners-list.b5296983ba8007aa.js → [org]/settings/[tab]/runners-list.bf5746f48e3f78f5.js} +82 -133
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/secrets-list.b0dedc1567efc09f.js +137 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/layout.567d27e39d42d719.js +49 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/page.bac05d6e87953d0e.js +11 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/settings-head.d0f5ac9cbf170a77.js → [org]/settings/settings-head.5e2dff2550b3b73e.js} +8 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/tunnel-guide.f6685b045ccccdcd.js → [org]/settings/tunnel-guide.d6fae1c5d62f2c74.js} +5 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/create-link.03989d2f7585a045.js +33 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-dialog.4debc1a8c644df4b.js +32 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome.cbbc8cd1bbbee01b.js +71 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/page.43c969f59a710781.js +45 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/activity.3755ae6065c3fc28.js +318 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/loading.d88d1139ea3ff52a.js → [org]/tasks/[id]/loading.9efbed6531879838.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/page.7b92dcd08095b934.js +24 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.62422b873f98ee8e.js +149 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/task-view.1c54f267d127f4e3.js → [org]/tasks/[id]/task-view.ae0e9c9dffe0ff9f.js} +107 -102
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/composer-data.ff108c0ef82a4d7b.js +69 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/composer.f232cc1bf2d7b08a.js → [org]/tasks/composer.fdad306647cbaa59.js} +157 -160
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/status.b90b76ffa62e957a.js → [org]/tasks/list/status.16190fdd5fd7daad.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/task.465c2af602cce783.js → [org]/tasks/list/task.af5001e51d2f612b.js} +12 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/tasks-list.2a0e1eb5c396be42.js → [org]/tasks/list/tasks-list.952f37a9486aebe7.js} +119 -115
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/tasks-section.2cbc1550d723661d.js → [org]/tasks/list/tasks-section.1247d4765d0e1bdc.js} +14 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/page.cf74c55e6528c7c9.js +16 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/custom-range.2d55812ec086b540.js +63 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/day-chart.5e716070459d785c.js → [org]/usage/day-chart.08d378cca93d3ab1.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/loading.7aed78a276b08a4f.js +15 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/metric.ca0466e33225f184.js → [org]/usage/metric.ada350d2b7449b39.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/page.c2b88b495780b12a.js → [org]/usage/page.fed9345ebac3e1b3.js} +20 -19
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/range-bar.b1296c2378128472.js +57 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/stats.4793e81a32ea5e8f.js → [org]/usage/stats.de820599cf126120.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/top-agents.b228062d012dc17b.js → [org]/usage/top-agents.e215d44e00192271.js} +21 -15
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.c762b39aafb84a1f.js → layout.b7e3af142b17941b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.3ddaa1a675a04c5a.js → page.226544940a39fd3a.js} +11 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.b337ce209ff621e9.js → drawer.8287e5a02144e4f1.js} +12 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/foreign-link.86f0cc228353da6e.js +28 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{heads.fa2157b3b36647f3.js → heads.20414ddcb2d08bcd.js} +18 -14
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.0c6ac62ff3ccf38a.js +40 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.a2336c95004aed4b.js → page-head.bd54e52ac4a7a89c.js} +16 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.77a2ec038d97b2b8.js → stream.1cc355a530dcc5e3.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.10b46a8b8db1791f.js → task-toasts.63f673632770924d.js} +108 -24
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.ea23f57dd753683f.js → theme-choices.5f59814a635caeec.js} +8 -17
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/back-cookie.942c0904e944d8d6.js +12 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/back.5681714d0cf45454.js +42 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{current-link.844899810531977f.js → current-link.727b350a40b9ca13.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/org.4d84ad0ac340fbe2.js +29 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.55d3e6c43ca5e1f9.js → side-toggle.249400957d6a7527.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{to.0116bedfbe5f1133.js → to.a2c840c09bd4bf4a.js} +2 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.0851f234f300c694.js +83 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/button.983daea9e687fc5d.js +91 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.b0873d38765c9d20.js → card.c08471eaa0bc1cec.js} +41 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.dab7f208cbbe6a33.js → collapse.762eba56417214ca.js} +5 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.ca0efacf2ce15578.js → combo.efb84f0cca771948.js} +13 -20
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.53edc755945b0563.js +27 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/copy.0b23d7dc05757df5.js +31 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/copy.fb3240de6c9479cd.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{field.7b2a2075ee8c6e29.js → field.75588c33b72824a7.js} +0 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.f19b6d5ebd6a3c2b.js → filter.1983b85dd0679af6.js} +34 -53
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.b53f21acc3e2cfef.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.1777c0350d5d215e.js → icons.a34176f37808cd66.js} +4 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu-items.a8e580a0c90631ff.js +145 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.25b184f68cba7b46.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.a41edd5cde1c90cf.js +94 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.9db07d368dcf5981.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.b5f74ebf59590fa6.js +66 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/notice.f395f231cbb96445.js +13 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.5ac52bb38fb64ae5.js → segmented.a08dc08338d080e9.js} +13 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.f036fdc3fce02b92.js → select.36c6f21ce6aa720f.js} +47 -41
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.419208bb34700af2.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.d3d29747fe976f88.js → sentinel.17cffebfc3103b9f.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.1e3ec9bd6008d811.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.d00fc01ad9c1b91e.js → tabs.66b2e54963f6901b.js} +3 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.9377d261fe9e91df.js → tail.a8a951c757376590.js} +5 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.19e1ce5224a23acf.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.b2c59c5fc015d08d.js → toolbar.9621ef221a896a8e.js} +11 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/action.1a6356d5b722cafb.js +34 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.d25e6dcc6704eb60.js +59 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{paged.7e5713a82abf0211.js → paged.18f5872fc5aebe96.js} +1 -0
- package/dist/dash/standalone/static/assets/chunks/action-977f2355e308d7d0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-pills-e75e6ac80d515ffc.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-09f23ed893d441c7.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-toggle-b2f2c22e63dedc1f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agents-grid-bb4f3e4d38b2f459.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/back-1d1b062f0e1b29b7.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/combo-126d5709a0b3a5bd.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-6bf94d1087a6e6a6.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-9c1fe67a0de73997.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/confirm-1cb4d8df3974f34a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/connect-apps-32c169b6e00711ff.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-8864a63f83ffd411.js → connect-repositories-995d55b3f166337d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-a102e909edff14d4.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/copy-c938369a1bfe75fd.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/create-link-a147953f343355ec.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/credentials-list-31e0fbc1ef0d003e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/custom-range-4eeb710748887f3a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/defaults-dcc0eccad4e8585b.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/editor-79560c0f91cfc2f6.js +7 -0
- package/dist/dash/standalone/static/assets/chunks/engines-list-d22f50040e6842ae.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/field-657227821326b5b3.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-a08bb02650dedb8d.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-a1f10bc3c2866e3f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/list-a0cc9bdb05fc71d4.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/model-options-3a57918eaa4a2a82.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/models-list-63ab774de3bf3788.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/notice-cd32ca98bbc10844.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-4ab62d613bee243a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-40824017c7b5b910.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-a515643f341df568.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/runners-list-a9f4f71695f7b376.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runtime-37175329f2865f15-1.js → runtime-e8b9eb1e537215ed-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-34e09c332363564c.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/segmented-24da438244eedc8f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-02aaa49ed4606a76.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-03e620f936463465.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-6f8c76316a2cd9da.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-e8b9eb1e537215ed-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8563e6056e862225.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/tail-ebdefca4d5c23266.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-6ae2bb4f1b384140.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-actions-462507b76bda4657.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-view-341d79730a341007.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/tasks-list-6037ecd098332564.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/versions-list-31f31eb1923a0ded.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-37175329f2865f15-0.js → wular-pnext-e8b9eb1e537215ed-0.js} +1 -1
- package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +1 -0
- package/dist/dash/standalone/static/assets/create-param-id-8fa3e9101430f26a.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-67f7811b1343c064.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-account-3f646d473e3bd795.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-0ddb989cab5b0fbf.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-504d1a906feabb6f.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-7cd987a1a42a3b44.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-fcdddf2dc26453ce.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-26b84d659dbca7f4.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-97ff652f9fe5979d.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-d47377c0f877c5c0.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-6a09580f11d669b7.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-operator-56742192a9aafc19.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-settings-a851a659784d94b5.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-06283106fffbd5c6.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-setup-1b708aa5bb2f83ef.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-9cb2bb12389c9a04.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-a87fa0eaa02e4008.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-usage-786c91a7640542e6.css +1 -0
- package/dist/dash/standalone/static/assets/global-eee296f070a9bb95.css +1 -0
- package/dist/dash/standalone/static/assets/login-9760b85feae40270.css +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-17c3ee29b7487596.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1eaa8deb5395345f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-29e2b964470f6587.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2a1e756934e7be1a.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-31e64d49f6132b26.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-3d13328ad0b1148b.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-4ac29d3e9f1a91be.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7d479b3375e3c07e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-9eac45990b233b55.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a8c9c169322e7e3d.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-b622d087a38b1b77.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-b7fea94dfda72453.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-cc8e5e6c95040688.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d16e2a42b0a274c0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-dbccfef0cbb6b18d.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-e74706ae238018e5.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ebe7c9692619ea00.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ef8d348060493085.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-fcdfa8b2c8824449.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ff36e2f8a0522759.js +1 -0
- package/dist/{default-B3ValFJp.js → default-DcYwZCnl.js} +1 -1
- package/dist/default-EXRzdZUY.js +1 -0
- package/dist/{delete-6T7ujDtY.js → delete-Bmn2_TiV.js} +2 -2
- package/dist/{delete-k7pxp5B6.js → delete-DS6P_fun.js} +2 -2
- package/dist/{disable-BJXxuJ9s.js → disable-CnCxTC3X.js} +1 -1
- package/dist/discover-CBP4Uw0N.js +1 -0
- package/dist/{discover-CRUU1hdS.js → discover-pKrMDvpW.js} +2 -2
- package/dist/dispatch-D3Dqxijf.js +8 -0
- package/dist/dist-BTornX7Y.js +101 -0
- package/dist/dist-C3wD7GfG.js +4 -0
- package/dist/dist-DkATuPBB.js +6 -0
- package/dist/dist-node-Bv1kCqyi.js +20 -0
- package/dist/docs-3SW1O9iS.js +2 -0
- package/dist/{docs-PmFB2aMA.js → docs-sFUXzJbk.js} +1 -1
- package/dist/{enable-DZ7rw7iL.js → enable-BWvDv7dP.js} +1 -1
- package/dist/env-C_DoQYl5.js +1 -0
- package/dist/exec-BsXFIdTl.js +11 -0
- package/dist/executor-5j-Ewzzb.js +11 -0
- package/dist/flow/builtin/review.d.ts +1 -156
- package/dist/flow/builtin/review.js +7 -7
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/{flow-D8T71fyu.js → flow-CuUq-MDm.js} +1 -1
- package/dist/http-Cg_wYcZT.js +1 -0
- package/dist/{index-Xe8n_t2Z.d.ts → index-vd37q3fn.d.ts} +103 -1
- package/dist/{init-BfXdsU46.js → init-Dgj6V-aS.js} +1 -1
- package/dist/integrations-D3OgJk6Y.js +1 -0
- package/dist/integrations-DsFX2KCq.js +1 -0
- package/dist/lib/broker.js +2 -2
- package/dist/list-B6lwbCEp.js +1 -0
- package/dist/{list-NtMN55g0.js → list-BDpYPbJF.js} +1 -1
- package/dist/{list-F-PN6ieH.js → list-BE3xmX_4.js} +1 -1
- package/dist/{list-erdHI-w9.js → list-BVIAyAAE.js} +2 -2
- package/dist/{list-DedQA2pn.js → list-Bggy3HZY.js} +2 -2
- package/dist/list-CLtqMYPK.js +2 -0
- package/dist/{list-yoGxyIlx.js → list-CaFQOnfI.js} +1 -1
- package/dist/{list-CO8x2rgz.js → list-DkO78ZEF.js} +1 -1
- package/dist/load-CRmQB1LD.js +2 -0
- package/dist/local-ccKBhpQc.js +1 -0
- package/dist/log-view-DB4nXHXO.js +3 -0
- package/dist/{login-CJjcqCg4.js → login-BCdXHQ7z.js} +1 -1
- package/dist/login-CpHx_RCq.js +1 -0
- package/dist/{logout-B7mHWeWr.js → logout-zSQBDPCK.js} +1 -1
- package/dist/maintenance-DuIspk-y.js +1 -0
- package/dist/match-Kt3vFTl1.js +1 -0
- package/dist/mcp-O8VTfzdL.js +12 -0
- package/dist/mcp-YhyTUMIM.js +11 -0
- package/dist/{model-Cti-OOdV.js → model-Bzpwl_95.js} +1 -1
- package/dist/models-CdvmuaLv.js +1 -0
- package/dist/prompt-C--TI1qn.js +8 -0
- package/dist/push-vt81gcxD.js +1 -0
- package/dist/reconnect-BfghDbl1.js +1 -0
- package/dist/refresh-yXJ13FAf.js +1 -0
- package/dist/remote-oQs6My_3.js +1 -0
- package/dist/remove-5iAM2aTO.js +1 -0
- package/dist/remove-BZCA-gdU.js +1 -0
- package/dist/remove-BcewhH1U.js +1 -0
- package/dist/remove-BwhcR6ig.js +1 -0
- package/dist/rename-lyssPQfD.js +1 -0
- package/dist/result-Bg557zR6.js +5 -0
- package/dist/{result-DtVw6XYk.js → result-jeiRJTzA.js} +7 -7
- package/dist/{resume-D7XcEIbu.js → resume-fnx4FUQF.js} +2 -2
- package/dist/{review-DZGyNO5h.js → review-CAHDqPq8.js} +3 -3
- package/dist/review-CJS59vO-.d.ts +157 -0
- package/dist/{rotate-key-pIfcaeCd.js → rotate-key-Dpx_WmuU.js} +1 -1
- package/dist/{run-Co36tfya.js → run-CLy9a2MO.js} +1 -1
- package/dist/{run-BlXCPJzq.js → run-DU4G8gNw.js} +2 -2
- package/dist/{run-B-2NnW4r.js → run-D_pl9GF_.js} +2 -2
- package/dist/runner-DME7ohjt.js +1 -0
- package/dist/runner-zT5Oyrfr.js +1 -0
- package/dist/runners-CNhxPjg8.js +36 -0
- package/dist/schema-BSlHRFSP.js +8 -0
- package/dist/schema.config.d.ts +12 -0
- package/dist/schema.config.js +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.js +1 -0
- package/dist/sdk-CWerLcF5.d.ts +12371 -0
- package/dist/sdk.d.ts +5 -1549
- package/dist/sdk.js +1 -1
- package/dist/serve-FG2LgXxM.js +9 -0
- package/dist/serve-UE1fcf4t.js +1 -0
- package/dist/serve-w-9qRCP1.js +2 -0
- package/dist/serve-wQgyxwdY.js +1 -0
- package/dist/server-Bw_YmgCf.js +1 -0
- package/dist/{setup-host-ON6zJGqS.js → setup-host-BsbDs4lJ.js} +1 -1
- package/dist/show-Cajmf606.js +1 -0
- package/dist/{show-jdaVKG0f.js → show-D0qTuXRU.js} +1 -1
- package/dist/slack-C_RlVDz7.js +3 -0
- package/dist/{status-BO1jm6NW.js → status-PO1YXbt4.js} +1 -1
- package/dist/steer-i6w87g_t.js +4 -0
- package/dist/{stop-BS2MB4CQ.js → stop-CJ0PHvKp.js} +1 -1
- package/dist/{stop-B-dQ2-Gm.js → stop-CkvoZEAH.js} +2 -2
- package/dist/task-DTN_fIGC.js +1 -0
- package/dist/task-DXHKWB_J.js +5 -0
- package/dist/task-IoBYe7ok.js +1 -0
- package/dist/test-BTkKFbnx.js +1 -0
- package/dist/tools-B-2oi2wI.js +1 -0
- package/dist/types-B42Oh0zF.js +1 -0
- package/dist/types-C1tWi5lP.d.ts +1710 -0
- package/dist/{unalias-DpkgCs_c.js → unalias-Cqx7i_L0.js} +1 -1
- package/dist/{update-ChIiUO1Z.js → update-MNyeVXyy.js} +1 -1
- package/dist/{upgrade-Cq24oWFZ.js → upgrade-CGSkY0FY.js} +2 -2
- package/dist/{usage-CazoINYM.js → usage-sx-FR0bz.js} +1 -1
- package/dist/views-BhsnL0nr.js +5 -0
- package/dist/watch-IL2eEgwD.js +9 -0
- package/dist/{watch-B3gAEK1N.js → watch-qfr7aSfo.js} +2 -2
- package/dist/wire-B5rc5Av6.js +1 -0
- package/dist/worker-BBZ36xL0.js +1 -0
- package/dist/worker-D2csFtoH.js +9 -0
- package/dist/{workflow-BOPHazbM.js → workflow-BKxG9OUk.js} +1 -1
- package/dist/zod-BoqHoRCH.js +1 -0
- package/dist/zod.d.ts +3 -0
- package/dist/zod.js +1 -0
- package/docs/agents/coder.md +9 -2
- package/docs/agents/index.md +28 -18
- package/docs/cli.md +24 -13
- package/docs/config.md +1 -1
- package/docs/dash.md +3 -3
- package/docs/flows.md +3 -3
- package/docs/mcp.md +8 -16
- package/docs/sdk.md +4 -4
- package/docs/self-host.md +29 -18
- package/package.json +22 -14
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/actions-CmfXOVXQ.js +0 -20
- package/dist/adapter-7SEiVsmp.js +0 -1
- package/dist/adapter-BLEfUqoQ.js +0 -1
- package/dist/adapter-DaiJMOYo.js +0 -1
- package/dist/adapter-H4GlcKQz.js +0 -1
- package/dist/adapter-PeKziOUg.js +0 -1
- package/dist/add-8Z5bNm74.js +0 -1
- package/dist/add-DiwLZmjp.js +0 -1
- package/dist/add-json-wOUPHwUD.js +0 -1
- package/dist/agent-B69nSuTY.js +0 -1
- package/dist/agent-D0pQ_ewc.js +0 -3
- package/dist/approvals-Gv7x14u3.js +0 -2
- package/dist/apps-CaHoLNE7.js +0 -1
- package/dist/archive-sweep-jE6TPk2F.js +0 -1
- package/dist/args-DEMOfLz2.js +0 -1
- package/dist/auth-DSE3SIuI.js +0 -1
- package/dist/auth-DsxfkPsx.js +0 -1
- package/dist/chat-3Znsevah.js +0 -1
- package/dist/chat-cknlIhVh.js +0 -13
- package/dist/cli-DtTdpTy3.js +0 -9
- package/dist/cli.d.ts +0 -71
- package/dist/client-31YzOj-i.js +0 -1
- package/dist/config-BAkyRxp-.js +0 -3
- package/dist/create-BF6VHUst.js +0 -1
- package/dist/credentials-6PHXj8k7.js +0 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/sign-out.5d3bca9efecd6f70.js +0 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agent-menu.6d3339a02f02460d.js +0 -12
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/connect-apps.8d218b96f9939819.js +0 -42
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/loading.02dd47fe59680cc8.js +0 -18
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.f2464375e393c96e.js +0 -105
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.b27b95d8ccf0581e.js +0 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.572d3404b984b163.js +0 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.9b30598fa84dd0df.js +0 -170
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/platform-actions.bc640252ecf046c6.js +0 -70
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.d3e6dc6bcfcfc928.js +0 -268
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.a55efbdbdd995213.js +0 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.44eabcf6cf9fbfbd.js +0 -35
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.30a31e2464417a08.js +0 -160
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/loading.21eb60e655c125c7.js +0 -29
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/agent-pills.6a0eea1ec99dffd7.js +0 -67
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/hero.9af8c50df6487ca5.js +0 -62
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/loading.02e30b3a7f1ab9f1.js +0 -28
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/page.a4be8e0779589f4e.js +0 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials-list.c25242f7f4ef6399.js +0 -538
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.a62d1642ca580836.js +0 -34
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/loading.f4024074bf71b11b.js +0 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/mcp-list.0ce34ed7d7e756a7.js +0 -249
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.3458e42728e30f54.js +0 -86
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/layout.85946d20d7e48767.js +0 -39
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/page.9d2087e0e33d57f8.js +0 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/activity.4aeb0734da711e10.js +0 -177
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.e5b562dd47e19043.js +0 -24
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-actions.ee523c68a38a7975.js +0 -184
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer-data.5f12d8ef1db38026.js +0 -63
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/page.107706655a927e59.js +0 -16
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/custom-range.d85de32fb6ec4fe6.js +0 -64
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/loading.8aabf89dabaf1c3f.js +0 -15
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/range-bar.76e3de97583e6eab.js +0 -60
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.bf58af8330a78704.js +0 -64
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.5abdef72e9189fdc.js +0 -31
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.1328a7ede6c27bb9.js +0 -53
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.a4dd9fb9f566689a.js +0 -103
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.a8205c524e63d4a9.js +0 -26
- package/dist/dash/standalone/static/assets/chunks/agent-pills-c5d56f60f9e17aea.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-738f9ac4b9fb67ef.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agents-grid-37e2e7f7a37b7a35.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/badge-9984d2fd0e7f995d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/card-818c7a0d580e2e0d.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/combo-8aa7545cfda42090.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-a969037cf22215c7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-data-6f7608fed13f3dd7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-f433a2e64648633a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/confirm-be929e2de15876a6.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-97c10fa6e35ccae6.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/credentials-list-08cd5dfe29f42bf2.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/custom-range-63f577240e5d5d85.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/editor-9752c8ab26ebd328.js +0 -7
- package/dist/dash/standalone/static/assets/chunks/engines-list-dab79c4e3e22eefe.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/field-43fea54c1c287e30.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/filter-02bba5796258deb0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/heads-8f40675f508ebe33.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-0b968d5d0a58c716.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/list-591905f0aaa57629.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/mcp-list-bae4d2186f67849e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-15c53331a2f28a4f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/models-list-c758db0c40f5173f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/paged-3ddb6077bef42752.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-4454493d02a1c172.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/runners-list-9d27c76eed33cb05.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/segmented-bf5a4c06605249e0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/select-adccc9ac86ac833f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/sentinel-b4c91a38a5d79219.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/shared-init-37175329f2865f15-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-3a95c0e0cc27e0cb.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/shared-init-8f2ac936c95a7f7b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/tail-74153aeac1f0baec.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-actions-189775b88ef7ada4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-ddfddeaf07fb684c.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-0b3d7ea9cc41888b.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/tasks-list-1b0195e3fd68714f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/toolbar-035d33d1e7ad11bf.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/versions-list-875a9a0ebb3f7d08.js +0 -1
- package/dist/dash/standalone/static/assets/connect-382b1729a7ae7808.css +0 -1
- package/dist/dash/standalone/static/assets/dash-49ca85b59ac65c20.css +0 -1
- package/dist/dash/standalone/static/assets/dash-account-edc56e85dbaaabe0.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-edba57b67e4005d0.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-new-fe22253fbada2fbf.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-adf52e9dacb2d825.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-edit-a2937a347689ef29.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-platforms-265ba13db32a460d.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-settings-8afc52eb0372bc4b.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-tasks-6193e646be68dbd2.css +0 -1
- package/dist/dash/standalone/static/assets/dash-agents-param-slug-usage-ceadb3a1c911c402.css +0 -1
- package/dist/dash/standalone/static/assets/dash-settings-cf1997cd7f72e518.css +0 -1
- package/dist/dash/standalone/static/assets/dash-settings-param-tab-b44dac8e79a560e6.css +0 -1
- package/dist/dash/standalone/static/assets/dash-tasks-916c7100a8058aa3.css +0 -1
- package/dist/dash/standalone/static/assets/dash-tasks-param-id-24265771fd1e3f78.css +0 -1
- package/dist/dash/standalone/static/assets/dash-usage-40940b289f85e0b6.css +0 -1
- package/dist/dash/standalone/static/assets/global-d2adbf01910d9df5.css +0 -1
- package/dist/dash/standalone/static/assets/login-c129b1ce237be260.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-105d2264e4064f32.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-140064bc22718639.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2825c0ea7bfa1240.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-39ac7ac446e20cfb.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-43cbb846cb4c167f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7d88eb36e6e3c301.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-9172198a969bd1e1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-9c9c88e5c2fe31bc.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-a629391487c4b8e3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-aace561f07b06542.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b7d6355b1323fff1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c4be2f807668e35c.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ce83b85e9562a049.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-dd2046446844a78b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-e62f31aae8ce2c3b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ffab25199333314f.js +0 -1
- package/dist/default-DgP-hBmn.js +0 -1
- package/dist/discover-CaAtyC0h.js +0 -1
- package/dist/dispatch-YW1aqjEg.js +0 -14
- package/dist/docs-Byrpar10.js +0 -2
- package/dist/env-LsVTi18f.js +0 -1
- package/dist/exec-DgI3boHa.js +0 -11
- package/dist/executor-HWnIIYUL.js +0 -10
- package/dist/github-actions-CvLya8ve.js +0 -24
- package/dist/http-DG54kyx4.js +0 -1
- package/dist/integrations-B2CavXR1.js +0 -5
- package/dist/integrations-DNz6PHFV.js +0 -1
- package/dist/lib/broker.d.ts +0 -1
- package/dist/list-CJhHYVb2.js +0 -2
- package/dist/list-Cr4c8mT6.js +0 -1
- package/dist/load-DDZfByUe.js +0 -2
- package/dist/local-B0GiaLV0.js +0 -1
- package/dist/log-view-DeJstSkw.js +0 -3
- package/dist/login-p2VknR9f.js +0 -1
- package/dist/maintenance-C02_cNLp.js +0 -1
- package/dist/match-DMI54zg4.js +0 -1
- package/dist/mcp--MIvjMWZ.js +0 -1
- package/dist/mcp-DgMoPoUo.js +0 -1
- package/dist/migrate-CSwkAInI.js +0 -2
- package/dist/migrate-rwTojdkz.js +0 -1
- package/dist/models-DGPrMV51.js +0 -1
- package/dist/prompt-K7-bKcTC.js +0 -7
- package/dist/push-D3vxfhc_.js +0 -1
- package/dist/queue-EvplGOuk.js +0 -117
- package/dist/refresh-BFuahSFK.js +0 -1
- package/dist/remote-AcWWfKVS.js +0 -1
- package/dist/remove-7y1b_gHT.js +0 -1
- package/dist/remove-BRj1kPYm.js +0 -1
- package/dist/remove-C57QDigT.js +0 -1
- package/dist/remove-UVD3W2OE.js +0 -1
- package/dist/rename-CCv5pca3.js +0 -1
- package/dist/result-BWrYnt0u.js +0 -5
- package/dist/rolldown-runtime-DT7IzrpZ.js +0 -1
- package/dist/runner-DRgQvMiZ.js +0 -1
- package/dist/runner-c-2w6Eoj.js +0 -1
- package/dist/schema-DoNO0dPh.js +0 -1
- package/dist/serve-CcqX_2qk.js +0 -8
- package/dist/serve-Ci0AFWtY.js +0 -2
- package/dist/serve-DeX0lpXj.js +0 -12
- package/dist/serve-SWjydoBC.js +0 -1
- package/dist/serve-xMihn4g-.js +0 -1
- package/dist/server-CWbtW4W_.js +0 -1
- package/dist/shared-D64pQ0XU.js +0 -1
- package/dist/show-U0XPh927.js +0 -1
- package/dist/steer-DwSAYYqb.js +0 -4
- package/dist/store-B0RLMUR9.js +0 -42
- package/dist/store-Cxc2GYyj.js +0 -19
- package/dist/task-DEp3GHwH.js +0 -1
- package/dist/task-DhZ5vhyY.js +0 -5
- package/dist/task-gKnlLOGe.js +0 -1
- package/dist/test-TvJAUf4S.js +0 -1
- package/dist/tools-BQQfMQB9.js +0 -1
- package/dist/types-D0q15RJa.js +0 -1
- package/dist/types-DMGBYB_K.d.ts +0 -391
- package/dist/usage-Bw7fQeFC.js +0 -1
- package/dist/watch-DJATTJw_.js +0 -8
- package/dist/wire-DxxfWapP.js +0 -1
- package/dist/worker-C3dzIzd3.js +0 -1
- package/dist/worker-C4Lo6rLS.js +0 -9
- package/migrations/0000_initial.sql +0 -260
- package/migrations/meta/0000_snapshot.json +0 -1861
- package/migrations/meta/_journal.json +0 -13
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/page.78ecdcf250ebe4bd.css.pnext-asset.js → [org]/account/page.061f6006f2685f5e.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/(list)/page.c2085e3ab40a8b66.css.pnext-asset.js → [org]/agents/(list)/page.76589c15dee1732d.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/page.31a5f9731d946f4f.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/page.1a97b8d4b955c464.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/platforms/page.b036494aace45edf.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/platforms/page.3ffef848a0b0dda3.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/settings/agent-settings-form.204e3ec0b23d58c7.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/settings/agent-settings-form.2d19ea3a4d380e0d.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/@/app/dash/usage/range-bar.034280ed1ab2616b.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/usage/@/app/dash/[org]/usage/range-bar.e8f6f0c7ee443262.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/@/comps/ui/segmented.4db9cac358865634.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/usage/@/comps/ui/segmented.2cb43dc7d1f1588a.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/page.6bf93d41ec4a1fab.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/usage/page.80adb3d2ea31d080.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/agent-pills.1708253f0232e88e.css.pnext-asset.js → [org]/agents/agent/agent-pills.183f03f1e7e5ac9f.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/hero.8dd7556828e78b07.css.pnext-asset.js → [org]/agents/agent/hero.13019680f38b0630.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/instructions.532dc545ddb11e88.css.pnext-asset.js → [org]/agents/agent/instructions.446bccc375f30eeb.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/@/app/dash/agents/(list)/page.1e19c72828fbd611.css.pnext-asset.js → [org]/agents/editor/@/app/dash/[org]/agents/(list)/page.81c825592da30a32.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/editor.52403b9719fb5157.css.pnext-asset.js → [org]/agents/editor/editor.c496247a81ed832c.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/names.afb112f2a5a6f0f5.js → [org]/agents/editor/names.1ee5bba8d2b6ac41.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{layout.4b31e7e60256f6d1.css.pnext-asset.js → [org]/layout.a4efa8d807fe5416.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/credentials-list.0953506d95c86a2f.css.pnext-asset.js → [org]/operator/@/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.944b02c09bbf6c22.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/engines-list.c04c712adfc0ca48.css.pnext-asset.js → [org]/operator/@/app/dash/[org]/settings/[tab]/list.83f35dd8a36acdfd.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/list.4835150fd34d0c4f.css.pnext-asset.js → [org]/operator/page.9002a449f872a10e.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/mcp-list.a2b3bf3c7c5fa42e.css.pnext-asset.js → [org]/settings/[tab]/@/app/dash/[org]/setup/outcome.3ad5f7ec67e5238d.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/runners-list.0e2d8a76197cde60.css.pnext-asset.js → [org]/settings/[tab]/connections-list.f742847e4887f072.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/task-view.2110bc4a16798cde.css.pnext-asset.js → [org]/settings/[tab]/credentials-list.98e0b34932a6ee4c.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/composer.80a979f079b29681.css.pnext-asset.js → [org]/settings/[tab]/engines-list.9927d602ebe9e7fc.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/status.d71a946ed749ca30.css.pnext-asset.js → [org]/settings/[tab]/list.e0ce46919b75ef76.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/tasks-list.291e81e56d54513c.css.pnext-asset.js → [org]/settings/[tab]/runners-list.a835c9a264cf8903.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/model-options.bccfaced52fc0c00.js → [org]/settings/model-options.2eacf7f8ac0032df.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/@/app/dash/usage/range-bar.53967f3261c8387e.css.pnext-asset.js → [org]/setup/outcome.2a3073f895357275.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/@/comps/ui/segmented.2ca6fee7dd2830ad.css.pnext-asset.js → [org]/tasks/[id]/task-view.38b1b7ef3976ba71.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/day-chart.c566c1a55d15bf58.css.pnext-asset.js → [org]/tasks/composer.79c015348f861749.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/range-bar.5504dd2c591a3056.css.pnext-asset.js → [org]/tasks/list/status.7e63f2b02469ca40.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/stats.cd1d20f46f1347bf.css.pnext-asset.js → [org]/tasks/list/tasks-list.2282a7cef8b15bd8.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/top-agents.47aecd65c0c8fa2e.css.pnext-asset.js → [org]/usage/@/app/dash/[org]/usage/range-bar.85d30ec5f022f124.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/usage.0f646568d57d13e8.css.pnext-asset.js → [org]/usage/@/comps/ui/segmented.41728247cda62f82.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.e9ce0eb6697f992d.css.pnext-asset.js → dash/[org]/usage/day-chart.4b3dbef8704de0e0.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{login/page.57e5198339e9ca28.css.pnext-asset.js → dash/[org]/usage/range-bar.476c059123ef6c23.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/@/comps/ui/toast.a4c3e977997216cf.css.pnext-asset.js → app/dash/[org]/usage/stats.bb7cb568c0174557.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/drawer.e8201d78154045bc.css.pnext-asset.js → app/dash/[org]/usage/top-agents.20a1d4451784792b.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/page-head.a6e3c4204ca45e94.css.pnext-asset.js → app/dash/[org]/usage/usage.775df2f43187c487.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.146f70c7049b5b31.css.pnext-asset.js → app/globals.dccea8b03fa4b6d2.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/confirm.fb57a29a70e9df56.css.pnext-asset.js → app/login/page.586a41a7ab9988e0.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/filter.e20fbd035f24ed01.css.pnext-asset.js → frame/drawer.0b0220d1edabce29.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/menu.6341c87b5bec4256.css.pnext-asset.js → frame/page-head.364ec93a8e7857b3.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/select.03a695573b914d6f.css.pnext-asset.js → frame/task-toasts.d13d9f628e530552.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.bcff411a9f2355ec.css.pnext-asset.js → button.d7f4433f4e7faa80.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.40284b41c03c5dcb.css.pnext-asset.js → card.15f7435f202831c3.css.pnext-asset.js} +0 -0
package/dist/sdk.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{m as e,p as t}from"./config-D2FxHWwi.js";import{E as n,H as r,T as i}from"./dispatch-D3Dqxijf.js";import{n as a,r as o,s,t as c}from"./remote-oQs6My_3.js";import{n as l}from"./executor-5j-Ewzzb.js";import{n as u}from"./agent-ChnedLBv.js";import{t as d}from"./connection-BCRJHTgp.js";import{t as f}from"./docs-3SW1O9iS.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./models-CdvmuaLv.js";import{n as b}from"./task-IoBYe7ok.js";import x from"./flow/index.js";import{i as S,n as C,o as w,r as T,s as E,t as D}from"./runner-DME7ohjt.js";import{t as O}from"./serve-wQgyxwdY.js";import{n as k}from"./apps-B60OpAHX.js";import{_ as A}from"./runners-CNhxPjg8.js";import{n as j}from"./maintenance-DuIspk-y.js";import{r as M,t as N}from"./serve-FG2LgXxM.js";import P from"node:path";import F from"node:process";function I(e){return e?P.resolve(e):F.cwd()}const L=b,R={add:(e,t)=>y(I(t.cwd),e,t),update:(e,t)=>v(I(t.cwd),e,t),remove:(e,t={})=>m(I(t.cwd),e,t),list:(e={})=>_(I(e.cwd)),alias:(e,t,n={})=>h(I(n.cwd),e,t,n),unalias:(e,t={})=>g(I(t.cwd),e,t),disable:(e,t={})=>p(I(t.cwd),e,!0,t),enable:(e,t={})=>p(I(t.cwd),e,!1,t)},z={get:(e,n={})=>t(I(n.cwd),e),set:(t,n,r={})=>e(I(r.cwd),t,n,r)},B=d;function V(e=[],t={}){return i(I(t.cwd),{hosts:e})}function H(e={}){return n(e)}function U(e,t={}){return f(e,t)}const W={async run(e={}){let t=await l(`review`,{cwd:e.cwd,args:e});return{...t.result,runId:t.runId}}},G=s,K={serve:N,rotateKey:j,workflow:A,app:{create:k},handler:M},q={list:(e={})=>a(e).credentials.list(),add:c,remove:(e,t={})=>a(t).credentials.remove(e,t),default:(e,t={})=>a(t).credentials.setDefault(e,t),login:o},J={list:(e={})=>a(e).folders.list(),check:(e,t={})=>a(t).folders.check(e)},Y={list:C,add:D,pair:T,update:E,default:(e,t={})=>E(e,{default:!0},t),test:w,rename:(e,t,n={})=>E(e,{name:t},n),remove:S,serve:O},X=u;var Z={task:L,flow:x,model:R,config:z,connection:B,setupHost:V,upgrade:H,docs:U,review:W,auth:G,agent:X,credentials:q,folders:J,runner:Y,server:K};export{r as CoderError,X as agent,G as auth,z as config,B as connection,q as credentials,Z as default,U as docs,x as flow,J as folders,R as model,W as review,Y as runner,K as server,V as setupHost,L as task,H as upgrade};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{$ as t,B as n,Cn as r,Ct as i,Q as a,R as o,S as s,_ as c,ct as l,g as u,j as d,n as f,o as p,s as m,t as h,v as g,w as _}from"./config-D2FxHWwi.js";import{H as v}from"./dispatch-D3Dqxijf.js";import{i as y,n as b,p as x,r as ee,s as S,t as C}from"./load-CRmQB1LD.js";import{s as w,u as T}from"./slack-C_RlVDz7.js";import{n as E}from"./integrations-D3OgJk6Y.js";import{i as D,t as te}from"./discover-CBP4Uw0N.js";import{c as ne}from"./models-CdvmuaLv.js";import{a as re}from"./local-ccKBhpQc.js";import{a as O,d as ie,f as ae,l as k,n as oe,o as se,p as ce,r as le,s as ue,t as de,u as fe}from"./http-Cg_wYcZT.js";import{$ as pe,$n as A,$t as me,A as he,An as ge,Ar as _e,B as ve,Bn as ye,Bt as be,C as xe,D as Se,Dn as Ce,Dr as j,Dt as we,E as Te,En as Ee,Er as M,Et as De,F as Oe,Fn as ke,Ft as Ae,G as je,Gn as Me,Gt as Ne,H as Pe,Hn as Fe,Ht as Ie,I as Le,In as Re,It as N,J as ze,Jn as Be,Jt as Ve,K as He,Kn as Ue,Kt as We,L as Ge,Ln as Ke,Lt as qe,M as Je,Mn as Ye,Mt as Xe,N as Ze,Nn as Qe,Nt as $e,O as P,On as et,Or as F,Ot as I,P as tt,Pn as nt,Pt as rt,Q as it,Qn as L,Qt as at,R as ot,Rn as st,Rt as R,S as z,Sn as ct,Sr as lt,St as ut,T as dt,Tn as ft,Tr as pt,Tt as mt,U as ht,Un as gt,Ut as _t,V as vt,Vt as yt,W as bt,Wn as xt,Wt as St,X as Ct,Xn as wt,Xt as Tt,Y as Et,Yn as Dt,Yt as Ot,Z as kt,Zn as At,Zt as jt,_ as Mt,_r as Nt,_t as Pt,a as Ft,an as It,ar as Lt,at as Rt,b as zt,bn as Bt,br as Vt,bt as Ht,c as B,cn as Ut,cr as Wt,ct as Gt,d as Kt,dn as qt,dr as Jt,dt as V,en as Yt,er as Xt,et as Zt,f as Qt,fn as $t,fr as en,ft as tn,g as nn,gn as rn,gr as an,gt as on,h as H,hn as sn,hr as cn,i as ln,in as un,ir as dn,it as fn,j as U,jn as pn,jt as mn,k as hn,kn as gn,kr as _n,kt as W,l as vn,ln as yn,lr as bn,lt as xn,m as Sn,mn as Cn,mr as wn,mt as Tn,nn as En,nr as G,nt as Dn,o as On,on as kn,or as An,ot as jn,p as Mn,pn as Nn,pr as Pn,pt as Fn,q as In,qn as Ln,qt as Rn,r as zn,rn as Bn,rr as Vn,rt as Hn,s as Un,sn as Wn,sr as Gn,tn as Kn,tr as qn,tt as Jn,u as Yn,un as Xn,ur as Zn,ut as Qn,v as $n,vr as er,vt as tr,w as nr,wn as rr,wt as ir,x as ar,xr as or,xt as sr,y as cr,yn as lr,yr as ur,zn as dr,zt as fr}from"./apps-B60OpAHX.js";import{n as pr,r as mr}from"./env-C_DoQYl5.js";import{S as hr,a as gr,b as K,h as _r,i as vr,n as yr,p as br,x as xr}from"./runners-CNhxPjg8.js";import{X as Sr}from"./schema-BSlHRFSP.js";import q from"node:path";import J from"node:process";import Cr from"node:fs";import{spawnSync as wr}from"node:child_process";import{createHash as Tr,randomBytes as Er,randomUUID as Dr}from"node:crypto";import Y from"node:fs/promises";import{isDeepStrictEqual as Or}from"node:util";import kr from"node:http";async function Ar(e){try{return await Y.readdir(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function X(e){try{return await Y.lstat(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function jr(e,t){if(e===t||!await X(e))return 0;let n=await Ar(e),i=n.filter(e=>e.isDirectory()).length;if(!await X(t))return await r(e,t),i;for(let i of n)await r(q.join(e,i.name),q.join(t,i.name));return await Y.rmdir(e),i}async function Mr(e){let t=q.dirname(e),n=q.basename(e);for(let e of await Ar(t)){let r=e.name.startsWith(n)?e.name.slice(n.length):``;if(!e.isFile()||!(r===`.tmp`||/^\.\d+(?:\.[a-f0-9-]{36})?\.tmp$/.test(r)))continue;let i=Number(e.name.slice(n.length+1).split(`.`)[0]);if(Number.isInteger(i)&&i>0)try{process.kill(i,0);continue}catch(e){if(e.code!==`ESRCH`)continue}await Y.unlink(q.join(t,e.name)).catch(e=>{if(e.code!==`ENOENT`)throw e})}}async function Nr(e,t){if(await Mr(e),e===t||!await X(e))return 0;if(!await X(t))return await r(e,t),1;let n=JSON.parse(await Y.readFile(e,`utf8`)),i=JSON.parse(await Y.readFile(t,`utf8`)),a={...n,...i,...n.rows||i.rows?{rows:{...n.rows,...i.rows}}:{}},o=`${t}.${process.pid}.${Dr()}.tmp`;try{await Y.writeFile(o,`${JSON.stringify(a)}\n`,{mode:384,flag:`wx`}),await Y.rename(o,t),await Y.unlink(e)}finally{await Y.rm(o,{force:!0})}return 1}async function Pr(){let e=a(),n=t(`state`),r=a(`archive`),i=a(`flows-archived`),o=a(`usage.json`),s=a(`runner`,`usage.json`),c={from:t(`checkouts`),to:a(`checkouts`)},l={from:t(`update-check.json`),to:a(`update-check.json`)},u={cache:e,tasks:0,flows:0,files:0},d=(await Ar(n)).filter(e=>e.isDirectory()).map(e=>({archive:t(`state`,e.name,`archive`),flows:t(`state`,e.name,`flows-archived`),usage:t(`state`,e.name,`usage.json`),runnerUsage:t(`state`,e.name,`runner`,`usage.json`)}));await Mr(o),await Mr(s);for(let e of d)u.tasks+=await jr(e.archive,r),u.flows+=await jr(e.flows,i),u.files+=await Nr(e.usage,o),u.files+=await Nr(e.runnerUsage,s);return await jr(c.from,c.to),u.files+=await Nr(l.from,l.to),u}async function Fr(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function Ir(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await Lr(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,O({ok:r},r?200:503,{"cache-control":`no-store`})}async function Lr(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Rr(e){let t=(e.now??Date.now)();if(e.queue.metrics&&!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await Fr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...W(e.local.cwd,!1),...W(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await Fr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}async function zr(e,t,n,r){let i=t.session.user.id;n.id;let a=(await e.json().catch(()=>({}))).engine??``;if(!Wr.has(a)||!t.config.subscriptions?.[a])return O({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return O({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=(await t.store.list(`login`)).find(({value:e})=>e.owner===i&&e.engine===a&&e.state!==`done`&&e.state!==`failed`&&e.expiresAt>Z(t));if(s)return O(Kr(s.id,s.value));let c=`login-${Er(12).toString(`base64url`)}`,l=rn(c,t.organizationId,0),u={owner:i,engine:a,state:`starting`,tokenHash:l.hash,runner:o.kind,createdAt:Z(t),expiresAt:Z(t)+Ur};await Gr(t,c,u);let d;try{let e=await o.start({id:c},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:l.token,CODER_LOGIN:a},void 0,{timeoutMs:Ur,hosts:[br[a].api,...br[a].account]}),n=await t.store.patchLogin(c,{handle:e},{tokenHash:u.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),O({error:`This sign-in is gone. Start again.`},409);d=n}catch(e){return await t.store.delete(`login`,c),O({error:e instanceof Error?e.message:String(e)},502)}return O(Kr(c,d),201)}async function Br(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;return a?O(Kr(i,a)):O({error:`This sign-in is gone. Start again.`},404)}async function Vr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;if(!a)return O({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:hr(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?O({error:`This sign-in is not waiting for a code.`},409):O({ok:!0})}async function Hr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),O({ok:!0})):O({error:`This sign-in is gone. Start again.`},404)}const Ur=6e5,Wr=new Set([`claude`,`codex`]),Z=e=>(e.now??Date.now)();function Gr(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-Z(e))})}function Kr(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{},...t.label?{label:t.label}:{}}}async function qr(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}function Jr(e,t){let n=t.handle&&e.runners[t.runner]?.stop(t.handle);if(!n)return;let r=n.catch(e=>console.error(`coder server: could not stop the machine of a finished ${t.engine} sign-in`,e));e.waitUntil?.(r)}async function Yr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=Date.now()+25e3;for(;!a.input&&Date.now()<o&&!e.signal.aborted;){await new Promise(e=>setTimeout(e,250));let e=await t.store.get(`login`,i);if(!e)return new Response(`Unauthorized`,{status:401});a=e}if(!a.input)return O({});let s=await t.store.patchLogin(i,{input:null},{input:a.input,tokenHash:a.tokenHash});return O(s?{code:K(t.config,a.input)}:{})}async function Xr(e,t,n,r){n.id;let i=t.callbackLogin;return O({engine:i.engine})}async function Zr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return O({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s)&&Jr(t,a),O({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return O({error:`Invalid sign-in result`},400);let n=`${a.engine}-subscription`,r=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,n,{...xr(t.config,{env:c}),engine:a.engine,createdAt:(t.now??Date.now)(),...r?.email||r?.plan?{account:{...typeof r.email==`string`?{email:r.email}:{},...typeof r.plan==`string`?{plan:r.plan}:{}}}:{}})?(Jr(t,a),O({ok:!0})):O({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return await t.store.patchLogin(i,l.url?{...l,state:`open`}:l,s)?O({ok:!0}):O({error:`This sign-in changed. Try again.`},409)}const Qr=e=>`audit:${String(9999999999999-e).padStart(13,`0`)}:${Er(4).toString(`hex`)}`,$r=e=>e.config.name??`Wular`,ei=e=>wn(e,e.serverOrganizationId??e.organizationId);async function ti(e,t,n){let r=(e.now??Date.now)(),i=e.session?.user,a={at:r,actor:i?{id:i.id,name:i.name,email:i.email}:{id:`admin-token`},action:t,target:n};await ei(e).store.put(`snapshot`,Qr(r),a)}async function ni(e,t){let n=await ei(t).store.list(`app`),r=Object.values(t.integrations).filter(e=>e.app.builtin===`shared`).map(e=>{let t=n.find(({value:t})=>t.builtin&&t.integration===e.id)?.value;return{integration:e.id,name:e.name,brand:e.brand,organizationApps:e.organizationApps===!0,...t?{app:{id:t.id,name:t.name,createdAt:t.createdAt}}:{}}}),i=t.config.publicUrl,a=!!i&&H.has(new URL(i).hostname);return O({name:$r(t),platforms:r,...a?{unreachable:!0}:{}})}async function ri(e,t,n){let r=t.integrations[n.integration];if(!r)return O({error:`Unknown integration "${n.integration}".`},404);if(r.app.builtin!==`shared`)return O({error:`Create ${r.name} apps in your workspace from the agent's Platforms tab.`},400);if(!t.config.publicUrl)return O({error:`Set PUBLIC_URL on this server first. Platforms call it.`},400);let i=await e.json().catch(()=>void 0),a=e=>typeof e==`string`&&e.trim()||void 0,o=a(i?.name)??$r(t),s=r.organizationApps?a(i?.owner):void 0,c=await zn(ei(t),r.id,{name:o,owner:s});return await ti(t,`Started setting up a shared app`,`${o} on ${r.name}`),O({url:c})}async function ii(e,t){let n=await ei(t).store.list(`snapshot`,{prefix:`audit:`,limit:100});return O(n.map(e=>e.value))}const ai=e=>`create-finished:${T(e)}`;async function oi(e,t){let n=await e.store.get(`delivery`,ai(t));return n&&`target`in n?n.target:void 0}async function si(e,t,n){let r=e.operatorApp??!1,i=r?`*`:e.session?.user.id??`anonymous`;if(!e.integrations[t])return{error:`Unknown integration "${t}"; run coder agent integrations list to see them`,status:404};if(!e.config.publicUrl)return{error:`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,status:400};if(r&&e.integrations[t].app.builtin!==`shared`)return{error:`Create this app in your workspace from the agent's Platforms tab.`,status:400};let a=Yn(n);if(!a)return{error:`Setup link is missing or malformed; start again from the agent's Platforms tab`,status:400};if(!a.definition.integrations[t])return{error:`This agent declares no ${t} integration in its agent.json`,status:400};if(a.state.public&&!r&&!e.integrations[t].publicApps)return{error:`${e.integrations[t].name} apps cannot be public here. Create a private one.`,status:400};let o=On(t,a.state),s=a.state.tx?await _n(e,a.state.tx,`create`,i)===o?a.state.tx:void 0:await _e(e,`create`,i,o);return s?{state:{...a.state,tx:s},definition:a.definition}:{error:`This app creation link is invalid, expired, or already used`,status:403}}async function ci(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=r.searchParams.get(`tx`);if(t.operatorApp&&i&&(await _n(t,i,`create`,`*`)||await oi(t,i)===n.id))return await or(e,void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503});let a=new URLSearchParams(r.searchParams);return a.set(`create`,n.id),ce(`${Un(t)}${Qt(Sn(t),`/setup`)}?${a}`)}async function li(e,t,n){let r=await si(e,t,n);if(`error`in r)return O({error:r.error},r.status);let{app:i}=e.integrations[t],a=r.state.tx,o=i.createStep&&(e.operatorApp||r.state.public)?i.createStep(e.config.publicUrl,{name:r.definition.name,public:r.state.public}):void 0,s=e.config.publicUrl;if(i.createPost&&H.has(new URL(s).hostname))return O({error:`${e.integrations[t].name} cannot reach ${s}. Set a public address first.`},400);let c=e.operatorApp?void 0:vn(e,r.state.agent),l=i.createPost?.({publicUrl:s,...r,encodedState:re({tx:a,...c?{back:c}:{}})});return O({tx:a,...l?{post:l}:{},...o?{create:o}:{}})}async function ui(e,t,n,r){if(/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return li(t,n.id,r.searchParams)}async function di(e,t,n){let r=await e.json().catch(()=>void 0);return li(t,n.integration,new URLSearchParams(r&&typeof r==`object`?r:{}))}async function fi(e,t,n,r,i){let a=t.operatorApp??!1,o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[n];if(!s)return B(t,`unknown-integration`,{platform:n},i);if(a&&s.app.builtin!==`shared`)return O({error:`Create this app in your workspace from the agent's Platforms tab.`},400);let c=t.config.publicUrl;if(!c)return B(t,`no-public-url`,{},i);let l=r?await Kt(t,r,n,o):void 0;if(!l)return B(t,`create-expired`,{platform:n},i);a&&await t.store.put(`delivery`,ai(r),{at:t.now?.()??Date.now(),target:n},{ttlMs:6e5});let u=a?`/create/${n}`:vn(t,l.state.agent),d=a?{tx:r}:{},f=a?void 0:(await ln(t)).find(e=>e.integration===n),p=await s.app.createCallback(e,{publicUrl:c,...l,fetch:t.fetch??fetch,...f?{shared:K(t.config,f.credentials)}:{}}).catch(r=>r instanceof w&&r.code===`invalid-field`&&e.headers.get(`accept`)===`application/json`?O({error:r.message},400):r instanceof w?B(t,r.code,{platform:n,error:r.error,...d},u):(console.error(`coder server: creating the ${n} app failed`,r),B(t,`failed`,{platform:n,...d},u)));if(p instanceof Response)return p;let m={id:`${n}:${p.platformAppId}`,integration:n,agent:l.state.agent,name:p.name,...l.state.repo?{agentsRepo:l.state.repo}:{},...l.state.repo?{branch:l.state.branch??`main`}:{},...a?{builtin:!0}:{},...`shared`in p?{shared:f.id,credentials:``}:{credentials:hr(t.config,p.credentials)},createdAt:t.now?.()??Date.now()};if(await t.store.put(`app`,m.id,m),s.app.values&&await t.store.put(`delivery`,Be(m.id),{version:0,manifest:s.app.values(m,{publicUrl:c,definition:l.definition}).lines,changed:!1}),a)return await ti(t,`Created the shared app`,`${p.name} on ${s.name}`),B(t,`created`,{platform:n,app:p.name,...d},u);let h=await _e(t,`install`,o,m.id);return ce(`${c}/install/${n}?app=${encodeURIComponent(m.id)}&state=${re({tx:h,back:u})}`)}async function pi(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=le(r.searchParams.get(`state`));return fi(e,t,n.id,i?.tx,Ft(i?.back))}async function mi(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=new URLSearchParams(await e.clone().text()).get(`tx`),a=await fi(e,t,n.id,i,void 0),o=a.headers.get(`location`);return o&&e.headers.get(`accept`)===`application/json`?O({url:o}):a}async function hi(e,t,n,r){if(t.source!==`repo`||!t.repo)return;let i=(await(r??e.store.list(`app`))).find(({value:e})=>e.agent===t.id&&e.agentsRepo===t.repo)?.value;return((i&&e.integrations[i.integration])??Object.values(e.integrations).find(e=>e.repos))?.repos?.url(t.repo,t.path,i?.branch??n?.commit)}async function gi(e,t,n){let r=await wt(e.store,t);return await qn(e.store,n,t,r)?wt(e.store,t):r}async function Q(e,t){let n=(e.now??Date.now)(),r=e.local?await Fe(e.store,e.local.cwd,e.integrations,t).catch(()=>void 0):void 0;return{now:n,local:r,loadCurrent:()=>r?Promise.resolve(r.find(({record:e})=>e.id===t)??{}):gi(e,t,n)}}async function _i(e,t,{after:n,q:r,source:i,platform:a,limit:o}){return!t&&e.store.listAgentSummaries?(await e.store.listAgentSummaries({after:n,q:r,source:i,platform:a,limit:o})).map(({record:e})=>e):(t??(a?await At(e.store):(await e.store.list(`agent`)).map(({value:e})=>({record:e,version:void 0})))).filter(({version:e})=>!a||!!e?.definition?.integrations?.[a]).map(({record:e})=>e).filter(e=>(!n||e.id>n)&&(!i||e.source===i)&&(!r||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(r)))).sort((e,t)=>e.id.localeCompare(t.id)).slice(0,o)}async function vi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let a=r.searchParams.get(`fields`);if(a&&![`id`,`id,name`].includes(a))return O({error:`Invalid fields`},400);let{now:o,local:s,loadCurrent:c}=await Q(t,i);if(!s&&t.store.listAgentSummaries&&(await G(t.store,o),ae(r)&&!a))return O(await Ci(t,r));let l=ie(r,200);if(a){!s&&!t.store.listAgentSummaries&&await G(t.store,o);let e=await _i(t,s,{after:oe(r),q:r.searchParams.get(`q`)?.trim().toLowerCase(),source:Si[r.searchParams.get(`type`)??``],platform:r.searchParams.get(`platform`)??void 0,limit:l+ +!!ae(r)}),n=e=>a===`id`?{id:e.id}:{id:e.id,name:e.name},i=fe(e,l,e=>e.id);return O(ae(r)?{...i,items:i.items.map(n)}:e.map(n))}let u=s??(t.store.listAgentSummaries?await t.store.listAgentSummaries({limit:l}):await At(t.store));if(!s&&!t.store.listAgentSummaries&&await G(t.store,o,u)&&(u=await At(t.store)),ae(r))return O(await Ci(t,r,u));let d,f=y();return O(await Promise.all(u.slice(0,l).map(async({record:e,version:n})=>{e.source===`repo`&&e.repo&&(d??=t.store.list(`app`));let r=await hi(t,e,n,d);return{...e,...e.id===f?{default:!0}:{},definition:n?.definition,...r?{sourceUrl:r}:{}}})))}async function yi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=ie(r,10,50),l=oe(r),[u,d]=await Promise.all([o?s().then(e=>e.record):L(t.store,i),o?Promise.resolve(o.flatMap(({version:e})=>e?[{value:e}]:[])):t.store.listVersions?.(i,c+1,l)]);return u?O(await wi(t,u,c,l??u.currentVersion+1,d)):O({error:`No agent named "${i}"`},404)}async function bi(e,t,n,r){let i=n.slug,a=n.version?Number(n.version):void 0;if(n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,i),l=s?s.find(({version:e})=>e?.version===a)?.version:await A(t.store,i,a);return l?O(l):O({error:`No version ${a} for agent "${i}"`},404)}async function xi(e,t,r,i){let a=r.slug;if(r.version&&Number(r.version),r.version&&!/^\d+$/.test(i.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,a),l=i.searchParams.get(`versions`)!==`0`,u=i.searchParams.get(`content`)!==`0`,d=i.searchParams.get(`handles`)===`1`,f=t.session?.user.id,[{record:p,version:m},h,g,_,v]=await Promise.all([!u&&!s&&t.store.listAgentSummaries&&!ee()[a]?t.store.listAgentSummaries({slug:a}).then(e=>e[0]??{}):c(),l?s?s.flatMap(({version:e})=>e?[{value:e}]:[]):t.store.listVersions?t.store.listVersions(a):t.store.list(`agentversion`,{prefix:`${a}:`}):[],d?pn(t,a):[],d?Cn(t.store,a):void 0,d?t.store.listCredentials?t.store.listCredentials({owner:f}):t.store.list(`credential`):void 0]);if(!p)return O({error:`No agent named "${a}"`},404);let y=p.settings?.engine??m?.definition.engine??n,b=v!==void 0&&!v.some(({value:e})=>e.engine===y&&(!e.owner||e.owner===f))&&!await mn(t,p.settings?.engine??m?.definition.engine),x=m?.definition.integrations??{},S=e=>{let t=x[e]?.events;return Array.isArray(t)?t.includes(`mention`):!!(t&&`mention`in t)},C=[],w=Object.keys(t.integrations),T=(e,t)=>w.indexOf(e.value.integration)-w.indexOf(t.value.integration);for(let{value:e}of[...g].sort(T))S(e.integration)&&!C.some(t=>t.integration===e.integration&&t.name.toLowerCase()===e.name.toLowerCase())&&C.push({name:e.name,integration:e.integration,platform:t.integrations[e.integration]?.name??e.integration});let E=h.map(({value:e})=>{let{systemPrompt:t,files:n,...r}=e;return r}),D=await hi(t,p,m);return O({...p,...m?{definition:m.definition,...u&&`systemPrompt`in m?{systemPrompt:m.systemPrompt,...m.files?{files:m.files}:{}}:{}}:{},...D?{sourceUrl:D}:{},...l?{versions:E}:{},...C.length?{handles:C}:{},..._?.failed?{deliveries:{failed:_.failed,recent:_.recent.map(e=>({at:e.at,platform:t.integrations[e.integration]?.name??e.integration,...e.type?{type:e.type}:{},error:e.error,...e.url?{url:e.url}:{}}))}}:{},...b?{needsModel:!0}:{}})}const Si={builtin:`builtin`,dashboard:`upload`,repository:`repo`};async function Ci(e,t,n){let r=ie(t,24,100),i=oe(t),a=t.searchParams.get(`q`)?.trim().toLowerCase(),o=Si[t.searchParams.get(`type`)??``],s=t.searchParams.get(`platform`),c=t.searchParams.get(`connect`)===`1`,l=e.serverOrganizationId,u=e.store.list(`app`),[d,f,p,m]=await Promise.all([u,e.store.list(`installation`),c&&l!==void 0&&l!==e.organizationId&&e.scope?e.scope(l).store.list(`app`):[],n?n.filter(({record:e})=>(!i||e.id>i)&&(!o||e.source===o)&&(!a||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(a)))):e.store.listAgentSummaries({after:i,source:o,q:a,platform:s??void 0,limit:r+1})]),h=new Set(f.filter(({value:e})=>!e.deletedAt).map(({value:e})=>e.app)),g=(e,t)=>{let n=d.filter(({value:n})=>n.agent===e&&n.integration===t);return n.length?n.some(({value:e})=>h.has(e.id))?`installed`:`created`:`none`},_=[];for(let{record:e,version:t}of m){let n=Object.keys(t?.definition?.integrations??{}).sort();if(!(s&&!n.includes(s))&&(_.push({record:e,version:t,ids:n}),_.length>r))break}let v=fe(_,r,e=>e.record.id),b=y();return{...v,...c?{connectable:[...d,...p].filter(({value:t})=>t.builtin&&e.integrations[t.integration]?.app.builtin===`shared`&&!h.has(t.id)).map(({value:e})=>({id:e.id,integration:e.integration,agent:e.agent}))}:{},items:await Promise.all(v.items.map(async({record:t,version:n,ids:r})=>{let i=await hi(e,t,n,u);return{...t,...t.id===b?{default:!0}:{},definition:n?.definition,...i?{sourceUrl:i}:{},platforms:r.map(e=>({id:e,state:g(t.id,e)}))}}))}}async function wi(e,t,n,r,i){let a=r-n-2,o=(i??await e.store.list(`agentversion`,{prefix:`${t.id}:`,...a>0?{after:Lt(t.id,a)}:{},limit:n+1})).map(({value:e})=>{let{systemPrompt:t,files:n,definition:r,...i}=e;return i}).filter(e=>e.version<r).reverse();return fe(o,n,e=>e.version)}var Ti=class{options;entries=new Map;pending=new Map;constructor(e={ttlMs:6e5,max:100}){this.options=e}get size(){return this.entries.size}get inFlight(){return this.pending.size}has(e){return this.entries.has(e)}keys(){return this.entries.keys()}async get(e,t){let n=this.options.now??Date.now,r=n(),i=this.entries.get(e);if(i&&r-i.at<this.options.ttlMs)return i.value;for(let[t,n]of this.entries)t!==e&&r-n.at>=this.options.ttlMs&&this.entries.delete(t);let a=this.pending.get(e);return a||(a=Promise.resolve().then(t).then(t=>{if(t===void 0)return i?.value;if(this.options.accept&&!this.options.accept(t))return i?.value??t;this.entries.set(e,{value:t,at:n()});let r=this.entries.keys().next().value;return this.entries.size>this.options.max&&r!==void 0&&this.entries.delete(r),t}).catch(()=>i?.value).finally(()=>this.pending.delete(e)),this.pending.set(e,a)),a}};const Ei=/^[a-z0-9][a-z0-9-]*$/,Di=new Set([`openrouter.ai`,`ai-gateway.vercel.sh`,`api.groq.com`,`api.together.xyz`]);function Oi(e){return{builtin:{codex:m,claude:f},models:e.models??{}}}async function ki(e,t){let{baseUrl:n,envKey:r,key:i}=await qe(e);if(!n||!/^https?:\/\//.test(n)||!URL.canParse(n))return O({error:`An http or https base URL is required`},400);let a=!i&&r&&await Ai(t,n,r)?await tr(t,r):void 0,o=i||a,s=t.settings??={},c=s.probes??=new Ti({ttlMs:6e5,max:100,now:t.now,accept:e=>e.reachable}),l=`${new URL(n).host}|${r??``}|${T(String(o??``))}`;return O(await c.get(l,()=>ne({baseUrl:n},{key:o,fetch:t.fetch})))}async function Ai(e,t,n){let r=new URL(t).host;if(Di.has(r))return!0;let i=(await _t(e)).models??{};return Object.values(i).some(e=>`baseUrl`in e&&e.envKey===n&&new URL(e.baseUrl).host===r)}async function ji(e,t,n,r){return O(Oi(await _t(t)))}async function Mi(e,t,n,r){let{name:i=``,...a}=await qe(e);return!Ei.test(i)||c(i)?O({error:`Invalid model name "${i}"`},400):R(t,e=>{if(e.models?.[i])throw new N(`"${i}" already exists`);e.models={...e.models,[i]:a}})}async function Ni(e,t,n,r){let i=n.name;return R(t,e=>{if(!e.models?.[i])throw new N(`No model "${i}"`);_(e,i)})}async function Pi(e,t,n,r){let i=n.name,{spec:a}=await qe(e);return R(t,e=>{if(!Ei.test(i))throw new N(`Invalid alias name "${i}"`);let t=e.models?.[i];if(t&&g(t))throw new N(`"${i}" is a custom model name`);let n=s(a,d(e));if(!n?.model||n.engine===`custom`)throw new N(`"${a}" does not name a codex or claude model`);let r=n.engine===`claude`?f:m,o=a.split(`:`).some(e=>p.has(e)||h.has(e));e.models={...e.models,[i]:{provider:n.engine,model:r[n.model]??n.model,...o&&n.effort?{effort:n.effort}:{}}}})}async function Fi(e,t,n,r){let i=n.name;return R(t,e=>{let t=e.models??={},n=t[i];n&&(g(n)||u(n))?n.disabled=!0:t[i]={disabled:!0}})}async function Ii(e,t,n,r){let i=n.name;return R(t,e=>{let t=e.models??={},n=t[i];n&&(g(n)||u(n))?delete n.disabled:delete t[i]})}async function Li(e,t){let{now:n,local:r}=await Q(t);r||await G(t.store,n);let[i,a,o]=await Promise.all([_i(t,r,{limit:200}),_t(t),t.store.list(`runner`)]),s=y(),c=i.filter(e=>!e.settings?.disabled).sort((e,t)=>Number(t.id===s)-Number(e.id===s)).map(({id:e,name:t})=>({id:e,name:t,...e===s?{default:!0}:{}})),l=fr(t,a),u=Object.values(t.integrations).find(e=>e.repos);return O({agents:c,...l.chain?.[0]?{engine:l.chain[0]}:{},engines:l.engines??{},models:Oi(a),runners:fn(t,o,n).map(({id:e,name:t,default:n})=>({id:e,name:t,default:n})),flows:D(te(),`builtin`).map(e=>e.name),...t.local?{folders:Wt(t.local.cwd)}:{},...u?{connectLabel:u.installLabel??`Connect ${u.id}`}:{}})}async function Ri(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await dr(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=i.token?{...i,token:K(e.config,i.token)}:i,o=await n.auth.token(r,K(e.config,a.credentials));if((await n.repos.list(r,o)).includes(t))return{contents:n,token:o,app:a,installation:i}}catch{}}}async function zi(e,t,n){let r=await Ri(e,t);if(!r)return O({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,xt,r.token,n).catch(()=>[]),a=await Promise.all(i.map(async i=>{let a=await r.contents.repos.readFile(t,`${xt}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(a===void 0)return;let s={};try{let e=JSON.parse(a);e&&typeof e==`object`&&(s=e)}catch{}let c=Object.entries(s.mcp&&typeof s.mcp==`object`&&!Array.isArray(s.mcp)?s.mcp:{}).flatMap(([e,t])=>o(e,t)),l=await L(e.store,i),u=l?.source===`repo`&&l.repo===t,d=u?await A(e.store,i):void 0;return{id:i,name:typeof s.name==`string`?s.name:i,...c.length?{warnings:c}:{},...typeof s.description==`string`?{description:s.description}:{},...u?{version:l.currentVersion,...d?.source?{commit:d.source.commit}:{}}:{},...l&&!u?{taken:!0}:{}}}));return O({repo:t,agents:a.filter(Boolean)})}async function Bi(e,t,n,r){let i=r.searchParams.get(`repo`);return i?zi(t,i,r.searchParams.get(`ref`)||`HEAD`):O({error:`repo is required`},400)}async function Vi(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return O({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await Ri(t,i.repo);if(!e)return O({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await L(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return O({error:`Agent id "${e}" is already taken`},409)}let o=await Me(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await Dt(t,o),O({imported:o.map(e=>e.agent)})}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}function Hi(e){if(!e||Array.isArray(e)||typeof e!=`object`)return!1;let t=Object.entries(e);if(t.length>100)return!1;let n=0;for(let[e,r]of t){if(typeof r!=`string`||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)||e.split(`/`).includes(`..`)||e===`agent.json`||e===`system.md`)return!1;n+=Buffer.byteLength(e)+Buffer.byteLength(r)}return n<=262144}async function Ui(e,t){return(await Ln(e,[t])).flatMap(({app:e,error:t,check:n})=>{let r={id:e.id,integration:e.integration,name:e.name};return t?[{...r,error:t}]:n?n.changed?[{...r,drift:!0}]:[]:[{...r,updated:!0}]})}async function Wi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);try{let e=x({[i]:c})[i];if(!e||typeof e!=`object`)throw Error(`settings must be an object`);let{disabled:n,...r}=e,a=n?{...r,disabled:n}:r,{record:o,version:l}=await s();if(!o||!l)throw Error(`No agent named "${i}".`);if(dn({...o,settings:void 0},l,r,t.integrations),t.local){let e=S(t.local.cwd,i,!!n);return e?O({error:`Agent "${i}" is ${n?`enabled`:`disabled`} by agents.${i} in ${e}. Change it there.`},409):(await St(t,e=>{e.agents={...e.agents,[i]:a}}),await Fe(t.store,t.local.cwd,t.integrations),O(await L(t.store,i)))}return O(await Vn(t.store,i,a,(t.now??Date.now)()))}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}async function Gi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),{record:c}=await s();if(!c)return O({error:`No agent named "${i}"`},404);if(c.source===`builtin`)return O({error:`Built-in agents cannot be deleted.`},400);if(t.local&&!await ye(t.local.cwd,t.integrations,i))return O({error:`Delete .coder/agents/${i} in the repo`},409);for(let{id:e}of await t.store.list(`agentversion`,{prefix:`${i}:`}))await t.store.delete(`agentversion`,e);return await t.store.delete(`agent`,i),O({ok:!0})}async function Ki(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);if(!c||typeof c.systemPrompt!=`string`||c.files!==void 0&&!Hi(c.files)||c.name!==void 0&&typeof c.name!=`string`||c.description!==void 0&&typeof c.description!=`string`)return O({error:`definition and systemPrompt are required; files must contain strings`},400);try{b([i]);let[e]=C({definitions:{[i]:{json:c.definition,builtin:!1}},usage:void 0},t.integrations);if(!e)throw Error(`No agent named "${i}".`);let n=t.local?await L(t.store,i):void 0,r=t.local&&n?await A(t.store,i):void 0,a=c.files;t.local&&(await gt(t.local.cwd,t.integrations,i,{definition:{...c.definition,...c.name===void 0?{}:{name:c.name},...c.description===void 0?{}:{description:c.description}},systemPrompt:c.systemPrompt,...a?{files:a}:{}}),await Fe(t.store,t.local.cwd,t.integrations));let o=t.local?void 0:await Xt(t.store,{id:i,name:c.name??e.name,description:c.description??e.definition.description,source:`upload`,definition:e.definition,systemPrompt:c.systemPrompt,files:a,importedFrom:`upload`},(t.now??Date.now)()),s=o?.version??await A(t.store,i),l=o?.unchanged??Or(r&&{...r,createdAt:0},{...s,createdAt:0}),u=await Ui(t,s),d=o?.record??await L(t.store,i);return O({...d,definition:s.definition,version:s.version,unchanged:l,apps:u})}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}async function qi(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1;r.searchParams.has(`limit`)&&ie(r,500,2e3);let s=await t.store.get(`task`,i);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!I(n,i,!1))return O({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return ta(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=I(n,i);if(t)return{status:t,lines:we(n,i,e,500),pendingResult:Ji(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o),l=t.statementTimeout??((e,t)=>t());return ta(e,t,i,Number.isFinite(c)?c:o,e=>l($i,async()=>{let n=await t.store.get(`task`,i);if(n)return{status:await rr(t,n),lines:await sn(t.store,i,e,500)}}))}function Ji(e,t,n=!1){if(!Ne.has(t.status)||t.error||t.status===`cancelled`)return!1;let r=l(e,t.task.id),a=Date.parse(r?.resumedAt??r?.createdAt??``)||0;return n||(Cr.statSync(q.join(i(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<a}const Yi=1e3,$=3e4;function Xi(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new Qi,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-29e4),a):a,p=u>0&&(!d||u<f)?`event: reset
|
|
2
|
+
data: {}
|
|
3
|
+
|
|
4
|
+
`:``,m=new TextEncoder,h=()=>{},g=new ReadableStream({start(n){n.enqueue(m.encode(`retry: ${Yi}\nid: ${f}${s}\n\n${p}`)),h=o.watch(t,i,f,e=>n.enqueue(m.encode(e)),()=>n.close(),d);let r=()=>{h();try{n.close()}catch{}};e.signal.aborted?r():e.signal.addEventListener(`abort`,r)},cancel(){h()}});return new Response(g,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}function Zi(e,t){let{task:n,approval:r,archivedAt:i,createdAt:a,startedAt:o,finishedAt:s}=e;return{id:n.id,agent:n.agent,status:e.status,approval:r??null,archivedAt:e.autoArchived&&!t?void 0:i,createdAt:a,startedAt:o,finishedAt:s,...t?{result:e.result??null,error:e.error??null,answer:e.answer??null}:{}}}var Qi=class{options;watches=new Set;timer;counts=new Map;runners=new Map;reading=!1;closed=!1;last=Date.now();scans=new Map;left=new Map;archived=new Map;reads=0;generation=Dr().slice(0,8);constructor(e={}){this.options=e}watch(e,t,n,r,i,a=!1){if(this.closed)return queueMicrotask(i),()=>{};let o=Date.now();this.watches.size||(this.last=o);let s={ctx:e,ids:new Set(t),sent:new Map,gone:new Set,from:n,fresh:!0,...a?{runners:``}:{},tag:this.tag(e),beat:o,marked:o,until:o+(this.options.lifeMs??29e4),send:r,close:i};return this.watches.add(s),this.timer||(this.timer=setInterval(()=>this.tick(),this.options.pollMs??1e3),this.timer.unref?.()),this.tick(),()=>this.drop(s)}tag(e){return`-${Tr(`sha256`).update(e.organizationId).digest(`hex`).slice(0,8)}${e.queue instanceof jn?`.${this.generation}`:``}`}runnersChanged(e){this.runners.delete(e)}close(){this.closed=!0;for(let e of[...this.watches]){this.drop(e);try{e.close()}catch{}}}drop(e){this.watches.delete(e)&&([...this.watches].some(t=>t.ctx.organizationId===e.ctx.organizationId)||(this.counts.delete(e.ctx.organizationId),this.runners.delete(e.ctx.organizationId)),this.watches.size||(clearInterval(this.timer),this.timer=void 0,this.counts.clear(),this.runners.clear()))}tick(){let e=Date.now();for(let t of[...this.watches])if(e>=t.until){this.drop(t);try{t.close()}catch{}}else e-t.beat>=(this.options.heartbeatMs??2e4)&&(t.beat=e,this.send(t,`: ping
|
|
5
|
+
|
|
6
|
+
`));this.reading||!this.watches.size||(this.reading=!0,this.read(e).finally(()=>this.reading=!1))}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){let t=[...this.watches],n=new Map;for(let e of t){let t=n.get(e.ctx.organizationId)??{ctx:e.ctx,ids:new Set};for(let n of e.ids)t.ids.add(n);n.set(e.ctx.organizationId,t)}let r=Math.min(this.last,...t.flatMap(e=>e.fresh?[e.from]:[]));this.reads++;let i=await this.changes(n,r-$,e).catch(e=>{console.error(`coder server: task events failed`,e)});if(i){this.last=e;try{for(let[e,{ctx:t}]of n){let n=this.counts.get(e),r=JSON.stringify([[...i.rows.get(e)??[]].map(([e,t])=>[e,t.status,t.archivedAt]).sort(),[...i.deleted.get(e)?.keys()??[]].sort()]),a=n?.fingerprint!==r,o=t.local?[...i.rows.get(e)?.values()??[]].filter(e=>!e.archivedAt&&[`queued`,`running`,`waiting`].includes(e.status)).length:a?(await t.queue.counts(e,{archived:!1,statuses:[`queued`,`running`,`waiting`]})).active:n.active;[...this.watches].some(t=>t.ctx.organizationId===e)&&this.counts.set(e,{active:o,fingerprint:r})}}catch(e){console.error(`coder server: task counts failed`,e);return}await Promise.all([...n].filter(([t])=>e-(this.runners.get(t)?.at??-1/0)>=15e3).map(async([t,{ctx:n}])=>{try{this.runners.set(t,{at:e,records:await n.store.list(`runner`)})}catch(e){console.error(`coder server: runner events failed`,e)}}));for(let n of t){if(!this.watches.has(n))continue;let t=[];try{t=this.news(n,i,e);let r=this.counts.get(n.ctx.organizationId)?.active;r!==void 0&&r!==n.active&&(n.active=r,t.push(`id: ${e}${n.tag}\nevent: counts\ndata: ${JSON.stringify({active:r})}\n\n`)),t.push(...this.runnerNews(n,e))}catch{}!t.length&&e-n.marked>=(this.options.heartbeatMs??2e4)&&t.push(`id: ${e}${n.tag}\n\n`),t.length&&(n.marked=e,this.send(n,t.join(``)))}}}runnerNews(e,t){let n=this.runners.get(e.ctx.organizationId);if(!n)return[];let r=fn(e.ctx,n.records,t),i=JSON.stringify(r.map(({lastSeen:e,...t})=>t.online?t:{...t,lastSeen:e})),a=e.runners;return e.runners=i,a===void 0||a===i?[]:[`id: ${t}${e.tag}\nevent: runners\ndata: ${JSON.stringify({items:r})}\n\n`]}async changes(e,t,n){let r=await[...e.values()][0].ctx.queue.changes([...e].map(([e,t])=>({organizationId:e,ids:[...t.ids]})),t),i=new Map;for(let{organizationId:e,status:t}of r.rows){let n=i.get(e)??new Map;i.set(e,n.set(t.task.id,t))}let a=new Map;for(let{organizationId:e,id:t,at:n}of r.deleted){let r=a.get(e)??new Map;a.set(e,r.set(t,n))}for(let[t,{ctx:r}]of e){if(!r.local)continue;let e=[...i.get(t)?.values()??[]],a=this.scans.get(r.local.cwd);if(!a||n-a.at>=(this.options.localScanMs??4e3)||e.some(e=>e.updatedAt>a.at)){let e=!a||n-a.archivedAt>=(this.options.archiveScanMs??15e3);await rt(r,r.local.cwd);let t=e?W(r.local.cwd,!0):a.archived,i=W(r.local.cwd,!1),o=new Set(i.map(e=>e.task.id)),s=[...i,...t.filter(e=>!o.has(e.task.id))],c=new Set(s.map(e=>e.task.id)),u=this.left.get(r.local.cwd)??new Map;for(let e of a?.rows??[])c.has(e.task.id)||u.set(e.task.id,a.at);for(let[e,t]of u)(t<n-6e5||c.has(e))&&u.delete(e);let d=this.archived.get(r.local.cwd)??new Set;for(let e of d)c.has(e)?d.delete(e):l(r.local.cwd,e)||(u.set(e,a?.at??n),d.delete(e));this.left.set(r.local.cwd,u),this.scans.set(r.local.cwd,a={at:n,rows:s,archived:t,archivedAt:e?n:a.archivedAt})}i.set(t,new Map(at(r.local.cwd,a.rows,e).map(e=>[e.task.id,e])))}return{rows:i,deleted:a}}news(e,{rows:t,deleted:n},r){let{ctx:i}=e,a=t.get(i.organizationId)??new Map,o=[],s=(t,n)=>{let i=JSON.stringify(n);e.sent.get(t)!==i&&(e.sent.set(t,i),o.push(`id: ${r}${e.tag}\nevent: task\ndata: ${i}\n\n`))},c=e=>({id:e,deleted:!0}),l=t=>{let n=i.local&&I(i.local.cwd,t,e.ids.has(t));if(s(t,n?Zi(n,e.ids.has(t)):c(t)),e.gone.add(t),n&&i.local){let e=this.archived.get(i.local.cwd)??new Set;this.archived.set(i.local.cwd,e.add(t))}};for(let[t,n]of a){let a=e.ids.has(t);e.gone.delete(t);let o=Zi(a&&i.local&&n.local&&Ne.has(n.status)?I(i.local.cwd,t)??n:n,a);if(i.local&&n.local&&e.sent.get(t)!==JSON.stringify(o)&&r-(n.finishedAt??0)<$&&Ji(i.local.cwd,n)){e.sent.has(t)||e.sent.set(t,``);continue}a||i.local&&!e.fresh||n.updatedAt>e.from-$?s(t,o):e.fresh&&e.sent.set(t,JSON.stringify(o))}for(let t of e.ids)a.has(t)||l(t);for(let[t,r]of n.get(i.organizationId)??[])r>e.from-$&&s(t,c(t));if(i.local){for(let t of e.sent.keys())!a.has(t)&&!e.ids.has(t)&&!e.gone.has(t)&&l(t);for(let[t,n]of this.left.get(i.local.cwd)??[])n>e.from-$&&!a.has(t)&&e.sent.get(t)!==JSON.stringify(c(t))&&l(t)}return e.fresh=!1,e.from=r,o}};const $i=1e4;var ea=class{options;feeds=new Map;closed=!1;reads=0;constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a=this.feeds.get(e),o=a?.reading!==void 0&&Date.now()-a.reading>=(this.options.stallMs??1e4);if(!a||o){let t={key:e,read:n,watches:new Set,head:1/0};if(a){clearTimeout(a.timer);for(let e of a.watches)t.watches.add(Object.assign(e,{feed:t}));a.watches.clear()}this.feeds.set(e,a=t)}let s={cursor:t,feed:a,timers:[],send:r,close:i};s.timers=[setTimeout(()=>this.end(s),this.options.lifeMs??5e4),setInterval(()=>this.send(s,`: ping
|
|
7
|
+
|
|
8
|
+
`),this.options.heartbeatMs??2e4)];for(let e of s.timers)e.unref?.();return a.watches.add(s),a.reading===void 0&&t<a.head&&(clearTimeout(a.timer),this.read(a)),()=>this.drop(s)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;for(let t of e.timers)clearTimeout(t);!t.watches.delete(e)||t.watches.size||(clearTimeout(t.timer),this.feeds.get(t.key)===t&&this.feeds.delete(t.key))}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){if(e.timer=void 0,this.feeds.get(e.key)!==e||!e.watches.size)return;let t=[...e.watches],n=Math.min(...t.map(e=>e.cursor));e.reading=Date.now(),this.reads++;let r=await e.read(n).catch(()=>null);if(e.reading=void 0,this.feeds.get(e.key)!==e)return;let i=t.filter(t=>e.watches.has(t)),a=i.length<e.watches.size?0:this.options.pollMs??1e3;if(r===void 0)for(let e of i)this.end(e);else if(r){let{status:t,lines:o,pendingLogs:s,pendingResult:c}=r,l=o.length===500,u=Ne.has(t.status)&&!l&&!s&&!c,d=o.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]);e.head=Math.max(n,o.at(-1)?.seq??n),l&&(a=0);for(let e of i){let t=d.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);e.cursor=Math.max(e.cursor,o.at(-1)?.seq??-1),u?this.end(e,`${t}event: end\ndata: {}\n\n`):t&&this.send(e,t)}}this.feeds.get(e.key)===e&&(e.timer=setTimeout(()=>void this.read(e),a),e.timer.unref?.())}};function ta(e,t,n,r,i){let a=t.logWatcher??new ea,o=new TextEncoder,s=()=>{},c=new ReadableStream({start(c){c.enqueue(o.encode(`retry: ${Yi}\n\n`)),s=a.watch(`${t.organizationId}:${n}`,r,i,e=>c.enqueue(o.encode(e)),()=>c.close());let l=()=>{s();try{c.close()}catch{}};e.signal.aborted?l():e.signal.addEventListener(`abort`,l)},cancel(){s()}});return new Response(c,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}const na={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},ra=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function ia(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=ra([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function aa(e){let t=e.remotes?.find(e=>e.type===`streamable-http`||e.type===`sse`);if(t)return{type:t.type===`sse`?`sse`:`http`,url:t.url,env:[],headers:ra(t.headers)};let n=e.packages?.find(e=>na[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=na[n.registryType],a=[],o=ia(n.runtimeArguments,`runtime`,a),s=ia(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:ra(n.environmentVariables),headers:[]}}function oa(e,t){let[n=``,r]=e.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),[i=``,a]=t.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),o=n.localeCompare(i,`en`,{numeric:!0});if(o)return o;if(r===void 0||a===void 0)return Number(r===void 0)-Number(a===void 0);let s=r.split(`.`),c=a.split(`.`);for(let e=0;e<Math.max(s.length,c.length);e++){let t=s[e],n=c[e];if(t===void 0||n===void 0)return Number(t!==void 0)-Number(n!==void 0);let r=/^\d+$/.test(t),i=/^\d+$/.test(n),a=r===i?t.localeCompare(n,`en`,{numeric:r}):Number(i)-Number(r);if(a)return a}return 0}var sa=class{sources=[{url:`https://api.mcp.github.com/v0.1/servers`,curated:!0,rows:new Map,ready:!1,failed:!1},{url:`https://registry.modelcontextprotocol.io/v0.1/servers`,curated:!1,rows:new Map,ready:!1,failed:!1}];refreshAt=0;timer;controller;closed=!1;inFlight;response(e,t){if((e.now??Date.now)()>=this.refreshAt&&this.refresh(e),!this.inFlight&&this.sources.some(e=>e.failed)&&!this.sources.some(e=>[...e.rows.values()].some(e=>e.found)))return O({error:`The MCP registry did not answer. Try again.`},502);let n=t.trim().toLowerCase(),r=new Set,i=this.sources.flatMap(e=>[...e.rows].flatMap(([t,{found:i}],a)=>{if(r.has(t)||(r.add(t),!i))return[];let o=[i.name.split(`/`).pop(),i.title].map(e=>e.toLowerCase()),s=!n||o.includes(n)?0:o.some(e=>e.startsWith(n))?1:o.some(e=>e.includes(n))?2:i.description.toLowerCase().includes(n)?3:4;if(s===4)return[];let c=n&&i.verified&&s<3?0:1;return[{found:i,curated:e.curated,order:a,vendor:c,quality:s}]})),a=e=>Number(e===3);return i.sort((e,t)=>a(e.quality)-a(t.quality)||Number(t.curated)-Number(e.curated)||(e.curated?e.order-t.order:e.vendor-t.vendor||e.quality-t.quality||e.found.name.localeCompare(t.found.name))),O(i.slice(0,30).map(({found:e})=>e),200,this.sources.every(e=>e.ready)?{}:{partial:`true`})}refresh(e){if(this.inFlight||this.closed)return;this.timer&&clearTimeout(this.timer);let t=this.controller=new AbortController;this.inFlight=Promise.all(this.sources.map(n=>this.fill(e,n,t.signal))).then(()=>{}).finally(()=>{this.inFlight=void 0,this.refreshAt=(e.now??Date.now)()+36e5,this.closed||(this.timer=setTimeout(()=>this.refresh(e),36e5),this.timer.unref())}),e.waitUntil?.(this.inFlight)}async fill(e,t,n){let r=new Map,i=new Set,a;try{do{let o=new URLSearchParams({limit:`100`});a&&o.set(`cursor`,a);let s=await(e.fetch??fetch)(`${t.url}?${o}`,{headers:{accept:`application/json`},signal:AbortSignal.any([n,AbortSignal.timeout(2e4)])});if(!s.ok)throw Error(`Registry unavailable`);let{servers:c,metadata:l}=await s.json();for(let{server:e,_meta:n}of c){let i=n?.[`io.modelcontextprotocol.registry/official`]?.isLatest===!0,a=e.version??``,o=r.get(e.name);if(o&&(o.latest===i?oa(o.version,a)>=0:o.latest))continue;let s=aa(e),c=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+\//i.test(e.name)&&!/^io\.github(?:\.|\/)/i.test(e.name);r.set(e.name,{version:a,latest:i,found:s?{name:e.name,title:e._meta?.[`io.modelcontextprotocol.registry/publisher-provided`]?.github?.displayName??e.title??e.name.split(`/`).pop()??e.name,description:e.description??``,...c?{verified:!0}:{},...t.curated?{curated:!0}:{},...s}:void 0})}if(t.ready||(t.rows=new Map(r)),a=l?.nextCursor,a&&i.has(a))throw Error(`Registry cursor repeated`);a&&i.add(a)}while(a);t.rows=r,t.ready=!0,t.failed=!1}catch{t.failed=!0}}close(){this.closed=!0,this.timer&&clearTimeout(this.timer),this.controller?.abort()}};async function ca(e,t,n){let r=t.settings??={};return(r.registry??=new sa).response(t,n.searchParams.get(`q`)??``)}const la=`/api/auth/callback`,ua=`/.well-known/oauth-client.json`,da=`/.well-known/oauth-cli-client.json`,fa=`openid profile email offline_access organizations:read`;function pa(e,t){return{client_id:`${e}${ua}`,client_name:`Coder at ${new URL(e).host}`,redirect_uris:[`${e}${la}`],post_logout_redirect_uris:[`${e}/?signed_out=1`],grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],token_endpoint_auth_method:`private_key_jwt`,token_endpoint_auth_signing_alg:`ES256`,jwks:t,scope:fa}}function ma(e){return{client_id:`${e}${da}`,client_name:`Coder CLI for ${new URL(e).host}`,redirect_uris:[`http://127.0.0.1/callback`],grant_types:[`authorization_code`,`refresh_token`,`urn:ietf:params:oauth:grant-type:device_code`],response_types:[`code`],token_endpoint_auth_method:`none`,scope:fa}}function ha(e,t){return{resource:new URL(e).origin,authorization_servers:[t],bearer_methods_supported:[`header`],scopes_supported:fa.split(` `)}}function ga(e){let t=O(e);return t.headers.set(`cache-control`,`public, max-age=3600`),t}function _a(e,t,n,r){return t.config.publicUrl&&t.auth?ga(pa(t.config.publicUrl,t.auth.jwks)):void 0}function va(e,t,n,r){return t.config.publicUrl&&t.auth?ga(ma(t.config.publicUrl)):void 0}function ya(e,t,n,r){return t.config.publicUrl&&t.auth?ga(ha(t.config.publicUrl,t.auth.issuer)):void 0}const ba=[F(`GET`,Zn,en),F(`GET`,ua,_a,Ze),F(`GET`,da,va,Ze),F(`GET`,`/.well-known/oauth-protected-resource`,ya,Ze),F(`GET`,`/health`,(e,t)=>Ir(t)),F(`GET`,`/`,er,Ge),F(`GET`,`/login`,lt,vt),...j(`/login`,ur,vt).filter(e=>e.method!==`GET`),F(`POST`,`/dash/token`,Nt,dt),...j(`/dash/:org/operator`,an,Le),...j(`/dash`,an,nr)],xa=[F(`GET`,`/api/auth/capabilities`,(e,t)=>O({wular:t.auth?.issuer??null})),...j(`/api/auth`,(e,t)=>t.auth.handler(e),cr),F(`GET`,`/me`,Mn,nn)],Sa=[...M(`/tasks`,[F(`GET`,`/:id/messages`,ze,Se),F(`POST`,`/:id/ack`,je,Se),F(`POST`,`/:id/heartbeat`,He,Se),F(`POST`,`/:id/logs`,Ct,zt),F(`POST`,`/:id/result`,kt,zt),F(`POST`,`/:id/credential`,Et,zt),F(`GET`,`/:id`,In,ht)]),...M(`/logins`,[F(`GET`,`/:id/input`,Yr,Je),F(`GET`,`/:id`,Xr,Je),F(`POST`,`/:id`,Zr,Je)]),...M(`/runners`,[F(`POST`,`/register`,Hn)])],Ca=[...M(`/create`,[F(`GET`,`/:id`,ci,z),F(`POST`,`/:id`,ui,z),F(`GET`,`/:id/callback`,pi,z),F(`POST`,`/:id/callback`,mi,z)]),...M(`/install`,[F(`GET`,`/:id`,yn,P),F(`POST`,`/:id`,yn,P),F(`GET`,`/:id/callback`,Ut,P),F(`POST`,`/:id/callback`,Ut,P)])],wa=M(`/connect`,[F(`GET`,``,Nn,bt),F(`POST`,``,qt,bt),F(`GET`,`/:integration`,$t,tt),F(`GET`,`/:integration/callback`,Xn,tt)]),Ta=[...M(`/hooks`,[F(`POST`,`/*`,(e,t,n)=>Bn(e,t,n[`*`]),(e,t,n)=>t.integrations[n[`*`]]?t:k())]),...Ca,...wa],Ea=[F(`GET`,`/metrics`,async(e,t)=>O(await Rr(t),200,{"cache-control":`no-store`}),$n),F(`GET`,`/usage`,lr),F(`GET`,`/usage/totals`,Bt)],Da=M(``,[F(`GET`,`/folders`,(e,t)=>O(Wt(t.local.cwd))),F(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return O(An(n?.path))}),F(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return O(await Gn(n?.url))}),F(`POST`,`/folders/pick`,async(e,t)=>O(await bn()))],he),Oa=M(``,[F(`GET`,`/engines/status`,async(e,t)=>O(await De())),F(`POST`,`/engines/:engine/login`,ir),F(`POST`,`/engines/:engine/logout`,mt)],Te),ka=[F(`POST`,`/apps/:id/install`,(e,t,n,r)=>gn(e,t,n.id,r.searchParams.get(`back`),r.searchParams.get(`link`))),F(`POST`,`/apps/create/:integration`,di),F(`GET`,`/apps`,Qe),F(`DELETE`,`/apps/:id`,Re),F(`GET`,`/apps/:id/drift`,ke),F(`POST`,`/apps/:id/update`,Ke),F(`GET`,`/installations`,nt),F(`GET`,`/connections`,Tn,V),F(`POST`,`/connections`,tn,V),F(`PATCH`,`/connections/:id`,on,V),F(`DELETE`,`/connections/:id`,Fn,V),F(`POST`,`/connections/:id/authorize`,Qn,V),F(`GET`,`/integrations`,(e,t,n,r)=>Ye(t,r)),F(`GET`,`/repositories`,(e,t)=>ge(t)),F(`POST`,`/repositories/refresh`,(e,t)=>ge(t,!0))],Aa=[F(`GET`,`/agents/import`,Bi),F(`POST`,`/agents/import`,Vi),F(`GET`,`/agents`,vi),F(`PATCH`,`/agents/:slug/settings`,Wi),F(`GET`,`/agents/:slug/versions`,yi),F(`GET`,`/agents/:slug/versions/:version`,bi),F(`GET`,`/agents/:slug`,xi),F(`DELETE`,`/agents/:slug`,Gi,(e,t)=>ot(t,`Only an owner or admin can delete an agent.`)),F(`PUT`,`/agents/:slug`,Ki)],ja=[F(`GET`,`/credentials`,ut),F(`POST`,`/credentials`,Pt,xe),F(`POST`,`/credentials/:label/default`,Ht),F(`DELETE`,`/credentials/:label`,sr),F(`POST`,`/logins`,zr,U),F(`GET`,`/logins/:id`,Br,U),F(`POST`,`/logins/:id`,Vr,U),F(`DELETE`,`/logins/:id`,Hr,U)],Ma=[F(`GET`,`/runners`,Jn),F(`POST`,`/runners`,pe),F(`POST`,`/runners/pair`,Dn),F(`POST`,`/runners/:id/test`,it),F(`PATCH`,`/runners/:id`,Rt),F(`DELETE`,`/runners/:id`,Zt)],Na=[F(`GET`,`/composer`,Li),F(`GET`,`/tasks`,jt),F(`POST`,`/tasks`,We),F(`GET`,`/tasks/:id`,me),F(`DELETE`,`/tasks/:id`,Yt),F(`GET`,`/tasks/:id/logs`,En),F(`GET`,`/tasks/:id/stream`,qi),F(`POST`,`/tasks/:id/steer`,Kn),F(`POST`,`/tasks/:id/ask`,Ot),F(`POST`,`/tasks/:id/approve`,Rn),F(`POST`,`/tasks/:id/cancel`,Tt),F(`POST`,`/tasks/:id/archive`,Ve),F(`GET`,`/events`,Xi)],Pa=[F(`GET`,`/config`,yt),F(`PATCH`,`/config`,be),F(`PUT`,`/config`,Ie)],Fa=[F(`POST`,`/models/probe`,(e,t)=>ki(e,t)),F(`GET`,`/models`,ji),F(`POST`,`/models`,Mi),F(`DELETE`,`/models/:name`,Ni),F(`POST`,`/models/:name/alias`,Pi),F(`POST`,`/models/:name/disable`,Fi),F(`POST`,`/models/:name/enable`,Ii)],Ia=[F(`GET`,`/mcp-registry`,(e,t,n,r)=>ca(e,t,r))],La=M(`/operator`,[F(`GET`,`/apps`,ni),F(`POST`,`/apps/:integration`,ri),F(`GET`,`/audit`,ii)],Oe),Ra=[F(`GET`,`/flows`,un),F(`GET`,`/pulls`,It),F(`POST`,`/flows/:name/run`,Wn),F(`POST`,`/review`,kn)],za=M(`/admin`,[...Ea,...Da,...Oa,...ka,...Aa,...ja,...Ma,...Na,...Pa,...Fa,...Ia,...Ra,...La]).map(e=>({...e,guard:Mt(e.guard)})),Ba=[F(`GET`,`/connections/oauth/callback`,(e,t,n,r)=>Jt(e,t,r),ar),...Sa,...za,...xa,...Ta,...ba];async function Va(e,t,n){if(!hn(e,t))return k();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await pt(Ba,e,t,r)??Vt(e,t,r))}const Ha=`x-coder-request-scope`;function Ua(e,{sessions:t,operators:n,cookies:r}){let i=e.auth;return i?{...e,auth:{...i,session(e,n){let a=JSON.stringify([...[`cookie`,`authorization`].map(t=>e.get(t)),!!n]),o=t.get(a);if(!o){let s=new Headers(e);s.delete(`x-coder-organization`),o=i.session(s,n,r),t.set(a,o)}let s=e.get(`x-coder-organization`);return s?o.then(e=>e&&(e.stale?e:Pn(e,s))):o},setOrganization:(e,t)=>i.setOrganization(e,t,r),operator(e){let t=e.get(`cookie`)??``,a=n.get(t);return a||(a=i.operator(e,r),n.set(t,a)),a}}}:e}function Wa(e,t,n){let r=t.requestScopes??=new Map,i=e.headers.get(Ha),a=n&&i?r.get(i):void 0;if(a)return{req:e,ctx:Ua(t,a),end(){}};let o=new Headers(e.headers);if(o.delete(Ha),!t.auth)return{req:i?new Request(e,{headers:o}):e,ctx:t,end(){}};let s=Dr(),c={sessions:new Map,operators:new Map,cookies:[]};return r.set(s,c),o.set(Ha,s),{req:new Request(e,{headers:o}),ctx:Ua(t,c),cookies:c.cookies,end:()=>r.delete(s)}}async function Ga(e,t,n={}){t.limits??=new Ce((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new Qi,t.logWatcher??=new ea,t.dashboardHosts??=new cn;let r=()=>Ka(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function Ka(e,t,n){let r=await se(e,de(new URL(e.url).pathname));if(r instanceof Response)return r;let i=Wa(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await et(i.req,i.ctx,r),s=qa(o instanceof Response?o:await Va(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,u=c[1]===`admin`&&c[2]===`tasks`;if(e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&!(o instanceof Response)){let e=o.scope instanceof Response?void 0:o.scope??i.ctx;e&&xn(e,e.organizationId)}return e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&[`heartbeat`,`logs`].includes(c[3]))&&!(u&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||u||c[1]===`admin`&&c[2]===`review`||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&Ee(t,u&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?Ja(s,i.end):s}finally{a||i.end()}}function qa(e,t=[]){if(!t.length)return e;let n=new Headers(e.headers);for(let e of t)n.append(`set-cookie`,e);return new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}function Ja(e,t){let n=e.body.getReader(),r=new ReadableStream({async pull(e){try{let{done:r,value:i}=await n.read();r?(t(),e.close()):e.enqueue(i)}catch(n){t(),e.error(n)}},cancel(e){return t(),n.cancel(e)}});return new Response(r,e)}async function Ya(e={}){let t=e.env??J.env,n=pr(t,e.host??`node`),r=e.runner??n.runner;if((e.host===`vercel`||t.VERCEL)&&(r===`local`||r===`local-docker`))throw new v(`invalid-option`,`The ${r} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(n.store===`memory`&&r!==`local`&&r!==`local-docker`)throw new v(`invalid-option`,`The ${r} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!n.publicUrl)throw new v(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let i=[];if(n.store===`memory`&&!e.local&&i.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!t.SERVER_ENCRYPTION_KEY&&!e.local&&i.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),n.store===`postgres`&&!n.encryptionKey)throw new v(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let a=E(n.integrations),o=n.store===`memory`&&!n.adminToken?Er(18).toString(`base64url`):void 0;n.store===`postgres`&&n.adminToken&&i.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let s={...n,...n.store===`postgres`?{adminToken:void 0}:{},...o?{adminToken:o}:{},...e.runner?{runner:e.runner}:{}},c=await st(s,{local:!!e.local});try{s.store===`memory`&&await G(c.store(c.defaultOrganizationId),Date.now());let n=c.connection&&s.auth?await(await import(`./auth-CWzSsiSC.js`)).createAuth(c.connection.db,s):void 0,r=e.cwd??J.cwd(),l=c.store(c.defaultOrganizationId),u=vr({kind:s.runner,workDir:s.workDir,config:s.runnerConfig,local:!(e.host===`vercel`||t.VERCEL),sandbox:{region:_r(s.databaseUrl),snapshots:gr(l)}});if(!u[s.runner])throw await c.close(),new v(`invalid-option`,`Runner ${s.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let d=new cn,f=new Ce,p=new sa,m=new Map,h=new Map,g=new Qi,_=new ea,y=t=>{let i=m.get(t);if(i)return i;let o=c.store(t),l=new Map,v={limits:f,...c.connection?{databaseHealth:async()=>{await c.connection.db.execute(Sr`select 1`)},statementTimeout:c.connection.statementTimeout}:{},config:s,settings:{registry:p},organizationId:t,integrations:a,runners:u,store:o,queue:c.queue,requestScopes:h,taskWatcher:g,logWatcher:_,dashboardHosts:d,dbProfile:c.connection?.profile,chatState:c.chatState,fileReads:l,repositoryLists:new Map,loadAgent:Ue(a,{cwd:r,config:s,store:o,fileReads:l}),...n?{auth:n}:{},scope:y,webhookTarget:(e,t)=>c.webhookTarget(e,t),appRecord:e=>c.appRecord(e),apps:e=>c.apps(e),installationOrganization:e=>c.installationOrganization(e),installations:e=>c.installations(e),serverOrganizationId:c.defaultOrganizationId,taskOrganization:(e,t)=>c.taskOrganization(e,t),...e.local?{local:e.local}:{}};return m.set(t,v),v};globalThis.__coder={handle:e=>Ga(e,y(c.defaultOrganizationId),{inProcess:!0})};let b=y(c.defaultOrganizationId),x;return e.local&&(await Xe(b),x=setImmediate(()=>{Ae(b).catch(()=>void 0)})),{config:s,context:y,defaultContext:b,warnings:i,...o?{mintedToken:o}:{},sweep:c.sweep,close:async()=>{p.close(),g.close(),_.close(),x&&clearImmediate(x),await b.local?.usageSync?.catch(()=>void 0),await $e(b),await c.close()}}}catch(e){throw await c.close(),e}}var Xa=e({serve:()=>no,serverHandler:()=>Qa});function Za(e){try{let t=new URL(e);return H.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function Qa(e=J.env,t=e.VERCEL?`vercel`:`node`){mr();let n,r=()=>n??=Ya({env:e,host:t}).catch(e=>{throw n=void 0,e});return Object.assign(async(t,n)=>{let i=await r(),a=n?e=>n(e):e=>void e.catch(()=>{}),o=e=>({...i.context(e),waitUntil:a,scope:o});return Ga(t,o(i.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await r();await Promise.all([e.sweep(),ft(e.defaultContext,!1,!0),Gt(e.defaultContext)])},close:async()=>{let e=n;n=void 0,await(await e)?.close()}})}function $a(e){let t=wr(`lsof`,[`-nP`,`-iTCP:${e}`,`-sTCP:LISTEN`,`-t`],{encoding:`utf8`}),n=Number(t.stdout?.split(`
|
|
9
|
+
`)[0]);if(n)return{pid:n,command:wr(`ps`,[`-o`,`command=`,`-p`,String(n)],{encoding:`utf8`}).stdout?.trim().slice(0,120)||`another process`}}function eo(e){let t=$a(e),n=t&&/\bcoder (dash|server serve)\b/.test(t.command);return new v(`server`,t?n?`Coder is already running on port ${e} (pid ${t.pid}): http://localhost:${e}`:`Port ${e} is in use by ${t.command} (pid ${t.pid}).`:`Port ${e} is in use.`,{hint:t?`Stop it with \`kill ${t.pid}\`, or use another port: --port ${e+1}`:`Use another port: --port ${e+1}`})}async function to(e={}){mr();let t=e.env??J.env;if(e.runner&&!yr.includes(e.runner))throw new v(`invalid-option`,`Invalid --runner value: use ${yr.join(`, `)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))throw new v(`invalid-option`,`Invalid port: use 1 through 65535.`);let n=t.PORT&&/^\d+$/.test(t.PORT)?Number(t.PORT):void 0,r=Za(t.PUBLIC_URL),i=e.port??n??r??8787;if(!Number.isInteger(i)||i<1||i>65535)throw new v(`invalid-option`,`Invalid PORT: use 1 through 65535.`);let a=t.PUBLIC_URL?t:{...t,PUBLIC_URL:`http://localhost:${i}`},o=!!(t.DATABASE_URL||t.POSTGRES_URL);if(o&&e.memory)throw new v(`invalid-option`,`A memory server cannot use DATABASE_URL.`,{hint:`Unset DATABASE_URL, or drop --memory.`});let s=(e.host??t.HOST??(o?void 0:`127.0.0.1`))?.replace(/^\[(.*)\]$/,`$1`),c=!o&&!e.memory;if(c&&!H.has(s))throw new v(`invalid-option`,`A local server listens on loopback only.`,{hint:`Reach it through a tunnel or a proxy on this machine; set DATABASE_URL for a deployment, or use --memory for a test server.`});if(e.memory&&t.VERCEL)throw new v(`invalid-option`,`A memory server cannot run on Vercel.`,{hint:`Set DATABASE_URL for a real deployment.`});let l,u,d=c?new Promise((e,t)=>{u=t,l=()=>{Pr().then(e,t)}}):void 0,f=d?.then(()=>void 0).catch(()=>void 0),p=c?{cwd:e.cwd??J.cwd(),port:i,cacheMaintenance:f}:void 0,m=await Ya({cwd:e.cwd,env:a,runner:e.runner,...p?{local:p}:{}}),h=m.defaultContext,g=()=>{m.sweep().catch(()=>{})};g();let _=setInterval(g,36e5);_.unref();let y=setInterval(()=>{ft(h,!1,!0).catch(()=>{}),Gt(h).catch(()=>{})},6e4);y.unref();let b=kr.createServer(ue((e,t)=>Ga(e,h,{clientIp:t}),{limit:de,admit:e=>o||Pe(e.socket.remoteAddress,e.url??`/`)})),x=m.config.publicUrl;r!==void 0&&r!==i&&m.warnings.push(`PUBLIC_URL points at port ${r} but the server listens on ${i}`),await new Promise((e,t)=>{b.once(`error`,t),b.listen(i,s,e)}).catch(async e=>{throw u?.(e),clearInterval(y),clearInterval(_),await m.close(),e.code===`EADDRINUSE`?eo(i):e});let ee=l?setTimeout(l,0):void 0,S=!1,C=async()=>{S||(S=!0,clearInterval(y),clearInterval(_),h.taskWatcher?.close(),h.logWatcher?.close(),await new Promise((e,t)=>b.close(n=>n?t(n):e())),await f,ee&&clearTimeout(ee),await m.close())},w=h.auth?`Wular Auth (${h.auth.issuer})`:void 0,T=`http://localhost:${i}`,E=ve(h),D=E===`local`?T:x,te=m.config.store===`memory`?m.mintedToken??t.ADMIN_TOKEN:void 0;return{address:T,publicUrl:x,warnings:m.warnings,close:C,runner:m.config.runner,store:m.config.store,mode:E,...d?{cacheMigration:d}:{},maxTasks:m.config.maxTasks??m.config.limits?.concurrentTasks??10,...w?{signIn:w}:{},...m.mintedToken?{mintedToken:m.mintedToken}:{},...m.config.store===`postgres`&&t.DATABASE_URL?{database:ct(t.DATABASE_URL)}:{},...H.has(new URL(D).hostname)?{dashboard:`${D}/dash${te?`#token=${encodeURIComponent(te)}`:``}`}:{}}}async function no(e={}){try{return await to(e)}catch(e){if(e instanceof v)throw e;let t=e instanceof Error&&e.cause instanceof Error?`: ${e.cause.message}`:``;throw new v(`server`,`${e instanceof Error?e.message:String(e)}${t}`)}}export{fa as a,la as i,Xa as n,ua as o,Qa as r,no as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Zt as e}from"./core-DwsAMCnL.js";import{Dn as t,Ln as n,Mn as r}from"./config-D2FxHWwi.js";import{i,t as a}from"./cli-ZUdhZnuW.js";import{p as o,s}from"./output-BKeyLbvt.js";import{n as c,o as l,s as u,t as d}from"./args-CxsMr9Un.js";import f from"node:process";const p=i({name:`runner serve`,help:{usage:`coder runner serve --url <public url> [--token <token>] [--runner-url <url>] [--port <n>] [--name <name>] [--workspace] [--server [url]] [--json]`,summary:`Run tasks on this machine with its own claude and codex logins. Expose the port with any tunnel (cloudflared, ngrok, Tailscale Funnel or a public VS Code port) and pass the tunnel's URL; each start registers the current URL, so a changing tunnel URL is fine. Choose a default with coder runner default. Tasks use their named runner, the agent setting, your default, the workspace default, then the server default.`,flags:[[`--url <public url>`,`the HTTPS address the server reaches this runner at`],[`--token <token>`,`one-use pairing token, --url is the Coder server`],[`--runner-url <url>`,`public tunnel address when pairing, or CODER_RUNNER_URL`],[`--port <n>`,`local port the tunnel forwards to (default 4100)`],[`--name <name>`,`shown in the dashboard (default: this machine's hostname)`],[`--workspace`,`run every member's tasks, not only yours (owners and admins)`],a],examples:[[`cloudflared tunnel --url http://localhost:4100`,`expose the port in one terminal`],[`coder runner serve --url https://abc.trycloudflare.com`,`then serve through it`]]},options:{...d,port:n(t().check(r(),e())),url:u,name:u,token:u,"runner-url":u,workspace:c,server:l,yes:c},async run({options:e}){let{serveRunner:t}=await import(`./serve-wQgyxwdY.js`).then(e=>e.n),n=await t({...e,runnerUrl:e[`runner-url`]}),r=()=>void n.close().finally(()=>f.exit(0));return f.once(`SIGINT`,r),f.once(`SIGTERM`,r),n},json:({server:e,close:t,...n})=>({ok:!0,...n}),print:e=>f.stdout.write(`Runner ${o.bold(e.name)} serves ${e.server} at ${o.cyan(e.config.url??``)} (${e.scope}), listening on localhost:${e.port}.\n${s([`Tasks run here with this machine's own claude and codex logins`,`Stop with Ctrl-C; the server marks the runner offline`],o,o.cyan)}\n`)});export{p as commandRunnerServe};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Zt as e}from"./core-DwsAMCnL.js";import{Dn as t,Ln as n,Mn as r,vt as i}from"./config-D2FxHWwi.js";import{H as a}from"./dispatch-D3Dqxijf.js";import{i as o}from"./prompt-C--TI1qn.js";import{i as s}from"./cli-ZUdhZnuW.js";import{p as c,s as l}from"./output-BKeyLbvt.js";import{n as u,s as d,t as f}from"./args-CxsMr9Un.js";import p from"node:process";function m(e){let t=c,n=[...e.publicUrl===e.address?[]:[[`public`,e.publicUrl]],[`store`,e.database??(e.mode===`local`?i():e.store)],[`runner`,e.runner],...e.signIn?[[`sign-in`,e.signIn]]:[],...e.mintedToken?[[`token`,e.mintedToken]]:[]],r=Math.max(...n.map(([e])=>e.length))+2;p.stdout.write(`${t.bold({local:`Coder local server`,memory:`Coder test server`,cloud:`Coder server`}[e.mode])} ${t.dim(`listening on ${e.address}`)}\n`);for(let[e,i]of n)p.stdout.write(` ${t.light(e.padEnd(r))}${i}\n`);e.warnings.length&&p.stdout.write(`
|
|
2
|
+
`);for(let n of e.warnings)p.stdout.write(` ${t.yellow(`!`)} ${n}\n`);if(e.cacheMigration?.then(e=>{(e.tasks||e.flows||e.files)&&p.stdout.write(`\n moved ${e.tasks.toLocaleString(`en-US`)} archived tasks to ${e.cache}\n`)}).catch(e=>p.stderr.write(`\n Cache migration failed: ${e instanceof Error?e.message:String(e)}\n`)),e.mode===`memory`&&p.stdout.write(`\n${l([`the CLI reaches this server with its token in ADMIN_TOKEN: coder task list --server ${e.publicUrl}`],t)}\n`),e.dashboard){let n=p.stdout.isTTY&&o(e.dashboard);p.stdout.write(n?`\nOpening the dashboard in your browser. If it doesn't open, go to:\n ${e.dashboard}\n`:`\n ${t.light(`dashboard`)} ${e.dashboard}\n`)}}const h=s({name:`server serve`,help:{usage:`coder server serve [--port <n>] [--host <address>] [--memory] [--runner <name>] [--json] [--cwd <dir>]`,summary:`Run the Coder server on Bun: the address platforms deliver events to, the dashboard, and the worker that runs tasks. With DATABASE_URL it is a full server with sign-in and workspaces. Without one it is the dashboard for this machine's CLI: its config, agents, tasks and engine logins, on loopback only. --memory makes a throwaway test server that keeps everything in memory. Configured through the environment; every variable is in coder docs self-host.`,flags:[[`--port <n>`,`listen port (default: PORT, else the port in a localhost PUBLIC_URL, else 8787)`],[`--host <address>`,`listen address (default: HOST, else 127.0.0.1 without a database, else every interface)`],[`--memory`,`a throwaway test server: everything in memory, no sign-in, admin token only`],[`--runner <name>`,`local, local-docker, vercel-sandbox, github-actions, or http`]],env:[[`PUBLIC_URL`,`the address platforms and browsers reach the server at (default http://localhost:<port>)`],[`PORT`,`listen port, as hosts set it (default 8787)`],[`HOST`,`listen address, as --host`],[`DATABASE_URL`,`Postgres, set up with drizzle-kit push; turns on sign-in and workspaces`],[`AUTH_WULAR_URL`,`the Wular Auth issuer people sign in with (default https://auth.wular.ai)`],[`SERVER_ENCRYPTION_KEY`,`encrypts stored secrets and derives the sign-in keys; required with DATABASE_URL (openssl rand -base64 32)`],[`RUNNER`,`where tasks run: local (default), local-docker, vercel-sandbox, github-actions, http`],[`MAX_TASKS, TASK_TIMEOUT, TASK_STALL, TASK_ATTEMPTS`,`runner capacity and lifecycle limits`],[`ADMIN_TOKEN`,`local and memory servers: the dashboard and CLI key; minted and shown when unset`],[`CODER_CACHE_HOME`,`archived tasks, flows and usage (default OS cache directory/wular-coder)`],[`WORK_DIR`,`where tasks check out repositories`],[`SERVER_NAME`,`what the dashboard calls this server (default Coder)`]],examples:[[`PUBLIC_URL=https://abc.ngrok.app coder server serve`,`receive GitHub and Slack events through a tunnel; the tunnel serves only their webhooks and callbacks`],[`PUBLIC_URL=https://agents.example.com DATABASE_URL=postgres://... coder server serve`,`on your own host, backed by Postgres`]]},options:{...f,port:n(t().check(r(),e())),host:d,runner:d,memory:u},async run({options:e,cwd:t}){let{rerunUnderBun:n}=await import(`./env-C_DoQYl5.js`).then(e=>e.t);if(await n(),e.memory&&!p.env.ADMIN_TOKEN&&!p.stdout.isTTY)throw new a(`invalid-option`,`Memory server needs an admin token: set ADMIN_TOKEN, or run in a terminal to get a printed one.`);let{serve:r}=await import(`./serve-FG2LgXxM.js`).then(e=>e.n),i=await r({cwd:t,port:e.port,...e.host?{host:e.host}:{},...e.runner?{runner:e.runner}:{},...e.memory?{memory:!0}:{}}),o=()=>void i.close().finally(()=>p.exit(0));return p.once(`SIGINT`,o),p.once(`SIGTERM`,o),i},json:e=>({ok:!0,address:e.address,publicUrl:e.publicUrl,runner:e.runner,store:e.store,mode:e.mode,maxTasks:e.maxTasks,...e.signIn?{signIn:e.signIn}:{},...e.mintedToken?{adminToken:e.mintedToken}:{},warnings:e.warnings}),print:m});export{h as commandServerServe};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{$ as t}from"./config-D2FxHWwi.js";import{H as n}from"./dispatch-D3Dqxijf.js";import{n as r,o as i}from"./remote-oQs6My_3.js";import{l as a}from"./slack-C_RlVDz7.js";import{t as o}from"./local-ccKBhpQc.js";import{s,t as c}from"./http-Cg_wYcZT.js";import l from"node:path";import u from"node:fs";import{createHmac as d,randomBytes as f}from"node:crypto";import p from"node:os";import m from"node:http";var h=e({runnerController:()=>C,serveRunner:()=>b});const g=()=>t(`runners.json`);function _(){try{return JSON.parse(u.readFileSync(g(),`utf8`))}catch{return{}}}function v(e){u.mkdirSync(l.dirname(g()),{recursive:!0}),u.writeFileSync(g(),JSON.stringify(e,null,2),{mode:384})}const y=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 b(e={}){let a=e.port??4100,l=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!l)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:y(a)});let u=e.token?i({...e,server:e.url??e.server,yes:!0}):i(e),d=_(),h=d[u]??{secret:f(32).toString(`base64url`)},g=new o(t(`runner`)),b=C({secret:h.secret,server:u,runner:g}),x=m.createServer(s(b,{limit:c}));await new Promise((e,t)=>{x.once(`error`,t),x.listen(a,`127.0.0.1`,e)});let S=()=>new Promise(e=>x.close(()=>e())),w=e.name??p.hostname(),T=async(e,t)=>{let r=await fetch(`${u}/runners/register`,{method:`POST`,redirect:`manual`,signal:AbortSignal.timeout(5e3),headers:{"content-type":`application/json`},body:JSON.stringify({...e?{token:e}:{id:h.id,organizationId:h.organizationId},name:w,url:l,secret:h.secret,...t?{offline:t}:{}})});if(!r.ok)throw new n(`server`,`Runner registration failed`,{status:r.status});return r.json()},E;try{if(e.token){let t=await T(e.token);E=t,h.organizationId=t.organizationId}else{let t=h.id&&h.organizationId?await T().catch(e=>{if(!(e instanceof n&&e.status===401))throw e}):void 0;if(t)E=t;else{let t=r(e),n=await t.me();E=await t.runners.add({kind:`http`,name:w,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:l,secret:h.secret}}),h.organizationId=n.organization?.id,h.id=E.id,E=await T()}}h.id=E.id,v({...d,[u]:h})}catch(e){throw await S(),e}let D=Promise.resolve(),O=setInterval(()=>{D=D.then(()=>T().then(()=>{})).catch(()=>{})},6e4);return{...E,port:a,server:u,close:async()=>{clearInterval(O),await D,await T(void 0,!0).catch(()=>{}),await S()}}}const x=3e5,S=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function C(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)>x)return!1;let u=d(`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+x),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return S({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 S({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return S({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 S({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&i===`health`&&!a)return S({ok:!0});if(!a)return S({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?S({error:`Invalid messages`},400):S(await e.runner.push(a,t))}return t.method===`GET`&&i===`status`?S(await e.runner.status(a)):t.method===`POST`&&i===`stop`?(await e.runner.stop(a),new Response(null,{status:204})):S({error:`Not found`},404)}catch(e){return S({error:e instanceof Error?e.message:String(e)},400)}}}export{h as n,b as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-ZUdhZnuW.js";const t=e(`server`,{serve:async()=>(await import(`./serve-w-9qRCP1.js`)).commandServerServe,"rotate-key":async()=>(await import(`./rotate-key-Dpx_WmuU.js`)).commandServerRotateKey,app:async()=>(await import(`./app-CJPFaLIV.js`)).commandServerApp,workflow:async()=>(await import(`./workflow-BKxG9OUk.js`)).commandServerWorkflow},{menu:[{usage:`serve [--port <n>]`,blurb:`run the server`},{usage:`rotate-key`,blurb:`re-seal secrets with SERVER_ENCRYPTION_KEY`},{usage:`app create <integration>`,blurb:`create the built-in agent's public app`},{usage:`workflow`,blurb:`print the GitHub Actions workflow for RUNNER=github-actions`}],description:[`Self-host Coder: the server your agents and platform apps talk to, with a dashboard and sign-in. We run one as the hosted service; you can run your own.`],exampleCommand:`server serve`},{nested:[`app`]});export{t as commandServer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{T as e}from"./dispatch-D3Dqxijf.js";import{i as t}from"./cli-ZUdhZnuW.js";import{f as n,p as r,t as i}from"./output-BKeyLbvt.js";import{n as a,t as o}from"./args-CxsMr9Un.js";import s from"node:process";const c=t({name:`setup-host`,help:{usage:`coder setup-host [claude] [codex] [agents] [--json]`,summary:`Set up coder in your host: check engines and auth, seed the config, and
|
|
2
2
|
install the host plugin/skill for the named host(s). Claude Code gets its
|
|
3
3
|
marketplace plugin; "agents" installs a skill into ~/.agents/skills for
|
|
4
4
|
every host that reads the Agent Skills standard dir (Codex, Pi, OpenCode,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,r as t}from"./cli-ZUdhZnuW.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{i,n as a,s as o,t as s}from"./args-CxsMr9Un.js";import{isLocal as c}from"./list-CLtqMYPK.js";import l from"node:path";import u from"node:process";const d={server:i,workspace:o,yes:a};function f(e,t){return c(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,...e.dir&&!e.builtin?{dir:l.relative(t,e.dir)}:{},definition:e.definition,...e.usage?{usage:e.usage}:{}}:{id:e.id,name:e.name,source:e.source,definition:e.definition,...e.settings?{usage:e.settings}:{}}}function p(e){let t=r,{definition:i,usage:a}=e,o=`dir`in e?e.dir:void 0,s=[[`name`,e.name],[`source`,o?`${e.source} (${o})`:e.source],[`description`,i.description],[`permissions`,a?.permissions??i.permissions],[`engine`,a?.engine??i.engine],[`model`,a?.model??i.model],[`effort`,a?.effort??i.effort]],c=Math.max(...s.map(([e])=>e.length))+2;for(let[e,n]of s)n&&u.stdout.write(`${t.dim(e.padEnd(c))}${n}\n`);let l=Object.entries(i.integrations).map(([e,t])=>{let n=a?.integrations?.[e],r=Array.isArray(t.events)?t.events:Object.keys(t.events??{}),i=n?.allowedEvents?r.filter(e=>n.allowedEvents.includes(e)):r,o=n?.allowedTools??t.tools;return{id:e,events:i.join(`, `)||`-`,tools:Array.isArray(o)?o.join(`, `):o??`-`}});u.stdout.write(`\n${n([{header:`integration`,value:e=>e.id,paint:e=>t.cyan(e)},{header:`events`,value:e=>e.events},{header:`tools`,value:e=>e.tools}],l,{style:t,border:!0})}`)}const m=e({name:`agent show`,help:{usage:`coder agent show <id> [--server [url]] [--json] [--cwd <dir>]`,summary:`Describe one agent as it will run here, or its active version on a server: its settings and per-integration events and tools.`,flags:[t],examples:[[`coder agent show coder`,`what the built-in agent listens to and may do`]]},options:{...s,...d},args:1,run:async({options:e,args:[t],cwd:n})=>{let{agents:r}=await import(`./agent-ChnedLBv.js`).then(e=>e.t);return r.show(t,{...e,cwd:n,organization:e.workspace})},json:(e,{cwd:t})=>f(e,t),print:(e,{cwd:t})=>p(f(e,t))});export{m as commandAgentShow};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-ZUdhZnuW.js";import{g as t,p as n}from"./output-BKeyLbvt.js";import{n as r}from"./args-CxsMr9Un.js";import i from"node:process";function a(e){let r=n,a=[...Object.entries(e.events).map(([e,t])=>({kind:`event`,name:e,does:t})),...Object.entries(e.tools).map(([e,t])=>({kind:`tools`,name:e,does:t.join(`, `)}))];i.stdout.write(t([{header:`kind`,value:e=>e.kind,paint:e=>r.light(e)},{header:`name`,value:e=>e.name},{header:`does`,value:e=>e.does}],a,r))}const o=e({name:`agent integrations show`,globalFlags:{cwd:!1},help:{usage:`coder agent integrations show <id> [--json]`,summary:`Describe one integration: each event with what triggers it, and the tools each preset (observe, comment, write) allows.`,examples:[[`coder agent integrations show github`,`the GitHub integration in full`]]},options:{json:r},args:1,run:async({args:[e]})=>{let{agents:t}=await import(`./agent-ChnedLBv.js`).then(e=>e.t);return t.integrations.show(e)},print:a});export{o as commandIntegrationsShow};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{An as e,Hn as t,In as n,Ln as r,Nn as i,Pn as a,Wn as o,jn as s,kn as c}from"./config-D2FxHWwi.js";import{t as l}from"./types-B42Oh0zF.js";import{createHash as u,createHmac as d,timingSafeEqual as f}from"node:crypto";import{isIP as ee}from"node:net";function p(e,t){let n=typeof e==`string`?Buffer.from(e):e,r=typeof t==`string`?Buffer.from(t):t;return n.length===r.length&&f(n,r)}const te=e=>u(`sha256`).update(e).digest(`base64url`),m=`https://api.github.com`;function h(e,t=`application/vnd.github+json`){return{accept:t,...e?{authorization:`Bearer ${e}`}:{},"user-agent":`coder`,"x-github-api-version":`2022-11-28`}}function g(e,t){return e.hook.before(`request`,e=>{e.request={...e.request,fetch:t}}),e}async function _(e,t=fetch){let[{createGitHubAdapter:n},{ConsoleLogger:r}]=await Promise.all([import(`./dist-C3wD7GfG.js`),import(`./dist-BTornX7Y.js`).then(e=>e.a)]);return g(n({...typeof e==`string`?{installationToken:e}:e,apiUrl:m,webhookVerifier:()=>!1,logger:new r(`error`)}).octokit,t)}const v=e=>t=>{if(!e.includes(t.status??0))throw t},y=e=>{let[t=``,n=``]=e.split(`/`);return{owner:t,repo:n}};async function ne(e,t,n,r){let i=await(await _(n)).repos.getContent({...y(e),path:t,...r?{ref:r}:{},mediaType:{format:`raw`}}).catch(v([404]));return typeof i?.data==`string`?i.data:void 0}async function re(e,t,n,r){let i=new URL(`${m}/repos/${e}/contents/${t}`);r.ref&&i.searchParams.set(`ref`,r.ref);let a=await r.fetch(i,{headers:{...h(n),...r.etag?{"if-none-match":r.etag}:{}}});if(a.status===304)return`unchanged`;let o=a.headers.get(`etag`)??void 0;if(a.status===404)return o?{etag:o}:{};if(!a.ok)throw Error(`GitHub answered ${a.status} reading ${e}/${t}`);let s=await a.json(),c=s.type===`file`&&s.encoding===`base64`?Buffer.from(s.content??``,`base64`).toString():void 0;return{...c===void 0?{}:{text:c},...o?{etag:o}:{}}}async function ie(e,t,n){let r=await(await _(n)).repos.getCommit({...y(e),ref:t,mediaType:{format:`sha`}}).catch(v([404,422]));return r?String(r.data).trim():void 0}async function ae(e,t,n,r){let i=await(await _(n)).repos.getContent({...y(e),path:t,...r?{ref:r}:{}}).catch(v([404]));return Array.isArray(i?.data)?i.data.map(e=>e.name):[]}async function oe(e,t=fetch){let n=[];for(let r=1;;r++){let i=await t(`${m}/installation/repositories?per_page=100&page=${r}`,{headers:{...h(e),authorization:`token ${e}`},signal:AbortSignal.timeout(1e4)});if(!i.ok)throw Error(`GitHub repositories failed: ${i.status}`);let a=await i.json();if(n.push(...a.repositories.map(e=>e.full_name)),n.length>=a.total_count||a.repositories.length<100)break}return[...new Set(n)]}async function se(e,t){let{data:n}=await(await _(t)).pulls.list({...y(e),state:`open`,sort:`created`,direction:`desc`,per_page:50});return n.map(e=>({number:e.number,title:e.title,author:e.user?.login,createdAt:e.created_at}))}async function ce(e,t){let{data:n}=await(await _(t)).repos.get(y(e));return{owner:n.owner.login,name:n.name,cloneUrl:n.clone_url,ref:n.default_branch,defaultBranch:n.default_branch}}async function le(e,t,n,r){let i=await(await _(n,r)).repos.getCollaboratorPermissionLevel({...y(e),username:t}).catch(()=>void 0);return[`admin`,`maintain`,`write`].includes(i?.data.permission??``)}function ue(e,t,n){let r=`https://github.com/${e}`;return t?`${r}/tree/${n??`HEAD`}/${t}`:r}var b=class extends Error{code;error;constructor(e,t,n){super(n??(t?`${e} (${t})`:e)),this.code=e,this.error=t}};const x={observe:[`read`],comment:[`read`,`comment`],write:[`read`,`comment`,`write`]},de=[`repos`,`pull_requests`,`issues`],fe=[`repos`,`issues`];function pe(e){return e?.type===`pull_request`||/^github:[^:]+:\d+(:|$)/.test(e?.chat?.thread.id??``)?de:fe}function me(e,t,n){let r=!e.some(e=>e!==`read`);return{name:`github`,command:`github-mcp-server`,args:[`stdio`,`--toolsets=${pe(t).join(`,`)}`,...r?[`--read-only`]:[]],env:{GITHUB_PERSONAL_ACCESS_TOKEN:n}}}function he(e,{name:t,description:n,permissions:r,events:i,isPublic:a=!1}){let o=e.replace(/\/$/,``);return{name:t,...n?{description:n}:{},url:o,hook_attributes:{url:`${o}/hooks/github`,active:!0},redirect_url:`${o}/create/github/callback`,callback_urls:[`${o}/install/github/callback`,`${o}/connect/github/callback`],request_oauth_on_install:!0,public:a,default_permissions:r,default_events:[...new Set([...i,`repository`])]}}function ge(e,t){let n=e?`https://github.com/organizations/${encodeURIComponent(e)}/settings/apps/new`:`https://github.com/settings/apps/new`;return t?`${n}?state=${encodeURIComponent(t)}`:n}async function _e(e,t=fetch){let n=await t(`${m}/app-manifests/${encodeURIComponent(e)}/conversions`,{method:`POST`,headers:h()});if(!n.ok)throw Error(`GitHub App manifest conversion failed: ${n.status}`);let r=await n.json(),i=r.app_id??r.id;if(!i||!r.slug||!r.pem||!r.webhook_secret||!r.client_id||!r.client_secret)throw Error(`GitHub App manifest conversion response was incomplete`);return{appId:String(i),slug:r.slug,privateKey:r.pem,webhookSecret:r.webhook_secret,clientId:r.client_id,clientSecret:r.client_secret,...r.owner?.login?{owner:{login:r.owner.login,type:r.owner.type}}:{}}}const S=`https://github.com/login/oauth`,C=e=>`${e.replace(/\/$/,``)}/install/github/callback`;function w(e){let{clientId:t,clientSecret:n}=e;if(!t||!n)throw Error(`This GitHub App has no OAuth client; create it again from the dashboard`);return{clientId:t,clientSecret:n}}async function T(e,t,n,r){let{clientId:i,clientSecret:a}=w(e),o=await n(`${S}/access_token`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({client_id:i,client_secret:a,...t})}),s=await o.json().catch(()=>({}));if(!o.ok||!s.access_token)throw new b(`platform-error`,s.error??String(o.status),`GitHub authorization failed: ${s.error??o.status}`);return{accessToken:s.access_token,...s.refresh_token?{refreshToken:s.refresh_token}:{},...s.expires_in?{expiresAt:r+s.expires_in*1e3}:{}}}async function ve(e,t){let n=await t(`${m}/user`,{headers:h(e)}),r=await n.json().catch(()=>({}));if(!n.ok||!r.id||!r.login)throw Error(`GitHub user lookup failed: ${n.status}`);return{id:r.id,login:r.login}}async function ye(e,t,n,r=fetch){for(let i=1;i<=10;i++){let a=await r(`${m}/user/installations?per_page=100&page=${i}`,{headers:h(e)});if(!a.ok)throw Error(`GitHub installation check failed: ${a.status}`);let o=(await a.json()).installations??[],s=o.find(e=>String(e.id)===n&&String(e.app_id)===t);if(s)return{login:s.account?.login??`unknown`,...s.account?.type?{type:s.account.type}:{}};if(o.length<100)return}}async function E(e){let{createAppAuth:t}=await import(`./dist-node-Bv1kCqyi.js`).then(e=>e.n),{token:n}=await t({appId:e.appId,privateKey:e.privateKey})({type:`app`});return n}async function be(e,t,n=fetch){let r=await E(e),i=await n(`${m}/app/installations/${encodeURIComponent(t)}`,{headers:h(r)});if(i.status===404)return!1;if(!i.ok)throw Error(`GitHub installation lookup failed: ${i.status}`);return!0}async function D(e,t,n,r){let i=new URL(e.url).searchParams.get(`code`);if(!i)throw new b(`missing-code`);let a=await T(t,{code:i,...n?{redirect_uri:n}:{}},r,Date.now()),o=await ve(a.accessToken,r);return{id:String(o.id),login:o.login,token:JSON.stringify(a),accessToken:a.accessToken}}const xe={authorizeUrl(e,{publicUrl:t,state:n}){let r=new URLSearchParams({client_id:w(e).clientId,redirect_uri:`${t.replace(/\/$/,``)}/connect/github/callback`,state:n});return`${S}/authorize?${r}`},async exchange(e,t,{publicUrl:n,fetch:r}){let{accessToken:i,...a}=await D(e,t,`${n.replace(/\/$/,``)}/connect/github/callback`,r);return a},async access(e,t,{fetch:n,now:r}){let i=JSON.parse(e);if(!i.expiresAt||i.expiresAt-3e5>r||!i.refreshToken)return{accessToken:i.accessToken};let a=await T(t,{grant_type:`refresh_token`,refresh_token:i.refreshToken},n,r);return{accessToken:a.accessToken,refreshed:JSON.stringify(a)}}};function Se(e){return Array.isArray(e)?l.find(t=>e.every(e=>x[t].includes(e)))??`write`:e}const Ce={observe:{metadata:`read`,contents:`read`,pull_requests:`read`,issues:`read`},comment:{metadata:`read`,contents:`read`,pull_requests:`write`,issues:`write`},write:{metadata:`read`,contents:`write`,pull_requests:`write`,issues:`write`}};function O(e=`observe`){return{...Ce[Se(e)]}}const we={pull_request:`pull_request`,issue:`issues`,comment:`issue_comment`,mention:`issue_comment`};function Te(e){let t=e.map(e=>we[e]).filter(e=>!!e);return[...new Set([...t,`push`])]}function k(e,t,n,r){let i=t.integrations.github??{},a=Array.isArray(i.events)?i.events:Object.keys(i.events??{});return he(e,{name:t.name??n,description:t.description,permissions:O(i.tools),events:Te(a),isPublic:r})}const A=(e,t)=>t?.type===`Organization`?`https://github.com/organizations/${encodeURIComponent(t.login)}/settings/apps/${e}`:`https://github.com/settings/apps/${e}`,j={read:1,write:2,admin:3},Ee={read:`Read-only`,write:`Read and write`,admin:`Admin`},M=e=>e[0].toUpperCase()+e.slice(1).replaceAll(`_`,` `);async function De(e,t,{publicUrl:n,definition:r,fetch:i}){let a=await i(`${m}/app`,{headers:h(await E(t))});if(!a.ok)throw Error(`GitHub app lookup failed: ${a.status}`);let o=await a.json(),s=k(n,r,e.agent),c=new Set(o.events??[]),l=o.permissions??{},u=[];s.name!==o.name&&u.push({text:`Rename the app to **${s.name}**`,copy:s.name});let d=s.description??``;d!==(o.description??``)&&u.push(d?{text:`Set the **Description**`,copy:d}:{text:`Clear the **Description**`});for(let[e,t]of Object.entries(s.default_permissions))(j[l[e]??``]??0)<(j[t]??0)&&u.push({text:`Set **${M(e)}** to **${Ee[t]??t}**`});for(let e of s.default_events)c.has(e)||u.push({text:`Check the **${M(e)}** event`});for(let e of c)s.default_events.includes(e)||u.push({text:`Uncheck the **${M(e)}** event`});let f=o.owner?.login?{login:o.owner.login,type:o.owner.type}:t.owner;return{url:`${A(o.slug??t.slug,f)}/permissions`,label:`Open app settings`,lines:u}}const Oe={builtin:`shared`,postOrigins:[`https://github.com`],createPost({publicUrl:e,state:t,definition:n,encodedState:r}){let i=k(e,n,t.agent,t.public===!0);return{url:ge(t.owner,r),fields:{manifest:JSON.stringify(i)}}},async createCallback(e,{fetch:t}){let n=new URL(e.url).searchParams.get(`code`);if(!n)throw new b(`missing-code`);let r=await _e(n,t),i={appId:r.appId,slug:r.slug,privateKey:r.privateKey,webhookSecret:r.webhookSecret,clientId:r.clientId,clientSecret:r.clientSecret,...r.owner?{owner:r.owner}:{}};return{platformAppId:r.appId,name:r.slug,credentials:i}},accountUrl:({login:e})=>`https://github.com/${encodeURIComponent(e)}`,settingsUrl(e,t){let{slug:n,owner:r}=t;return r?A(n,r):void 0},drift:(e,t,n)=>De(e,t,n),installUrl(e,t,{publicUrl:n,state:r,installation:i}){let{slug:a}=t;if(!i)return`https://github.com/apps/${a}/installations/new?state=${encodeURIComponent(r)}`;let o=new URLSearchParams({client_id:w(t).clientId,redirect_uri:C(n),state:r});return`${S}/authorize?${o}`},async installedApp(e,{apps:t,fetch:n}){let r=new URL(e.url).searchParams.get(`installation_id`);if(!(!r||!/^\d+$/.test(r))){for(let{app:e,credentials:i}of t)if(await be(i,r,n).catch(t=>(console.error(`coder server: asking GitHub whether ${e.id} owns installation ${r} failed`,t),!1)))return{app:e,installation:r}}},async installCallback(e,{credentials:t,publicUrl:n,fetch:r,installation:i}){let a=i??new URL(e.url).searchParams.get(`installation_id`);if(!a)throw new b(`missing-code`);let{accessToken:o,...s}=await D(e,t,i?C(n):void 0,r),c=await ye(o,t.appId,a,r);if(!c)throw new b(`not-yours`);return{platformInstallId:a,account:c,installer:s.id,user:s}}};function N(e){return e&&typeof e==`object`?e:{}}function P(e){return e?.agent===!0||e?.type===`Bot`||e?.login?.endsWith(`[bot]`)===!0}function F(e,t){return[e,t].filter(e=>!!e).join(`
|
|
2
|
+
|
|
3
|
+
`)}const ke=[`OWNER`,`MEMBER`],Ae=[`issue_comment`,`pull_request_review_comment`,`ping`];function I(e){try{return JSON.parse(e)}catch{return}}function L(e,t,n){if(!n||!t?.startsWith(`sha256=`))return!1;let r=Buffer.from(d(`sha256`,n).update(e).digest(`hex`),`hex`);return p(Buffer.from(t.slice(7),`hex`),r)}function R(e,t,n,r,i){let a=n.installation?.id,o=z(n,i.headSha),s=i.user??n.sender;if(a===void 0||!o||!i.number)return;let c=s?.author_association;return{integration:`github`,type:r,appId:t.id,installationId:String(a),deliveryId:e.headers.get(`x-github-delivery`)??``,actor:{id:String(s?.id??s?.login??``),...s?.login?{login:s.login}:{},...c?{role:c}:{},...P(s)?{agent:!0}:{}},text:i.body??``,repo:o,chat:{thread:B(`${o.owner}/${o.name}`,i.number,i.kind===`pull`)}}}function z(e,t){let n=e.repository;return n?.owner?.login&&n.name&&n.clone_url&&n.default_branch?{owner:n.owner.login,name:n.name,cloneUrl:n.clone_url,ref:t??n.default_branch,defaultBranch:n.default_branch}:void 0}function B(e,t,n){return{_type:`chat:Thread`,adapterName:`github`,channelId:`github:${e}`,id:`github:${e}:${n?``:`issue:`}${t}`,isDM:!1}}function je(e,t,n,r){let i=N(t),a=e.headers.get(`x-github-event`);if(a===`pull_request`){let t=i.pull_request,a=i.action??``,o=i.requested_reviewer?.login?.toLowerCase();if(!t||![`opened`,`synchronize`,`reopened`,`ready_for_review`,`review_requested`].includes(a)||a===`review_requested`&&o!==`${r.slug}[bot]`.toLowerCase()||t.draft||a!==`review_requested`&&P(t.user)||!t.number||!t.head?.sha||!t.base?.sha)return[];let s=R(e,n,i,`pull_request`,{user:i.sender??t.user,body:F(t.title,t.body),number:t.number,kind:`pull`,headSha:t.head.sha});return s?[s]:[]}if(a===`issues`){let t=i.issue;if(!t||![`opened`,`edited`].includes(i.action??``)||P(i.sender??t.user)||!t.number)return[];let r=R(e,n,i,`issue`,{user:i.sender??t.user,body:F(t.title,t.body),number:t.number});return r?[r]:[]}return[]}async function Me(e,t,n={},r){let{token:i,expiresAt:a}=await(await _({appId:e.appId,privateKey:e.privateKey,installationId:Number(t)},r)).auth({type:`installation`,installationId:t,...n.repositories?{repositoryNames:n.repositories}:{},...n.permissions?{permissions:n.permissions}:{}});return{token:i,expiresAt:Date.parse(a)}}function Ne(e,t){let{appId:n,privateKey:r}=e,{repositories:i,permissions:a}=V(t);return u(`sha256`).update(JSON.stringify([n,r,i?[...i].sort():null,a?Object.entries(a).sort():null])).digest(`base64url`)}const Pe={installation:[`created`,`deleted`,`suspend`,`unsuspend`,`new_permissions_accepted`],installation_repositories:[`added`,`removed`],repository:[`created`,`deleted`,`renamed`]};function Fe(e,t,n){let r=N(t),i=r.installation?.id,a=r.action;if(i===void 0||!Pe[e??``]?.includes(a??``))return;let o=r.installation?.account,s=Date.now(),c=e===`installation`&&(a===`deleted`||a===`suspend`);return{op:c?`delete`:`upsert`,...e===`repository`&&r.repository?.full_name?{repos:{add:a===`created`||a===`renamed`?[r.repository.full_name]:[],remove:a===`deleted`?[r.repository.full_name]:a===`renamed`&&r.changes?.repository?.name?.from?[`${r.repository.full_name.split(`/`)[0]}/${r.changes.repository.name.from}`]:[]}}:{},...e===`installation_repositories`?{repos:{...r.repository_selection&&(a===`removed`?!r.repositories_removed?.length:!r.repositories_added?.length)?{refresh:!0}:{},add:(r.repositories_added??[]).flatMap(e=>e.full_name?[e.full_name]:[]),remove:(r.repositories_removed??[]).flatMap(e=>e.full_name?[e.full_name]:[])}}:{},installation:{integration:`github`,id:`${n.id}:${i}`,app:n.id,account:{login:o?.login??r.repository?.owner?.login??`unknown`,...o?.type?{type:o.type}:{}},createdAt:s,...r.repositories?{repos:r.repositories.flatMap(e=>e.full_name?[e.full_name]:[])}:{},...c?{deletedAt:s}:{}}}}function Ie(e,t){let n=N(e),r=n.repository?.full_name,i=t.branch??n.repository?.default_branch;if(!r||r!==t.agentsRepo||!i||n.ref!==`refs/heads/${i}`||!n.after||!n.commits)return;let a=[...new Set(n.commits.flatMap(e=>[...e.added??[],...e.modified??[],...e.removed??[]]))].filter(e=>e.startsWith(`.coder/agents/`));return a.length?{repo:r,ref:n.after,branch:i,paths:a}:void 0}function Le(e,t){let n=N(e),r=n.repository?.full_name,i=n.ref?.startsWith(`refs/heads/`)&&n.ref.slice(11),a=n.installation?.id;if(!r||!i||a===void 0)return;let o=n.commits??[],s=o.flatMap(e=>[...e.added??[],...e.modified??[],...e.removed??[]]);if(!(o.length&&o.length<2048&&!s.some(e=>e.startsWith(`.coder/`))))return{installation:`${t.id}:${a}`,repo:r,branch:i,...n.repository?.default_branch?{defaultBranch:n.repository.default_branch}:{}}}function V(e={}){return{...e.repo?{repositories:[e.repo.name]}:{},...e.tools?{permissions:O(e.tools)}:{}}}const Re={id:`github`,brand:{color:`#000000`,icon:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`,dark:`#fff`,svg:`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 98 96" fill="none" style="color:light-dark(#000,#fff)"><g clip-path="url(#github-mark-4)"><path d="M 41.44 69.38 C 28.81 67.85 19.91 58.76 19.91 46.99 C 19.91 42.21 21.63 37.04 24.5 33.59 C 23.26 30.43 23.45 23.73 24.88 20.96 C 28.71 20.48 33.88 22.49 36.94 25.27 C 40.58 24.12 44.41 23.54 49.1 23.54 C 53.79 23.54 57.61 24.12 61.06 25.17 C 64.03 22.49 69.29 20.48 73.12 20.96 C 74.46 23.54 74.65 30.24 73.4 33.5 C 76.47 37.13 78.09 42.01 78.09 46.99 C 78.09 58.76 69.19 67.66 56.37 69.29 C 59.62 71.39 61.82 75.99 61.82 81.25 L 61.82 91.21 C 61.82 94.08 64.22 95.7 67.09 94.55 C 84.41 87.95 98 70.63 98 49.19 C 98 22.11 75.99 0 48.9 0 C 21.82 0 0 22.11 0 49.19 C 0 70.44 13.49 88.05 31.68 94.65 C 34.26 95.61 36.75 93.88 36.75 91.3 L 36.75 83.64 C 35.41 84.22 33.69 84.6 32.16 84.6 C 25.84 84.6 22.11 81.16 19.43 74.74 C 18.38 72.16 17.23 70.63 15.03 70.34 C 13.88 70.25 13.49 69.77 13.49 69.19 C 13.49 68.04 15.41 67.18 17.32 67.18 C 20.1 67.18 22.49 68.91 24.98 72.45 C 26.89 75.22 28.9 76.47 31.29 76.47 C 33.69 76.47 35.22 75.61 37.42 73.4 C 39.05 71.78 40.29 70.34 41.44 69.38 Z" fill="black" style="fill:currentColor"/></g><defs><clipPath id="github-mark-4"><rect width="98" height="96" fill="white"/></clipPath></defs></svg>`},name:`GitHub`,featured:!0,description:`Pull requests, issues, and comments on GitHub repositories`,installLabel:`Connect GitHub`,use:`Mention @{handle} in an issue or pull request.`,organizationApps:!0,publicApps:!0,hint:`Cite repository file paths when discussing code. After making changes, link the pull request.`,sample:`github:owner/repo:1`,author:e=>`${e}[bot]`,events:{mention:{description:`Comment from a repo owner or org member mentioning @<agent>; text has the mention stripped.`,on:`mention`,addressed:!0},pull_request:{description:`Opened, updated, or ready non-draft pull request.`},issue:{description:`Opened or edited issue.`},comment:{description:`New non-agent issue or pull-request comment.`,on:`message`,noisy:!0}},tools:{presets:x,server:me,install:`arch=$(uname -m); [ "$arch" = aarch64 ] && arch=arm64; curl -fsSL "https://github.com/github/github-mcp-server/releases/latest/download/github-mcp-server_Linux_$arch.tar.gz" | tar -xz -C /usr/local/bin github-mcp-server`,installHosts:[`github.com`,`release-assets.githubusercontent.com`]},hosts:[`github.com`,`api.github.com`,`codeload.github.com`],get app(){return Oe},auth:{token:async(e,t,n,{fetch:r,hold:i}={})=>{let a=()=>Me(t,e.id.split(`:`).pop(),V(n),r);return i?i(Ne(t,n),a):(await a()).token},get user(){return xe},canWrite:async(e,t,n)=>!!(e.repo&&e.actor.login)&&le(`${e.repo.owner}/${e.repo.name}`,e.actor.login,t,n)},repos:{cloneHosts:[`github.com`],credentialUsername:`x-access-token`,readFile:ne,revalidate:re,listDir:ae,commit:ie,list:(e,t,n)=>oe(t,n),get:ce,url:ue,pullRequests:se,pullRequest:e=>{let t=/^github:[^:]+:(\d+)(?::|$)/.exec(e.chat?.thread.id??``);return t?Number(t[1]):void 0},pullRequestThread:(e,t)=>B(e,t,!0)},target(e,t){let n=e.headers.get(`x-github-hook-installation-target-id`);if(!n)return;let r=N(I(t)),i=z(r);return{app:n,...r.installation?.id===void 0?{}:{installation:String(r.installation.id)},...i?{repo:i}:{}}},adapter:async e=>(await import(`./adapter-sKt1J1Cm.js`)).githubAdapter(e),link(e){let t=/^github:([^:]+):(issue:)?(\d+)(?::|$)/.exec(e.chat?.thread.id??``);return t?`https://github.com/${t[1]}/${t[2]?`issues`:`pull`}/${t[3]}`:void 0},ownEvents(e,t,n,r){let i=e.headers.get(`x-github-event`);if(!i||Ae.includes(i))return;let{webhookSecret:a,slug:o}=r;if(!L(t,e.headers.get(`x-hub-signature-256`),a))return{invalid:!0};let s=I(t),c=Fe(i,s,n);if(c)return{installation:c};let l=Ie(s,n),u=i===`push`?Le(s,n):void 0;return l?{changes:l,...u?{pushed:u}:{}}:u?{pushed:u}:{events:je(e,s,n,{slug:o})}},event(e,t,n){let r=n.raw.comment?.author_association;return{type:e===`mention`&&!ke.includes(r??``)?`comment`:e,actor:{id:n.author.userId,login:n.author.userName,...r?{role:r}:{}}}}};async function ze(e,t,n=fetch){let r=e.within??e.installationId;if(!r||!e.actor.id)throw Error(`Slack event has no workspace or actor`);let i=await n(`https://slack.com/api/users.info`,{method:`POST`,headers:{authorization:`Bearer ${t}`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({user:e.actor.id,team_id:r}),redirect:`error`,signal:AbortSignal.timeout(5e3)}),a=await i.json(),o=a.user;if(!i.ok||a.ok!==!0||!o)throw Error(`Slack returned no valid workspace member`);return o.id===e.actor.id&&o.deleted===!1&&o.is_bot===!1&&o.is_restricted===!1&&o.is_ultra_restricted===!1&&(o.is_external===void 0||o.is_external===!1)&&(o.team_id===r||Array.isArray(o.enterprise_user?.teams)&&o.enterprise_user.teams.includes(r))}const H=[`channels:history`,`groups:history`,`im:history`,`mpim:history`],U=[`channels:read`,`groups:read`,`im:read`,`mpim:read`],W={"conversations.history":H,"conversations.replies":H,"conversations.info":U,"conversations.list":U,"users.info":[`users:read`],"users.list":[`users:read`],"reactions.get":[`reactions:read`]},G={"chat.postMessage":[`chat:write`],"reactions.add":[`reactions:write`]},K={"chat.postMessage":`thread_ts`,"reactions.add":`timestamp`},q={...W,...G};async function Be(e,t,n={}){let r=e.tools??[];if(!r.includes(t)||!q[t])throw Error(`Slack method ${t} is not allowed for this task; allowed: ${r.join(`, `)||`none`}`);if(t in G){let[,r,i]=(e.scope?.thread??``).split(`:`);if(!r||n.channel!==r)throw Error(`This task may only write to its connected channel.`);let a=Object.hasOwn(K,t)?K[t]:void 0;if(!i||!a||n[a]!==i||n.reply_broadcast)throw Error(`This task may only write to its triggering thread.`)}let i=e.scope?.within,{callSlackApi:a}=await import(`./api-qdpx8FD0.js`),o=await a(t,i?{...n,team_id:i}:n,{token:e.token,fetch:e.fetch,contentType:`json`});if(o.error===`missing_scope`)throw Error(`Slack method ${t} needs the ${q[t].join(` or `)} scope, which this app does not have`);if(!o.ok)throw Error(`Slack ${t} failed: ${o.error}`);return o}const Ve={slack_api:{description:`Call a Slack Web API method, such as conversations.replies or chat.postMessage, with its JSON arguments. Only the methods this task allows work; others fail with the allowed list.`,inputSchema:{type:`object`,properties:{method:{type:`string`},args:{type:`object`}},required:[`method`]},handler:(e,t)=>Be(t,String(e.method??``),e.args??{})}};function J(e){return e.replace(/\/$/,``)}function He(e,{name:t,description:n,scopes:r,events:i,extras:a}){let o=J(e),s=new URL(o).hostname;return{display_information:{name:t,...n?{description:n.slice(0,140)}:{}},features:{bot_user:{display_name:t,always_online:!0},app_home:{home_tab_enabled:!0,messages_tab_enabled:!0,messages_tab_read_only_enabled:!1},...s.includes(`.`)&&!ee(s)?{unfurl_domains:[s]}:{},...a},oauth_config:{redirect_urls:[`${o}/install/slack/callback`],scopes:{bot:r}},settings:{org_deploy_enabled:!0,event_subscriptions:{request_url:`${o}/hooks/slack`,bot_events:i},interactivity:{is_enabled:!0,request_url:`${o}/hooks/slack`}}}}async function Y(e,t,n,r){let{assertSlackOk:i,callSlackApi:a}=await import(`./api-qdpx8FD0.js`),o=await a(e,t,{token:n,fetch:r});return i(e,o),o}async function Ue(e,t,n=fetch){let r=await Y(`apps.manifest.create`,{manifest:JSON.stringify(t)},e,n);return{appId:r.app_id,clientId:r.credentials.client_id,clientSecret:r.credentials.client_secret,signingSecret:r.credentials.signing_secret}}const X=e=>Ye(e.integrations.slack?.tools);function Z(e,t,n){let r=n.integrations.slack??{},i=Array.isArray(r.events)?r.events:Object.keys(r.events??{});return He(e,{name:t,description:n.description,scopes:X(n),events:Ze(i),extras:Qe(e,n)})}async function Q(e,t=fetch){let n=await t(`https://slack.com/api/tooling.tokens.rotate`,{method:`POST`,headers:{"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({refresh_token:e})}),r=await n.json();if(!n.ok||!r.ok||!r.token||!r.refresh_token)throw new b(`platform-error`,r.error??String(n.status));return{configToken:r.token,configRefreshToken:r.refresh_token,configTokenExpires:(r.exp??0)*1e3}}function We(e,t,n,r=[]){let i=new URLSearchParams({client_id:e.clientId,state:n,redirect_uri:`${J(t)}/install/slack/callback`});return r.length&&i.set(`scope`,r.join(`,`)),`https://slack.com/oauth/v2/authorize?${i}`}async function Ge(e,t,n,r=fetch){let i=await r(`https://slack.com/api/oauth.v2.access`,{method:`POST`,headers:{"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({client_id:t.clientId,client_secret:t.clientSecret,code:e,redirect_uri:`${J(n)}/install/slack/callback`})}),a=await i.json(),o=a.is_enterprise_install===!0,s=o?a.enterprise:a.team;if(!i.ok||!a.ok||!a.access_token||!s?.id||!s.name)throw new b(`platform-error`,a.error??String(i.status));return{id:s.id,name:s.name,org:o,accessToken:a.access_token,...a.authed_user?.id?{installer:a.authed_user.id}:{}}}async function Ke(e,t){let n=[],r=``;do{let i=await Y(`auth.teams.list`,{limit:1e3,...r?{cursor:r}:{}},e,t);n.push(...i.teams.map(e=>e.id)),r=i.response_metadata?.next_cursor??``}while(r);return n}const qe={builtin:`own`,createStep:()=>({intro:`Coder creates the Slack app with a configuration token and installs its bot in the token's whole workspace.`,link:`https://api.slack.com/apps`,steps:[{text:`Under **Your App Configuration Tokens**, click **Generate Token** and pick the workspace the agent should join.`},{text:`Paste the refresh token below, then approve the install when Slack asks.`}],notes:[`A workspace that requires app approval sends the install to its admins first. In Enterprise Grid, only an org admin can install org-wide.`,`To install the app in other Slack workspaces, click **Activate Public Distribution** under the app's **Manage Distribution**.`],fields:[{name:`refreshToken`,label:`Refresh token`,hint:`Starts with xoxe-1-.`,placeholder:`xoxe-1-…`,required:!0}],submit:`Create Slack app`}),async createCallback(e,{publicUrl:t,state:n,definition:r,fetch:i}){let a=new URLSearchParams(await e.text()).get(`refreshToken`);if(!a)throw Error(`Missing refresh token`);if(a.startsWith(`xoxe.xoxp-`))throw new b(`invalid-field`,`access-token`,`That is the access token, xoxe.xoxp-…. Paste the refresh token next to it, which starts with xoxe-1-.`);if(!a.startsWith(`xoxe-1-`))throw new b(`invalid-field`,`refresh-token`,`That is not a refresh token; they start with xoxe-1-. Copy it from Your App Configuration Tokens.`);let o=await Q(a,i),s=r.name??n.agent,c=await Ue(o.configToken,Z(t,s,r),i);return{platformAppId:c.appId,name:s,credentials:{...c,...o,scopes:X(r)}}},manifest:(e,{publicUrl:t,definition:n})=>Z(t,e.name,n),async update(e,t,{publicUrl:n,definition:r,fetch:i,saveCredentials:a}){let o=t;if(!o.configRefreshToken)return;(!o.configToken||(o.configTokenExpires??0)<=Date.now()+6e4)&&(o={...o,...await Q(o.configRefreshToken,i)},await a(o)),await Y(`apps.manifest.update`,{app_id:o.appId,manifest:JSON.stringify(Z(n,e.name,r))},o.configToken,i);let s=X(r);s.join()!==o.scopes?.join()&&await a({...o,scopes:s})},settingsUrl:(e,t)=>`https://api.slack.com/apps/${encodeURIComponent(t.appId)}`,installUrl(e,t,{publicUrl:n,state:r}){let i=t;return We(i,n,r,i.scopes??Ye(`write`))},async installCallback(e,{app:t,credentials:n,publicUrl:r,fetch:i}){let a=new URL(e.url).searchParams.get(`code`);if(!a)throw new b(`missing-code`);let o=await Ge(a,n,r,i),s=await Y(`auth.test`,{},o.accessToken,i).then(e=>e.url?.replace(/\/$/,``)).catch(()=>void 0),c=o.org?await Ke(o.accessToken,i).catch(()=>null):void 0;return{platformInstallId:o.id,account:{login:o.name,...o.org?{type:`Organization`}:{},...s?{url:s}:{}},token:o.accessToken,...o.org?{covers:c}:{},installer:o.installer,...o.installer?{user:{id:o.installer}}:{}}}},Je=[`app_mentions:read`,`channels:history`,`groups:history`,`im:history`,`channels:read`,`users:read`,`reactions:read`,`commands`,`links:read`,`links:write`];function Ye(e=`observe`){let t=new Set(Object.keys(W));return(Array.isArray(e)?e.every(e=>t.has(e)):e===`observe`)?[...Je]:[...Je,`chat:write`,`reactions:write`,`im:write`,`assistant:write`]}const Xe={mention:[`app_mention`],message:[`message.channels`,`message.groups`,`message.im`],reaction:[`reaction_added`]};function Ze(e){return[...new Set(e.flatMap(e=>Xe[e]??[])),`team_access_granted`,`team_access_revoked`,`app_home_opened`,`link_shared`]}function Qe(e,t){return{slash_commands:[{command:`/setup`,url:`${e.replace(/\/$/,``)}/hooks/slack`,description:`Configure this agent`,usage_hint:`repo owner/name | model <name> | show`}],agent_view:{agent_description:t.description??`${t.name??`Coder`} in your workspace.`}}}const $e=n({type:r(t()),team_id:r(t()),enterprise_id:r(t()),is_enterprise_install:r(o([s(),t()])),api_app_id:r(t()),challenge:r(t()),authorizations:r(e(n({user_id:r(t()),team_id:r(a(t())),enterprise_id:r(a(t())),is_enterprise_install:r(s())})))}),et=n({enterprise_id:r(t()),authorizations:r(e(n({enterprise_id:r(t())}))),event:n({type:c([`team_access_granted`,`team_access_revoked`]),team_ids:e(t())})}),tt=n({type:i(`app_home_opened`),user:t(),tab:i(`home`)}),nt=n({type:i(`link_shared`),channel:t(),message_ts:t(),unfurl_id:r(t()),source:r(t()),links:e(n({url:t()}))}),rt=`link:`,it=n({type:i(`block_actions`),actions:e(n({action_id:t()}))});function $(e){try{return JSON.parse(e)}catch{let t=new URLSearchParams(e),n=t.get(`payload`);if(!n)return Object.fromEntries(t);try{return JSON.parse(n)}catch{return{}}}}function at(e,t){let n=tt.safeParse(e.event).data;if(n)return{work:async e=>(await import(`./views-BhsnL0nr.js`)).publishHome(e,n.user)};let r=nt.safeParse(e.event).data;if(r)return{work:async e=>(await import(`./views-BhsnL0nr.js`)).unfurl(e,r)};let i=it.safeParse(e).data?.actions;if(i?.length&&i.every(e=>e.action_id.startsWith(`link:`)))return{ack:!0};if(e.type&&e.type!==`event_callback`&&e.type!==`url_verification`)return{unhandled:`Slack interaction ${e.type}`};let a=et.safeParse(e).data,o=a?.enterprise_id??a?.authorizations?.[0]?.enterprise_id;if(!a||!o)return;let s=a.event.team_ids;return{covers:{installation:`${t}:${o}`,...a.event.type===`team_access_granted`?{add:s}:{remove:s}}}}function ot(e,t,n){let r=e.headers.get(`x-slack-request-timestamp`)??``;if(!n||!(Math.abs(Date.now()/1e3-Number(r))<=300))return!1;let i=`v0=${d(`sha256`,n).update(`v0:${r}:${t}`).digest(`hex`)}`;return p(e.headers.get(`x-slack-signature`)??``,i)}const st={id:`slack`,brand:{color:`#E3066A`,icon:`M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z`,svg:`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><g><path d="M 84.04 252.77 c 0 23.13 -18.89 42.02 -42.02 42.02 S 0 275.9 0 252.77 s 18.89 -42.02 42.02 -42.02 h 42.02 v 42.02 Z" fill="#e3066a"/><path d="M 105.21 252.77 c 0 -23.13 18.89 -42.02 42.02 -42.02 s 42.02 18.89 42.02 42.02 v 105.21 c 0 23.13 -18.89 42.02 -42.02 42.02 s -42.02 -18.89 -42.02 -42.02 c 0 0 0 -105.21 0 -105.21 Z" fill="#e3066a"/></g><g><path d="M 147.23 84.04 c -23.13 0 -42.02 -18.89 -42.02 -42.02 S 124.1 0 147.23 0 s 42.02 18.89 42.02 42.02 v 42.02 h -42.02 Z" fill="#00b3ff"/><path d="M 147.23 105.21 c 23.13 0 42.02 18.89 42.02 42.02 s -18.89 42.02 -42.02 42.02 H 42.02 c -23.13 0 -42.02 -18.89 -42.02 -42.02 s 18.89 -42.02 42.02 -42.02 c 0 0 105.21 0 105.21 0 Z" fill="#00b3ff"/></g><g><path d="M 315.96 147.23 c 0 -23.13 18.89 -42.02 42.02 -42.02 s 42.02 18.89 42.02 42.02 -18.89 42.02 -42.02 42.02 h -42.02 v -42.02 Z" fill="#41b658"/><path d="M 294.79 147.23 c 0 23.13 -18.89 42.02 -42.02 42.02 s -42.02 -18.89 -42.02 -42.02 V 42.02 c 0 -23.13 18.89 -42.02 42.02 -42.02 s 42.02 18.89 42.02 42.02 v 105.21 Z" fill="#41b658"/></g><g><path d="M 252.77 315.96 c 23.13 0 42.02 18.89 42.02 42.02 s -18.89 42.02 -42.02 42.02 -42.02 -18.89 -42.02 -42.02 v -42.02 h 42.02 Z" fill="#fcc003"/><path d="M 252.77 294.79 c -23.13 0 -42.02 -18.89 -42.02 -42.02 s 18.89 -42.02 42.02 -42.02 h 105.21 c 23.13 0 42.02 18.89 42.02 42.02 s -18.89 42.02 -42.02 42.02 h -105.21 Z" fill="#fcc003"/></g></svg>`},name:`Slack`,featured:!0,description:`Mentions, messages, and reactions in a Slack workspace`,installLabel:`Add to Slack`,use:`Message {handle} or mention it in a channel.`,covered:`Slack workspace`,sample:`slack:C0000000000:1700000000.000100`,hint:`Do not use Markdown headings. Use short paragraphs and code spans, and reply only in the thread where you were addressed.`,events:{mention:{description:`Slack app mention`,on:`mention`,addressed:!0},command:{description:`/setup and other slash commands`,on:`command`},reaction:{description:`Reaction added`,on:`reaction`},message:{description:`Channel, group, or direct message`,on:`message`,noisy:!0,addressed:!0}},tools:{presets:{observe:Object.keys(W),comment:[...Object.keys(W),...Object.keys(G)],write:[...Object.keys(W),...Object.keys(G)]},serve:Ve},hosts:[`slack.com`],get app(){return qe},target(e,t){let n=$(t),r=$e.safeParse(n).data;if(r?.type===`url_verification`&&r.challenge)return new Response(r.challenge);let i=r?.authorizations?.[0],a=i?.team_id??r?.team_id??n.team?.id,o=String(i?.is_enterprise_install??r?.is_enterprise_install)===`true`,s=o?i?.enterprise_id??r?.enterprise_id??n.enterprise?.id:a,c=i?.user_id;return r?.api_app_id?{app:r.api_app_id,...s?{installation:s}:{},...o&&a?{within:a}:{},...c?{self:c}:{}}:void 0},welcome:async(e,t,n)=>(await import(`./views-BhsnL0nr.js`)).welcome(e,t,n),link(e){let t=/^slack:([^:]+):(\d+)\.(\d+)$/.exec(e.chat?.thread.id??``);return t?`https://slack.com/archives/${t[1]}/p${t[2]}${t[3]}`:void 0},ownEvents(e,t,n,r){let i=at($(t),n.id);if(i)return ot(e,t,r?.signingSecret)?i:{invalid:!0}},adapter:async e=>(await import(`./adapter-YCvP9H2n.js`)).slackAdapter(e),reactionId:e=>e.raw.event_ts,auth:{canWrite:ze,async token(e){if(!e.token)throw Error(`Slack installation ${e.id} has no bot token`);return e.token}}};export{L as a,g as c,Re as i,p as l,st as n,x as o,Y as r,b as s,rt as t,te as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-ZUdhZnuW.js";import{g as t,p as n,s as r}from"./output-BKeyLbvt.js";import{n as i}from"./args-CxsMr9Un.js";import a from"node:process";const o=e({name:`auth status`,globalFlags:{cwd:!1},help:{usage:`coder auth status [--json]`,summary:`List saved sessions with their server, user, and workspace.`,env:[[`CODER_SERVER`,`the server to use instead of https://coder.wular.ai`]]},options:{json:i},run:async()=>{let{sessions:e}=await import(`./remote-oQs6My_3.js`).then(e=>e.c);return e.status()},print:e=>{let i=n,o=Object.entries(e);if(!o.length)return void a.stdout.write(`${i.dim(`Not signed in`)}\n\n${r([`Sign in: coder auth login`],i)}\n`);a.stdout.write(`${t([{header:`server`,value:([e])=>e,paint:e=>i.cyan(e)},{header:`user`,value:([,e])=>e.user.email},{header:`workspace`,value:([,e])=>e.organization?`${e.organization.name} (${e.organization.slug})`:`-`}],o,i)}\n`)}});export{o as commandStatus};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{H as e}from"./dispatch-D3Dqxijf.js";import{i as t,r as n}from"./cli-ZUdhZnuW.js";import{p as r,r as i,s as a}from"./output-BKeyLbvt.js";import{i as o,n as s,s as c,t as l}from"./args-CxsMr9Un.js";import{i as u,r as d}from"./result-jeiRJTzA.js";import f from"node:process";const p={server:o,workspace:c,yes:s};function m(t,n,r){let[i,...a]=t,o=a.join(` `).trim();if(!i||!o)throw new e(`invalid-option`,n,{hint:r});return{id:i,text:o}}function h(e,t=!1){let{taskId:n,steered:o}=e;if(o===`queued`){f.stdout.write(`${r.dim(`[coder]`)} follow-up queued for task ${r.cyan(n)}; it runs when the current turn finishes.\n`),t&&f.stdout.write(`\n${r.dim(`[coder] --wait is not available for a queued follow-up.`)}\n\n${a([`Wait in its own background shell, one per task: coder task result ${n} --wait`],r)}\n`);return}if(!t){f.stdout.write(o===`live`?`${r.dim(`[coder]`)} steered follow-up into running task ${r.cyan(n)}.\n`:`${r.dim(`[coder]`)} resumed task ${r.cyan(n)} with the follow-up (same thread, same id).\n`),f.stdout.write(`\n${a([`Wait in its own background shell, one per task: coder task result ${n} --wait`],r)}\n`);return}f.stdout.write(`\n${e.finalMessage||`(no final message)`}\n\n`),f.stderr.write(`${r.dim(`[coder] task=${n} status=${e.status??`unknown`}`)}\n\n${d(n,i)}\n`)}const g=t({name:`task steer`,help:{usage:`coder task steer <task-id> "<follow-up instructions>" [--wait] [--server [url]]`,summary:`Continue a task's thread with new instructions. They are injected into a live Codex or
|
|
2
|
+
Claude turn at its next tool boundary and queued across a startup or completion race.
|
|
3
|
+
A stopped, finished, or archived task resumes on the same task id. It reuses the
|
|
4
|
+
task's engine, model, and permissions unless overridden.`,flags:[[`--wait`,`run in the foreground and block until the answer is ready`],[`--model <alias|slug>`,`override the task's model for this follow-up`],[`--effort <low|medium|high>`,`override the task's reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto`],n],examples:[[`coder task steer task-abc "now add tests"`,`continue that task with a follow-up`]]},options:{...l,model:c,effort:c,permissions:c,wait:s,...p},args:1/0,async run({options:e,args:t}){let{tasks:n}=await import(`./task-IoBYe7ok.js`).then(e=>e.t),{id:r,text:i}=m(t,`Missing task id or follow-up text.`,[`Usage: coder task steer <task-id> "<follow-up>" [--wait]`,`Help: coder task steer --help`]);return n.steer(r,i,{...e,organization:e.workspace})},json(e,{options:t}){let n=e;return t.server!==void 0||!t.wait||n.steered===`queued`?e:{taskId:n.taskId,status:n.status??null,finalMessage:n.finalMessage??null}},print(e,{options:t,args:[n]}){if(t.server===void 0)return h(e,t.wait);if(t.wait)return u(e,r);f.stdout.write(`Steered server task ${r.cyan(n)}.\n`)},exit(e,{options:t}){let n=e;if(t.wait&&(t.server!==void 0||n.steered!==`queued`))return n.status===`completed`?0:1}});export{g as commandSteer,m as idAndText};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-
|
|
1
|
+
import{i as e,r as t}from"./cli-ZUdhZnuW.js";import{p as n}from"./output-BKeyLbvt.js";import{i as r,n as i,s as a,t as o}from"./args-CxsMr9Un.js";import s from"node:process";const c={server:r,workspace:a,yes:i},l=e({name:`task stop`,help:{usage:`coder task stop <task-id> [--server [url]]`,summary:`Interrupt a running task and mark it cancelled.`,flags:[t]},options:{...o,...c},args:1,run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-IoBYe7ok.js`).then(e=>e.t);return n.stop(t,{...e,organization:e.workspace})},print:(e,{options:t,args:[r]})=>s.stdout.write(t.server===void 0?`Stopped task ${n.cyan(e.taskId)} ${n.dim(`(${e.interrupt})`)}\n`:`Stopped server task ${n.cyan(r)}.\n`)});export{l as commandStop};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-ZUdhZnuW.js";import{m as t,p as n,s as r}from"./output-BKeyLbvt.js";import{n as i,t as a}from"./args-CxsMr9Un.js";import o from"node:process";const s=e({name:`flow stop`,help:{usage:`coder flow stop [run-id] [--keep-tasks] [--json]`,summary:`Stop a running flow: signal the orchestrator so it stops dispatching, stamp the
|
|
2
2
|
run stopped, and stop its still-running tasks. Defaults to the most recent run;
|
|
3
|
-
the journal stays ready for \`coder flow resume\`.`,flags:[[`--keep-tasks`,`leave the run's still-running tasks running`]]},options:{...a,"keep-tasks":i},args:1,run:async({options:e,args:[t]})=>{let{stopRun:n}=await import(`./executor-
|
|
3
|
+
the journal stays ready for \`coder flow resume\`.`,flags:[[`--keep-tasks`,`leave the run's still-running tasks running`]]},options:{...a,"keep-tasks":i},args:1,run:async({options:e,args:[t]})=>{let{stopRun:n}=await import(`./executor-5j-Ewzzb.js`).then(e=>e.t);return n(t,{keepTasks:e[`keep-tasks`]})},print:c});function c(e){let i=n;e.status===`failed`?o.stdout.write(`${i.dim(`[flow]`)} Run ${i.cyan(e.runId)} orchestrator died. Marked ${t(`failed`)}.\n`):o.stdout.write(`${i.dim(`[flow]`)} run ${i.cyan(e.runId)} ${t(e.status)}.\n`),e.stoppedTasks.length&&o.stdout.write(`${i.dim(`[flow]`)} stopped tasks: ${e.stoppedTasks.join(`, `)}\n`),e.keptTasks.length&&o.stdout.write(`${i.dim(`[flow]`)} left running: ${e.keptTasks.join(`, `)}\n`),o.stdout.write(`\n${r([`Resume: coder flow resume ${e.runId}`],i)}\n`)}export{s as commandStop};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-ZUdhZnuW.js";const t=[[`--wait`,`run in the foreground and block until the answer is ready`],[`--engine <codex|claude|custom>`,`engine to use; custom runs your configured custom models (default: first in the chain)`],[`--model <alias|slug>`,`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`],[`--effort <low|medium|high>`,`reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto (default: auto)`],[`--mcp <names|all|json>`,'attach MCP servers from `mcp` in .coder/config.json by name (or all), or an inline JSON array [{"name","command","args","env","tools"}]; none by default, all adds your engine\'s own MCP servers'],[`--connections <ids>`,`use only these connections (coder connection list), within the agent's`],[`--add-dir <dir>`,`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`]],n=e(`task`,{"archive-sweep":async()=>(await import(`./archive-sweep-EiiXIqjr.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-BBZ36xL0.js`)).commandWorker,mcp:async()=>(await import(`./mcp-O8VTfzdL.js`)).commandTaskMcp,run:async()=>(await import(`./run-DU4G8gNw.js`)).commandTask,list:async()=>(await import(`./list-Bggy3HZY.js`)).commandTasks,ls:async()=>(await import(`./list-Bggy3HZY.js`)).commandTasks,watch:async()=>(await import(`./watch-IL2eEgwD.js`)).commandWatch,stream:async()=>(await import(`./watch-IL2eEgwD.js`)).commandWatch,result:async()=>(await import(`./result-jeiRJTzA.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-i6w87g_t.js`)).commandSteer,ask:async()=>(await import(`./ask-Bou8zg-4.js`)).commandAsk,stop:async()=>(await import(`./stop-CJ0PHvKp.js`)).commandStop,archive:async()=>(await import(`./archive-CmRVm4iS.js`)).commandArchive,delete:async()=>(await import(`./delete-Bmn2_TiV.js`)).commandDelete,approvals:async()=>(await import(`./approvals-CE8dXZhE.js`)).commandApprovals,approve:async()=>(await import(`./approve-dWW4qt76.js`)).commandApprove},{menu:[{sub:`run`,usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`,alias:`run`},{sub:`list`,usage:`list`,blurb:`list recent tasks (by default running + just stopped)`,alias:`list`},{sub:`result`,usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`,alias:`result`},{sub:`watch`,usage:`watch [task-id]`,blurb:`stream a task's live transcript`},{sub:`steer`,usage:`steer <task-id> "<follow-up>"`,blurb:`continue a task's thread`},{sub:`ask`,usage:`ask <task-id> "<question>"`,blurb:`ask about a task without interrupting it`},{sub:`stop`,usage:`stop <task-id>`,blurb:`interrupt a running task`},{sub:`archive`,usage:`archive <task-id>`,blurb:`archive a session (or --all-stopped)`},{sub:`delete`,usage:`delete <task-id>`,blurb:`delete a session (or --all-archived)`},{sub:`approvals`,usage:`approvals [task-id]`,blurb:`pending approvals (all tasks, or one)`},{sub:`approve`,usage:`approve <id>`,blurb:`answer an escalated permission`}].map(e=>({usage:e.usage,blurb:e.blurb,...e.alias?{note:`(coder ${e.alias})`}:{}}))},{aliases:{stream:`watch`,ls:`list`},hint:`Run a task: coder run "<text>"`});export{t as TASK_FLAGS,n as commandTaskGroup};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{Ct as t,En as n,Q as r,c as i,cn as a,ct as o,et as s,st as c,u as l,wn as u,xn as d}from"./config-D2FxHWwi.js";import{I as f,R as p,h as m,z as h}from"./dispatch-D3Dqxijf.js";import{t as g}from"./integrations-D3OgJk6Y.js";import{c as _,l as v,n as y}from"./actions-5TDwmn_z.js";import{a as b}from"./mcp-YhyTUMIM.js";import{r as x}from"./exec-BsXFIdTl.js";import S from"node:path";import C from"node:process";import{execFile as w}from"node:child_process";import{createHash as T,randomUUID as E}from"node:crypto";import D from"node:os";import O from"node:net";import k from"node:fs/promises";import{promisify as A}from"node:util";import j from"node:http";var M=e({INBOX_COMMAND:()=>Q,INBOX_SOCKET:()=>Y,applyTaskMessage:()=>K,checkout:()=>L,checkoutCache:()=>R,inboxSocket:()=>X,prepareRepo:()=>W,receiveInbox:()=>$,releaseCheckout:()=>B,requestInboxControl:()=>G,runTask:()=>J,sendInbox:()=>Z,startInboxControl:()=>ne,taskServer:()=>P,withCheckoutLock:()=>z});const N=A(w);function P(){let e=C.env.CODER_SERVER?.replace(/\/+$/,``),t=C.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function F(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function I(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function L(e,t,n,r,i){let a=e.event?.repo;if(!a)return t;let o=S.join(t,`repo`);if(!I(a.ref)||!I(a.defaultBranch))throw Error(`Invalid repository ref`);let s=new URL(a.cloneUrl),c=g[e.event.integration]?.repos?.cloneHosts??[];if(s.protocol!==`https:`||!c.includes(s.hostname))throw Error(`Repository clone host does not match the integration`);await k.mkdir(t,{recursive:!0});let l=await k.mkdtemp(S.join(t,`.git-credential-`)),u=S.join(l,`token`),d=S.join(l,`askpass.sh`);n&&(await k.writeFile(u,n,{mode:384}),await k.writeFile(d,`#!/bin/sh
|
|
2
|
+
case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
|
|
3
|
+
`,{mode:448}));let f=n?{env:{...C.env,GIT_ASKPASS:d,CODER_GIT_TOKEN_FILE:u,GIT_TERMINAL_PROMPT:`0`}}:void 0;try{let e={...f,signal:i,maxBuffer:67108864};if(r)return await z(r,async()=>{if(!await k.stat(S.join(r,`.git`)).catch(()=>void 0)){let t=await k.mkdtemp(`${r}-clone-`);try{await N(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,t],e),await k.rename(t,r)}finally{await k.rm(t,{recursive:!0,force:!0})}}await N(`git`,[`-C`,r,`worktree`,`prune`,`--expire`,`now`],e),await N(`git`,[`-C`,r,`remote`,`set-url`,`origin`,a.cloneUrl],e),await N(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await N(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,a.ref],e),await N(`git`,[`-C`,r,`worktree`,`add`,`--detach`,o,`FETCH_HEAD`],e)}),o;await k.stat(S.join(o,`.git`)).then(()=>!0).catch(()=>!1)||await N(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,o],e),await N(`git`,[`-C`,o,`fetch`,`--depth`,`50`,`origin`,a.ref],e),await N(`git`,[`-C`,o,`checkout`,`--detach`,`FETCH_HEAD`],e),await N(`git`,[`-C`,o,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e)}finally{await k.rm(l,{recursive:!0,force:!0})}return o}function R(e){let t=e.event?.repo;if(t){if(![t.owner,t.name].every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e)))throw Error(`Invalid repository name`);return r(`checkouts`,new URL(t.cloneUrl).hostname,t.owner,t.name)}}async function z(e,t){await k.mkdir(S.dirname(e),{recursive:!0});let n=`${e}.lock`,r=await k.mkdtemp(`${n}-`),i=`${C.pid}-${E()}`,a=Date.now()+3e5,o=!1;try{for(await k.mkdir(S.join(r,i));;)try{await k.rename(r,n),o=!0;break}catch(e){if(![`EEXIST`,`ENOTEMPTY`].includes(e.code??``))throw e;for(let e of await k.readdir(n).catch(()=>[])){let t=Number(e.split(`-`)[0]);if(!(!Number.isInteger(t)||t<=0))try{C.kill(t,0)}catch(t){t.code===`ESRCH`&&await k.rmdir(S.join(n,e)).catch(()=>{})}}if(await k.rmdir(n).catch(()=>{}),Date.now()>=a)throw Error(`Repository cache lock timed out`);await new Promise(e=>setTimeout(e,100))}return await t()}finally{o?(await k.rmdir(S.join(n,i)),await k.rmdir(n).catch(()=>{})):await k.rm(r,{recursive:!0,force:!0})}}async function B(e){if(!(await k.stat(S.join(e,`.git`)).catch(()=>void 0))?.isFile())return;let t=await N(`git`,[`-C`,e,`rev-parse`,`--git-common-dir`]).catch(async t=>{if(await k.stat(S.join(e,`.git`)).catch(()=>void 0))throw t});if(!t)return;let{stdout:n}=t,r=S.resolve(e,n.trim());await z(S.dirname(r),async()=>{await k.stat(S.join(e,`.git`)).catch(()=>void 0)&&await N(`git`,[`--git-dir`,r,`worktree`,`remove`,`--force`,e])})}const V=1048576;async function H(e){let t={maxBuffer:67108864};await N(`git`,[`-C`,e,`add`,`--intent-to-add`,`--all`],t);let{stdout:n}=await N(`git`,[`-C`,e,`diff`,`HEAD`],t);return Buffer.byteLength(n)>V?`${Buffer.from(n).subarray(0,V).toString()}\n[diff truncated]`:n}async function U(e,t){delete C.env.CODER_SERVER,delete C.env.CODER_TASK_TOKEN,delete C.env.APP_TOKEN;for(let t of Object.keys(e.tokens))delete C.env[b(t)];let{CODEX_AUTH_JSON:n,[i]:r,...o}=e.credential.env;if(Object.assign(C.env,o),C.env[l]=JSON.stringify(e.config??{}),C.env.CODER_MCP_MODE=`cloud`,C.env.CODER_MCP_CONNECTION_ENV=JSON.stringify(a(e.connections??{})),!n)return;let s=await k.mkdtemp(S.join(t,`.codex-`));return await k.writeFile(S.join(s,`auth.json`),n,{mode:384}),C.env.CODEX_HOME=s,s}async function ee(e,t,n,r){if(!r)return;let i=await k.readFile(S.join(r,`auth.json`),`utf8`).catch(()=>``);i&&i!==n.credential.env.CODEX_AUTH_JSON&&await F(e.server,e.token,t,`/credential`,{method:`POST`,body:JSON.stringify({authJson:i})}).catch(()=>{}),await k.rm(r,{recursive:!0,force:!0})}const te=[[`bun.lock`,`bun`,[`install`,`--frozen-lockfile`]],[`bun.lockb`,`bun`,[`install`,`--frozen-lockfile`]],[`pnpm-lock.yaml`,`npx`,[`-y`,`pnpm`,`install`,`--frozen-lockfile`]],[`yarn.lock`,`npx`,[`-y`,`yarn`,`install`,`--frozen-lockfile`]],[`package-lock.json`,`npm`,[`ci`]]];async function W(e,t){let n=P(),r=await F(n.server,n.token,e),i=r.task.event;if(!i?.repo)throw Error(`The task has no repository`);let a=await L({...r.task,event:{...i,repo:{...i.repo,ref:i.repo.defaultBranch}}},t,r.tokens[i.integration]);for(let[e,t,n]of te)if(await k.stat(S.join(a,e)).catch(()=>void 0)){await N(t,n,{cwd:a,maxBuffer:67108864}).catch(()=>{});break}let o=(await N(`git`,[`-C`,a,`rev-parse`,`HEAD`])).stdout.trim();return console.log(`coder-snapshot ${o}`),{sha:o}}function ne(e,t,n){let r=new Set,i=h(S.join(e,`inbox-control`),{apply(e){let i=e.entry;if(e.task!==t||!Number.isInteger(i?.seq)||i.seq<0||!Number.isInteger(i.generation)||i.generation<0||![`steer`,`ask`,`approve`].includes(i.kind))throw Error(`Invalid engine inbox command`);let a=n(i);return r.add(a),a.finally(()=>r.delete(a)).catch(()=>{}),a}});return{close:async()=>{i(),await Promise.allSettled([...r])}}}function G(e,t,n){let r=p({task:t,generation:n.generation,seq:n.seq});return f(`apply`,{task:t,entry:n},{dir:S.join(e,`inbox-control`),id:r,keepReply:!0,timeoutMs:3e4})}async function K(e,n,r){let i={task:n.name?.slice(6)??n.id,generation:r.generation,seq:r.seq},a=S.join(t(e,n.id),`inbox-control`,`${p(i)}.transcript.jsonl`),o=await k.readFile(a,`utf8`).catch(e=>{if(e.code===`ENOENT`)return``;throw e});for(let e of o.split(`
|
|
4
|
+
`)){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}if(p(t.command)===p(i)&&Object.hasOwn(t,`result`))return t.result}let c=r.value;if(r.kind===`steer`){let t=String(c?.text??r.value??``);n.threadId?await _(e,n,t,{command:i}):s(e,n.id,t)}else if(r.kind===`ask`){let t=await y(e,n,String(c?.question??r.value??``),{command:i});return t.finalMessage??t.error?.message??``}else r.kind===`approve`&&m(t(e,n.id),String(c?.approvalId??c?.id??``),c?.decision===`deny`||c?.decision===`decline`?`decline`:`accept`);await k.mkdir(S.dirname(a),{recursive:!0}),await k.appendFile(a,JSON.stringify({command:i,result:null})+`
|
|
5
|
+
`)}async function q(e){for(let t=1;;t++)try{return await e()}catch(e){let n=e.status;if(n!==void 0&&n<500||t>=6)throw e;console.error(`coder runner: Coder server did not take the request, trying again: ${e instanceof Error?e.message:e}`),await new Promise(e=>setTimeout(e,1e3*2**(t-1)))}}async function J(e,t){let n=P(),r=await q(()=>F(n.server,n.token,e)).catch(async t=>{throw await F(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`failed`,error:t instanceof Error?t.message:String(t)})}).catch(()=>{}),t}),i=r.task.event,a=i&&r.tokens[i.integration],o=C.env.CODER_INBOX_MODE===`poll`;delete C.env.CODER_INBOX_MODE;let s=C.env.CODER_CHECKOUT_CACHE;delete C.env.CODER_CHECKOUT_CACHE;let c=await U(r,t),u=new AbortController,d=setTimeout(()=>u.abort(Error(`timeout`)),r.timeoutMs??18e5),f=setInterval(()=>{F(n.server,n.token,e,`/heartbeat`,{method:`POST`,signal:AbortSignal.timeout(1e4)}).catch(()=>{})},3e4),p,m=()=>ee(n,e,r,c),h=!1,g=async t=>{h=!0,await m(),await q(()=>F(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify(t)}))};try{return p=await Promise.race([L(r.task,t,a,s,u.signal),new Promise((e,t)=>u.signal.addEventListener(`abort`,()=>t(u.signal.reason),{once:!0}))]),u.signal.throwIfAborted(),await re(e,t,n,r,p,a,o,u.signal,m,g)}catch(e){throw h||await g({status:`failed`,error:e instanceof Error?e.message:String(e)}).catch(e=>console.error(`coder runner: result delivery failed`,e)),e}finally{clearTimeout(d),clearInterval(f);try{p&&await B(p)}finally{delete C.env[l],delete C.env.CODER_MCP_MODE,delete C.env.CODER_MCP_CONNECTION_ENV}}}async function re(e,r,i,a,s,l,f,p,m,h){let g=a.task.event,_=new AbortController,y,b,C=!1,w=await $({root:r,generation:a.generation,apply:async n=>{let r=y&&o(s,y);if(!r)throw Error(`The task is not ready`);if(n.kind===`cancel`){await v(s,r),C=!0,await B(),await m();return}return G(t(s,r.id),e,n)}}),T=w.ack().seq>=0?w.ack():void 0,E,D=()=>{if(E)return E;if(!T)return Promise.resolve();let t=T;return E=F(i.server,i.token,e,`/ack`,{method:`POST`,body:JSON.stringify(t),signal:_.signal}).then(()=>{T&&T.seq<=t.seq&&(T=void 0)}).catch(e=>{throw(e.status===401||e.status===403)&&(T=void 0),e}).finally(()=>{E=void 0}),E},O=async()=>{let t=await F(i.server,i.token,e,`/messages?after=${w.ack().seq}`,{signal:_.signal});try{t.length&&await w.apply(t)}finally{t.length&&w.ack().seq>=0&&(T=w.ack()),await D().catch(()=>{})}},A=setInterval(()=>{D().catch(()=>{})},1e3),j=u(S.join(r,`.runner-task.json`)),M,N=new Map,P=(a.logCursor??-1)+1,I=0,L=[],R,z=()=>{for(let e of N.values())for(let t of e()){if(I>=2097152)continue;let e=Buffer.byteLength(t)>65536?`A task log entry exceeded 64 KB`:t;L.push({seq:P++,at:Date.now(),level:`out`,line:e}),I+=Buffer.byteLength(e)}return R||(R=(async()=>{for(;L.length;){let t=0,n=L.slice(0,100).filter(e=>(t+=Buffer.byteLength(JSON.stringify(e)))<524288);if(!n.length)throw Error(`Task log batch is too large`);let r=!1;for(let t=0;t<3;t++)try{await F(i.server,i.token,e,`/logs`,{method:`POST`,signal:AbortSignal.timeout(5e3),body:JSON.stringify({entries:n})}),r=!0;break}catch(e){if(t===2)throw e;await new Promise(e=>setTimeout(e,1e3))}r&&L.splice(0,n.length)}})().finally(()=>{R=void 0}),R)},B=()=>z().catch(e=>{console.error(`coder runner: log delivery failed`,e)}),V,U;try{j?.generation!==a.generation&&await k.writeFile(S.join(r,`.runner-note`),a.task.context?.note??``,{mode:384});let c=x({cwd:s,...j?.generation===a.generation?{resumeTaskId:j.id}:{},noteFile:S.join(r,`.runner-note`),agent:a.task.agent,flow:a.task.flow,task:a.task,toolEnvironment:{tokens:{...a.tokens,...a.nativeTokens}},connections:a.connections,connectionEnv:a.connectionEnv,post:a.task.source===g?.integration,...l?{postToken:l}:{},onStart(e){b=e},async onTask(e){if(y=e,p.aborted){let t=o(s,e);throw t&&await v(s,t),p.reason}N.has(e)||N.set(e,d(S.join(t(s,e),`log.jsonl`))),z().catch(()=>{}),M??=setInterval(()=>{z().catch(()=>{})},1e3),n(S.join(r,`.runner-task.json`),{generation:a.generation,id:e}),await D().catch(()=>{}),await O().catch(()=>{}),clearInterval(V),f&&(V=setInterval(()=>{U||=O().catch(()=>{}).finally(()=>{U=void 0})},4e3))},onApproval(t){return F(i.server,i.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`waiting`,approval:t})})}}),u=await Promise.race([c,new Promise((e,t)=>{let n=()=>t(p.reason);p.addEventListener(`abort`,n,{once:!0}),p.aborted&&n()})]);for(await B();T;)p.throwIfAborted(),await D().catch(()=>{}),T&&await new Promise(e=>setTimeout(e,1e3));return await h({status:C?`cancelled`:u.ok?`completed`:`failed`,result:u.reply??u.result,tokens:u.tokens,...u.note===void 0?{}:{note:u.note},...s===r?{}:{diff:await H(s).catch(()=>void 0)}}),u}catch(n){if(p.aborted){b?.requestStop();let n=new Set([...y?[y]:[],...b?.runningIds()??[],...c(s).filter(t=>t.name===`agent:${e}`||b&&t.flowRunId===b.runId).map(e=>e.id)]);for(let e of n){N.has(e)||N.set(e,d(S.join(t(s,e),`log.jsonl`)));let n=o(s,e);n&&await v(s,n)}}throw await B(),n}finally{clearInterval(M),await R?.catch(()=>{}),clearInterval(A),clearInterval(V),_.abort(),await Promise.allSettled([U,E]),await w.close()}}const Y=`/tmp/coder-inbox.sock`,X=e=>S.join(D.tmpdir(),`coder-${T(`sha256`).update(e).digest(`hex`).slice(0,24)}.sock`);function Z(e,t){return new Promise((n,r)=>{let i=j.request({socketPath:e,path:`/messages`,method:`POST`,headers:{"content-type":`application/json`}},e=>{let t=``;e.on(`data`,e=>{t+=e}),e.on(`end`,()=>{if(e.statusCode!==200)return r(Error(`Task inbox answered ${e.statusCode}`));try{n(JSON.parse(t))}catch(e){r(e)}}),e.on(`error`,r)});i.setTimeout(1e4,()=>i.destroy(Error(`Task inbox timed out`))),i.on(`error`,r),i.end(JSON.stringify({entries:t}))})}const Q=`const http=require('node:http');const req=http.request({socketPath:process.env.CODER_INBOX_SOCKET||'/tmp/coder-inbox.sock',path:'/messages',method:'POST',headers:{'content-type':'application/json'}},res=>{res.pipe(process.stdout);res.on('end',()=>{if(res.statusCode!==200)process.exitCode=1})});req.on('error',()=>{process.exitCode=1});req.setTimeout(10000,()=>req.destroy());req.end(JSON.stringify({entries:JSON.parse(process.env.CODER_INBOX_MESSAGES)}));`;async function $(e){let t=S.join(e.root,`.runner-inbox.json`),r=u(t),i=r?.generation===e.generation?r:{generation:e.generation,seq:-1,answers:[]},a=Promise.resolve(),o=r=>{let o=async()=>{if(!Array.isArray(r)||r.some(t=>!Number.isInteger(t.seq)||t.seq<0||t.generation!==e.generation||![`steer`,`ask`,`approve`,`cancel`].includes(t.kind)))throw Error(`Invalid task messages`);for(let a of[...r].sort((e,t)=>e.seq-t.seq)){if(a.seq<=i.seq)continue;let r=await e.apply(a),o={generation:e.generation,seq:a.seq,answers:[...i.answers??[],...a.kind===`ask`?[{seq:a.seq,value:r}]:[]]};n(t,o),i=o}return i},s=a.then(o,o);return a=s.then(()=>{},()=>{}),s},s=e.socketPath??C.env.CODER_INBOX_SOCKET??X(e.root);if(await k.lstat(s).then(()=>!0,()=>!1)){if(!await new Promise((e,t)=>{let n=O.connect(s);n.once(`connect`,()=>{n.destroy(),e(!1)}),n.once(`error`,n=>n.code===`ECONNREFUSED`?e(!0):t(n))}))throw Error(`The task inbox is already running`);await k.unlink(s)}let c=j.createServer(async(e,t)=>{if(e.method!==`POST`||e.url!==`/messages`){t.writeHead(404).end();return}let n=``;try{for await(let t of e)if(n+=t,Buffer.byteLength(n)>1048576)throw Error(`Messages too large`);let r=await o(JSON.parse(n).entries);t.writeHead(200,{"content-type":`application/json`}).end(JSON.stringify(r))}catch{t.writeHead(409).end()}});return await k.mkdir(e.root,{recursive:!0}),await new Promise((e,t)=>{c.once(`error`,t),c.listen(s,e)}),await k.chmod(s,384),{apply:o,ack:()=>i,close:async()=>{await a,await new Promise(e=>c.close(()=>e()))}}}export{X as a,J as c,M as d,z as f,R as i,Z as l,Y as n,W as o,K as r,B as s,Q as t,P as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{Ct as t,K as n,Nt as r,Pt as i,Y as a,at as o,ct as s,fn as c,ht as l,jt as u,mt as d,ot as f,pt as p,st as m,tt as h,wn as g,y as _}from"./config-D2FxHWwi.js";import{H as v,a as y,b,h as ee,i as x,m as S,p as C,r as w,s as T,t as E,u as D}from"./dispatch-D3Dqxijf.js";import{n as O}from"./remote-oQs6My_3.js";import{a as k,c as A,i as j,l as M,n as N,r as P,u as F}from"./actions-5TDwmn_z.js";import I from"node:path";import L from"node:process";var R=e({tasks:()=>$});function z(e){return{cwd:e.cwd?I.resolve(e.cwd):L.cwd(),...e.server===void 0?{}:{api:O(e)}}}function B(e,t){let n=h(e,t);if(n)return n;throw new v(`invalid-option`,t?`No task found for "${t}".`:`No tasks found for this workspace.`,{hint:t?[`List tasks: coder task list`,`Start one: coder run "<text>"`]:[`Start one: coder run "<text>"`]})}async function V(e,t){if(t)return e.tasks.get(t);let[n]=await e.tasks.list({limit:1});if(!n)throw new v(`server`,`No server tasks found.`);return n}function H(e){throw new v(`invalid-option`,`Missing task id.`,{hint:e})}async function U(e,t={}){if(t.outputSchema!==void 0&&(!t.outputSchema||typeof t.outputSchema!=`object`||Array.isArray(t.outputSchema)))throw new v(`invalid-option`,`outputSchema must be an object.`);let{cwd:n,api:r}=z(t);if(r){let n=await r.tasks.create({source:`cli`,prompt:e,...t.cwd?{cwd:t.cwd}:{},...t.outputSchema?{outputSchema:t.outputSchema}:{},...t.repo?{repo:t.repo}:{},...t.agent?{agent:t.agent}:{},...t.engine?{engine:t.engine}:{},...t.model?{model:t.model}:{},...t.effort?{effort:t.effort}:{},...t.permissions?{permissions:t.permissions}:{},...t.runner?{runner:t.runner}:{},...t.mcp?{mcp:t.mcp.split(`,`).map(e=>e.trim())}:{},...t.connections?{connections:t.connections}:{}});return t.wait?r.tasks.wait(n.task.id,{onLog:t.onLog}):n}let i=t.agent?await(await import(`./exec-BsXFIdTl.js`).then(e=>e.i)).agentTaskOptions(n,t.agent,t.mcp,void 0,t.connections):void 0,a=i?.connected??await c(t.connections);for(let e of a.warnings)t.onNote?.(e);let o=i??D(t.mcp,_(n).mcp,{},a.mcp),s={prompt:e,outputSchema:t.outputSchema,cwd:n,engine:t.engine??i?.engine,model:t.model??(t.engine?void 0:i?.model),effort:t.effort??(t.engine?void 0:i?.effort),permissions:t.permissions??i?.permissions,name:t.name,system:t.system??i?.system,wait:t.wait,simulateApproval:t.simulateApproval,addDirs:t.addDirs,...t.agent?{agentId:t.agent}:{},mcp:o.mcp,mcpBindings:o.mcpBindings,mcpWarnings:o.warnings,connectionEnv:a.env,connections:a.ids,nativeMcp:o.nativeMcp,...t.onFallback?{onFallback:t.onFallback}:{},...t.onNote?{onNote:t.onNote}:{}},l=await w(s);if(!t.wait){let e=l.taskId;return{taskId:e,status:l.task.status,startupCheck:l.startupCheck,commands:{result:`coder task result ${e} --wait`,steer:`coder task steer ${e} "<follow-up>"`,stop:`coder task stop ${e}`,list:`coder task list`}}}for(;;){let r=l.taskId;t.onWaiting?.(r);let{task:i,result:a}=await S(n,r),o=a?.error?.message??``;if(i.status===`failed`&&x(i.permissions??`auto`,o))throw new v(`read-only-unavailable`,o);if(i.status===`failed`&&y(o)){let r=_(n).chain,a=r[r.indexOf(l.engine)+1];if(!a)throw new v(`chain-exhausted`,o,{payload:E(l.engine,o,i.permissions??`auto`,t.system,e)});t.onFallback?.({engine:l.engine,detail:o,next:a}),l=await w({...s,engine:a,model:void 0,effort:void 0,name:void 0,simulateApproval:void 0});continue}return{taskId:r,status:i.status,finalMessage:a?.finalMessage,...o?{error:o}:{},tokens:a?.tokens??null,model:a?.model??i.model??null}}}async function W(e,i={}){let{cwd:a,api:s}=z(i);if(s){let t=await V(s,e);return i.wait?s.tasks.wait(t.task.id):t}let c=B(a,e);if(i.wait){r.includes(c.status)&&i.onWaiting?.(c.id);let e=await C(a,c);if(c=e.task,e.reason===`approval`)throw new v(`approval-pending`,`Approval needed for task ${c.id}: ${e.approval.summary}`,{taskId:c.id,approval:e.approval})}let{steps:l,result:u}=T(a,c.id,{tail:i.tail}),f=b(t(a,c.id)).filter(e=>!e.response),m=r.includes(c.status),h=m?o(a,c):c.updatedAt,g=n(h);return{taskId:c.id,status:m&&f.length?`waiting-approval`:c.status,task:c,result:u,steps:l,turns:d(a,c.id),pendingApprovals:f.map(e=>({id:e.id,summary:e.summary,cwd:e.cwd??null})),...m?{idleMs:g,lastActivityAt:h??null,stalled:f.length===0&&g>6e5,lastLog:p(a,c.id,1)[0],liveTokens:p(a,c.id,200).reverse().find(e=>e.kind===`usage`&&String(e.at??``)>=(c.resumedAt??``))?.tokens??null}:{}}}async function G(e={}){let{cwd:a,api:s}=z(e);if(s){let t=await s.tasks.list({status:e.running?`running`:void 0,limit:e.limit===`all`?200:e.limit,archived:e.archived});return e.stopped?t.filter(e=>i.includes(e.status)):t}let{tasks:c,clipped:l}=j(a,{...e,dir:e.dir??e.cwd}),u=c.map(e=>{let i=r.includes(e.status)?b(t(a,e.id)).filter(e=>!e.response).length:0;return{taskId:e.id,status:i?`waiting-approval`:e.status,pendingApprovals:i,engine:e.engine??null,model:e.model??null,effort:e.effort??null,name:e.name??null,cwd:e.cwd??null,prompt:String(e.prompt??``).replace(/\s+/g,` `).trim().slice(0,80),updatedAt:e.updatedAt,archived:e.archived??!1,flowRunId:e.flowRunId??null,idleMs:r.includes(e.status)?n(o(a,e)):null}}),d=!u.length&&!e.archived?f(a,{migrate:!1}).length:0;return Object.assign(u,{clipped:l,archived:d})}async function*K(e,t){let n=-1;for(;;){let r=await e.tasks.get(t);for(let r of await e.tasks.logs(t,n))n=r.seq,yield r;if(i.includes(r.status))return;await new Promise(e=>setTimeout(e,1e3))}}async function q(e,n={}){let{cwd:r,api:i}=z(n);if(i){let t=await V(i,e);return{task:t,events:K(i,t.task.id),final:()=>i.tasks.get(t.task.id)}}let a=B(r,e);return{task:a,events:F(r,a.id,{tail:n.tail}),async final(){let e=l(r,s(r,a.id)??a),n=g(I.join(t(r,a.id),`result.json`));return{taskId:a.id,status:e.status,result:n,task:e}}}}async function J(e,n,r={}){let{cwd:i,api:a}=z(r);if(a){let t=await a.tasks.steer(e,n,{...r.model?{model:r.model}:{},...r.effort?{effort:r.effort}:{},...r.permissions?{permissions:r.permissions}:{}});return r.wait?a.tasks.wait(e):t}let o=await A(i,B(i,e),n,{model:r.model,effort:r.effort,permissions:r.permissions});if(!r.wait||o.steered===`queued`)return o;let c=s(i,o.taskId),l=c?await u(i,c):null,d=g(I.join(t(i,o.taskId),`result.json`));return{...o,status:l?.status??null,finalMessage:d?.finalMessage??null}}async function Y(e,t,n={}){let{cwd:r,api:i}=z(n);if(i)return i.tasks.ask(e,t);let a=B(r,e);n.onAsking?.(a.id);let o=await N(r,a,t,{model:n.model,effort:n.effort});return{taskId:a.id,answer:o.finalMessage||null,...o.error?{error:o.error.message}:{},ok:o.status===0}}async function X(e,n={}){let{cwd:r,api:i}=z(n);if(i)return(e?[await i.tasks.get(e)]:await i.tasks.list({limit:200})).flatMap(e=>e.approval?[{taskId:e.task.id,...e.approval}]:[]);if(!e)return P(r);let a=B(r,e);return b(t(r,a.id)).map(e=>({taskId:a.id,id:e.id,summary:e.summary,cwd:e.cwd??null,createdAt:e.createdAt,answered:e.response?.decision??null}))}async function Z(e,n,r={}){let{cwd:i,api:a}=z(r),o=r.deny?`decline`:`accept`;if(a){if(!e||!n)throw new v(`invalid-option`,`Server approvals need a task id and approval id.`,{hint:`Usage: coder task approve <task-id> <approval-id> --server <url>`});return a.tasks.approve(e,n,o)}if(e&&!n&&e.startsWith(`apr-`)&&(n=e,e=P(i).find(e=>e.id===n)?.taskId,!e))throw new v(`invalid-option`,`No pending approval "${n}".`,{hint:`List them: coder task approvals`});if(!e||!n)throw new v(`invalid-option`,`Missing approval id.`,{hint:[`List them: coder task approvals`,`Usage: coder task approve [task-id] <approval-id> [--deny]`]});let s=B(i,e);return ee(t(i,s.id),n,o),{taskId:s.id,approvalId:n,decision:o}}async function Q(e,t={}){let{cwd:n,api:r}=z(t);if(r)return r.tasks.cancel(e??H([]));let i=B(n,e),{interrupt:a}=await M(n,i);return{taskId:i.id,status:`cancelled`,interrupt:a}}async function te(e,t={}){let{cwd:n,api:r}=z(t);if(r){let n=t.allStopped?(await r.tasks.list({limit:200})).filter(e=>i.includes(e.status)).map(e=>e.task.id):[e??H([])];return await Promise.all(n.map(e=>r.tasks.archive(e))),{archived:n,count:n.length}}if(t.allStopped){let e=m(n).filter(e=>i.includes(e.status));for(let t of e)a(n,t);return{archived:e.map(e=>e.id),count:e.length}}e||H([`Archive one: coder task archive <task-id>`,`Archive all stopped: coder task archive --all-stopped`]);let o=B(n,e);return a(n,o),{taskId:o.id,archived:!0}}async function ne(e,t={}){let{cwd:n,api:r}=z(t);if(r){let n=t.allArchived?(await r.tasks.list({limit:200,archived:!0})).map(e=>e.task.id):[e??H([])];return await Promise.all(n.map(e=>r.tasks.delete(e))),{deleted:n,count:n.length}}if(t.allArchived){let e=f(n).filter(e=>k(n,e)).map(e=>e.id);return{deleted:e,count:e.length}}e||H([`Delete one: coder task delete <task-id>`,`Delete all archived: coder task delete --all-archived`]);let i=B(n,e);if(i.status===`running`)throw new v(`invalid-option`,`Task ${i.id} is still running.`,{hint:`Stop it first: coder task stop ${i.id}`});return k(n,i),{taskId:i.id,deleted:!0}}async function*re(e,t={}){yield*(await q(e,t)).events}const $={run:U,result:W,list:G,watch:q,stream:re,steer:J,ask:Y,approvals:X,approve:Z,stop:Q,archive:te,delete:ne};export{$ as n,R as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{H as e}from"./dispatch-D3Dqxijf.js";import{i as t,t as n}from"./cli-ZUdhZnuW.js";import{runnerOptions as r}from"./remove-BZCA-gdU.js";import i from"node:process";const a=t({name:`runner test`,globalFlags:{cwd:!1},args:1,help:{usage:`coder runner test <id> [--server [url]] [--json]`,summary:`Check the runner connection.`,flags:[n]},options:r,async run({options:t,args:[n]}){if(!n)throw new e(`invalid-option`,`Missing runner id.`);let{testRunner:r}=await import(`./runner-DME7ohjt.js`).then(e=>e.a);return r(n,t)},print:e=>i.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)});export{a as commandRunnerTest};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./cli-ZUdhZnuW.js";import{n as t}from"./mcp-server-DGzme0YX.js";import n from"node:process";const r=e({name:`agent tools`,options:{},args:1,async run({args:e}){let{INTEGRATIONS:r}=await import(`./integrations-D3OgJk6Y.js`).then(e=>e.r),{agentTools:i}=await import(`./mcp-YhyTUMIM.js`).then(e=>e.n),a=e[0]??``,o=(n.env.CODER_AGENT_TOOLS??``).split(`,`).filter(Boolean),s=i(a,o);if(!s)throw Error(`Unknown tool set "${a}"; known: ${[...Object.keys(r).filter(e=>r[e].tools.serve),`note`].join(`, `)}`);let c=n.env.APP_TOKEN??``;if(!c&&a!==`note`)throw Error(`APP_TOKEN is not set`);let l=n.env.CODER_AGENT_SCOPE?JSON.parse(n.env.CODER_AGENT_SCOPE):void 0;await t(`coder-${a}`,s,{token:c,fetch,tools:o,...l?{scope:l}:{}})}});export{r as commandTools};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";var t=e({PRESETS:()=>n});const n=[`observe`,`comment`,`write`];export{t as n,n as t};
|