@wular/coder 0.4.9 → 0.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions-C3Mgpl9J.js +2 -0
- package/dist/adapter-BeezVK-B.js +1 -0
- package/dist/{adapter-YCvP9H2n.js → adapter-ChaISKgI.js} +42 -42
- package/dist/{adapter-B2RXnvqt.js → adapter-MD6ahqPR.js} +6 -6
- package/dist/{add-CvBTpxgY.js → add-B26QSwPY.js} +2 -2
- package/dist/add-BbXuvqj1.js +1 -0
- package/dist/add-Bk8drM-8.js +1 -0
- package/dist/add-CD_L-WW8.js +2 -0
- package/dist/agent-B8ItyuHN.js +8 -0
- package/dist/{agent-vYm7Geh-.js → agent-DHpMqHVi.js} +1 -1
- package/dist/alias-CScCzXhS.js +2 -0
- package/dist/{app-CJPFaLIV.js → app-wHQJHu6N.js} +1 -1
- package/dist/approvals-BIGQBbCM.js +2 -0
- package/dist/{approve-CBuGu3du.js → approve-BnZ3v-3c.js} +1 -1
- package/dist/approve-DFSy7Z72.js +2 -0
- package/dist/apps-6BgpUsFh.js +372 -0
- package/dist/archive-CU0nhUeJ.js +4 -0
- package/dist/{archive-C89Z4kSx.js → archive-CY2lvp_c.js} +2 -2
- package/dist/args-BekfmD9t.js +1 -0
- package/dist/ask-CLDgHB_Y.js +4 -0
- package/dist/auth-C3KrIUf1.js +1 -0
- package/dist/auth-CGeSfgNb.js +1 -0
- package/dist/builtin/coder/agent.json +5 -9
- package/dist/chat-AbW-LOHo.js +13 -0
- package/dist/chat-bridge-WK-pKNfw.js +2 -0
- package/dist/chat-bwKd3y6V.js +1 -0
- package/dist/cli-Fp28pM4Y.js +9 -0
- package/dist/cli.js +1 -1
- package/dist/client-DzwzCsue.js +22 -0
- package/dist/config-DoVedq6T.js +3 -0
- package/dist/{connection-BtUZA2St.js → connection-5V8doFL7.js} +1 -1
- package/dist/connection-Cb0TK201.js +1 -0
- package/dist/conversation-DT-35cEt.js +1 -0
- package/dist/create-CrjRdQip.js +1 -0
- package/dist/credentials-DoL9w8D1.js +1 -0
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1317 -1303
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.8e150ef2bc6a5f4e.js → index.843431e3538fd9a4.js} +7 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{defaults.e6ce0944639198a2.js → defaults.1b615366c56838a1.js} +27 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/event-prompt.87f064ca0141e796.js +30 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.871cbff2605b5cfd.js → log-view.60308a11f7001eb7.js} +10 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.4f942c7f68b2e273.js → load.7ae462ef36271be8.js} +15 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{types.9f59e6c761d6aac4.js → types.79f9092cdb5a00d1.js} +4 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.a2a16ead424b2185.js → page.806027fde54ab723.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.90e312759b87cfa2.js → page.bd04d2d3eba00676.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.787d09fb0b2b6b57.js → loading.e348ec45e9ed951b.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.5fc5e4346dcbfc32.js → notify.857748e260c691e3.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.1641da62504df30a.js → page.25153459858542f9.js} +9 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.5dac3bf780c74354.js → sign-out.ff98573f362d76f3.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.f1dacbfebc27a656.js → agent-menu.2ed0e66d131fc148.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.5da78e9a741b028a.js → agents-grid.8efd14bc39281da9.js} +22 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{connect-apps.722bc3e4ec1f9fad.js → connect-apps.d1e67db29b12dc0a.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.2815a010098aa676.js → loading.fac1132ad9c4248e.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.b01992337eeca2dc.js → page.0f7d5e3e42462870.js} +15 -20
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.8aeb0fddffe22ad5.js → layout.05210ffa6038791f.js} +19 -19
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{loading.50692149df9abb28.js → loading.388aeaf0c2edf8f8.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.e2e23101c05b9548.js → page.19fe116c0f802cb1.js} +80 -30
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.31d2c13229ae9222.js → loading.4da9e2ba3fea937f.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.11c7b50d6119efe6.js → page.f87fd8eb66f73af0.js} +37 -30
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.92ac7aa258e706a4.js → platform-actions.b6c3d3184e167d0b.js} +68 -41
- 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 → agent-settings-form.28220621573033d7.js} +47 -72
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.bf17bd39f41db826.js → loading.ad1a4c9b000d269a.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.6e95dfe07dfebf4b.js → page.2f7467868f599ebc.js} +15 -21
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.7b17368ee81275ab.js → loading.ec94096015346f2c.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.0bd3da9b3227b12f.js → page.a92a36a8ce21088c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.d2cc33cf044a92a3.js → loading.8f998a9c511e1fb3.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.91c43fbc54e37646.js → page.8935a5fe5c08bcf1.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.23e4131cdf71daa5.js → versions-list.5b97ab6d40e2e639.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.47c4c8f31b4f17cc.js → loading.bedcc1aba372fbce.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.cbd2bad8fede6fef.js → page.14760e9eedd6ff8e.js} +13 -24
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.d8e785c45f5410a6.js → agent-pills.f987c12bcbc5c850.js} +13 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.a6e27ac4171bfdb0.js → agent-toggle.a6ee8bd882178e29.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.96bdca9762ff3e2e.js → hero.8be1dd4ea3ed6e17.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{instructions.ca0c09d4849bfc30.js → instructions.85b1cd986a9edbb5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.258f6c2c5f1b1b17.js → connect-repositories.59d89152fe845af2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.20c42102ed262db7.js → editor.77f68d431408745b.js} +36 -76
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.b8093a7ca97656a5.js → import-picker.a7b01817a821819a.js} +15 -16
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.6012b36c10c68657.js → loading.ee001af7a96e3972.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.1ebdb0247922fc14.js → page.c4570fd80bdda68c.js} +11 -19
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.6d2242d49ae9dd35.js → layout.19006c2d7dc8d114.js} +13 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.a56516bc0ba79187.js → operator-apps.d350a52d27f69fa6.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.af19494c89ac62c0.js → page.4a652f5080c2b863.js} +8 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.c720853404d94114.js → page.d39f7a1719f50c6d.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.9b96914a4fa4e2a9.js → connections-list.ff7e1dadcd4df17f.js} +36 -31
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.dbaa8f3d82445b90.js → credentials-list.87a1f8ab71eb4bed.js} +204 -240
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.c4b01484d183549d.js → credentials.a535c9c6dd8b4cdf.js} +10 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.5c03e83663a6a9b7.js → engines-list.29fffd07c1c3b771.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.df5ee5d74bec0f5b.js → list.0c87d55cf4ef382c.js} +43 -33
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{loading.480b8f915bae18c1.js → loading.7ca95dcb4fb3362b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.2835a48d1edeb6d1.js → models-list.6fea9faddb8300bb.js} +147 -137
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.1d53415d55e77fee.js → page.295245052b93af90.js} +23 -23
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.bf5746f48e3f78f5.js → runners-list.a4a38e54d834a1ec.js} +18 -19
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.b0dedc1567efc09f.js → secrets-list.50f487766f87383c.js} +23 -15
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.567d27e39d42d719.js → layout.c42e0ab39cb2c0e0.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.2eacf7f8ac0032df.js → model-options.a96c11d11674f598.js} +13 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.bac05d6e87953d0e.js → page.6997506eaa1a4824.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.5e2dff2550b3b73e.js → settings-head.bbc7ced8dd5491eb.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{tunnel-guide.d6fae1c5d62f2c74.js → tunnel-guide.29eee1a0b1852168.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.03989d2f7585a045.js → create-link.9458b49dc99bbaaa.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.4debc1a8c644df4b.js → outcome-dialog.894c73f9abee3ce1.js} +5 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.43c969f59a710781.js → page.77e402bb6e8e7f7e.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.3755ae6065c3fc28.js → activity.fcda6f18c8207c99.js} +22 -27
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.9efbed6531879838.js → loading.56520888d5270b88.js} +6 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.7b92dcd08095b934.js → page.d0f039221a27b8ef.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.62422b873f98ee8e.js → task-actions.f5f2016d2dc7f422.js} +14 -12
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.ae0e9c9dffe0ff9f.js → task-view.a292baa2410cdf64.js} +129 -66
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.ff108c0ef82a4d7b.js → composer-data.309a194fc7fa34be.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.fdad306647cbaa59.js → composer.2d4122eb33addbdd.js} +29 -41
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.af5001e51d2f612b.js → task.a0c68180db5fb4c1.js} +26 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.952f37a9486aebe7.js → tasks-list.021bdc2f3d90af2d.js} +34 -31
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.1247d4765d0e1bdc.js → tasks-section.13f64b0836ae406b.js} +10 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.cf74c55e6528c7c9.js → page.b78f0df100410db0.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{custom-range.2d55812ec086b540.js → custom-range.2e21c7f891966c15.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{day-chart.08d378cca93d3ab1.js → day-chart.261b6651df2d3966.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.7aed78a276b08a4f.js → loading.97d277dbab9c15cf.js} +4 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{metric.ada350d2b7449b39.js → metric.5ff3636065481c44.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.fed9345ebac3e1b3.js → page.93c2306069c03c68.js} +11 -18
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.b1296c2378128472.js → range-bar.2197d8f43216d104.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{top-agents.e215d44e00192271.js → top-agents.18fc469e781e2305.js} +6 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.b7e3af142b17941b.js → layout.185dbc99875e208a.js} +11 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.226544940a39fd3a.js → page.a82be2fd23e9ac67.js} +2 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/zone.0515a688ee5ff6ca.js +17 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.8287e5a02144e4f1.js → drawer.d3e61538dbc8ec39.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.86f0cc228353da6e.js → foreign-link.1f4217895ff1e835.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/heads.37e35439c02fc636.js +16 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.0c6ac62ff3ccf38a.js → loading-card.cc76fc9708142525.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.bd54e52ac4a7a89c.js → page-head.85f15db7b648d48c.js} +4 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.1cc355a530dcc5e3.js → stream.95a2468086aceb84.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.63f673632770924d.js → task-toasts.e1a484113e1df660.js} +11 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.5f59814a635caeec.js → theme-choices.85100ed66d6f9200.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.5681714d0cf45454.js → back.180765bdadf6d602.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.4d84ad0ac340fbe2.js → org.572ad93c7707ab27.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.249400957d6a7527.js → side-toggle.489faf1a259479f7.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{badge.0851f234f300c694.js → badge.c0bc352791a95fd6.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{button.983daea9e687fc5d.js → button.ce9e6cdb08ca86db.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.c08471eaa0bc1cec.js → card.9f0d45b73bc78b4f.js} +9 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.762eba56417214ca.js → collapse.93e4d1b20c2873ed.js} +13 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.efb84f0cca771948.js → combo.54270c0251466fda.js} +3 -22
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.53edc755945b0563.js → confirm.c1281f9b12854210.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.0b23d7dc05757df5.js → copy.bd6fc1577a393965.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.1983b85dd0679af6.js → filter.3a452a262f040973.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.a34176f37808cd66.js → icons.e36c72f54750663a.js} +0 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu-items.a8e580a0c90631ff.js → menu-items.1d082ac4dae8f3d4.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.a41edd5cde1c90cf.js → menu.ee45bace979944b6.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.b5f74ebf59590fa6.js → modal.25d53e5b41b9c4e5.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.36c6f21ce6aa720f.js → select.2eb33e5bea28d804.js} +28 -23
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.a8a951c757376590.js → tail.04132db0c5033d4f.js} +4 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.9621ef221a896a8e.js → toolbar.24036899654de6df.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.1a6356d5b722cafb.js → action.968bcab0f5e3665d.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.d25e6dcc6704eb60.js → client.189224c16057d7a1.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/follow.bfb9bcff3c1366d7.js +32 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{format.6a7d1beaf4d09d9c.js → format.ceeaafa10a0563f3.js} +1 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{paged.18f5872fc5aebe96.js → paged.0e54c3044f8ca567.js} +1 -7
- package/dist/dash/standalone/static/assets/chunks/action-410bdc82c416bc01.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/agent-pills-0c0b8d40b9bfc78f.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-5a2601316e2ab283.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{agent-toggle-b2f2c22e63dedc1f.js → agent-toggle-5ede0c449e88cb9d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/agents-grid-ffb18df48e951ecb.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{back-1d1b062f0e1b29b7.js → back-602db2cfdccf2e7f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/combo-df2685e277db02c0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-08e49d49c0c3ee94.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-data-5fed6c271a4791ca.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-e1cefed81ea89b7e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{confirm-1cb4d8df3974f34a.js → confirm-d163e6865d66dfab.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-ce3c9d049ebad459.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-995d55b3f166337d.js → connect-repositories-0aa9abc77b9c3d48.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-6eddeb8583ded10f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{copy-c938369a1bfe75fd.js → copy-0cc00656953531be.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-bc365f8dfe88e6b3.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/credentials-list-1b6a81e9b4934dc8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{custom-range-4eeb710748887f3a.js → custom-range-cae5567874db83ca.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/defaults-52f30e83d7666f7a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/editor-d55d247a1d7de5f0.js +6 -0
- package/dist/dash/standalone/static/assets/chunks/engines-list-288559344de4d4b9.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{field-657227821326b5b3.js → field-693bb870ad0bdee8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/format-a27067f0186e78ac.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-3f18e035338b0d0b.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/instructions-a3d7688e421f2a08.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/list-2a59237cb7cb0a7c.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/model-options-8d2170eebe0d061d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/models-list-5ed9ee02f9b66d98.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{notice-cd32ca98bbc10844.js → notice-7d84ffab32ff24ca.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-3cffe3507ea92af2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-f6fb8c69efa66508.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-4dc31567d00c4cb2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-ecd7200f7749c258.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/runners-list-984246a8f9450da1.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runtime-e8b9eb1e537215ed-1.js → runtime-6e12333f12903a62-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-88f8b30abbab52f0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{segmented-24da438244eedc8f.js → segmented-79c9c69b702e0b90.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-962398d15ee67c92.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-ae95a674d381c095.js +2 -0
- package/dist/dash/standalone/static/assets/chunks/side-toggle-7ada95cc7601eb49.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/tail-99e29a541a072002.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-95daa40d39de664f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-actions-1cdca1e8d3eee490.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/task-view-fdcde0e31f63b737.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/tasks-list-3ad1c93deff4fb2e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/types-3eca2c7f47c46054.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{versions-list-31f31eb1923a0ded.js → versions-list-60ac4d8f715bf5f7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-e8b9eb1e537215ed-0.js → wular-pnext-6e12333f12903a62-0.js} +1 -1
- package/dist/dash/standalone/static/assets/create-param-id-da3f7e20689fe51a.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-account-3f646d473e3bd795.css → dash-param-org-account-9471bec93c444232.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-64500e78caae32df.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-c067c22928a2d7cc.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-9dec87710e04f949.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-779c474301e04440.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-c7d594b5232630c2.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-a80e62570716fdb9.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-ce278252012297b9.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-d3b6d701eb8e1403.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-67f7811b1343c064.css → dash-param-org-bcfa3de29341d5ba.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-operator-b7bc6447cc27c9ce.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-settings-a851a659784d94b5.css → dash-param-org-settings-6d6902345d88a687.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-85c7af9a89eef06e.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-setup-1b708aa5bb2f83ef.css → dash-param-org-setup-173efecd7b990c2e.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-ae0bc03f468e63cc.css +1 -0
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-7325d8cff5be3592.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-operator-56742192a9aafc19.css → dash-param-org-usage-517b2a7ae462ac57.css} +1 -1
- package/dist/dash/standalone/static/assets/global-87e1762113874559.css +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-0b3b70f1aefb9947.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-0d90849808b6eb05.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-12faa1754e3ef3be.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-23384b239b81a761.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-23e200dd9b7a79c0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2562299eef46e62c.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-3a4ada64991e6a40.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-71e7ecdfcf86be84.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-726c29bbb81054c0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-825e9f5b63950ef4.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-894cff70289fb7a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-8f96a4b8a00ff460.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-9bc9b14c08020649.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-ab36b406301fd2a4.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-b8c585cae8da7778.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-bab4305b41abb15a.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-bd80926822b3993d.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-cd4c7b4318fa1846.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-db55344d00b7888f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-eddcd5df2b28120f.js +1 -0
- package/dist/default-tTTSBdXq.js +1 -0
- package/dist/delete-DM2sA12f.js +2 -0
- package/dist/{delete-DS6P_fun.js → delete-DR37NTr1.js} +2 -2
- package/dist/disable-Dz_zLPX5.js +1 -0
- package/dist/{discover-pKrMDvpW.js → discover-CqabH4Fx.js} +2 -2
- package/dist/dispatch-BJZqI7sj.js +8 -0
- package/dist/{dist-C3wD7GfG.js → dist-B2jiMMxZ.js} +2 -2
- package/dist/{dist-DkATuPBB.js → dist-ClCNj65n.js} +2 -2
- package/dist/{dist-BTornX7Y.js → dist-DAnSqY1s.js} +2 -2
- package/dist/docs-BV9SC67g.js +2 -0
- package/dist/{docs-sFUXzJbk.js → docs-b2mAKC8Z.js} +1 -1
- package/dist/drive-CU2HOCfR.js +1 -0
- package/dist/{enable-BWvDv7dP.js → enable-Cfeki-ne.js} +1 -1
- package/dist/env-DSddo-fz.js +1 -0
- package/dist/exec-DcWxZar6.js +3 -0
- package/dist/executor-LkokKTTd.js +11 -0
- package/dist/flow/builtin/review.d.ts +2 -2
- package/dist/flow/builtin/review.js +7 -14
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/flow-BQcdyrVK.js +1 -0
- package/dist/history-D_A5odLI.js +8 -0
- package/dist/http-CXaW1e7x.js +1 -0
- package/dist/init-DU_S43NG.js +1 -0
- package/dist/integrations-DPxWtNnS.js +2 -0
- package/dist/integrations-Dwvxl7i2.js +1 -0
- package/dist/lib/broker.js +2 -2
- package/dist/{list-BDpYPbJF.js → list-7yd9K7d8.js} +1 -1
- package/dist/list-BJ0j5eP9.js +4 -0
- package/dist/list-Boaz5b5n.js +2 -0
- package/dist/{list-CaFQOnfI.js → list-CIS-GYO1.js} +1 -1
- package/dist/list-CR0_Emod2.js +4 -0
- package/dist/list-CnHZriYt.js +3 -0
- package/dist/list-_EH6c041.js +1 -0
- package/dist/list-i2r3Nlyz.js +1 -0
- package/dist/load-C-GZnuok.js +2 -0
- package/dist/local-Fs-dx_dP.js +5 -0
- package/dist/log-view-CL3_S0IQ.js +3 -0
- package/dist/{login-CpHx_RCq.js → login-CzD2EMD_.js} +1 -1
- package/dist/login-DISw6--d.js +1 -0
- package/dist/{logout-zSQBDPCK.js → logout-DMnc5yri.js} +1 -1
- package/dist/{maintenance-DuIspk-y.js → maintenance-BVDuG9Hg.js} +1 -1
- package/dist/match-BfjPZ7gJ.js +1 -0
- package/dist/mcp-B-hy3eM-.js +11 -0
- package/dist/mcp-CbN-QcpF.js +1 -0
- package/dist/mcp-server-DQqSgD3P.js +1 -0
- package/dist/model-Ckyoyji3.js +1 -0
- package/dist/models-VaiIYlOW.js +1 -0
- package/dist/prompt-DQyPCLUo.js +8 -0
- package/dist/prompts-CEf7z4i_.js +77 -0
- package/dist/push-BNomfHJ3.js +1 -0
- package/dist/reconnect-Bd_jna1M.js +1 -0
- package/dist/refresh-D-broYEx.js +1 -0
- package/dist/remote-f-uny3XZ.js +3 -0
- package/dist/remove-CCYHc1FN.js +1 -0
- package/dist/remove-DMTz_c25.js +1 -0
- package/dist/remove-DdcQ-6by.js +1 -0
- package/dist/{remove-BcewhH1U.js → remove-VtavIuGm.js} +1 -1
- package/dist/rename-CKMyelWN.js +1 -0
- package/dist/{result-Bg557zR6.js → result-CH3_tVXO.js} +2 -2
- package/dist/result-DvOqIwhh.js +18 -0
- package/dist/{resume-fnx4FUQF.js → resume-6j3RUpqa.js} +2 -2
- package/dist/{review-CAHDqPq8.js → review-B4ETH5ki.js} +2 -2
- package/dist/{index-vd37q3fn.d.ts → review-DDYD3Yvq.d.ts} +173 -74
- package/dist/{rotate-key-Dpx_WmuU.js → rotate-key-Byk_wI73.js} +1 -1
- package/dist/run-DKJW7qwy.js +2 -0
- package/dist/run-DkYzyUnp.js +5 -0
- package/dist/run-LCE1XiyU.js +2 -0
- package/dist/runner-CxtzTgVq.js +1 -0
- package/dist/runner-Dnu1Vx_i.js +1 -0
- package/dist/runner.json +1 -0
- package/dist/runner.tgz +0 -0
- package/dist/runners-vsoGeyuc.js +36 -0
- package/dist/schema-Brm7WIKd.js +8 -0
- package/dist/schema.d.ts +2 -2
- package/dist/schema.js +1 -1
- package/dist/{sdk-CWerLcF5.d.ts → sdk-CKTCrtGe.d.ts} +660 -376
- package/dist/sdk.d.ts +4 -5
- package/dist/sdk.js +1 -1
- package/dist/serve-C1zag2nr.js +1 -0
- package/dist/{serve-w-9qRCP1.js → serve-C6tsUF0D.js} +2 -2
- package/dist/serve-CCxSxXgv.js +1 -0
- package/dist/serve-D8J-sEqm.js +12 -0
- package/dist/{server-Bw_YmgCf.js → server-B4SRYM2L.js} +1 -1
- package/dist/setup-host-EaP4GPKB.js +6 -0
- package/dist/show-CjUG_aIp.js +1 -0
- package/dist/show-xdsqD6de.js +1 -0
- package/dist/slack-Kpj-G9FE.js +5 -0
- package/dist/{status-PO1YXbt4.js → status-BxV_ITeF.js} +1 -1
- package/dist/steer-DZ3nkHfC.js +4 -0
- package/dist/{stop-CkvoZEAH.js → stop-DGTUYxd6.js} +2 -2
- package/dist/stop-qDw_DjOB.js +1 -0
- package/dist/task-C506SkPR.js +1 -0
- package/dist/task-CQmx_2SI.js +7 -0
- package/dist/task-Ls_-kcSx.js +1 -0
- package/dist/test-DF_qVK6S.js +1 -0
- package/dist/tools-S3eRQOVm.js +1 -0
- package/dist/{types-C1tWi5lP.d.ts → types-8zO5Tc9c.d.ts} +91 -26
- package/dist/{types-B42Oh0zF.js → types-D_xnfP7m.js} +1 -1
- package/dist/unalias-CklkAN1B.js +1 -0
- package/dist/update-CZaFjwOJ.js +2 -0
- package/dist/upgrade-CUhFmPhl.js +2 -0
- package/dist/usage-DTAlb2rC.js +1 -0
- package/dist/views-LmbLfqpu.js +5 -0
- package/dist/watch-CJruitc6.js +5 -0
- package/dist/watch-p0j69fVA.js +9 -0
- package/dist/wire-DshFMRsS.js +1 -0
- package/dist/worker-BHXjDzRp.js +1 -0
- package/dist/worker-nyRZuq4g.js +2 -0
- package/dist/{workflow-BKxG9OUk.js → workflow-CJJUiSfv.js} +1 -1
- package/docs/agents/coder.md +7 -7
- package/docs/agents/index.md +17 -19
- package/docs/agents/prompt.md +220 -0
- package/docs/cli.md +2 -2
- package/docs/config.md +5 -3
- package/docs/mcp.md +1 -1
- package/docs/review.md +1 -1
- package/docs/sdk.md +1 -1
- package/docs/self-host.md +7 -9
- package/package.json +2 -1
- package/dist/actions-5TDwmn_z.js +0 -20
- package/dist/adapter-sKt1J1Cm.js +0 -1
- package/dist/add-BftLUw05.js +0 -1
- package/dist/add-CXAGrCnC.js +0 -1
- package/dist/add-Ck_y_nKX.js +0 -2
- package/dist/agent-ChnedLBv.js +0 -8
- package/dist/alias-BpgVDY6_.js +0 -2
- package/dist/approvals-CE8dXZhE.js +0 -2
- package/dist/approve-dWW4qt76.js +0 -2
- package/dist/apps-B60OpAHX.js +0 -242
- package/dist/archive-CmRVm4iS.js +0 -4
- package/dist/archive-sweep-EiiXIqjr.js +0 -1
- package/dist/args-CxsMr9Un.js +0 -1
- package/dist/ask-Bou8zg-4.js +0 -4
- package/dist/auth-CImjIcG5.js +0 -1
- package/dist/auth-CWzSsiSC.js +0 -1
- package/dist/chat-Bbzlea60.js +0 -1
- package/dist/chat-Djps0Seg.js +0 -13
- package/dist/chat-bridge-CvspGKBc.js +0 -2
- package/dist/cli-ZUdhZnuW.js +0 -9
- package/dist/config-CF3_A3NX.js +0 -3
- package/dist/config-D2FxHWwi.js +0 -14
- package/dist/connection-BCRJHTgp.js +0 -1
- package/dist/create-Z0QxarzN.js +0 -1
- package/dist/credentials-Dt2uP3AQ.js +0 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/responsive.82549d958fae8f00.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/zone.dbc84f981415d8f7.js +0 -10
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/heads.20414ddcb2d08bcd.js +0 -51
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.15f7435f202831c3.css.pnext-asset.js +0 -0
- package/dist/dash/standalone/static/assets/chunks/action-977f2355e308d7d0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-pills-e75e6ac80d515ffc.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-09f23ed893d441c7.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agents-grid-bb4f3e4d38b2f459.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/combo-126d5709a0b3a5bd.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-6bf94d1087a6e6a6.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-9c1fe67a0de73997.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-32c169b6e00711ff.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connections-list-a102e909edff14d4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-a147953f343355ec.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/credentials-list-31e0fbc1ef0d003e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/defaults-dcc0eccad4e8585b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/editor-79560c0f91cfc2f6.js +0 -7
- package/dist/dash/standalone/static/assets/chunks/engines-list-d22f50040e6842ae.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/format-b19b8eec331414f4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-a08bb02650dedb8d.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/instructions-a1f10bc3c2866e3f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/list-a0cc9bdb05fc71d4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-3a57918eaa4a2a82.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/models-list-63ab774de3bf3788.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-4ab62d613bee243a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-40824017c7b5b910.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-a515643f341df568.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/runners-list-a9f4f71695f7b376.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/secrets-list-34e09c332363564c.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-02aaa49ed4606a76.js +0 -2
- package/dist/dash/standalone/static/assets/chunks/shared-init-03e620f936463465.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/shared-init-6f8c76316a2cd9da.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-e8b9eb1e537215ed-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8563e6056e862225.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/tail-ebdefca4d5c23266.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-6ae2bb4f1b384140.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-actions-462507b76bda4657.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-341d79730a341007.js +0 -5
- package/dist/dash/standalone/static/assets/chunks/tasks-list-6037ecd098332564.js +0 -1
- package/dist/dash/standalone/static/assets/create-param-id-8fa3e9101430f26a.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-0ddb989cab5b0fbf.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-new-504d1a906feabb6f.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-7cd987a1a42a3b44.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-fcdddf2dc26453ce.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-26b84d659dbca7f4.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-97ff652f9fe5979d.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-d47377c0f877c5c0.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-6a09580f11d669b7.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-06283106fffbd5c6.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-9cb2bb12389c9a04.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-a87fa0eaa02e4008.css +0 -1
- package/dist/dash/standalone/static/assets/dash-param-org-usage-786c91a7640542e6.css +0 -1
- package/dist/dash/standalone/static/assets/global-eee296f070a9bb95.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-17c3ee29b7487596.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1eaa8deb5395345f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-29e2b964470f6587.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2a1e756934e7be1a.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-31e64d49f6132b26.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-3d13328ad0b1148b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-4ac29d3e9f1a91be.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7d479b3375e3c07e.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-9eac45990b233b55.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-a8c9c169322e7e3d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b622d087a38b1b77.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b7fea94dfda72453.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-cc8e5e6c95040688.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d16e2a42b0a274c0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-dbccfef0cbb6b18d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-e74706ae238018e5.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ebe7c9692619ea00.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ef8d348060493085.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-fcdfa8b2c8824449.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ff36e2f8a0522759.js +0 -1
- package/dist/default-DcYwZCnl.js +0 -1
- package/dist/default-EXRzdZUY.js +0 -1
- package/dist/delete-Bmn2_TiV.js +0 -2
- package/dist/disable-CnCxTC3X.js +0 -1
- package/dist/discover-CBP4Uw0N.js +0 -1
- package/dist/dispatch-D3Dqxijf.js +0 -8
- package/dist/docs-3SW1O9iS.js +0 -2
- package/dist/env-C_DoQYl5.js +0 -1
- package/dist/exec-BsXFIdTl.js +0 -11
- package/dist/executor-5j-Ewzzb.js +0 -11
- package/dist/flow-CuUq-MDm.js +0 -1
- package/dist/http-Cg_wYcZT.js +0 -1
- package/dist/init-Dgj6V-aS.js +0 -1
- package/dist/integrations-D3OgJk6Y.js +0 -1
- package/dist/integrations-DsFX2KCq.js +0 -1
- package/dist/list-B6lwbCEp.js +0 -1
- package/dist/list-BE3xmX_4.js +0 -1
- package/dist/list-BVIAyAAE.js +0 -4
- package/dist/list-Bggy3HZY.js +0 -4
- package/dist/list-CLtqMYPK.js +0 -2
- package/dist/list-DkO78ZEF.js +0 -3
- package/dist/load-CRmQB1LD.js +0 -2
- package/dist/local-ccKBhpQc.js +0 -1
- package/dist/log-view-DB4nXHXO.js +0 -3
- package/dist/login-BCdXHQ7z.js +0 -1
- package/dist/match-Kt3vFTl1.js +0 -1
- package/dist/mcp-O8VTfzdL.js +0 -12
- package/dist/mcp-YhyTUMIM.js +0 -11
- package/dist/mcp-server-DGzme0YX.js +0 -1
- package/dist/model-Bzpwl_95.js +0 -1
- package/dist/models-CdvmuaLv.js +0 -1
- package/dist/prompt-C--TI1qn.js +0 -8
- package/dist/push-vt81gcxD.js +0 -1
- package/dist/reconnect-BfghDbl1.js +0 -1
- package/dist/refresh-yXJ13FAf.js +0 -1
- package/dist/remote-oQs6My_3.js +0 -1
- package/dist/remove-5iAM2aTO.js +0 -1
- package/dist/remove-BZCA-gdU.js +0 -1
- package/dist/remove-BwhcR6ig.js +0 -1
- package/dist/rename-lyssPQfD.js +0 -1
- package/dist/result-jeiRJTzA.js +0 -18
- package/dist/review-CJS59vO-.d.ts +0 -157
- package/dist/run-CLy9a2MO.js +0 -2
- package/dist/run-DU4G8gNw.js +0 -2
- package/dist/run-D_pl9GF_.js +0 -5
- package/dist/runner-DME7ohjt.js +0 -1
- package/dist/runner-zT5Oyrfr.js +0 -1
- package/dist/runners-CNhxPjg8.js +0 -36
- package/dist/schema-BSlHRFSP.js +0 -8
- package/dist/serve-FG2LgXxM.js +0 -9
- package/dist/serve-UE1fcf4t.js +0 -1
- package/dist/serve-wQgyxwdY.js +0 -1
- package/dist/setup-host-BsbDs4lJ.js +0 -6
- package/dist/show-Cajmf606.js +0 -1
- package/dist/show-D0qTuXRU.js +0 -1
- package/dist/slack-C_RlVDz7.js +0 -3
- package/dist/steer-i6w87g_t.js +0 -4
- package/dist/stop-CJ0PHvKp.js +0 -1
- package/dist/task-DTN_fIGC.js +0 -1
- package/dist/task-DXHKWB_J.js +0 -5
- package/dist/task-IoBYe7ok.js +0 -1
- package/dist/test-BTkKFbnx.js +0 -1
- package/dist/tools-B-2oi2wI.js +0 -1
- package/dist/unalias-Cqx7i_L0.js +0 -1
- package/dist/update-MNyeVXyy.js +0 -2
- package/dist/upgrade-CGSkY0FY.js +0 -2
- package/dist/usage-sx-FR0bz.js +0 -1
- package/dist/views-BhsnL0nr.js +0 -5
- package/dist/watch-IL2eEgwD.js +0 -9
- package/dist/watch-qfr7aSfo.js +0 -5
- package/dist/wire-B5rc5Av6.js +0 -1
- package/dist/worker-BBZ36xL0.js +0 -1
- package/dist/worker-D2csFtoH.js +0 -9
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.5954bd9bd05e8230.js → errors.0a735590a5412ea6.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.76589c15dee1732d.css.pnext-asset.js → page.cf7460a024706f75.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.3ffef848a0b0dda3.css.pnext-asset.js → page.c811938ae8a8f1df.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.2d19ea3a4d380e0d.css.pnext-asset.js → agent-settings-form.ca926c58d15044aa.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.13019680f38b0630.css.pnext-asset.js → hero.1bef5dca89b5942c.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{operator/page.9002a449f872a10e.css.pnext-asset.js → settings/[tab]/connections-list.46786fe36b121a43.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.f742847e4887f072.css.pnext-asset.js → credentials-list.f7c27f170ec1e868.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.98e0b34932a6ee4c.css.pnext-asset.js → list.8cbee173a5aff98d.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.e0ce46919b75ef76.css.pnext-asset.js → runners-list.53c7ea80b6fb734c.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/runners-list.a835c9a264cf8903.css.pnext-asset.js → tasks/[id]/task-view.57990cfd2bdf5c11.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{[id]/task-view.38b1b7ef3976ba71.css.pnext-asset.js → composer.5b8687662e1629fa.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.79c015348f861749.css.pnext-asset.js → list/tasks-list.abbbc9ace4d866e5.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{dash/[org]/tasks/list/tasks-list.2282a7cef8b15bd8.css.pnext-asset.js → globals.c8fd2b8b01e7077b.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{dash/[org]/usage/usage.775df2f43187c487.css.pnext-asset.js → responsive.ebc5f7d77b4b86a0.css.pnext-asset.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{app/globals.dccea8b03fa4b6d2.css.pnext-asset.js → comps/ui/card.f80288cc42f9bcae.css.pnext-asset.js} +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{C as e,cr as t,fr as n,gn as r,nn as i}from"./prompts-CEf7z4i_.js";import a from"node:path";import o from"node:fs";import s from"node:readline";const c=/^[A-Za-z0-9-]{1,128}$/;function l(e){return[...new Set([...e.previousThreadIds??[],...e.threadId?[e.threadId]:[]])]}async function u(s,c){if(!/^[a-zA-Z0-9_-]+$/.test(c))return[];let l=s.engine===`claude`,u=l?e():r(),d=s.id?a.join(i(s.cwd??``,s.id),`history-files.json`):void 0,f=JSON.stringify([s.engine,u,c]),p=d?t(d)??{}:{},m=p[f];if(m?.length&&m.every(e=>e.startsWith(`${u}${a.sep}`)&&o.existsSync(e)))return m;let h=[],g=async(e,t)=>{for(let n of await o.promises.readdir(e,{withFileTypes:!0}).catch(()=>[])){let r=a.join(e,n.name);n.isDirectory()&&t?await g(r,t-1):n.isFile()&&(l?n.name===`${c}.jsonl`:n.name.endsWith(`-${c}.jsonl`))&&h.push(r)}};return l?await g(u,1):(await g(a.join(u,`sessions`),3),await g(a.join(u,`archived_sessions`),0)),d&&h.length&&n(d,{...p,[f]:h}),h}function d(e,t){let n=t?e.message:e.type===`response_item`?e.payload:void 0;if(!n||!t&&n.type===`reasoning`)return;let r=n.content,i=Array.isArray(r)?r:[],a=n.role??(n.type?.endsWith(`_output`)?`tool`:`assistant`),o=i.filter(e=>e.type===`tool_use`).map(e=>String(e.id)),s=i.filter(e=>e.type===`tool_result`).map(e=>String(e.tool_use_id));[`function_call`,`custom_tool_call`].includes(n.type)&&o.push(String(n.call_id)),[`function_call_output`,`custom_tool_call_output`].includes(n.type)&&s.push(String(n.call_id));let c=typeof r==`string`?r:i.length?i.map(e=>typeof e.text==`string`?e.text:JSON.stringify(e)).join(`
|
|
2
|
+
`):JSON.stringify(n);return{speaker:s.length&&!o.length?`tool`:a,time:String(e.timestamp??``),text:c,calls:o,results:s,startsExchange:a===`user`&&!s.length,reply:a===`assistant`&&(t?i.some(e=>e.type===`text`)||typeof r==`string`:n.type===`message`)}}async function*f(e,t){for(let n of await u(e,t)){let t=o.createReadStream(n,{encoding:`utf8`}),r=s.createInterface({input:t,crlfDelay:1/0});try{for await(let t of r){let n;try{n=JSON.parse(t)}catch{continue}let r=d(n,e.engine===`claude`);r&&(yield r)}}finally{r.close(),t.destroy()}}}async function p(e,{exchanges:t=6,maxBytes:n=2e4}={}){if(!e.threadId)return{text:``,exchanges:0};let r=[],i=``,a=0,o=!1,s=new Set,c=()=>{if(a>n)r.length=0;else if(i&&o&&!s.size)for(r.push(i);r.length>t||Buffer.byteLength(r.join(`
|
|
3
|
+
|
|
4
|
+
`))>n;)r.shift();i=``,a=0,o=!1,s.clear()};for await(let t of f(e,e.threadId)){if(t.startsExchange&&!s.size&&c(),!i&&!t.startsExchange)continue;for(let e of t.calls)s.add(e);for(let e of t.results)s.delete(e);t.reply&&(o=!0);let e=`[${t.time}] ${t.speaker}\n${t.text}`;a+=Buffer.byteLength(e)+2,a<=n?i+=`${i?`
|
|
5
|
+
|
|
6
|
+
`:``}${e}`:i=`[exchange exceeds the recent history budget]`}return a>n&&(i=``),c(),{text:r.join(`
|
|
7
|
+
|
|
8
|
+
`),exchanges:r.length}}async function m(e,{query:t,from:n=0,limit:r=10}={}){if(t!==void 0&&(typeof t!=`string`||!t.length||t.length>500))throw Error(`Provide a query of 1 to 500 characters`);if(!Number.isSafeInteger(n)||n<0)throw Error(`Provide from as a nonnegative message index`);if(!Number.isInteger(r)||r<1||r>20)throw Error(`Provide a limit of 1 to 20 messages`);let i=[],a=t?.toLowerCase(),o=0;for(let t of l(e))for await(let s of f(e,t)){let e=o++;if(e<n)continue;let t=a===void 0?0:s.text.toLowerCase().indexOf(a);if(t<0)continue;if(i.length===r)return{messages:i,next:i[i.length-1].index+1};let c=Math.max(0,t-200);i.push({index:e,speaker:s.speaker,time:s.time,text:s.text.slice(c,c+1200)})}return{messages:i}}export{u as a,p as i,l as n,m as r,c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{An as e}from"./prompts-CEf7z4i_.js";import{t}from"./integrations-DPxWtNnS.js";import{a as n,i as r,l as i,s as a}from"./task-CQmx_2SI.js";import o from"node:path";import s from"node:process";import c from"node:fs";import{execFile as l,spawn as u}from"node:child_process";import d from"node:fs/promises";import{promisify as f}from"node:util";import{Readable as p}from"node:stream";import{pipeline as m}from"node:stream/promises";const h=e=>Buffer.from(JSON.stringify(e)).toString(`base64url`),g=e=>JSON.parse(Buffer.from(e,`base64url`).toString(`utf8`)),_=f(l);async function v(e){if(s.platform===`linux`){let t=await d.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await _(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function y(e){let t=g(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var b=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,i){await d.mkdir(this.workDir,{recursive:!0});let l=await d.mkdtemp(o.join(this.workDir,`task-`)),f=t.runner===`local`?r(t):void 0,p=c.openSync(o.join(l,`runner.log`),`a`);await d.mkdir(o.join(l,`bin`)),await d.writeFile(o.join(l,`bin/coder`),`#!/bin/sh\nexec "${s.execPath}" "${e}" "$@"\n`,{mode:493});let m=u(s.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:l,detached:!0,env:{PATH:[o.join(l,`bin`),s.env.PATH??``].join(o.delimiter),HOME:s.env.HOME??``,TMPDIR:s.env.TMPDIR??``,...s.env.CODER_HOME?{CODER_HOME:s.env.CODER_HOME}:{},...i,...f?{CODER_CHECKOUT_CACHE:f}:{},CODER_INBOX_SOCKET:n(l)},stdio:[`ignore`,p,p]});await new Promise((e,t)=>{m.once(`spawn`,e),m.once(`error`,t)}),c.closeSync(p);let g={child:m};this.children.set(m.pid,g),m.once(`close`,e=>{g.code=e,a(o.join(l,`repo`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e))}),m.unref();let _=await v(m.pid);if(!_)throw Error(`Could not identify the local runner process`);return h({pid:m.pid,dir:l,started:_})}async status(e){let{pid:t,dir:n,started:r}=y(e),i=this.children.get(t);if(i?.code===void 0)try{if(s.kill(t,0),await v(t)===r)return{state:`running`}}catch{}return await a(o.join(n,`repo`)),{state:`exited`,...i?.code==null?{}:{code:i.code}}}async stop(e){let{pid:t,started:n}=y(e);if(await v(t)===n)try{s.kill(-t,`SIGTERM`)}catch{try{s.kill(t,`SIGTERM`)}catch{}}}async push(e,t){let{pid:r,dir:a,started:o}=y(e);if(await v(r)!==o)throw Error(`The task process exited`);return i(n(a),t)}};function x(e,t,n={}){return new Promise((r,i)=>{let a=u(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function S(){return Object.values(t).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}function C(e,t=200,n={}){return new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`,...n}})}const w=e=>e.searchParams.has(`cursor`);function T(e){if(e)try{return g(e)}catch{return}}const E=e=>T(e.searchParams.get(`cursor`));function D(e,t=50,n=200){let r=Number(e.searchParams.get(`limit`)??t);return Number.isInteger(r)&&r>0?Math.min(r,n):t}function O(e,t,n){let r=e.slice(0,t);return{items:r,...e.length>t?{next:h(n(r.at(-1)))}:{}}}const k=(e,t=302)=>new Response(null,{status:t,headers:{location:e}}),A=()=>new Response(`Forbidden`,{status:403}),j=()=>new Response(`Not found`,{status:404,headers:{"content-type":`text/plain; charset=utf-8`}}),M=()=>new Response(`Method not allowed`,{status:405}),N=e=>k(`/login?return=${encodeURIComponent(`${e.pathname}${e.search}`)}`),P=e=>e.startsWith(`/api/auth`)?65536:/\/tasks\/[^/]+\/history$/.test(e)?4194304:1048576;async function F(e,t,n){let r=Number(t??0);if(Number.isFinite(r)&&r>n)throw Object.assign(Error(`Payload too large`),{status:413});let i=[],a=0;for await(let t of e){if(a+=t.byteLength,a>n)throw Object.assign(Error(`Payload too large`),{status:413});i.push(t)}let o=new Uint8Array(a),s=0;for(let e of i)o.set(e,s),s+=e.byteLength;return o}function I(e){let t=new Headers;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,Array.isArray(r)?r.join(`, `):r);return t}function L(e,t){let n=e.url??`/`,r=e.method===`GET`||e.method===`HEAD`?void 0:p.toWeb(e);return new Request(`http://${e.headers.host??`localhost`}${n}`,{method:e.method,headers:I(e.headers),body:r,duplex:`half`,signal:t})}function R(e,{admit:t=()=>!0}={}){return async(n,r)=>{if(!t(n))return void r.writeHead(404).end(`Not found`);let i=new AbortController,a=()=>{n.socket.destroyed&&i.abort()};r.once(`close`,()=>i.abort()),a();try{let t=await e(L(n,i.signal),n.socket.remoteAddress?.replace(/^::ffff:/,``));a();let o=Object.fromEntries(t.headers.entries()),s=t.headers.getSetCookie();s.length&&(o[`set-cookie`]=s),r.writeHead(t.status,o),t.body?await m(p.fromWeb(t.body),r).catch(()=>{}):r.end()}catch(e){if(r.headersSent)return void r.destroy();let t=typeof e==`object`&&e&&`status`in e;t||console.error(`coder server: request failed`,e);let n=t?e instanceof Error?e.message:String(e):`Internal server error`;r.writeHead(t?Number(e.status):500,{"content-type":`application/json`}),r.end(JSON.stringify({error:n}))}}}async function z(e,t){if(e.method===`GET`||e.method===`HEAD`||!e.body)return e;try{let n=await F(e.body,e.headers.get(`content-length`)??void 0,t);return new Request(e.url,{method:e.method,headers:e.headers,body:n.byteLength?Buffer.from(n):void 0,signal:e.signal})}catch(e){if(e.status===413)return new Response(`Payload too large`,{status:413});throw e}}export{S as _,C as a,M as c,D as d,w as f,x as g,b as h,A as i,j as l,N as m,E as n,z as o,k as p,T as r,R as s,P as t,O as u,g as v,h as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,n as t,o as n,r}from"./prompt-DQyPCLUo.js";import{i}from"./cli-Fp28pM4Y.js";import{p as a,s as o}from"./output-BKeyLbvt.js";import{c as s,n as c,t as l}from"./args-BekfmD9t.js";import u from"node:path";import d from"node:process";const f={read:`Read-only`,write:`Read-write`};function p(e,t){let n=a,{id:r,samples:i,integrations:s}=e;d.stdout.write(`Created ${n.cyan(t)}.\n`);let c=s.length?[`1. Write ${t}/system.md. Try it with no server: coder task run --agent ${r} "<task>"`,`2. Run it on a server: coder dash on this machine reads it from this repo; a cloud server imports it from the dashboard or with coder agent push.`,`3. On the dashboard, create the agent's app on each platform it uses (${s.join(`, `)}) from its Platforms tab, and install it.`,`4. Fire an event by hand, or leave --server out to run it offline: coder agent run ${r} ${i[0]??`<event.json>`} --server <url>`,`Guide: https://github.com/muzam1l/coder/blob/main/docs/agents/index.md`,`Agents: coder docs agents`]:[`1. Write ${t}/system.md. Try it with no server: coder task run --agent ${r} "<task>"`,`2. Give the agent a platform under "integrations" in ${t}/agent.json, then run init again or follow the guide: coder agent integrations list`,`Guide: https://github.com/muzam1l/coder/blob/main/docs/agents/index.md`,`Agents: coder docs agents`];d.stdout.write(`\n${o(c,n)}\n`)}async function m(r){let{regexError:i}=await import(`./agent-B8ItyuHN.js`).then(e=>e.t),{INTEGRATIONS:o}=await import(`./integrations-DPxWtNnS.js`).then(e=>e.r),{PRESETS:s}=await import(`./types-D_xnfP7m.js`).then(e=>e.n),c=a;d.stdout.write(`Creating ${c.cyan(`.coder/agents/${r}`)}. Pick what the agent listens to and what it may do; flags skip these questions.\n\n`);let l=await e({title:`Integrations`,hint:`Platforms the agent listens to and acts on. Add or remove them later in agent.json.`,multi:!0,selected:[Object.keys(o)[0]],options:Object.values(o).map(e=>({value:e.id,hint:e.description}))}),u={},p={};for(let e of l){let t=o[e],r=Object.keys(t.events),a=await n({title:`${e} events`,hint:`What wakes the agent on ${e}; each event runs the agent with that event as its prompt.`,multi:!0,required:!0,selected:r.filter(e=>!t.events[e].noisy),options:Object.entries(t.events).map(([e,t])=>({value:e,hint:t.description,...t.noisy?{input:{label:`match`,value:`^help\\b`,placeholder:`tab to add a match`,validate:i}}:{}}))});u[e]=a.values,p[e]=a.inputs}let[m]=await e({title:`Access`,hint:`What the agent may do on its platforms and connections; Read-write allows every tool.`,selected:[`write`],options:s.map(e=>({value:e,label:f[e]}))}),h=await t(`Display name`,r,void 0,`Shown in replies and app names.`);return{...h===r?{}:{name:h},integrations:l,events:u,matches:p,access:m}}const h=i({name:`agent init`,help:{usage:`coder agent init [id] [--integrations a,b] [--events a,b] [--access <mode>] [--name <text>] [--description <text>] [--permissions <mode>] [--yes]`,summary:"Create .coder/agents/<id>/ with an agent.json built from the integration catalog, a system.md to write the prompt in, and one sample event per integration for `coder agent run`. Asks for the id, integrations, events, and access when run in a terminal without them.",flags:[[`--integrations <a,b>`,`platforms the agent listens to (see coder agent integrations list)`],[`--events <a,b>`,`events that start tasks, applied to each integration that has them (default: mention)`],[`--access <mode>`,`read or write, on its platforms and connections (default: write)`],[`--name <text>`,`display name used in replies (default: the id)`],[`--description <text>`,`one line for agent list`],[`--permissions <mode>`,`engine permission mode (default: read-only)`],[`--yes`,`skip the questions and take the defaults`]],examples:[[`coder agent init`,`answer the questions, id included`],[`coder agent init triage --integrations github --events issue,mention --access read`,`no questions`]]},options:{...l,name:s,description:s,integrations:s,events:s,access:s,permissions:s,match:s,yes:c},args:1,run:async({options:e,args:[n],cwd:i})=>{let{agents:a}=await import(`./agent-B8ItyuHN.js`).then(e=>e.t),o=r()&&!e.yes;return a.init(n,{...e,cwd:i,permissions:e.permissions,...o?{askId:e=>t(`Agent id`,``,e,`Folder name under .coder/agents and the name used in commands.`)}:{},...o&&!e.integrations?{askPicks:m}:{}})},json:(e,{cwd:t})=>({id:e.id,dir:u.relative(t,e.dir),files:e.files,samples:e.samples}),print:(e,{cwd:t})=>p(e,u.relative(t,e.dir))});export{h as commandAgentInit};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{c as t,d as n,o as r,r as i,s as a}from"./slack-Kpj-G9FE.js";import{randomUUID as o}from"node:crypto";async function s(e,t){let r=new URLSearchParams(await e.text()),i=Object.fromEntries(t.map(e=>[e,r.get(e)?.trim()??``])),a=t.filter(e=>!i[e]);if(a.length)throw new n(`invalid-field`,a[0],`Missing ${a.join(`, `)}`);return i}async function c(e,t,r=fetch,i=Date.now()){let a=await r(e,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)}),o=await a.json().catch(()=>({}));if(!a.ok||!o.access_token)throw new n(`platform-error`,o.error??String(a.status),`${new URL(e).host} refused the token request: ${o.error_description??o.error??a.status}`);return{accessToken:o.access_token,...o.refresh_token?{refreshToken:o.refresh_token}:{},...o.expires_in?{expiresAt:i+o.expires_in*1e3}:{},...o.id_token?{idToken:o.id_token}:{}}}async function l(e,t,n,r=Date.now()){if(!e)throw Error(`The installation has no token; connect it again from the dashboard`);let i=JSON.parse(e);if(!i.refreshToken||(i.expiresAt??1/0)-3e5>r)return i.accessToken;let{idToken:a,...o}=await t(i.refreshToken),s={...o,refreshToken:o.refreshToken??i.refreshToken},c=await n?.(JSON.stringify(s));return c?JSON.parse(c).accessToken:s.accessToken}const u=`https://api.linear.app/oauth/token`,d=[`clientId`,`clientSecret`,`webhookSecret`],f=e=>e.replace(/\/$/,``);async function p(e,t,n){let r=await n(`https://api.linear.app/graphql`,{method:`POST`,headers:{authorization:`Bearer ${e}`,"content-type":`application/json`},body:JSON.stringify({query:t})}),i=await r.json().catch(()=>({}));if(!r.ok||!i.data)throw Error(`Linear refused the query: ${r.status}`);return i.data}function m(e,t,n,r,i=!1){return`https://linear.app/oauth/authorize?${new URLSearchParams({client_id:e.clientId,redirect_uri:t,response_type:`code`,scope:r?`read,write,app:mentionable,app:assignable`:i?`read,write`:`read`,state:n,...r?{actor:`app`}:{}})}`}function h(e,t,r,i){let a=new URL(e.url).searchParams.get(`code`);if(!a)throw new n(`missing-code`);let{clientId:o,clientSecret:s}=t;return c(u,{grant_type:`authorization_code`,code:a,redirect_uri:r,client_id:o,client_secret:s},i)}function g(e,t,n){let r=new URLSearchParams(n?{"oauth.client_name":n}:{});return r.set(`developer.name`,f(e).replace(/^https?:\/\//,``)),r.set(`oauth.client_uri`,f(e)),r.append(`oauth.redirect_uris`,`${f(e)}/install/linear/callback`),r.append(`oauth.redirect_uris`,`${f(e)}/connect/linear/callback`),r.set(`webhook.enabled`,`true`),r.set(`webhook.url`,`${f(e)}/hooks/linear?app=${t}`),r.set(`webhook.resourceTypes`,`AgentSessionEvent`),`https://linear.app/settings/api/applications/new?${r}`}const _={builtin:`shared`,createStep:(e,{name:t}={},n=o())=>({intro:`Linear runs the agent as an app of your own OAuth application.`,link:g(e,n,t),steps:[{text:`Open the link signed in to Linear, check the form and click **Create**.`},{text:`Copy the client ID, the client secret and the webhook signing secret into the fields below.`}],notes:[`The link fills in the name, the callback URLs and the webhook.`,`To install the app in other Linear workspaces, make it public in its Linear settings.`],hidden:{key:n},fields:[{name:`clientId`,label:`Client ID`,placeholder:`9f3c2a7d1e8b4c6a0d5e7f1a2b3c4d5e`,required:!0},{name:`clientSecret`,label:`Client secret`,placeholder:`4b1e9c7a2d0f8e3c5a6b9d1f0e2c4a7b`,required:!0},{name:`webhookSecret`,label:`Webhook signing secret`,hint:`shown with the webhook settings`,placeholder:`lin_wh_…`,required:!0}],submit:`Create Linear app`}),settingsUrl:()=>`https://linear.app/settings/api`,values:(e,{publicUrl:t,definition:n})=>({url:`https://linear.app/settings/api`,label:`Open application`,lines:[{text:`Application name`,copy:n.name??e.agent},{text:`Callback URL`,copy:`${f(t)}/install/linear/callback`},{text:`Callback URL`,copy:`${f(t)}/connect/linear/callback`},{text:`Webhook URL`,copy:`${f(t)}/hooks/linear?app=${e.id.slice(e.id.indexOf(`:`)+1)}`},{text:`Webhook resource types`,copy:`AgentSessionEvent`}]}),async createCallback(e,{state:t,definition:r}){let{key:i,...a}=await s(e,[...d,`key`]);if(!/^[0-9a-f-]{36}$/.test(i))throw new n(`invalid-field`,`key`);return{platformAppId:i,name:r.name??t.agent,credentials:a}},accountUrl:({login:e})=>`https://linear.app/${encodeURIComponent(e)}`,installUrl(e,t,{publicUrl:n,state:r}){return m(t,`${f(n)}/install/linear/callback`,r,!0)},async installCallback(e,{credentials:t,publicUrl:n,fetch:r}){let{idToken:i,...a}=await h(e,t,`${f(n)}/install/linear/callback`,r),{organization:o,viewer:s}=await p(a.accessToken,`query { organization { id name urlKey } viewer { id } }`,r);return{platformInstallId:o.id,account:{login:o.urlKey},token:JSON.stringify(a),self:s.id}}},v={authorizeUrl:(e,{publicUrl:t,state:n,access:r})=>m(e,`${f(t)}/connect/linear/callback`,n,!1,!!r),async exchange(e,t,{publicUrl:n,fetch:r,access:i}){let{idToken:a,...o}=await h(e,t,`${f(n)}/connect/linear/callback`,r),{viewer:s}=await p(o.accessToken,`query { viewer { id displayName } }`,r);return{id:s.id,login:s.displayName,...i?{token:JSON.stringify(o)}:{}}},async access(e,t,{fetch:n,now:r}){let{clientId:i,clientSecret:a}=t,o;return{accessToken:await l(e,e=>c(u,{grant_type:`refresh_token`,refresh_token:e,client_id:i,client_secret:a},n,r),async e=>{o=e},r),...o?{refreshed:o}:{}}}};function y(e,t,n,r){let{clientId:i,clientSecret:a}=t;return l(e.token,e=>c(u,{grant_type:`refresh_token`,refresh_token:e,client_id:i,client_secret:a},r),n)}const b={read:[`read`],write:[`read`,`write`]};function x(e,t,n){return{name:`linear`,url:`https://mcp.linear.app/mcp${e.includes(`write`)?``:`/readonly`}`,headers:{Authorization:`Bearer ${n}`},credentialFields:{header:`Authorization`}}}const S={id:`linear`,brand:{color:`#222326`,icon:`M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z`,svg:`<svg xmlns="http://www.w3.org/2000/svg" fill="#222326" viewBox="0 0 100 100" style="fill:light-dark(#222326,#fff)"><path d="M 1.23 61.52 c -0.22 -0.95 0.91 -1.55 1.6 -0.86 L 39.33 97.18 c 0.69 0.69 0.09 1.82 -0.86 1.6 C 20.05 94.45 5.55 79.95 1.23 61.52 Z M 0 46.89 c -0.02 0.28 0.09 0.56 0.29 0.76 L 52.35 99.71 c 0.2 0.2 0.48 0.31 0.76 0.29 2.37 -0.15 4.69 -0.46 6.96 -0.93 0.76 -0.16 1.03 -1.1 0.48 -1.65 L 2.58 39.45 c -0.55 -0.55 -1.49 -0.29 -1.65 0.48 -0.47 2.27 -0.78 4.59 -0.93 6.96 Z M 4.21 29.71 c -0.17 0.37 -0.08 0.81 0.21 1.1 l 64.78 64.78 c 0.29 0.29 0.73 0.37 1.1 0.21 1.79 -0.8 3.52 -1.69 5.19 -2.68 0.55 -0.33 0.64 -1.09 0.18 -1.54 L 8.44 24.34 c -0.45 -0.45 -1.21 -0.37 -1.54 0.18 -0.99 1.67 -1.89 3.4 -2.68 5.19 Z M 12.66 18.07 c -0.37 -0.37 -0.39 -0.96 -0.04 -1.35 C 21.78 6.46 35.11 0 49.95 0 77.59 0 100 22.41 100 50.05 c 0 14.84 -6.46 28.17 -16.72 37.34 -0.39 0.35 -0.98 0.33 -1.35 -0.04 L 12.66 18.07 Z"/></svg>`},name:`Linear`,description:`Agent sessions on Linear issues: mentions and assignments`,installLabel:`Connect Linear`,use:`Mention @{handle} or delegate an issue to it.`,answersEveryPrompt:!0,progressReplies:!0,sample:`linear:2f1e6a1c-0000-4000-8000-000000000001:s:5b7d3c2a-0000-4000-8000-000000000002`,prompt:[`A conversation is a Linear agent session on an issue.`,`get_issue reads the issue by its id or identifier, such as ENG-123.`,`reply posts progress in the agent session; your final message completes it. save_comment posts an issue comment outside the session.`,`Replies are Markdown about the issue; link pull requests you open.`].join(`
|
|
2
|
+
`),events:{mention:{description:`Agent session started or prompted by mentioning or assigning the agent`,on:`mention`,addressed:!0}},tools:{presets:b,server:x},hosts:[`api.linear.app`,`mcp.linear.app`],get app(){return _},auth:{canWrite:r,token:(e,t,n,{save:r,fetch:i}={})=>y(e,t,r,i),get user(){return v}},target(e,t){let n=new URL(e.url).searchParams.get(`app`),r;try{r=JSON.parse(t).organizationId}catch{return}return n&&typeof r==`string`?{app:n,installation:r}:void 0},adapter:async e=>(await import(`./adapter-MD6ahqPR.js`)).linearAdapter(e),ownEvents(e,t,n,r){let i=JSON.parse(t);if(i.type!==`OAuthApp`||i.action!==`revoked`)return;let o=r.webhookSecret;return a(t,e.headers.get(`linear-signature`),o)&&i.organizationId&&i.oauthClientId===n.id.slice(7)?{uninstalled:`${n.id}:${i.organizationId}`}:{invalid:!0}},event(e,t,n){t.startTyping(`Reading the issue`).catch(()=>{});let r=n.raw.agentSessionPromptContext;return{type:e,actor:{id:n.author.userId,login:n.author.userName},...r?{promptContext:r.slice(0,16384)}:{}}}};var C=e({INTEGRATIONS:()=>w,enabledIntegrations:()=>T,repositoryReader:()=>E});const w={slack:i,github:t,linear:S};function T(e){if(!e)return w;let t=e.filter(e=>!w[e]);if(t.length)throw Error(`Unknown integration ${t.join(`, `)} in SERVER_INTEGRATIONS; pick from ${Object.keys(w).join(`, `)}`);return Object.fromEntries(e.map(e=>[e,w[e]]))}const E=e=>Object.values(e).find(e=>e.repos);export{E as i,T as n,C as r,w as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-Fp28pM4Y.js";const t=e(`agent integrations`,{list:async()=>(await import(`./list-7yd9K7d8.js`)).commandIntegrationsList,ls:async()=>(await import(`./list-7yd9K7d8.js`)).commandIntegrationsList,show:async()=>(await import(`./show-xdsqD6de.js`)).commandIntegrationsShow},{menu:[{usage:`list`,blurb:`list integrations with their events and tools`},{usage:`show <id>`,blurb:`events and tools of one integration`}],description:[`The platforms an agent can listen to and act on: their events and tool presets.`]},{aliases:{ls:`list`}});export{t as commandAgentIntegrations};
|
package/dist/lib/broker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{Cn as e,Cr as t,Fn as n,Or as r,Qn as i,Sr as a,Tn as o,Vn as s,bn as c,hr as l,kn as u,xn as d}from"../prompts-CEf7z4i_.js";import{H as f,V as p}from"../dispatch-BJZqI7sj.js";import{a as ee,c as m}from"../args-BekfmD9t.js";import h from"node:path";import g from"node:process";import _ from"node:fs";import v from"node:net";const y=new Set([`turn/start`,`review/start`,`thread/compact/start`]),b=3e4;function x(e,t,n){let r=new Set;return t?.threadId&&r.add(t.threadId),e===`review/start`&&n?.reviewThreadId&&r.add(n.reviewThreadId),r}function S(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function C(e,t){e.destroyed||e.write(`${JSON.stringify(t)}\n`)}const w=new Set([`turn/interrupt`,`turn/steer`,`thread/archive`,`thread/delete`]);function T(e){return typeof e?.method==`string`&&w.has(e.method)}function te(e){e&&(_.mkdirSync(h.dirname(e),{recursive:!0}),_.writeFileSync(e,`${g.pid}\n`,`utf8`))}async function E(){let[w,...E]=g.argv.slice(2);if(w!==`serve`)throw Error(`Usage: coder broker serve --endpoint <value> [--cwd <path>] [--pid-file <path>] [--network-access <true|false>]`);let{options:D}=ee(E,a({cwd:m,"pid-file":m,endpoint:r(),"network-access":t(l([`true`,`false`]))})),O=D.cwd?h.resolve(g.cwd(),D.cwd):g.cwd(),k=String(D.endpoint),A=n(k),j=D[`pid-file`]?h.resolve(D[`pid-file`]):null,M=D[`network-access`]===`true`;te(j);let N=null,P=``,F={},I=null,L=!1,R=!1,z=null,B=null,V=null,H=new Set,U=new Map;function W(e){g.stderr.write(`[coder broker] ${JSON.parse(i(e))}\n`)}function G(e){for(let[t,n]of U)n.socket===e&&(U.delete(t),n.client.exitResolved||n.client.sendMessage({id:t,error:S(-32e3,`Broker client disconnected before answering the server request.`)}))}function K(e,t){let n=B??z;if(!n||n.destroyed){e.sendMessage({id:t.id,error:S(-32601,`No broker client available to answer ${t.method}.`)});return}U.set(t.id,{socket:n,client:e}),C(n,t)}function q(e){if(e!==N||R)return;N=null;let t=e.exitError?.message??`codex app-server exited.`;W(`${t} Starting a fresh one on the next request.`);for(let e of new Set([z,B]))e&&C(e,{method:c,params:{message:t}});U.clear(),z=null,B=null,V=null}async function J(){let e=p(g.env,F),t=o.connect(O,{disableBroker:!0,networkAccess:M}),n,r=new Promise((e,t)=>{n=setTimeout(()=>t(Error(`no answer within ${b/1e3}s`)),b)});try{let n=await Promise.race([t,r]);return n.setNotificationHandler(ne),n.handleServerRequest=e=>K(n,e),n.exitPromise.then(()=>q(n)),P=e,n}catch(e){throw t.then(e=>e.close()).catch(()=>{}),Error(`codex app-server could not start: ${f(e)}`)}finally{clearTimeout(n)}}async function Y(){let e=N;N=null,U.clear(),await e?.close().catch(()=>{})}async function X(t){if(I)return I;let n=L||p(g.env,F)!==P;if(N&&!N.exitResolved&&!n)return N;if(N&&!N.exitResolved){let n=`Codex login changed; restarted the shared Codex app-server.`;W(n),C(t,{method:e,params:{message:n}})}return L=!1,await Y(),I=J().finally(()=>{I=null}),N=await I,N}function Z(e){G(e),z===e&&(z=null),B===e&&(B=null,V=null)}function ne(e){let t=z??B;if(t&&(C(t,e),e.method===`turn/completed`&&B===t)){let n=e.params?.threadId??null;(!n||!V||V.has(n))&&(B=null,V=null,z===t&&(z=null))}}async function Q(e){R=!0;for(let e of H)e.end();await N?.close().catch(()=>{}),await new Promise(t=>e.close(t)),A.kind===`unix`&&_.existsSync(A.path)&&_.unlinkSync(A.path),j&&_.existsSync(j)&&_.unlinkSync(j)}N=await J();let $=v.createServer(e=>{H.add(e),e.setEncoding(`utf8`);let t=``;e.on(`data`,async n=>{t+=n;let r=t.indexOf(`
|
|
3
3
|
`);for(;r!==-1;){let n=t.slice(0,r);if(t=t.slice(r+1),r=t.indexOf(`
|
|
4
|
-
`),!n.trim())continue;let i;try{i=JSON.parse(n)}catch(t){C(e,{id:null,error:S(-32700,`Invalid JSON: ${t instanceof Error?t.message:String(t)}`)});continue}let a=i.id!==void 0&&!i.method?U.get(i.id):void 0;if(a){U.delete(i.id),a.client.exitResolved||a.client.sendMessage(i);continue}if(i.id!==void 0&&i.method===`initialize`){C(e,{id:i.id,result:{userAgent:`coder-broker`}});continue}if(i.method===`initialized`&&i.id===void 0||(i.id!==void 0&&i.method===`broker/shutdown`&&(C(e,{id:i.id,result:{}}),await Q($),g.exit(0)),i.id===void 0||!i.method))continue;let o=z&&z!==e||B&&B!==e;if(i.method===`broker/recycle`){L=!0,!o&&N&&(W(`Recycling the shared Codex app-server after a stale-login error.`),L=!1,await Y()),C(e,{id:i.id,result:{recycled:!o}});continue}let s=T(i)&&B&&B!==e&&!z;if(o&&!s){C(e,{id:i.id,error:S(d,`Shared Codex broker is busy.`)});continue}if(s){try{if(!N)throw Error(`codex app-server is not running.`);let t=await N.request(i.method,i.params??{});C(e,{id:i.id,result:t})}catch(t){let n=t;C(e,{id:i.id,error:S(n.rpcCode??-32e3,n.message)})}continue}let c=y.has(i.method);z=e,c&&(B=e,V=x(i.method,i.params??{},null));try{let t=await(await X(e)).request(i.method,i.params??{});C(e,{id:i.id,result:t}),c&&(V=x(i.method,i.params??{},t)),z===e&&(z=null)}catch(t){let n=t;C(e,{id:i.id,error:S(n.rpcCode??-32e3,n.message)}),z===e&&(z=null),B===e&&c&&(B=null,V=null)}}}),e.on(`close`,()=>{H.delete(e),Z(e)}),e.on(`error`,()=>{H.delete(e),Z(e)})});g.on(`SIGTERM`,async()=>{await Q($),g.exit(0)}),g.on(`SIGINT`,async()=>{await Q($),g.exit(0)}),setInterval(async()=>{H.size===0&&
|
|
4
|
+
`),!n.trim())continue;let i;try{i=JSON.parse(n)}catch(t){C(e,{id:null,error:S(-32700,`Invalid JSON: ${t instanceof Error?t.message:String(t)}`)});continue}let a=i.id!==void 0&&!i.method?U.get(i.id):void 0;if(a){U.delete(i.id),a.client.exitResolved||a.client.sendMessage(i);continue}if(i.id!==void 0&&i.method===`initialize`){C(e,{id:i.id,result:{userAgent:`coder-broker`}});continue}if(i.method===`initialized`&&i.id===void 0||(i.id!==void 0&&i.method===`broker/shutdown`&&(C(e,{id:i.id,result:{}}),await Q($),g.exit(0)),i.id===void 0||!i.method))continue;let o=z&&z!==e||B&&B!==e;if(i.method===`broker/recycle`){L=!0,!o&&N&&(W(`Recycling the shared Codex app-server after a stale-login error.`),L=!1,await Y()),C(e,{id:i.id,result:{recycled:!o}});continue}let s=T(i)&&B&&B!==e&&!z;if(o&&!s){C(e,{id:i.id,error:S(d,`Shared Codex broker is busy.`)});continue}if(s){try{if(!N)throw Error(`codex app-server is not running.`);let t=await N.request(i.method,i.params??{});C(e,{id:i.id,result:t})}catch(t){let n=t;C(e,{id:i.id,error:S(n.rpcCode??-32e3,n.message)})}continue}let c=y.has(i.method);z=e,c&&(B=e,V=x(i.method,i.params??{},null));try{let t=await(await X(e)).request(i.method,i.params??{});C(e,{id:i.id,result:t}),c&&(V=x(i.method,i.params??{},t)),z===e&&(z=null)}catch(t){let n=t;C(e,{id:i.id,error:S(n.rpcCode??-32e3,n.message)}),z===e&&(z=null),B===e&&c&&(B=null,V=null)}}}),e.on(`close`,()=>{H.delete(e),Z(e)}),e.on(`error`,()=>{H.delete(e),Z(e)})});g.on(`SIGTERM`,async()=>{await Q($),g.exit(0)}),g.on(`SIGINT`,async()=>{await Q($),g.exit(0)}),setInterval(async()=>{H.size===0&&u(O,M,s())?.endpoint!==k&&(await Q($),g.exit(0))},3e4).unref(),$.listen(A.path)}E().catch(e=>{g.stderr.write(`${JSON.parse(i(e instanceof Error?e.message:String(e)))}\n`),g.exit(1)});export{};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./cli-
|
|
1
|
+
import{i as e}from"./cli-Fp28pM4Y.js";import{g as t,p as n,s as r}from"./output-BKeyLbvt.js";import{n as i}from"./args-BekfmD9t.js";import a from"node:process";function o(e){let i=n;a.stdout.write(t([{header:`id`,value:e=>e.id,paint:e=>i.cyan(e)},{header:`description`,value:e=>e.description},{header:`events`,value:e=>e.events.join(`, `)},{header:`tools`,value:e=>e.tools.join(`, `)}],e,{style:i,border:!0})),a.stdout.write(`\n${r([`Event descriptions and the tools each preset allows: coder agent integrations show <id>`],i)}\n`)}const s=e({name:`agent integrations list`,globalFlags:{cwd:!1},help:{usage:`coder agent integrations list [--json]`,summary:"One row per integration: its id, the events an agent can wire, and every tool it offers; `show` splits the tools by preset."},options:{json:i},run:async()=>{let{agents:e}=await import(`./agent-B8ItyuHN.js`).then(e=>e.t);return e.integrations.list()},print:o});export{s as commandIntegrationsList};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{St as e}from"./prompts-CEf7z4i_.js";import{i as t}from"./cli-Fp28pM4Y.js";import{a as n,g as r,l as i,m as a,p as o,s}from"./output-BKeyLbvt.js";import{n as c,r as l,t as u}from"./args-BekfmD9t.js";import d from"node:process";const f=t({name:`flow list`,help:{usage:`coder flow list [--archived] [--limit N] [--json]`,summary:`List recent flow runs, most recent first: running runs plus ones that ended
|
|
2
|
+
within the last 30 minutes. Older runs auto-archive and move to --archived.`,flags:[[`--archived`,`show archived runs (auto-archived or via flow archive)`],[`--limit <n|all>`,`show at most n runs (default all)`]]},options:{...u,archived:c,limit:l},run:async({options:e})=>{let{collectFlowRuns:t}=await import(`./executor-LkokKTTd.js`).then(e=>e.S);return t(e)},json:e=>e.runs,print:(e,{options:t})=>p(e,t)});function p({runs:t,clipped:c},l){if(!t.length){d.stdout.write(l.archived?`No archived flow runs.
|
|
3
|
+
`:`No recent flow runs.
|
|
4
|
+
`),d.stdout.write(`\n${s([`Run one: coder flow run <name>`,`Runnable flows: coder flow discover`],o)}\n`);return}let u=o;d.stdout.write(`${r([{header:`run-id`,value:e=>e.runId,max:28,paint:e=>u.cyan(e)},{header:`name`,value:e=>e.name,max:30},{header:`status`,value:e=>e.status,paint:(e,t)=>a(t.status,e.length)},{header:`tasks`,value:e=>`${e.taskCount} tasks`,paint:e=>u.light(e)},{header:`tokens`,value:e=>{let t=Object.values(e.ledger).reduce((e,t)=>e+t.total,0);return t?`${i(t)} tok`:`-`},paint:e=>u.light(e)},{header:`age`,value:t=>n(e(t.startedAt)),paint:e=>u.light(e)}],t,u)}\n`),c&&d.stdout.write(u.dim(`\n... ${c} more not shown (--limit ${l.limit})\n`)),d.stdout.write(`\n${s([`Result: coder flow result <run-id>`,`Tasks: coder list`,`Runnable flows: coder flow discover`],u)}\n`)}export{f as commandList};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,r as t}from"./cli-Fp28pM4Y.js";import{g as n,p as r,s as i}from"./output-BKeyLbvt.js";import{s as a,t as o}from"./args-BekfmD9t.js";import s from"node:process";const c=e=>`builtin`in e,l=e=>e.map(e=>c(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,description:e.definition.description??null}:{id:e.id,name:e.name,source:e.source,version:e.currentVersion,description:e.description??null});function u(e,t){if(!e.length)return void s.stdout.write(`No agents configured.
|
|
2
|
+
`);let a=r;s.stdout.write(n([{header:`id`,value:e=>e.id,paint:e=>a.cyan(e)},{header:`name`,value:e=>e.name},{header:`source`,value:e=>e.source,paint:e=>a.light(e)},...t?[{header:`version`,value:e=>String(e.version)}]:[],{header:`description`,value:e=>e.description??`-`}],e,a)),!t&&s.stdout.write(`\n${i([`An agent's settings, events, and tools: coder agent show <id>`,`Scaffold a new agent in this repo: coder agent init <id>`],a)}\n`)}const d=e({name:`agent list`,help:{usage:`coder agent list [--server [url]] [--json] [--cwd <dir>]`,summary:`Without --server, one row per built-in and workspace agent. With --server, list the agent records and current versions owned by that Coder server.`,flags:[t]},options:{...o,...a},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-B8ItyuHN.js`).then(e=>e.t);return n.list({...e,cwd:t,organization:e.workspace})},json:e=>l(e),print:(e,{options:t})=>u(l(e),t.server!==void 0)});export{d as commandAgentList,c as isLocal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,t}from"./cli-
|
|
1
|
+
import{i as e,t}from"./cli-Fp28pM4Y.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{runnerOptions as i}from"./remove-CCYHc1FN.js";import a from"node:process";function o({items:e}){if(!e.length)return void a.stdout.write(`${r.dim(`No runners.`)}\n`);a.stdout.write(`${n([{header:`id`,value:e=>e.id,paint:e=>r.cyan(e)},{header:`name`,value:e=>e.name},{header:`scope`,value:e=>e.scope},{header:`status`,value:e=>e.online?`online`:`offline`},{header:`kind`,value:e=>e.kind},{header:`default`,value:e=>e.default?`yes`:``}],e,r)}\n`)}const s=e({name:`runner list`,globalFlags:{cwd:!1},help:{usage:`coder runner list [--server [url]] [--json]`,flags:[t]},options:i,run:async({options:e})=>{let{listRunners:t}=await import(`./runner-CxtzTgVq.js`).then(e=>e.t);return t(e)},print:o});export{s as commandRunnerList};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import"./prompts-CEf7z4i_.js";import{i as e,r as t}from"./cli-Fp28pM4Y.js";import{a as n,g as r,m as i,p as a,s as o}from"./output-BKeyLbvt.js";import{c as s,n as c,r as l,s as u}from"./args-BekfmD9t.js";import{o as d}from"./result-DvOqIwhh.js";import f from"node:path";import p from"node:process";function m(e){if(!e.length)return void p.stdout.write(`No server tasks.
|
|
2
|
+
`);let t=a;p.stdout.write(r([{header:`task-id`,value:e=>e.task.id,paint:e=>t.cyan(e)},{header:`status`,value:e=>e.status,paint:(e,t)=>i(t.status,e.length)},{header:`agent`,value:e=>e.task.agent},{header:`source`,value:e=>e.task.source},{header:`request`,value:e=>(e.task.prompt??(e.task.event?`${e.task.event.type}: ${e.task.event.text}`:`-`)).slice(0,80)},{header:`reply`,value:e=>d(e)??`-`}],e,t))}function h(e,t,s){let c=a;if(!e.length){let n=t.archived?`archived tasks`:t.running?`running tasks`:t.stopped?`recently stopped tasks`:`recent tasks`;p.stdout.write(`No ${n}.\n`),e.archived&&p.stdout.write(`\n${o([`${e.archived} archived: coder task list --archived [--limit N]`],c)}\n`);return}let l=[{header:`task-id`,value:e=>e.taskId,paint:e=>c.cyan(e),max:28},{header:`status`,value:e=>e.status,paint:(e,t)=>i(t.status,e.length),max:16},{header:`engine`,value:e=>(e.engine===`custom`&&e.model?e.model:(e.engine??`-`)+(e.model?`/${e.model}`:``))+(e.effort?`/${e.effort}`:``),paint:e=>c.light(e),max:26},{header:`cwd`,value:e=>e.cwd?f.basename(e.cwd):`-`,paint:e=>c.light(e),max:24},{header:`name`,value:e=>{let t=e.archived?` ${c.dim(`(archived)`)}`:``;return`${e.name?e.name:c.light(e.prompt)}${e.idleMs!==null&&e.idleMs>=12e4?` ${(e.idleMs>6e5?c.red:c.dim)(`· idle ${n(e.idleMs)}`)}`:``}${t}`}}],u=[],d=new Map;for(let t of e){if(!t.flowRunId){let e=u.at(-1);e&&!e.header?e.rows.push(t):u.push({rows:[t]});continue}let e=d.get(t.flowRunId);if(!e){let n=s(t.flowRunId);e={header:n?`(${c.bold(t.flowRunId)} ${n.status}. Flow ${n.name})`:`(${c.bold(t.flowRunId)} flow)`,rows:[]},d.set(t.flowRunId,e),u.push(e)}e.rows.push(t)}p.stdout.write(r(l,u,c)),e.clipped&&p.stdout.write(c.dim(`\n... ${e.clipped} more not shown (--limit ${t.limit===`all`?void 0:t.limit})\n`));let m=[`Result: coder task result <task-id>`];t.archived||m.push(`Older tasks: coder task list --archived [--limit N]`),p.stdout.write(`\n${o(m,c)}\n`)}const g=e({name:`task list`,help:{usage:`coder task list [--running] [--stopped] [--archived [--limit N]] [--server [url]]`,summary:`List recent tasks across all workspaces, most recent first: running tasks plus
|
|
3
|
+
ones stopped within the last 30 minutes. Older stopped tasks auto-archive and
|
|
4
|
+
move to --archived. Shortcut: \`coder list\`.`,flags:[[`--running`,`show only running tasks`],[`--stopped`,`show only recently stopped tasks (not yet archived)`],[`--archived`,`show only archived tasks (auto-archived or via task archive)`],[`--limit <n|all>`,`show at most n tasks (default all)`],[`--dir <dir>`,`only tasks launched in that workspace`],t]},options:{cwd:s,dir:s,limit:l,json:c,running:c,stopped:c,archived:c,...u},run:async({options:e})=>{let{tasks:t}=await import(`./task-C506SkPR.js`).then(e=>e.t);return t.list({...e,organization:e.workspace})},async print(e,{options:t}){if(t.server!==void 0)return m(e);let{readFlowRecord:n}=await import(`./executor-LkokKTTd.js`).then(e=>e.S);h(e,t,n)}});export{g as commandTasks};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{i as e,n as t}from"./cli-Fp28pM4Y.js";import{p as n,s as r}from"./output-BKeyLbvt.js";import{t as i}from"./models-VaiIYlOW.js";import{n as a}from"./add-B26QSwPY.js";import o from"node:process";const s=e({name:`model list`,help:{usage:`coder model list [--json]`,summary:`List built-in aliases, configured custom models, and user aliases. Only custom\nmodels are probed.\n\n${t}`},options:a,run:({cwd:e})=>i.list({cwd:e}),print:c});function c(e){let i=n,a=e=>e?` ${i.dim(`(disabled)`)}`:``,s=[],c=(e,t)=>{s.push(i.bold(e));for(let e of t)`overrides`in e?s.push(` ${e.disabled?i.dim(`∅`):i.cyan(`↳`)} ${e.alias.padEnd(14)} ${i.dim(`-> ${e.spec} (overrides ${e.overrides})`)}${a(e.disabled)}`):`builtin`in e?s.push(` ${e.disabled?i.dim(`∅`):i.green(`✔`)} ${e.alias.padEnd(14)} ${i.dim(`-> ${e.model}`)}${a(e.disabled)}`):s.push(` ${e.disabled?i.dim(`∅`):i.cyan(`↳`)} ${e.alias.padEnd(14)} ${i.dim(`-> ${e.spec}`)}${a(e.disabled)}`);s.push(``)};c(`Codex models`,e.codex),c(`Claude models`,e.claude),s.push(i.bold(`Custom models`),``),e.custom.length||s.push(i.dim(` None.`));for(let{name:t,probe:n,...r}of e.custom){let e=r.disabled?i.dim(`∅`):n.reachable?i.green(`✔`):i.red(`✘`);s.push(` ${e} ${t.padEnd(14)} ${r.model} ${i.dim(`@ ${r.baseUrl}. ${n.detail}`)}${a(r.disabled)}`)}if(s.push(``),e.toggles){s.push(i.bold(`Other`),``);for(let t of e.toggles)s.push(` ${t.disabled?i.dim(`∅`):i.green(`✔`)} ${t.name.padEnd(14)} ${i.dim(`raw model id`)}${a(t.disabled)}`);s.push(``)}s.push(...t.split(`
|
|
2
|
+
`),``,r([`Add a custom model: coder model add <name> --base-url <url> --model <id> [--env-key VAR]`,`Alias a model, e.g. fast codex:luna: coder model alias <name> <spec>`,`Run with a model: coder run --model <name> "<task>"`],i)),o.stdout.write(`${s.join(`
|
|
3
|
+
`)}\n`)}export{s as commandModelList};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,t}from"./cli-Fp28pM4Y.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{n as i,o as a}from"./args-BekfmD9t.js";import o from"node:process";function s(e){if(!e.length)return void o.stdout.write(`${r.dim(`No engine credentials.`)}\n`);o.stdout.write(`${n([{header:`variable`,value:e=>e.subscription?`${e.name} subscription`:e.name,paint:e=>r.cyan(e)},{header:`scope`,value:e=>e.scope},{header:`value`,value:e=>e.masked},{header:`account`,value:e=>[e.account?.email,e.account?.plan].filter(Boolean).join(` `)}],e,r)}\n`)}const c=e({name:`credentials list`,globalFlags:{cwd:!1},help:{usage:`coder credentials list [--server [url]] [--json]`,flags:[t]},options:{json:i,server:a,yes:i},run:async({options:e})=>{let{credentials:t}=await import(`./remote-f-uny3XZ.js`).then(e=>e.i);return t.list(e)},print:s});export{c as commandCredentialsList};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,r as t}from"./cli-Fp28pM4Y.js";import{g as n,p as r,s as i}from"./output-BKeyLbvt.js";import{s as a,t as o}from"./args-BekfmD9t.js";import{describe as s}from"./add-CD_L-WW8.js";import c from"node:process";function l({connections:e,declared:t}){let a=r;c.stdout.write(e.length?n([{header:`name`,value:e=>e.id,paint:e=>a.cyan(e)},{header:`connects`,value:e=>s(e),paint:e=>a.light(e)},{header:`access`,value:e=>e.access===`read`?`Read-only`:e.access?`Read-write`:`Default`},{header:`for`,value:e=>e.mine?`you`:e.owner?e.owner:`workspace`},{header:`status`,value:e=>e.status}],e,a):`${a.dim(`No connections.`)}\n`),t.length&&c.stdout.write(`\n${a.bold(`Declared in this repository`)}\n${n([{header:`name`,value:e=>e.name,paint:e=>a.cyan(e)},{header:`in`,value:e=>e.source},{header:`runs`,value:e=>e.target,paint:e=>a.light(e)},{header:`here`,value:e=>e.approved?`approved`:`needs approval`}],t,a)}`);let o=[...t.filter(e=>!e.approved).map(e=>`Approve: coder connection approve ${e.name}`),...e.length?[]:[`Add one: coder connection add <name> --env <NAME>`]];o.length&&c.stdout.write(`\n${i(o,a)}\n`)}const u=e({name:`connection list`,help:{usage:`coder connection list [--server [url]] [--json] [--cwd <dir>]`,summary:`Your connections, and the MCP servers this repository and its agents declare with whether each is approved on this machine.`,flags:[t]},options:{...o,...a},run:async({options:e,cwd:t})=>{let{connection:n}=await import(`./connection-Cb0TK201.js`).then(e=>e.n);return n.list({...e,cwd:t})},print:l});export{u as commandConnectionList};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Rt as e,en as t,qi as n}from"./core-DwsAMCnL.js";import{Ar as r,At as i,Cr as a,Dr as o,G as s,Or as c,Tr as l,W as u,_r as d,an as f,at as p,et as m,gr as h,hr as g,mr as _,yr as v}from"./prompts-CEf7z4i_.js";import y from"node:path";import{fileURLToPath as b}from"node:url";import x from"node:fs";var ee={name:`Coder`,description:`Answers engineering questions, reviews pull requests, and makes requested changes.`,permissions:`workspace-write`,integrations:{github:{events:{pull_request:{flow:`review`,permissions:`read-only`},mention:!0,issue:!0,comment:{match:`[Cc]oder`}}},slack:{events:{mention:!0,dm:!0,command:!0,channel:{match:`[Cc]oder`}}},linear:{events:{mention:!0}}}};const S=c().check(t(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),C=g([`low`,`medium`,`high`]),w=g([`read-only`,`workspace-write`,`auto`]),T=g([`read`,`write`]),te=o({flow:a(S),match:a(c().check(e(1))),permissions:a(w),actAs:a(v(`requester`))}),ne=o({events:a(r([h(c()),l(c(),r([S,te,v(!0)]))]))}),E=o({$schema:a(c()),name:a(c().check(e(1))),description:a(c()),engine:a(c()),runner:a(c().check(e(1))),model:a(c()),effort:a(C),permissions:a(w),access:a(T),mcp:a(l(S,s)),integrations:_(l(c(),ne),{})}),D=o({allowedEvents:a(h(c()))}),O=o({connections:a(h(c())),engine:a(c()),model:a(c()),effort:a(C),permissions:a(w),access:a(T),integrations:a(l(c(),D)),disabled:a(d())}),k=l(S,r([d(),O]));function A(e){return e.issues.map(e=>`${e.path.map(String).join(`.`)||`(root)`}: ${e.message}`).join(`; `)}function re(e){let t=e?.mcp;return!t||typeof t!=`object`?e:{...e,mcp:Object.fromEntries(Object.entries(t).map(([e,t])=>{if(!t||typeof t!=`object`)return[e,t];let{repository:n,...r}=t;return[e,r]}))}}function j(e,t,n=!0){let r=E.safeParse(re(t));if(!r.success)throw Error(`Invalid agent definition "${e}": ${A(r.error)}`);let{$schema:i,...a}=r.data;return p(a.mcp,n),a}function M(e){if(e===void 0)return{};let t=k.safeParse(e);if(!t.success)throw Error(`Invalid agents usage: ${A(t.error)}`);return t.data}function N(e){return e?.events?Array.isArray(e.events)?e.events:Object.keys(e.events):[]}function P(e,t){if(!e?.events)return;if(Array.isArray(e.events))return e.events.includes(t)?{}:void 0;if(!Object.prototype.hasOwnProperty.call(e.events,t))return;let n=e.events[t];return n===!0?{}:typeof n==`string`?{flow:n}:n}function F(e,t){let n=[],r=Object.keys(t).sort().join(`, `)||`none`;for(let i of e){for(let[e,a]of Object.entries(i.definition.integrations)){let o=`agents.${i.id}.integrations.${e}`,s=t[e];if(!s){n.push(`${o}: unknown integration; valid: ${r}`);continue}let c=Object.keys(s.events).sort().join(`, `)||`none`;for(let e of N(a)){e in s.events||n.push(`${o}.events.${e}: unknown event; valid: ${c}`);let t=P(a,e)?.match;if(t!==void 0)try{new RegExp(t)}catch{n.push(`${o}.events.${e}.match: invalid regex`)}}}for(let[e,a]of Object.entries(i.usage?.integrations??{})){let o=`agents.${i.id}.integrations.${e}`,s=t[e];if(!s){n.push(`${o}: unknown integration; valid: ${r}`);continue}let c=Object.keys(s.events).sort().join(`, `)||`none`;for(let e of a.allowedEvents??[])e in s.events||n.push(`${o}.allowedEvents: unknown event "${e}"; valid: ${c}`)}}return n}function I(e){return e.definition.access===`read`||e.usage?.access===`read`?`read`:`write`}function L(e,t){let n=N(e.definition.integrations[t]),r=e.usage?.integrations?.[t]?.allowedEvents;return r===void 0?n:n.filter(e=>r.includes(e))}function R(e){return{engine:e.usage?.engine??e.definition.engine,model:e.usage?.model??e.definition.model,effort:e.usage?.effort??e.definition.effort,permissions:e.usage?.permissions??e.definition.permissions??`read-only`}}const z={"read-only":0,"workspace-write":1,auto:2};function B(e,t){return t&&z[t]<=z[e]?t:e}var V=n({AgentLoadError:()=>H,agentsFromSources:()=>Y,assertNotReserved:()=>X,builtinDefinitions:()=>K,defaultAgent:()=>q,loadAgents:()=>$,repoAgentOverride:()=>Q}),H=class extends Error{};const U=b(new URL(`./builtin/coder/`,import.meta.url)),W={coder:{json:ee,builtin:!0,dir:U,systemPrompt:x.readFileSync(y.join(U,`system.md`),`utf8`)}};function G(e,t=!1){let n={},r;try{r=x.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return n}for(let i of r){let r=y.join(e,i),a=y.join(r,`agent.json`);x.statSync(a,{throwIfNoEntry:!1})?.isFile()&&(n[i]={json:JSON.parse(x.readFileSync(a,`utf8`)),builtin:t,dir:r})}return n}function K(){return W}function q(){return`coder`}function J(e,t){let n=Object.entries(e.integrations).flatMap(([e,n])=>{let r=t[e]?.events;if(!r)return[];let i=Array.isArray(n.events)?n.events.filter(e=>e in r):n.events&&Object.fromEntries(Object.entries(n.events).filter(([e])=>e in r));return[[e,{...n,...i?{events:i}:{}}]]});return{...e,integrations:Object.fromEntries(n)}}function Y(e,t,n){let r=M(e.usage),i=Object.keys(r).filter(t=>!(t in e.definitions));if(i.length){let t=Object.keys(e.definitions).sort().join(`, `)||`none`;throw Error(`Invalid agents:\n agents.${i.sort().join(`, agents.`)}: no agent definition; known ids: ${t}`)}let a=[];for(let[n,i]of Object.entries(e.definitions)){let o=r[n],s=o===!1?{disabled:!0}:o,c=typeof s==`object`&&s.disabled;if(c&&!e.includeDisabled)continue;let l;try{l=j(n,i.json,i.repository??!i.builtin)}catch(e){if(c)continue;throw new H(e instanceof Error?e.message:String(e))}let u=i.builtin?J(l,t):l;a.push({id:n,name:u.name??n,definition:u,...typeof s==`object`?{usage:s}:{},...i.dir?{dir:i.dir}:{},builtin:i.builtin})}let o=F(a.filter(e=>!e.usage?.disabled),t);if(o.length)throw new H(`Invalid agents:\n ${o.join(`
|
|
2
|
+
`)}`);return a}function X(e){let t=e.filter(e=>e in K()).sort();if(t.length)throw Error(`Invalid agents:\n agents.${t.join(`, agents.`)}: built-in agent ids are reserved`)}function Z(e){let t=m(f(y.resolve(e)));return{file:t,usage:x.existsSync(t)?JSON.parse(x.readFileSync(t,`utf8`)).agents??{}:{}}}function Q(e,t,n){let{file:r,usage:i}=Z(e),a=i[t],o=typeof a==`boolean`?!a:a?.disabled;return o===void 0||o===n?void 0:r}async function $(e,t,{includeDisabled:n=!1}={}){e=y.resolve(e);let r={...K()},a=G(i(`agents`));for(let e of Object.values(a))e.repository=!1;let o=G(y.join(e,`.coder`,`agents`));X([...Object.keys(a),...Object.keys(o)]),Object.assign(r,a,o);let s={...u(e).agents},{usage:c}=Z(e);for(let e of Object.keys(s))!(e in r)&&!(e in c)&&delete s[e];return Y({definitions:r,usage:s,includeDisabled:n},t,e)}export{q as a,Q as c,R as d,P as f,L as g,M as h,K as i,I as l,j as m,Y as n,$ as o,B as p,X as r,V as s,H as t,N as u};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{At as t,Ln as n,Nn as r,en as i,tn as a,ur as o}from"./prompts-CEf7z4i_.js";import{i as s,m as c,n as l,o as u}from"./load-C-GZnuok.js";import{t as d}from"./integrations-DPxWtNnS.js";import f from"node:path";import p from"node:fs";import{execFile as ee}from"node:child_process";import{randomUUID as te}from"node:crypto";import{isDeepStrictEqual as m}from"node:util";const h=(e,t=``)=>`token:${e}:${t}`,g=e=>`token-drop:${e}`;var ne=e({agentProblems:()=>D,agentWithVersion:()=>x,diskFiles:()=>k,ensureBuiltinAgents:()=>M,getAgent:()=>v,getVersion:()=>b,listAgents:()=>y,publishAgent:()=>S,publishVersion:()=>C,seedBuiltinAgent:()=>A,seedBuiltinAgents:()=>j,setAgentSettings:()=>w,toAgent:()=>O,versionKey:()=>_});const _=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function v(e,t){return e.get(`agent`,t)}async function y(e){return(await e.list(`agent`)).map(e=>e.value)}async function b(e,t,n){let r=n??(await v(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,_(t,r))}async function x(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function S(e,t,n){let r=c(t.id,t.definition),i=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??r.name??t.id,...t.description??r.description?{description:t.description??r.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:r,systemPrompt:t.systemPrompt,...i?{files:i}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n})}async function C(e,t,n,r){if(!r)return(await S(e,t,n)).version;let i=c(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await v(e,t.id),s=r?r.version:o?await b(e,t.id,o.currentVersion):void 0,l=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),u=e=>m(e.definition,i)&&e.systemPrompt===t.systemPrompt&&m(e.files,a);if(s&&u(s)){let r=l(s.version,o.updatedAt);return m(o,r)||await e.put(`agent`,t.id,l(s.version,n)),s}o||await e.put(`agent`,t.id,l(0,n));let d;for(let r=(o?.currentVersion??0)+1;d={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,_(t.id,r),d);r++){let n=await e.get(`agentversion`,_(t.id,r));if(n&&u(n)){d=n;break}}let f=await v(e,t.id);return(!f||f.currentVersion<d.version)&&await e.put(`agent`,t.id,l(d.version,n)),d}async function w(e,t,n,r=Date.now()){let i=await v(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}const T=[`read-only`,`workspace-write`,`auto`];function E(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},o=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),s=Object.fromEntries([...o].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),c=i.permissions??e.permissions??`read-only`,l=a.permissions,u=l&&T.indexOf(l)<=T.indexOf(c)?l:c,d=i.access===`read`||a.access===`read`?`read`:a.access??i.access;return{...i,...a,permissions:u,...d?{access:d}:{},...o.size?{integrations:s}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function D(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];try{return l({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:e.settings}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function O(e,t,n,r=d){let i=E(t.definition,void 0,e.settings,r),a=E(t.definition,i,n,r),[o]=l({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:a}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function k(e,t=``){let n={};for(let r of p.readdirSync(f.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,k(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=p.readFileSync(f.join(e,i),`utf8`))}return n}async function A(e,t,n,i){let a=s()[n];return a?await C(e,{id:n,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${r()}`},t,i)!==i.version:!1}async function j(e,t,n){let r=n??await Promise.all(Object.keys(s()).map(t=>x(e,t))),i=!1;for(let n of Object.keys(s()))await A(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function M(e,t){let n=e.settings??={};return n.builtinAgents||=j(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}const N=3e4;var P=class extends Error{};function F(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const I=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function L(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-6BgpUsFh.js`).then(e=>e.wt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function R(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new P(`Installation "${t}" is bound through another app.`)}function z(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function B(e,t){let n=e.sending?.count??0;return t===void 0?n:e.items.findIndex((e,r)=>r<n&&e.admission===t)+1}function V(e,t,n,r){let{sending:i,...a}=e,o=t?B(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+N}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:z(s,s.owner,[],s.at)}function H(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:te()},a=i.version??i.messages.length+i.more,o=i.messages.map((e,t)=>({sequence:t+1,...e}));if(t)return{...i,version:a+1,messages:o.length<50?[...o,{...t,sequence:a+1}]:o,more:i.more+(o.length<50?0:1)};if(i.epoch!==r)return i;let s=Math.max(i.acknowledged??0,Math.min(n,a)),c=o.filter(e=>e.sequence>s);return{...i,version:a,acknowledged:s,messages:c,more:a-s-c.length}}function U(e){let{sending:t,...n}=e;return z({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,t){let n=`${e}:${t}`,r=o();return this.recordEvents.addEventListener(n,r.notify),{...r,close:()=>{this.recordEvents.removeEventListener(n,r.notify),r.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(I(e,t),()=>L(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||t.id>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t){let{publishVersion:n}=await Promise.resolve().then(()=>ne);return this.withAppLock(`agent:${e.id}`,async()=>{let r=(await this.listAgentsWithVersions(e.id))[0]??{},i=await n(this,{...e,definition:t.definition,systemPrompt:t.systemPrompt,files:t.files,commit:t.commit,origin:t.source,importedFrom:t.importedFrom},e.updatedAt,r);return{record:await this.get(`agent`,e.id),version:i,unchanged:i.version===r.record?.currentVersion}})}async listCredentials(e){return(await this.list(`credential`)).filter(({value:t})=>!t.owner||t.owner===e.owner).slice(0,e.limit)}async installationApp(e){let t=await this.get(`installation`,e);if(!t||t.deletedAt)return;let n=await this.get(`app`,t.app);return n?{installation:t,app:n}:void 0}async getApps(e){return(await Promise.all([...new Set(e)].map(async e=>({id:e,value:await this.get(`app`,e)})))).filter(e=>!!e.value)}async updateMetadata(e,t,n){let r=await this.get(e,t);return r?(await this.put(e,t,{...r,...n}),!0):!1}async listHistory(e){return(await this.list(`history`,{prefix:`${e}:`})).map(({value:{engine:e,conversation:t,savedAt:n}})=>({engine:e,conversation:t,savedAt:n})).sort((e,t)=>e.savedAt-t.savedAt)}async conversationState(e){let[t,n,r]=await Promise.all([this.get(`delivery`,e),this.get(`delivery`,`since:${e}`),this.get(`delivery`,`batch:${e}`)]),i=t&&await this.get(`task`,t.taskId);return{record:t,unseen:n,batch:r,...i?.task.flow==="default"?{status:i}:{}}}async markConversation(e,t,n,r,i){let a=await this.get(`delivery`,e);a?.taskId===t&&await this.put(`delivery`,e,{...a,at:r,seen:n},{ttlMs:i})}async heldTokens(e,t){let n={held:new Map,drops:new Map};for(let t of e)for(let e of await this.list(`snapshot`,{prefix:h(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(g(r),(await this.get(`snapshot`,g(r)))?.drop);return n}async holdToken(e){(await Promise.all(e.drops.map(async e=>(await this.get(`snapshot`,e.key))?.drop===e.drop))).every(Boolean)&&await this.put(`snapshot`,e.key,e.value,{ttlMs:e.ttlMs})}saveTaskSecrets(e,t){return this.withAppLock(`connections:${e}`,async n=>{let r=await n.get(`task`,e),i=!!(r&&![`completed`,`failed`,`cancelled`].includes(r.status));if(i)for(let e of t)await n.put(`snapshot`,e.id,{secret:e.value,expiresAt:e.expiresAt},{ttlMs:Math.max(1,e.expiresAt-this.now())});return i})}async dispatchState(e){let{key:t,owner:n,at:r,ttlMs:i}=e.delivery,a=this.live(`delivery`).get(t)?.value,o=a?.pending!==void 0&&(!a.owner||(a.at??0)+i<=r);return a&&!o?{claimed:!1}:(await this.put(`delivery`,t,{at:r,owner:n,pending:a?.pending??!0},a?.pending&&a.pending!==!0?{}:{ttlMs:i}),{claimed:!0})}async usageTotals(e){let{sumUsageTotals:t}=await import(`./apps-6BgpUsFh.js`).then(e=>e.wn);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-6BgpUsFh.js`).then(e=>e.wn);return n((await this.list(`usage`)).map(e=>e.value),e,t).totals}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}changed(e){}read(e,t){let n=t;if(e!==`app`||!n.shared)return t;let r=this.live(`app`).get(n.shared)?.value;return{...n,credentials:r?.credentials??``}}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){let n=this.live(e).get(t);return n&&this.read(e,n.value)}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,this.recordEvents.dispatchEvent(new Event(`login:${e}`)),a}async completeLogin(e,t,n){let{completeLogin:r}=await import(`./apps-6BgpUsFh.js`).then(e=>e.wt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&R([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>F(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:H(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=H(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=z(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=U(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+N,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=V(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},re=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(p.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){p.mkdirSync(f.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{p.writeFileSync(n,t,{mode:384}),p.renameSync(n,e)}finally{p.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new n){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>L(this,e,t,n);return e===`credential`?this.connections().withLock(r,I(e,t)):super.withAppLock(I(e,t),r)}get appsFile(){return t(`apps.json`)}get deliveriesFile(){return f.join(a(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?i():e===`snapshot`?f.join(a(``),`snapshots.json`):f.join(a(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=p.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return f.join(a(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=p.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
|
|
2
|
+
`).filter(Boolean)){let{id:n,...r}=JSON.parse(e);t.set(n,r)}}catch(e){if(e.code!==`ENOENT`)throw e}return this.logBuckets.set(e,t),t}entries(e){if(e===`connection`)return this.connections().list().map(e=>[e.id,e]);if(e===`credential`)return this.connections().credentials().map(e=>[e.id,e.value]);if(G.has(e)){let t=this.apps(),n=Object.entries(t[e]??{});return e===`app`?n.map(([e,n])=>{let r=n,i=r.shared?t.app?.[r.shared]:void 0;return[e,r.shared?{...r,credentials:i?.credentials??``}:r]}):n}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(e===`connection`)return this.connections().get(t);if(e===`tasklog`){let e=this.loadLog(t.slice(0,t.lastIndexOf(`:`))).get(t);return e&&(e.expiresAt===void 0||e.expiresAt>this.now())?e.value:void 0}return!G.has(e)&&!K.has(e)?super.get(e,t):this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(e===`tasklog`)return this.putMany(e,[{id:t,value:n}],r);if(!G.has(e)&&!K.has(e))return super.put(e,t,n,r);await this.serial(()=>this.write(e,t,n),K.has(e))}write(e,t,n){if(e===`connection`){this.connections().put(n);return}if(e===`credential`&&t!==`claude`&&t!==`codex`){this.connections().putCredential(t,n);return}if(G.has(e)){let r=this.apps();e===`installation`&&R(Object.entries(r.installation??{}),t,n),e===`app`&&n.shared&&(n={...n,credentials:``}),r[e]={...r[e],[t]:n},Y(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else this.refuse(e)}remove(e,t){if(e===`connection`){let e=this.connections(),n=!!e.get(t);return e.delete(t),n}if(e===`credential`){let e=this.connections(),n=e.credentials().some(e=>e.id===t);return e.deleteCredential(t),n}if(G.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],Y(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}return!1}async putMany(e,t,n={}){if(e===`tasklog`){let e=new Map;for(let{id:r,value:i}of t){let t=r.slice(0,r.lastIndexOf(`:`)),a=e.get(t)??[];a.push(JSON.stringify({id:r,value:i,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})),e.set(t,a)}for(let[t,n]of e){let e=this.logFile(t);p.mkdirSync(f.dirname(e),{recursive:!0}),p.appendFileSync(e,`${n.join(`
|
|
3
|
+
`)}\n`,{mode:384})}for(let{id:e,value:r}of t)this.loadLog(e.slice(0,e.lastIndexOf(`:`))).set(e,{value:r,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})}else if(!G.has(e)&&!K.has(e))await super.putMany(e,t,n);else for(let r of t)await this.put(e,r.id,r.value,n)}async list(e,t={}){if(e===`tasklog`){let e=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0;if(e!==void 0)this.loadLog(e);else{let e=f.dirname(this.logFile(``));if(p.existsSync(e))for(let t of p.readdirSync(e))t.endsWith(`.jsonl`)&&this.loadLog(decodeURIComponent(t.slice(0,-6)))}return(e===void 0?[...this.logBuckets.values()]:[this.loadLog(e)]).flatMap(e=>[...e]).filter(([e,n])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)&&(n.expiresAt===void 0||n.expiresAt>this.now())).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}if(!G.has(e)&&!K.has(e))return super.list(e,t);let n=e===`installation`&&t.agent?this.apps().app:void 0;return this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).filter(([e,r])=>F(e,r,t,n?.[r.app]?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([n,r])=>{let i=r;return{id:n,value:(e===`connection`&&t.secrets&&(t.secrets===`all`||i.provider===`mcp`&&i.auth===`oauth`)?this.connections().get(n):void 0)??r}})}async delete(e,t){if(e===`tasklog`){let e=t.slice(0,t.lastIndexOf(`:`)),n=this.loadLog(e);n.delete(t),Y(this.logFile(e),[...n].map(([e,t])=>JSON.stringify({id:e,...t})).join(`
|
|
4
|
+
`)+`
|
|
5
|
+
`);return}if(!G.has(e)&&!K.has(e)){await super.delete(e,t),e===`task`&&(p.rmSync(this.logFile(t),{force:!0}),this.logBuckets.delete(t));return}await this.serial(()=>this.remove(e,t),K.has(e))}async create(e,t,n,r={}){return e===`tasklog`?this.serial(async()=>!await this.get(e,t)&&(await this.put(e,t,n,r),!0)):!G.has(e)&&!K.has(e)?super.create(e,t,n,r):this.serial(()=>!this.entries(e).some(([e])=>e===t)&&(this.write(e,t,n),!0),K.has(e))}async take(e,t,n){return!G.has(e)&&!K.has(e)&&e!==`tasklog`?super.take(e,t,n):this.serial(async()=>{let r=await this.get(e,t);if(!(r===void 0||Object.entries(n??{}).some(([e,t])=>r[e]!==t)))return e===`tasklog`?await this.delete(e,t):this.remove(e,t),r},K.has(e))}};function ie(e){let t=f.resolve(e);for(;!p.existsSync(f.join(t,`.git`));){let e=f.dirname(t);if(e===t)return Promise.resolve(void 0);t=e}return new Promise(t=>ee(`git`,[`log`,`-1`,`--format=%H`,`--`,`.`],{cwd:e},(e,n)=>t(e?void 0:n.trim()||void 0)))}async function Z(e,n,r,i){let a=await u(n,r,{includeDisabled:!0}),o=await Promise.all(a.filter(e=>!i||e.id===i).map(async n=>{let r=n.usage?{settings:n.usage}:{};if(n.builtin){let{record:t,version:i}=await x(e,n.id);if(!t)return;let a={...t,settings:void 0,...r,local:!0};return await e.put(`agent`,n.id,a),{record:a,version:i}}if(!n.dir)return;let i=await ie(n.dir),a=p.statSync(f.join(n.dir,`agent.json`)),o=f.join(n.dir,`system.md`),s={agent:n.id,version:1,definition:n.definition,systemPrompt:p.existsSync(o)?p.readFileSync(o,`utf8`):``,files:k(n.dir),...i?{commit:i}:{},importedFrom:`local:${n.dir}`,createdAt:a.mtimeMs},c={id:n.id,name:n.name,...n.definition.description?{description:n.definition.description}:{},source:f.resolve(n.dir)===t(`agents`,n.id)?`home`:`repo`,path:n.dir,currentVersion:1,...r,local:!0,...i?{commit:i}:{},createdAt:a.birthtimeMs||a.mtimeMs,updatedAt:a.mtimeMs};return await e.put(`agentversion`,_(n.id,1),s),await e.put(`agent`,n.id,c),{record:c,version:s}}));if(!i){let t=new Set(a.map(e=>e.id));for(let n of await y(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return o.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function Q(e,n,r,i){let a=(await u(e,n,{includeDisabled:!0})).find(e=>e.id===r&&!e.builtin)?.dir??t(`agents`,r),o={...i.files,"agent.json":`${JSON.stringify(i.definition,null,2)}\n`,"system.md":i.systemPrompt};for(let[e,t]of Object.entries(o))p.mkdirSync(f.dirname(f.join(a,e)),{recursive:!0}),p.writeFileSync(f.join(a,e),t)}async function $(e,n,r){let i=(await u(e,n,{includeDisabled:!0})).find(e=>e.id===r&&!e.builtin);if(!i?.dir)throw Error(`No local agent named "${r}".`);return f.resolve(i.dir)===t(`agents`,r)&&(p.rmSync(i.dir,{recursive:!0}),!0)}export{g as C,O as S,S as _,Q as a,j as b,R as c,P as d,D as f,b as g,v as h,Z as i,L as l,M as m,$ as n,W as o,x as p,re as r,z as s,X as t,N as u,C as v,h as w,w as x,A as y};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";var t=e({LogView:()=>s,addTokens:()=>n,isApproval:()=>r,logEntry:()=>o,stripCwd:()=>a});function n(e,t){return t?e?{input:e.input+t.input,cachedInput:e.cachedInput+t.cachedInput,output:e.output+t.output,total:e.total+t.total}:{...t}:e}const r=e=>e.includes(`approval`)||e===`sidecar-decision`||e===`auto-review`,i=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g;function a(e,t){return t?e.split(`${t}/`).join(``).split(t).join(`.`):e}function o(e){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e=`kind`in t&&typeof t.kind==`string`?t.kind:void 0,n=`message`in t&&typeof t.message==`string`?t.message:void 0;if(e!==void 0||n!==void 0)return{...t,kind:e,message:n,at:`at`in t&&typeof t.at==`string`?t.at:void 0}}}catch{}}var s=class{cwd;opts;prevKind=null;lastAssistant=``;lastToolText=``;openCalls=[];callIds=new WeakMap;approval;approvals=new Map;lastUsageTotal=0;constructor(e,t={}){this.cwd=e,this.opts=t}get lastAssistantMessage(){return this.lastAssistant}reduce(e){let t=e.entry,n=t?String(t.kind??`status`):`line`,i=t?n===`tool-result`?this.close(e,t):r(n)?this.decide(e,t,n):void 0:void 0;if(i)return this.prevKind=n,[i];let o={seq:e.seq,at:e.at,kind:`status`,title:``,sourceKind:n,separated:!1,tone:`muted`};if(!t)o.kind=e.level===`err`?`error`:e.level===`sys`?`status`:`line`,o.title=a(e.line,this.cwd),e.level===`err`&&(o.tone=`error`);else if(n===`usage`){let e=t.tokens;if(!e)return[];let n=this.lastUsageTotal>0,r=e.total-this.lastUsageTotal;if(!n||r<Math.max(2e4,this.lastUsageTotal*.2))return this.lastUsageTotal=Math.max(this.lastUsageTotal,e.total),[];this.lastUsageTotal=e.total,o.kind=`usage`,o.tokens=e,o.title=`ctx ${l(e.input+e.cachedInput)} · out ${l(e.output)}`}else if(n===`approval-decision`&&t.decision===`escalate`||n===`approval-escalated`){let e=a(t.summary?String(t.summary):``,this.cwd),r=/^(?:run command: |Run command\. |Apply file changes\. |\w+: )?([\s\S]*)$/.exec(e)[1],i=String(t.method??``),s=i&&!i.includes(`/`)?i:this.openCalls.at(-1)?.tool,c=r.startsWith(`{`)?``:r.split(/\s+/)[0],l=a(t.reason?String(t.reason):``,this.cwd);o.kind=`approval`,o.title=[`Approval`,[s,c].filter(Boolean).join(` `)].filter(Boolean).join(` · `),o.detail=[r,l&&`Policy · ${l}`].filter(Boolean).join(`
|
|
2
|
+
`),o.state=n===`approval-escalated`?`waiting`:`escalated`,n===`approval-escalated`?this.approvals.set(String(t.approvalId),o):this.approval=o}else if(r(n)&&(t.decision||!t.message)){o.kind=`approval`;let e=n===`sidecar-decision`?`sidecar`:n===`auto-review`?`auto-review`:`approval`,r=t.riskLevel?`(${String(t.riskLevel)} risk)`:``,i=a(t.summary?String(t.summary):``,this.cwd),s=i.slice(i.indexOf(`: `)+2),c=i&&s&&this.lastToolText.includes(s)?``:i,l=c?``:String(t.method??``);o.title=`${[e,String(t.decision??``),r,l].filter(Boolean).join(` `)}${c?` · ${c}`:``}`,o.detail=a(t.reason?String(t.reason):``,this.cwd)}else{let e=t.message?String(t.message):n===`tool-result`?`(no output)`:String(t.tool||t.kind||``);if(!e&&!(n===`tool-result`&&(t.exitCode!=null||t.isError)))return[];o.title=a(e,this.cwd),n===`assistant`?(o.kind=`assistant`,o.tone=void 0,this.lastAssistant=o.title):n===`error`||n===`steer`?(o.kind=n,o.tone=n===`error`?`error`:`warning`):n===`reasoning`?(o.kind=`reasoning`,o.durationMs=typeof t.durationMs==`number`?t.durationMs:0):n===`tool`?(o.kind=`tool`,t.tool&&(o.tool=String(t.tool)),this.lastToolText=o.title,t.callId&&this.callIds.set(o,String(t.callId)),this.openCalls.push(o)):n===`tool-result`&&(o.kind=`tool-result`,o.title=this.output(e),o.exitCode=typeof t.exitCode==`number`?t.exitCode:void 0,o.tone=o.exitCode!==void 0&&o.exitCode!==0||t.isError===!0?`error`:`muted`,o.durationMs=typeof t.durationMs==`number`?t.durationMs:0,t.tool&&(o.tool=String(t.tool)))}return this.prevKind!==null&&(o.separated=[`assistant`,`error`,`steer`].includes(n)||n===`reasoning`&&this.prevKind!==`reasoning`||n===`tool`&&[`assistant`,`reasoning`].includes(this.prevKind)),this.prevKind=n,[o]}close(e,t){let n=t.tool?String(t.tool):void 0,r=t.callId?this.openCalls.findIndex(e=>this.callIds.get(e)===String(t.callId)):-1,i=t.callId?r:n?this.openCalls.findIndex(e=>e.tool===n):this.openCalls.length-1;if(i<0)return;let[o]=this.openCalls.splice(i,1),s=typeof t.exitCode==`number`?t.exitCode:void 0,c=typeof t.durationMs==`number`?t.durationMs:e.at-o.at||0;return{...o,title:t.callMessage?a(String(t.callMessage),this.cwd):o.title,result:{ok:!s&&t.isError!==!0,exitCode:s,durationMs:Math.max(0,c),detail:this.output(t.message?String(t.message):``)}}}decide(e,t,n){let r=String(t.approvalId??``),i=t.decision===`accept`;if(n===`sidecar-decision`&&this.approval){let n=a(t.reason?String(t.reason):``,this.cwd),r={...this.approval,detail:[this.approval.detail,n&&`Sidecar · ${n}`].filter(Boolean).join(`
|
|
3
|
+
`)};return t.decision===`escalate`?this.approval=r:(this.approval=void 0,c(r,e,`${i?`accepted`:`denied`} by sidecar`,i))}if(n===`approval-escalated`&&this.approval){let e={...this.approval,state:`waiting`};return this.approval=void 0,this.approvals.set(r,e),e}let o=this.approvals.get(r);if(!(!o||n!==`approval-answered`&&n!==`approval-timeout`))return this.approvals.delete(r),n===`approval-timeout`?c(o,e,`timed out`,!1):c(o,e,`${i?`accepted`:`denied`} by reviewer`,i)}output(e){return a(this.opts.keepAnsi?e:e.replace(i,``),this.cwd)}};function c(e,t,n,r){return{...e,state:n,result:{ok:r,durationMs:Math.max(0,t.at-e.at||0),detail:``}}}function l(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}export{o as n,t as r,n as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{U as e}from"./dispatch-BJZqI7sj.js";import{a as t,i as n,r}from"./prompt-DQyPCLUo.js";import{i,r as a}from"./cli-Fp28pM4Y.js";import{p as o}from"./output-BKeyLbvt.js";import{c as s,i as c,n as l}from"./args-BekfmD9t.js";import u from"node:process";const d=t=>{throw t instanceof e&&t.code===`login-failed`?new e(`invalid-option`,t.message,t.hint?{hint:t.hint}:{}):t},f=i({name:`auth login`,globalFlags:{cwd:!1},help:{usage:`coder auth login [--server [url]] [--workspace <slug>] [--device] [--json]`,summary:`Sign in with Wular Auth in your browser. The CLI keeps the tokens in ~/.coder/session.json, and commands that talk to a server then act as you.`,flags:[a,[`--device`,`show a code to approve on another device; the default without a local browser`]],env:[[`CODER_SERVER`,`the server to use instead of https://coder.wular.ai`]],examples:[[`coder auth login`,`sign in to the hosted service`],[`coder auth login --server https://agents.example.com`,`sign in to a self-hosted server`]]},options:{json:l,server:c,workspace:s,yes:l,device:l},run:async({options:e})=>{let{hasBrowser:i,sessions:a}=await import(`./remote-f-uny3XZ.js`).then(e=>e.s);return a.login({server:e.server,yes:e.yes,device:e.device||!i(),open:e=>{u.stdout.write(`Opening your browser to sign in. If it does not open, visit\n${o.light(e)}\n`),n(e)},onCode:(e,t)=>u.stdout.write(`Confirm this code in your browser: ${o.bold(e)}\n${o.light(t)}\n`),organization:e.workspace,...r()?{chooseOrganization:async e=>{let[n]=await t({title:`Workspace`,hint:`Commands for this server use this workspace by default.`,options:e.map(e=>({value:e.slug,label:e.name,hint:e.slug}))});return n}}:{}}).catch(d)},json:e=>({server:e.server,user:e.user,organization:e.organization}),print:e=>{let t=o;u.stdout.write(`${t.green(`✔`)} Signed in to ${t.bold(e.server)} as ${e.user.email}${e.organization?` ${t.dim(`· ${e.organization.name}`)}`:``}\n`)}});export{f as commandLogin,d as ownHint};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,t}from"./cli-Fp28pM4Y.js";import{p as n,r,s as i}from"./output-BKeyLbvt.js";import{n as a,o}from"./args-BekfmD9t.js";import s from"node:process";import c from"node:readline/promises";function l(e){e.url&&s.stderr.write(`Open ${n.cyan(e.url)}\n`),e.code&&s.stderr.write(`Enter the code ${n.bold(e.code)}\n`)}async function u(){let e=c.createInterface({input:s.stdin,output:s.stderr}),t=(await e.question(`Paste the code from the sign-in page `)).trim();return e.close(),t}function d(e){if(e.state===`failed`)return void s.stderr.write(`${r.red(e.error??`Sign-in failed.`)}\n\n${i([`Try again`],r)}\n`);s.stdout.write(`Signed in. Your ${n.bold(e.engine)} subscription is saved.\n`)}const f=e({name:`credentials login`,globalFlags:{cwd:!1},help:{usage:`coder credentials login <claude|codex> [--server [url]] [--json]`,summary:`Runs the official claude or codex sign-in on the server's runner, prints the sign-in link or device code, and waits. Claude asks you to paste the code the sign-in page shows. The result replaces your subscription for that engine. Needs CLAUDE_SUBSCRIPTIONS=1 or CODEX_SUBSCRIPTIONS=1 on the server.`,flags:[t]},options:{json:a,server:o,yes:a},args:1,run:async({options:e,args:[t]})=>{let{loginCredential:n}=await import(`./remote-f-uny3XZ.js`).then(e=>e.i);return n(t,{...e,onStart:e=>s.once(`SIGINT`,()=>void e().finally(()=>s.exit(130))),onOpen:l,code:u})},print:d,exit:(e,{options:t})=>!t.json&&e.state===`failed`?1:void 0});export{f as commandCredentialsLogin};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-
|
|
1
|
+
import{i as e,r as t}from"./cli-Fp28pM4Y.js";import{i as n,n as r}from"./args-BekfmD9t.js";import{ownHint as i}from"./login-CzD2EMD_.js";import a from"node:process";const o=e({name:`auth logout`,globalFlags:{cwd:!1},help:{usage:`coder auth logout [--server [url]] [--json]`,summary:`Revoke the saved session for that server at Wular Auth and forget its tokens.`,flags:[t]},options:{json:r,server:n,yes:r},run:async({options:e})=>{let{sessions:t}=await import(`./remote-f-uny3XZ.js`).then(e=>e.s);return t.logout(e).catch(i)},print:e=>a.stdout.write(`Signed out of ${e.server}.\n`)});export{o as commandLogout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{U as t}from"./dispatch-BJZqI7sj.js";import{Dt as n,xn as r,zn as i}from"./apps-6BgpUsFh.js";import{n as a}from"./env-DSddo-fz.js";import{C as o,T as s,w as c,x as l}from"./runners-vsoGeyuc.js";import{L as u,M as d,d as f,i as p,l as m,z as h}from"./schema-Brm7WIKd.js";import g from"node:process";var _=e({rotateKey:()=>y});async function v(e){try{return await e()}catch(e){throw e instanceof t?e:new t(`server`,e instanceof Error?e.message:String(e))}}function y(e={}){return v(async()=>{let _=a(e.env??g.env);if(!_.encryptionKey)throw new t(`invalid-option`,`SERVER_ENCRYPTION_KEY is required to rotate keys.`,{hint:`Set the new key in SERVER_ENCRYPTION_KEY and the old key in SERVER_ENCRYPTION_KEY_PREVIOUS.`});let v=await i(_);try{let e=new Set([v.defaultOrganizationId]);if(v.connection){let t=v.connection.db,[n,i,a]=await Promise.all([t.selectDistinct({id:f.organizationId}).from(f),t.select({key:p.key}).from(p).where(h(p.key,`o:%,"config"]:workspace`)),t.select({key:p.key}).from(p).where(h(p.key,`o:%,"connection"]:%`))]);for(let t of n)e.add(t.id);for(let t of i){let n;try{n=JSON.parse(t.key.slice(2,-10))}catch{continue}Array.isArray(n)&&n.length===2&&typeof n[0]==`string`&&n[1]===`config`&&t.key===r(n[0],`config`,`workspace`)&&e.add(n[0])}for(let t of a){let n=t.key.lastIndexOf(`,"connection"]:`);try{let r=JSON.parse(t.key.slice(2,n+14));Array.isArray(r)&&r.length===2&&typeof r[0]==`string`&&r[1]===`connection`&&e.add(r[0])}catch{}}}let t=0;for(let r of e)t+=await n(v.store(r),_);let i=v.connection?.db,a=c(_.encryptionKey);for(let e of i?await i.select().from(m).where(u(m.token)):[])s(_,e.token)!==a&&(await i.update(m).set({token:o(_,l(_,e.token))}).where(d(m.id,e.id)),t++);return{moved:t}}finally{await v.close()}})}export{y as n,_ as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as e,g as t,l as n,p as r}from"./load-C-GZnuok.js";import{t as i}from"./integrations-DPxWtNnS.js";function a(e){let t={};for(let r of Object.keys(e.definition.integrations)){let a=i[r];a&&(t[r]=a.tools.presets[n(e)])}return t}function o(n,o){if(!i[n.integration]||!t(o,n.integration).includes(n.type))return;let s=e(o.definition.integrations[n.integration],n.type);if(!s||s.match!==void 0&&!new RegExp(s.match).test(n.text))return;let c=o.usage?.permissions??o.definition.permissions;return{flow:s.flow??`default`,tools:a(o),...s.actAs?{actAs:s.actAs}:{},...c?{permissions:r(c,s.permissions)}:s.permissions?{permissions:s.permissions}:{}}}function s(e,t){return t.flatMap(t=>{let n=o(e,t);return n?[{agent:t,...n}]:[]})}export{s as n,o as t};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{An as t,Bn as n,C as r,Ct as i,gn as a}from"./prompts-CEf7z4i_.js";import{t as o}from"./integrations-DPxWtNnS.js";import{r as s}from"./history-D_A5odLI.js";import{t as c}from"./mcp-server-DQqSgD3P.js";import l from"node:path";import u from"node:process";import{randomUUID as d}from"node:crypto";import f from"node:os";import p from"node:fs/promises";const m=e=>e.replace(/&(amp|lt|gt);/g,(e,t)=>({amp:`&`,lt:`<`,gt:`>`})[t]);function h(e=``,t=!1){let n=/<event>\n([^]*?)\n<\/event>/g;if(!t&&(!e.trimStart().startsWith(`<event>`)||e.replace(n,``).trim()))return;let r=[];for(let[,i]of e.matchAll(n))try{let e=JSON.parse(m(i));if(!e||typeof e!=`object`||Array.isArray(e)){if(!t)return;continue}r.push(e)}catch(e){if(console.error(`coder: unreadable event prompt`,e),!t)return}return r.length?r:void 0}function g(e,t,n=[]){let r=[e??``,...n].flatMap(e=>(h(e,!0)??[]).flatMap(e=>typeof e.mustReply==`boolean`?[e.mustReply]:[]));return r.length?r.includes(!0):t}var _=e({agentToolServer:()=>b,agentTools:()=>v,gitToolEnvironment:()=>T,historyToolServer:()=>O,nativeToolEnvironment:()=>C,taskToolServers:()=>S,tokenEnvName:()=>y,toolServerToken:()=>x,turnToolServers:()=>w});function v(e){return e===`history`?D:void 0}function y(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}function b(e,n,r){let{server:i,presets:a}=o[e].tools,{readOnly:s,...c}=i(n,r.event,r.token),l=Object.entries(c.env??{}).find(([,e])=>e===r.token)?.[0];return{...c,...s&&c.command?{command:u.execPath,args:[t,`agent`,`tools`,e]}:{},...l?{credentialFields:{env:l}}:{},...o[e].repos?.credentialUsername?{gitCredential:n.some(e=>!a.read.includes(e))}:{}}}function x(e,t){if(!o[t])return;let n=b(t,[],{token:`\0`}),r=Object.entries(n.env??{}).find(([,e])=>e===`\0`)?.[0],i=e.find(e=>e.name===n.name),a=n.credentialFields?.header;return r?i?.env?.[r]||void 0:a?i?.headers?.[a]?.replace(/^Bearer /,``):void 0}function S(e,t){return Object.entries(e.tools).flatMap(([n,r])=>{let i=t[n];return o[n]&&i&&r.length?[b(n,r,{token:i,...e.event?{event:e.event}:{},scope:e.toolScopes?.[n]})]:[]})}function C(e,t,r){return n(Object.fromEntries([...S(e,t).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:history`,{name:`history`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}]]:[]]))}function w(e,t,n){let r=n.find(e=>e.name===`history`&&!e.command&&!e.url),i=n.filter(e=>e!==r);return e.conversation?[O(l.join(t,`job.json`),r?.env),...i]:i}async function T(e){let t=Object.values(o).flatMap(t=>{let n=t.repos,r=x(e.filter(e=>e.gitCredential),t.id);return n?.credentialUsername&&r&&!/[\r\n]/.test(r)?n.cloneHosts.map(e=>({host:e,username:n.credentialUsername,password:r})):[]});if(!t.length)return{env:{},close:async()=>{}};let n=await p.mkdtemp(l.join(f.tmpdir(),`coder-git-`)),r=l.join(n,`credential.cjs`);try{await p.writeFile(l.join(n,`tokens.json`),JSON.stringify(t),{mode:384}),await p.writeFile(r,`const fs = require('node:fs');
|
|
2
|
+
let input = '';
|
|
3
|
+
process.stdin.on('data', data => input += data);
|
|
4
|
+
process.stdin.on('end', () => {
|
|
5
|
+
if (process.argv[2] !== 'get') return;
|
|
6
|
+
const fields = Object.fromEntries(input.trim().split('\\n').map(line => { const at = line.indexOf('='); return [line.slice(0, at), line.slice(at + 1)]; }));
|
|
7
|
+
const entries = JSON.parse(fs.readFileSync(require('node:path').join(__dirname, 'tokens.json'), 'utf8'));
|
|
8
|
+
const credential = entries.find(entry => fields.protocol === 'https' && fields.host === entry.host);
|
|
9
|
+
if (credential) process.stdout.write('username=' + credential.username + '\\npassword=' + credential.password + '\\n');
|
|
10
|
+
});
|
|
11
|
+
`,{mode:384});let e=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,i=Number(u.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(i)||i<0||i>1e3)throw Error(`Invalid git config count`);return{env:{GIT_CONFIG_COUNT:String(i+2),[`GIT_CONFIG_KEY_${i}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${i}`]:``,[`GIT_CONFIG_KEY_${i+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${i+1}`]:`!${e(u.execPath)} ${e(r)}`},close:()=>p.rm(n,{recursive:!0,force:!0})}}catch(e){throw await p.rm(n,{recursive:!0,force:!0}),e}}async function E(e,t,n=fetch){let r=u.env.CODER_REPLY_URL,i=u.env.CODER_REPLY_TOKEN;if(!r||!i)throw Error(`This task has no conversation to post to`);let a=JSON.stringify({id:d(),...t});for(let t=0;;t++){let o;try{o=await n(`${r}/${e}`,{method:`POST`,headers:{authorization:`Bearer ${i}`,"content-type":`application/json`},body:a,signal:AbortSignal.timeout(6e4)})}catch(e){if(t<2)continue;throw e}let s=await o.json().catch(()=>void 0);if(!o.ok)throw Error(s?.error??`The conversation ${e} failed (${o.status})`);return{ok:!0}}}const D={reply:{description:`Post a reply now, during your turn, such as before longer work. Your final message is a reply too; never send the same text twice.`,inputSchema:{type:`object`,properties:{text:{type:`string`,description:`Markdown to post.`}},required:[`text`]},handler:async(e,t)=>{let n=u.env.CODER_HISTORY_TASK;if(!n)throw Error(`CODER_HISTORY_TASK is not set`);if(!JSON.parse(await p.readFile(n,`utf8`)).conversation)throw Error(`Only conversation tasks can reply`);if(typeof e.text!=`string`||!e.text.trim())throw Error(`Reply text is required`);let r=e.text.trim(),a=await E(`reply`,{text:r},t?.fetch);return i(l.dirname(n),{kind:`reply`,message:r}),a}},react:{description:`React to a message in this conversation with an emoji, by default the one that started your turn.`,inputSchema:{type:`object`,properties:{emoji:{type:`string`,description:`An emoji name such as thumbsup, or the emoji itself.`},message:{type:`string`,description:`A message id from the conversation.`}},required:[`emoji`]},handler:async(e,t)=>{let n=u.env.CODER_HISTORY_TASK;if(!n)throw Error(`CODER_HISTORY_TASK is not set`);let r=JSON.parse(await p.readFile(n,`utf8`));if(!r.conversation)throw Error(`Only conversation tasks can react`);if(typeof e.emoji!=`string`||!e.emoji.trim())throw Error(`Emoji is required`);if(e.message!==void 0&&(typeof e.message!=`string`||!e.message.trim()))throw Error(`Message id must be a non-empty string`);let i=h(r.currentPrompt??r.prompt??``,!0)?.[0],a=e.message??i?.message?.id??i?.messages?.[0]?.id;if(i&&!a)throw Error(`This turn has no message to react to; give a message id`);return E(`react`,{emoji:e.emoji.trim(),...a?{message:a}:{}},t?.fetch)}},history:{description:"Search or read this task's earlier conversation, including your tool calls and results, oldest first. With query, the messages containing that exact text; without, the messages from `from` on.",inputSchema:c({query:`string`,from:`number`,limit:`number`},[],{query:`Exact text to find, case-insensitive, 1 to 500 characters: a word or phrase from the message, not a question.`,from:`Message index to start at; default the oldest, or after the last match.`,limit:`Messages to return, 1 to 20; default 10.`}),annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},handler:async e=>{let t=u.env.CODER_HISTORY_TASK;if(!t)throw Error(`CODER_HISTORY_TASK is not set`);let n=JSON.parse(await p.readFile(t,`utf8`));return s(n,e)}}};function O(e,n={}){return{name:`history`,command:u.execPath,args:[t,`agent`,`tools`,`history`],env:{...n,CODER_HISTORY_TASK:e,CODEX_HOME:a(),CLAUDE_CONFIG_DIR:l.dirname(r())},tools:Object.keys(D),alwaysLoad:!0}}export{x as a,g as c,y as i,_ as n,w as o,C as r,h as s,T as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,Nn as t,Vt as n,W as r,a as i,an as a,cr as o,dr as s,fr as c,i as l,nn as u,wt as d}from"./prompts-CEf7z4i_.js";import{_ as f,g as p,v as m}from"./dispatch-BJZqI7sj.js";import{i as h}from"./cli-Fp28pM4Y.js";import{c as g}from"./args-BekfmD9t.js";import{r as _}from"./mcp-server-DQqSgD3P.js";import v from"node:path";import{spawn as y}from"node:child_process";import{randomUUID as b}from"node:crypto";function x(e){return v.join(e,`sidecar.json`)}function S(e){return o(x(e))??{sessionId:null,declineStreak:0}}function C(t,n,r,i){return[`-p`,i,`--output-format`,`json`,`--model`,`sonnet`,`--effort`,`low`,`--strict-mcp-config`,`--no-chrome`,`--mcp-config`,`{"mcpServers":{}}`,`--settings`,`{"disableClaudeAiConnectors":true}`,r?`--resume`:`--session-id`,n,...e,`--add-dir`,t]}function w(e,t,n,r,i){let a=C(t,n,r,i);return new Promise((t,n)=>{let r=y(`claude`,a,{cwd:e,stdio:[`ignore`,`pipe`,`pipe`]}),i=``,o=``,s=setTimeout(()=>{r.kill(`SIGKILL`),n(Error(`sidecar call timed out`))},12e4);r.stdout.on(`data`,e=>i+=e),r.stderr.on(`data`,e=>o+=e),r.on(`error`,e=>{clearTimeout(s),n(e)}),r.on(`close`,e=>{if(clearTimeout(s),e!==0){n(Error(`sidecar claude exited ${e}: ${o.trim().slice(0,200)}`));return}try{let e=JSON.parse(i);if(e.is_error){n(Error(`sidecar turn errored: ${String(e.result??``).slice(0,200)}`));return}t(String(e.result??``))}catch{n(Error(`sidecar returned unparseable output`))}})})}function T(e){let t=e.match(/\{[^{}]*"decision"[^{}]*\}/);if(!t)return null;try{let e=JSON.parse(t[0]);if(e.decision===`accept`||e.decision===`decline`||e.decision===`escalate`)return{decision:e.decision,reason:String(e.reason??``)}}catch{}return null}async function E(e,t,n){try{return await s(v.join(t,`sidecar.lock`),async()=>{let r=S(t);if(r.declineStreak>=3)return{decision:`escalate`,reason:`sidecar decline streak; needs human review`};if(!r.sessionId){let a=b();await w(e,t,a,!1,i(n.taskGoal,v.join(t,`log.jsonl`))),r.sessionId=a,c(x(t),r)}let a=T(await w(e,t,r.sessionId,!0,l(n.summary)));return a?.decision===`decline`?r.declineStreak+=1:a?.decision===`accept`&&(r.declineStreak=0),c(x(t),r),a??{decision:`escalate`,reason:`sidecar verdict unparseable`}},9e4,12e4)}catch(e){return{decision:`escalate`,reason:`sidecar unavailable: ${e instanceof Error?e.message:String(e)}`}}}const D=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]);async function O(e,t,i){let o=String(i.tool_name??``),s=i.input??i.tool_input??{},c=a(e),l=u(e,t),h=r(e),g=n=>d(e,t,n),_,v;if(o===`Bash`){let e=String(s.command??``);v=`run command: ${e||`(unknown command)`}`,_=p(e,{allowedNetworkHosts:h.approvals.allowedNetworkHosts})}else if(D.has(o)){let e=String(s.file_path??s.notebook_path??``);v=`${o}: ${e||`(unknown path)`}`,_=f(e?[e]:[],c)}else v=`${o||`(unknown tool)`}: ${JSON.stringify(s).slice(0,200)}`,_={decision:`escalate`,reason:`tool needs approval: ${o}`};g({kind:`approval-decision`,method:o,decision:_.decision,reason:_.reason,summary:v});let y=_.decision,b=_.reason;if(y===`escalate`){let r=await E(e,l,{taskGoal:n(e,t)?.prompt??null,summary:v});g({kind:`sidecar-decision`,decision:r.decision,reason:r.reason,summary:v}),r.decision===`escalate`?(y=await m(l,{method:`claude/${o}`,summary:v,params:{tool_name:o,input:s}},{timeoutMs:h.approvals.escalationTimeoutMs,onEvent:g}),b=`escalated for human review`):(y=r.decision,b=r.reason)}return y===`accept`?{behavior:`allow`,updatedInput:s}:{behavior:`deny`,message:`Denied by coder policy: ${b}`}}const k={approval_prompt:{description:`Coder approval policy for claude permission prompts.`,inputSchema:{type:`object`,additionalProperties:!0},handler:(e,{cwd:t,taskId:n})=>O(t,n,e).catch(e=>({behavior:`deny`,message:`coder mcp tool failed: ${e instanceof Error?e.message:String(e)}`}))}},A=h({name:`task mcp`,options:{cwd:g},args:1,run:({args:e,cwd:n})=>_(`coder`,k,{cwd:n,taskId:e[0]},void 0,t())});export{A as commandTaskMcp};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"node:readline";async function t(t,n,r,i={input:process.stdin,write:e=>process.stdout.write(`${e}\n`)},a=`1`){let o=e=>i.write(JSON.stringify(e)),s=e.createInterface({input:i.input,terminal:!1}),c=new Set,l,u=async(e,t)=>{let i=n[String(t?.name??``)],a,s=!1;try{if(!i)throw Error(`unknown tool: ${t?.name}`);let e=await i.handler(t?.arguments??{},r);a=typeof e==`string`?e:JSON.stringify(e)}catch(e){s=!0,a=e instanceof Error?e.message:String(e)}o({jsonrpc:`2.0`,id:e,result:{content:[{type:`text`,text:a}],isError:s}})};for await(let e of s){if(!e.trim())continue;let r;try{r=JSON.parse(e)}catch{continue}let{id:i,method:d,params:f}=r;if(d===`initialize`)o({jsonrpc:`2.0`,id:i,result:{protocolVersion:f?.protocolVersion??`2024-11-05`,capabilities:{tools:{}},serverInfo:{name:t,version:a}}});else if(d===`tools/list`)o({jsonrpc:`2.0`,id:i,result:{tools:Object.entries(n).map(([e,t])=>({name:e,description:t.description,inputSchema:t.inputSchema,...t.annotations?{annotations:t.annotations}:{}}))}});else if(d===`tools/call`){let e=u(i,f);c.add(e),e.then(()=>c.delete(e),t=>{c.delete(e),l=t,s.close()})}else i!==void 0&&o({jsonrpc:`2.0`,id:i,result:{}})}if(await Promise.all(c),l)throw l}function n(e,t=Object.keys(e),n={}){return{type:`object`,properties:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{type:t,...n[e]===void 0?{}:{description:n[e]}}])),...t.length?{required:t}:{}}}async function r(t,n={input:process.stdin,write:e=>process.stdout.write(`${e}\n`)}){let{spawn:r}=await import(`node:child_process`);if(!t.command)throw Error(`A stdio MCP server is required`);let i=r(t.command,t.args??[],{env:{...process.env,...t.env},stdio:[`pipe`,`pipe`,`inherit`]}),a=new Set,o=new Set,s=e.createInterface({input:n.input,terminal:!1}),c=e.createInterface({input:i.stdout,terminal:!1}),l=new Promise((e,t)=>{i.once(`error`,t),i.once(`close`,n=>n?t(Error(`MCP server exited with status ${n}`)):e())}),u=()=>{i.kill(),s.close()};process.once(`SIGTERM`,u),process.once(`SIGINT`,u);let d;l.catch(()=>s.close()),i.stdin.on(`error`,()=>s.close());let f=(async()=>{for await(let e of c){let t=JSON.parse(e);if(t.method===`notifications/tools/list_changed`&&a.clear(),o.delete(t.id)&&t.result){t.result.tools=(t.result.tools??[]).filter(e=>typeof e.name==`string`&&e.annotations?.readOnlyHint===!0);for(let e of t.result.tools)a.add(e.name)}n.write(JSON.stringify(t))}s.close()})();f.catch(()=>s.close());try{for await(let e of s){if(!e.trim())continue;let t=JSON.parse(e);if(t.method===`tools/call`&&!a.has(t.params?.name)){n.write(JSON.stringify({jsonrpc:`2.0`,id:t.id,error:{code:-32601,message:`Tool is not marked read-only`}}));continue}t.method===`tools/list`&&(t.params?.cursor||a.clear(),o.add(t.id)),i.stdin.write(`${e}\n`)}i.stdin.end(),d=setTimeout(()=>i.kill(`SIGKILL`),2e3),await Promise.all([f,l])}finally{d&&clearTimeout(d),process.removeListener(`SIGTERM`,u),process.removeListener(`SIGINT`,u),i.kill(`SIGKILL`),s.close(),c.close()}}export{r as n,t as r,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./cli-Fp28pM4Y.js";const t=e(`model`,{list:async()=>(await import(`./list-CnHZriYt.js`)).commandModelList,ls:async()=>(await import(`./list-CnHZriYt.js`)).commandModelList,add:async()=>(await import(`./add-B26QSwPY.js`).then(e=>e.t)).commandModelAdd,update:async()=>(await import(`./update-CZaFjwOJ.js`)).commandModelUpdate,remove:async()=>(await import(`./remove-VtavIuGm.js`).then(e=>e.n)).commandModelRemove,disable:async()=>(await import(`./disable-Dz_zLPX5.js`)).commandModelDisable,enable:async()=>(await import(`./enable-Cfeki-ne.js`)).commandModelEnable,alias:async()=>(await import(`./alias-CScCzXhS.js`)).commandModelAlias,unalias:async()=>(await import(`./unalias-CklkAN1B.js`)).commandModelUnalias},{menu:[{usage:`list`,blurb:`list built-ins, custom models, and aliases`},{usage:`add <name> --base-url <url> --model <id> [--env-key VAR]`,blurb:`connect a model`},{usage:`update <name> [--base-url|--model|--env-key]`,blurb:`change a model in place`},{usage:`remove <name>`,blurb:`delete a custom model`},{usage:`disable <name>`,blurb:`turn off a model (built-in, custom, or alias)`},{usage:`enable <name>`,blurb:`re-enable a disabled model`},{usage:`alias <name> <spec>`,blurb:`name a spec, e.g. fast codex:luna`},{usage:`unalias <name>`,blurb:`remove an alias`}],description:["Manage the models coder can dispatch to. `add` connects any OpenAI-compatible",`endpoint (Ollama, vLLM, OpenRouter, ...) as the custom engine, alongside the`,"built-in codex/claude models. Name your own shortcuts with `alias`",`(e.g. fast -> codex:luna); disable/enable turns any model off and on.`]});export{t as commandModel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,D as t,E as n,H as r,K as i,M as a,U as o,V as s,W as c,Y as l,j as u,q as d,rt as f,z as p}from"./prompts-CEf7z4i_.js";import{A as m,U as h,w as g}from"./dispatch-BJZqI7sj.js";import{t as _}from"./wire-DshFMRsS.js";import v from"node:path";import y from"node:process";const b=new Set([`codex`,`claude`,`custom`]);async function x(t,n={}){let r=`key`in n?n.key:t.envKey?y.env[t.envKey]:void 0,i=n.fetch??fetch,a=e(t.baseUrl,`models`),o=null;for(let e of a)try{let n=await i(e,{headers:r?{Authorization:`Bearer ${r}`}:{},signal:AbortSignal.timeout(5e3)});if(!n.ok){o=n.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${e} -> HTTP ${n.status}`};continue}let a=await n.json().catch(()=>null),s=Array.isArray(a?.data)?a.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};if(!t.model)return{reachable:!0,modelListed:null,models:s,detail:`endpoint reachable; ${s.length} models listed`};let c=s.includes(t.model);return{reachable:!0,modelListed:c,models:s,detail:c?`endpoint reachable; model "${t.model}" listed`:`endpoint reachable, but "${t.model}" is not in its model list`}}catch(t){o={reachable:!1,modelListed:null,models:null,detail:`${e} unreachable (${t instanceof Error?t.message:String(t)})`}}return o}function S(e,t){f(e,e=>{e.models=e.models??{},t(e.models)})}function C(e){let n=e.models??{},i=Object.entries(n).filter(e=>o(e[1])),c=e=>`${e.provider}:${e.model}${e.effort?`:${e.effort}`:``}`,l=Object.entries(n).filter(e=>s(e[1])).map(([e,n])=>{let i=n.provider===`claude`?t:a,o=i[n.model]??n.model,s=r(e)?e:Object.entries(i).find(([,e])=>e===o)?.[0];return{name:e,spec:c(n),replaces:s,disabled:!!n.disabled}}),u=new Map;for(let e of l)e.replaces&&(e.name===e.replaces||!u.has(e.replaces))&&u.get(e.replaces)?.name!==e.replaces&&u.set(e.replaces,e);let d=e=>!!n[e]?.disabled,f=l.filter(e=>![...u.values()].some(t=>t.name===e.name));return{models:n,endpoints:i,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=u.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:d(e)}}),...f.filter(t=>t.spec.startsWith(`${e}:`)).map(({name:e,spec:t,disabled:n})=>({alias:e,spec:t,disabled:n}))],toggledSlugs:Object.entries(n).filter(([e,t])=>!o(t)&&!s(t)&&!r(e)).map(([e,t])=>({name:e,disabled:!!t.disabled})),disabled:d}}async function w(e){let{endpoints:n,providerRows:r,toggledSlugs:i}=C(c(e)),o=await Promise.all(n.map(async([e,t])=>({name:e,...t,probe:await x(t)})));return{codex:r(`codex`,a),claude:r(`claude`,t),custom:o,...i.length?{toggles:i}:{}}}async function T(e,t,n,r){let i=await _(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi,S(n,n=>{n[e]=t});let o=await x(t),s=g(m(r)),c=m(r);return{name:e,entry:t,file:n,probe:o,codex:c,install:s,nativeResponses:a,keyMissing:!!(t.envKey&&!y.env[t.envKey]),ready:o.reachable&&c.available}}const E=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR]`,D=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR]`,O=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex:luna)`,k=`List them: coder model list`;function A(e,t,n){if(!e)throw new h(`invalid-option`,`Missing model name.`,{hint:n});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new h(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(b.has(e)||t===`model`&&r(e))throw new h(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function j(e,t,n){A(t,`model`,E);let r=c(e).models?.[t];if(r)throw new h(`invalid-option`,o(r)?`Custom model "${t}" already exists.`:`"${t}" is already configured as an ${s(r)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${t} [--base-url|--model|--env-key], or remove it first.`});if(!n.baseUrl||!n.model)throw new h(`invalid-option`,`Missing --base-url or --model.`,{hint:E});return T(t,{baseUrl:i(n.baseUrl),model:n.model,...n.envKey?{envKey:n.envKey}:{}},p(e,n.workspace),e)}async function M(e,t,n){let r=t?c(e).models?.[t]:void 0,a=r&&o(r)?r:void 0;if(!t||!a)throw new h(`invalid-option`,t?`No custom model named "${t}".`:`Missing model name.`,{hint:t?k:D});if(!n.baseUrl&&!n.model&&!n.envKey)throw new h(`invalid-option`,`Nothing to update: pass --base-url, --model, or --env-key.`,{hint:D});return T(t,{...a,...n.baseUrl?{baseUrl:i(n.baseUrl)}:{},...n.model?{model:n.model}:{},...n.envKey?{envKey:n.envKey}:{}},p(e,n.workspace),e)}function N(e,t,n={}){if(!t||!c(e).models?.[t])throw new h(`invalid-option`,t?`No custom model named "${t}".`:`Missing model name.`,{hint:t?k:`Usage: coder model remove <name>`});let r=p(e,n.workspace);return f(r,e=>l(e,t)),{removed:t,file:r}}function P(e,r,i,s={}){A(r,`alias`,O);let l=c(e),f=l.models?.[r];if(f&&o(f))throw new h(`invalid-option`,`"${r}" is a custom model name; pick another alias name.`);if(!i)throw new h(`invalid-option`,`Missing alias spec.`,{hint:O});let m;try{m=d(i,l)}catch(e){throw new h(`invalid-option`,e instanceof Error?e.message:String(e),{hint:O})}if(!m||!m.model)throw new h(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:O});if(m.engine===`custom`)throw new h(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let g=i.split(`:`).some(e=>u.has(e.trim())||n.has(e.trim())),_=m.engine===`claude`?t:a,v={provider:m.engine,model:_[m.model]??m.model,...g&&m.effort?{effort:m.effort}:{}},y=p(e,s.workspace);return S(y,e=>{e[r]=v}),{alias:r,...v,file:y}}function F(e,t,n={}){let r=t?c(e).models?.[t]:void 0;if(!t||!r||!s(r))throw new h(`invalid-option`,t?`No alias named "${t}".`:`Missing alias name.`,{hint:t?k:`Usage: coder model unalias <name>`});let i=p(e,n.workspace);return f(i,e=>l(e,t)),{unaliased:t,file:i}}function I(e,t,n,r={}){if(!t)throw new h(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${n?`disable`:`enable`} <name>`});let i=!!c(e).models?.[t],a=p(e,r.workspace);return S(a,e=>{let r=e[t];if(!r){n?e[t]={disabled:!0}:i&&(e[t]={disabled:!1});return}o(r)||s(r)?n?r.disabled=!0:delete r.disabled:n?r.disabled=!0:delete e[t]}),{name:t,disabled:n,file:a}}const L={add:(e,t)=>j(v.resolve(t.cwd??`.`),e,t),update:(e,t)=>M(v.resolve(t.cwd??`.`),e,t),remove:(e,t={})=>N(v.resolve(t.cwd??`.`),e,t),list:(e={})=>w(v.resolve(e.cwd??`.`)),alias:(e,t,n={})=>P(v.resolve(n.cwd??`.`),e,t,n),unalias:(e,t={})=>F(v.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>I(v.resolve(t.cwd??`.`),e,!0,t),enable:(e,t={})=>I(v.resolve(t.cwd??`.`),e,!1,t)};export{x as n,L as t};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{qi as e}from"./core-DwsAMCnL.js";import{At as t}from"./prompts-CEf7z4i_.js";import{U as n}from"./dispatch-BJZqI7sj.js";import{p as r,x as i,y as a}from"./output-BKeyLbvt.js";import o from"node:path";import s from"node:process";import c from"node:fs";import{spawn as l}from"node:child_process";var u=class extends n{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};function d(e){try{let t=new URL(e).hostname.toLowerCase();return t===`localhost`||t===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(t)}catch{return!1}}function f(e){let t;try{t=new URL(e)}catch{throw new n(`invalid-option`,`Give the server as a URL, e.g. https://agents.example.com.`)}if(t.protocol!==`https:`&&!(t.protocol===`http:`&&d(t.origin)))throw new n(`invalid-option`,`Coder servers require HTTPS unless they are loopback.`,{hint:`Use https://, or http://localhost for a local server.`});if(t.username||t.password||t.search||t.hash)throw new n(`invalid-option`,`The server must be an origin without credentials, query, or fragment.`);return t.toString().replace(/\/+$/,``)}const p=(e,t)=>{let n=new URLSearchParams;`cursor`in t&&typeof t.cursor==`string`&&n.set(`cursor`,t.cursor);for(let[e,r]of Object.entries(t))e!==`cursor`&&r!==void 0&&r!==!1&&r!==``&&n.set(e,r===!0?`1`:Array.isArray(r)?r.join(`,`):String(r));return`${e}?${n}`},m=new Set([`completed`,`failed`,`cancelled`]);var h=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,t,r={}){if(this.cookie=`cookie`in t,this.url=e?f(e):``,!this.cookie&&!this.url)throw new n(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in t?t.token:void 0,this.fetchImpl=r.fetch??((e,t)=>fetch(e,t)),this.organization=r.organization,this.renewal=r.renewal,this.onError=r.onError}request(e,t={}){let n=this.read(e,t);return n.catch(()=>{}),n}async read(e,t){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,t);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,t));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new n(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(!r.ok){let e=new u(r.status,a.error??a.message??o??`The server answered ${r.status}.`,r.headers.get(`www-authenticate`)??``,a.hint,a.needs===`key`?a.needs:void 0);throw this.onError?.(e),e}return a}send(e,t){let r=new Headers(t.headers);return t.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.cookie||r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...t,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof n||e.name===`AbortError`?e:new n(`server`,this.url?`No Coder server answers at ${this.url}: ${e.message}`:`The server did not answer. Check the connection and try again.`)})}post(e,t){return this.request(e,{method:`POST`,...t===void 0?{}:{body:JSON.stringify(t)}})}me(){return this.request(`/me`)}info(){return this.request(`/api/auth/capabilities`)}linkAccount(e){return this.post(`/connect`,{token:e})}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(p(`/admin/agents`,{...e,...e?.connect?{connect:1}:{}})),get:(e,t)=>this.request(p(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{}})),versions:(e,t={})=>this.request(p(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(p(`/admin/agents/import`,{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)}).then(t=>({id:e,version:t.version,unchanged:t.unchanged,...t.apps?.length?{apps:t.apps}:{}})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:`PATCH`,body:JSON.stringify(t)}),import:(e,t,n)=>this.post(`/admin/agents/import`,{repo:e,ref:t,...n?{agents:n}:{}})};composer(){return this.request(`/admin/composer`)}folders={list:()=>this.request(`/admin/folders`),check:e=>this.post(`/admin/folders/check`,{path:e}),clone:e=>this.post(`/admin/folders/clone`,{url:e}),pick:()=>this.post(`/admin/folders/pick`,{})};tasks={list:e=>this.request(p(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(p(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:n})),stream:(e,t=-1,n)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:`text/event-stream`},signal:n}),events:(e,t,n)=>this.send(p(`/admin/events`,{tasks:e}),{headers:{accept:`text/event-stream`,...t?{"last-event-id":t}:{}},signal:n}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...n}),ask:(e,t)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t}),approve:(e,t,n)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n}),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:`DELETE`}),create:e=>this.post(`/admin/tasks`,e),wait:async(e,t={})=>{let r=-1;for(;;){let i=await this.tasks.stream(e,r);if(!i.ok||!i.body){let t=await this.tasks.get(e);if(m.has(t.status))return t;if(i.status===401)continue;throw new n(`server`,`The task stream answered ${i.status}.`)}let a=!1;for await(let e of g(i.body))if(e.event===`log`){let n=JSON.parse(e.data);r=n.seq,t.onLog?.(n)}else e.event===`end`&&(a=!0);if(a)return this.tasks.get(e)}}};credentials={list:e=>this.request(p(`/admin/credentials`,e??{})),add:e=>this.post(`/admin/credentials`,e),remove:(e,{workspace:t}={})=>this.request(`/admin/credentials/${encodeURIComponent(e)}${t?`?workspace`:``}`,{method:`DELETE`}),login:e=>this.post(`/admin/logins`,{engine:e}),loginStatus:(e,t)=>this.request(`/admin/logins/${encodeURIComponent(e)}${t?`?state=${encodeURIComponent(t)}`:``}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:`DELETE`})};runners={list:()=>this.request(`/admin/runners`),add:e=>this.post(`/admin/runners`,e),pair:e=>this.post(`/admin/runners/pair`,e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`DELETE`})};integrations={list:e=>this.request(p(`/admin/integrations`,{agent:e}))};repositories={list:()=>this.request(`/admin/repositories`),refresh:()=>this.post(`/admin/repositories/refresh`,{})};engines={status:()=>this.request(`/admin/engines/status`),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(p(`/admin/apps`,{agent:e})),install:(e,t,n)=>this.post(p(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t,link:n})),remove:e=>this.request(`/admin/apps/${encodeURIComponent(e)}`,{method:`DELETE`}),update:e=>this.post(`/admin/apps/${encodeURIComponent(e)}/update`,{}),drift:e=>this.request(`/admin/apps/${encodeURIComponent(e)}/drift`),create:(e,t)=>this.post(`/admin/apps/create/${encodeURIComponent(e)}`,t),start:(e,t)=>this.post(p(`/create/${encodeURIComponent(e)}`,t)),finish:(e,t)=>this.request(`/create/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)})};operator={apps:()=>this.request(`/admin/operator/apps`),setUp:(e,t)=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}`,t),audit:()=>this.request(`/admin/operator/audit`)};installations={list:(e,t={})=>this.request(p(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}}))};connections={list:(e,t)=>this.request(p(`/admin/connections`,{authorization:e,wait:t})),add:e=>this.post(`/admin/connections`,e),update:(e,t)=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),remove:e=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),authorize:e=>this.post(`/admin/connections/${encodeURIComponent(e)}/authorize`)};config={get:()=>this.request(`/admin/config`),patch:e=>this.request(`/admin/config`,{method:`PATCH`,headers:{"content-type":`application/merge-patch+json`},body:JSON.stringify(e)})};models={list:()=>this.request(`/admin/models`),add:e=>this.post(`/admin/models`,e),probe:e=>this.post(`/admin/models/probe`,e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`DELETE`}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={search:e=>this.request(p(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(p(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(p(`/admin/pulls`,{repo:e}))};review(e){return this.post(`/admin/review`,e)}usage(e={}){return this.request(p(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(p(`/admin/usage`,{installation:e}))}};async function*g(e){let t=new TextDecoder,n=``;for await(let r of e){n+=t.decode(r,{stream:!0});let e;for(;(e=n.indexOf(`
|
|
2
|
+
|
|
3
|
+
`))>=0;){let t=n.slice(0,e);n=n.slice(e+2);let r=`message`,i,a=[];for(let e of t.split(`
|
|
4
|
+
`))e.startsWith(`event: `)?r=e.slice(7):e.startsWith(`data: `)?a.push(e.slice(6)):e.startsWith(`id: `)&&(i=e.slice(4));(a.length||i)&&(yield{event:r,data:a.join(`
|
|
5
|
+
`),...i?{id:i}:{}})}}}function _(){return t(`session.json`)}function v(){try{let e=JSON.parse(c.readFileSync(_(),`utf8`));return Object.fromEntries(Object.entries(e).filter(e=>!!(e[1].token&&e[1].refreshToken&&e[1].user)))}catch{return{}}}function y(){try{return JSON.parse(c.readFileSync(_(),`utf8`))}catch{return{}}}const b=e=>e.replace(/\/+$/,``),x=`https://coder.wular.ai`,S=e=>b((e===!0?void 0:e)??process.env.CODER_SERVER??`https://coder.wular.ai`);function C(e){return f(S(e))}function w(e){let t=b(e);return t===`https://coder.wular.ai`||!!y()[t]}function T(e){let t=y(),n=b(e),r=t[n]??{};O({...t,[n]:{...r,confirmedAt:Date.now()}})}function E(e){return v()[b(e)]}function D(e){let t=y(),n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,{confirmedAt:t.confirmedAt??Date.now()}]));O(Object.fromEntries(Object.entries({...n,...e}).map(([e,n])=>[e,{...n,...t[e]?{confirmedAt:t[e].confirmedAt??Date.now()}:{}}])))}function O(e){let t=_();c.mkdirSync(o.dirname(t),{recursive:!0}),c.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,{mode:384}),c.chmodSync(t,384)}var k=e({PromptCancelled:()=>M,ask:()=>B,askSecret:()=>z,canPrompt:()=>N,openUrl:()=>V,pick:()=>L,pickDetailed:()=>R});function A(e){let t=a()??80;return Math.max(1,Math.ceil(i(e)/t))}const j={tab:[` `],up:[`\x1B[A`,`k`],down:[`\x1B[B`,`j`],enter:[`\r`,`
|
|
6
|
+
`],space:[` `],backspace:[``,`\b`],cancel:[``,`\x1B`]};var M=class extends Error{constructor(){super(`Cancelled.`)}};function N(){return!!(s.stdin.isTTY&&s.stdout.isTTY)}function P(e){let t=[];for(let n=0;n<e.length;)if(e[n]===`\x1B`&&e[n+1]===`[`){let r=n+2;for(;r<e.length&&!/[@-~]/.test(e[r]);)r++;t.push(e.slice(n,r+1)),n=r+1}else t.push(e[n]),n++;return t}const F=[];function I(){return F.length?Promise.resolve(F.shift()):new Promise(e=>{let t=n=>{s.stdin.off(`data`,t);let r=P(n.toString(`utf8`));F.push(...r.slice(1)),e(r[0])};s.stdin.on(`data`,t)})}async function L(e){return(await R(e)).values}async function R(e){let t=r,n=s.stdout,i=Math.max(3,e.window??8),a=new Set(e.selected??[]),o=Math.max(0,e.options.findIndex(e=>a.has(e.value))),c=0,l=``,u=0,d=``,f=new Map(e.options.flatMap(e=>e.input?.value?[[e.value,e.input.value]]:[])),p=!1,m=e.options.some(e=>e.input),h=()=>e.options.filter(e=>!l||e.value.toLowerCase().includes(l.toLowerCase())||(e.label??``).toLowerCase().includes(l.toLowerCase())),g=(r=!1)=>{u&&n.write(`\x1b[${u}A\x1b[J`);let s=h();o=Math.min(o,Math.max(0,s.length-1)),o<c&&(c=o),o>=c+i&&(c=o-i+1);let g=m?` · tab to edit`:``,_=p?`type to edit · enter when done · esc to discard`:e.multi?`↑↓ to move · space to toggle · type to filter${g} · enter to continue · esc to cancel`:`↑↓ to move · type to filter${g} · enter to choose · esc to cancel`,v=[`${t.bold(e.title)} ${t.dim(_)}`];if(r){let r=[...a].map(e=>f.get(e)?`${e} (${f.get(e)})`:e).join(`, `)||`-`;n.write(`${t.green(`✔`)} ${t.bold(e.title)} ${t.cyan(r)}\n\n`),u=0;return}e.hint&&v.push(` ${t.light(e.hint)}`),e.multi&&v.push(` ${t.light(`selected:`)} ${[...a].join(`, `)||t.dim(`none`)}`),l&&v.push(` ${t.light(`filter:`)} ${l}${t.dim(`▏`)}`),s.length||v.push(` ${t.dim(`no matches`)}`),c>0&&v.push(` ${t.dim(`↑ ${c} more`)}`);let y=Math.max(0,...s.map(e=>(e.label??e.value).length));s.slice(c,c+i).forEach((n,r)=>{let i=c+r===o,s=`${e.multi?a.has(n.value)?`◉`:`◯`:i?`●`:`○`} ${(n.label??n.value).padEnd(y)}${n.hint?` ${t.light(n.hint)}`:``}`,l=f.get(n.value)??``,u=n.input&&(l||i&&p)?` ${t.light(`${n.input.label}:`)} ${l}${i&&p?t.dim(`▏`):``}`:n.input&&i&&n.input.placeholder?` ${t.dim(n.input.placeholder)}`:``;v.push(`${i?t.cyan(`❯ `):` `}${i?t.cyan(s):s}${u}`)});let b=s.length-(c+i);b>0&&v.push(` ${t.dim(`↓ ${b} more`)}`),d&&v.push(` ${t.red(d)}`),n.write(`${v.join(`
|
|
7
|
+
`)}\n`),u=v.reduce((e,t)=>e+A(t),0)},_=s.stdin,v=_.isRaw;_.setRawMode(!0),_.resume(),n.write(`\x1B[?25l`);try{for(g();;){let t=await I();d=``;let n=h(),r=n[o];if(p&&r?.input){let e=f.get(r.value)??``;if(j.cancel.includes(t))f.delete(r.value),p=!1;else if(j.enter.includes(t)){let t=e?r.input.validate?.(e):void 0;t?d=t:p=!1}else j.backspace.includes(t)?f.set(r.value,e.slice(0,-1)):t.length===1&&t>=` `&&f.set(r.value,e+t);g();continue}if(j.cancel.includes(t))throw new M;if(j.tab.includes(t)&&r?.input){p=!0,e.multi&&a.add(r.value),g();continue}if(j.up.includes(t)&&!(t===`k`&&l))o=Math.max(0,o-1);else if(j.down.includes(t)&&!(t===`j`&&l))o=Math.min(n.length-1,o+1);else if(j.enter.includes(t))if(!e.multi&&n[o]&&(a.clear(),a.add(n[o].value)),e.required&&!a.size)d=`Pick at least one.`;else{g(!0);let e={};for(let[t,n]of f)n&&a.has(t)&&(e[t]=n);return{values:[...a],inputs:e}}else if(e.multi&&j.space.includes(t)&&n[o]){let e=n[o].value;a.has(e)?a.delete(e):a.add(e)}else j.backspace.includes(t)?l=l.slice(0,-1):t.length===1&&t>=` `&&t!==` `&&(l+=t,o=0,c=0);g()}}finally{n.write(`\x1B[?25h`),_.setRawMode(!!v),_.pause()}}async function z(e){let t=s.stdin;if(!t.isTTY){let e=``;for await(let n of t)e+=n.toString();return e.replace(/\r?\n$/,``)}s.stderr.write(`${r.bold(e)} `),t.setRawMode(!0),t.resume();let n=``;try{for(;;){let e=await I();if(j.cancel.includes(e))throw new M;if(j.enter.includes(e))return n;j.backspace.includes(e)?n=n.slice(0,-1):e.length===1&&e>=` `&&(n+=e)}}finally{t.setRawMode(!1),t.pause(),s.stderr.write(`
|
|
8
|
+
`)}}async function B(e,t=``,n,i){let a=r;i&&s.stdout.write(`${a.bold(e)}\n ${a.light(i)}\n`);let o=(await import(`node:readline/promises`)).createInterface({input:s.stdin,output:s.stdout}),c=i?A(e)+A(` ${i}`):0;try{for(;;){let r=i?` ${t?a.dim(`[${t}] `):``}`:`${a.bold(e)} ${t?a.dim(`[${t}] `):``}`,l=(await o.question(r)).trim()||t;c+=A(`${i?` `:`${e} `}${t?`[${t}] `:``}${l}`);let u=n?.(l);if(!u)return s.stdout.write(`\x1b[${c}A\x1b[J${a.green(`✔`)} ${a.bold(e)} ${a.cyan(l||`-`)}\n\n`),l;s.stdout.write(` ${a.red(u)}\n`),c+=A(` ${u}`)}}finally{o?.close()}}function V(e){let t=s.env.BROWSER;if(t===`none`||s.env.CI||s.env.NODE_ENV===`test`)return!1;let[n,r]=t?s.platform===`darwin`?[`open`,[`-a`,t,e]]:[t,[e]]:s.platform===`darwin`?[`open`,[e]]:s.platform===`win32`?[`cmd`,[`/c`,`start`,``,e]]:[`xdg-open`,[e]];try{return l(n,r,{detached:!0,stdio:`ignore`}).unref(),!0}catch{return!1}}export{d as _,L as a,x as c,E as d,v as f,h as g,D as h,V as i,w as l,C as m,B as n,R as o,_ as p,N as r,k as s,M as t,T as u,g as v};
|