@wular/coder 0.4.8 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/dist/{add-yIlNqPSu.js → add-BftLUw05.js} +1 -1
  2. package/dist/{add-BDBCRqKN.js → add-CXAGrCnC.js} +1 -1
  3. package/dist/{add-Df1Ezy3y.js → add-Ck_y_nKX.js} +2 -2
  4. package/dist/{add-DcR15CL7.js → add-CvBTpxgY.js} +1 -1
  5. package/dist/agent-ChnedLBv.js +8 -0
  6. package/dist/{agent-B2Ikhp7u.js → agent-vYm7Geh-.js} +1 -1
  7. package/dist/{alias-DghaKDbh.js → alias-BpgVDY6_.js} +1 -1
  8. package/dist/{app-snjvOKJA.js → app-CJPFaLIV.js} +1 -1
  9. package/dist/{approvals-BziBKWgU.js → approvals-CE8dXZhE.js} +1 -1
  10. package/dist/{approve-DAuvq9Eq.js → approve-CBuGu3du.js} +1 -1
  11. package/dist/{approve-DKrTnZfk.js → approve-dWW4qt76.js} +1 -1
  12. package/dist/{apps-aj_JtpAm.js → apps-B60OpAHX.js} +2 -2
  13. package/dist/{archive-BhfGdyuC.js → archive-C89Z4kSx.js} +1 -1
  14. package/dist/{archive-DxWYJ7Zi.js → archive-CmRVm4iS.js} +1 -1
  15. package/dist/{archive-sweep-CqTQUafj.js → archive-sweep-EiiXIqjr.js} +1 -1
  16. package/dist/{ask-B_si1yM4.js → ask-Bou8zg-4.js} +1 -1
  17. package/dist/auth-CImjIcG5.js +1 -0
  18. package/dist/{auth-B3RiDPMI.js → auth-CWzSsiSC.js} +1 -1
  19. package/dist/{chat-DLolwsuq.js → chat-Djps0Seg.js} +1 -1
  20. package/dist/{cli-D5hyqGq0.js → cli-ZUdhZnuW.js} +1 -1
  21. package/dist/cli.js +1 -1
  22. package/dist/{config-BdeKsCPh.js → config-CF3_A3NX.js} +1 -1
  23. package/dist/{connection-wq0CJZKh.js → connection-BCRJHTgp.js} +1 -1
  24. package/dist/{connection-CQPndo-u.js → connection-BtUZA2St.js} +1 -1
  25. package/dist/{create-8_XbAnHs.js → create-Z0QxarzN.js} +1 -1
  26. package/dist/credentials-Dt2uP3AQ.js +1 -0
  27. package/dist/dash/standalone/server/build-index.json +1 -1
  28. package/dist/dash/standalone/server/manifest.json +1614 -1463
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.a4ec4bce860e3e71.js → page.a2a16ead424b2185.js} +3 -3
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.4c818ef18a084013.js → page.90e312759b87cfa2.js} +2 -2
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.f8373428f20c270b.js → loading.787d09fb0b2b6b57.js} +2 -2
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.b0946ff7951ecc11.js → notify.5fc5e4346dcbfc32.js} +1 -1
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.55eef4b0e71415d9.js → page.1641da62504df30a.js} +11 -12
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/sign-out.5dac3bf780c74354.js +20 -0
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agent-menu.f1dacbfebc27a656.js +13 -0
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.3a3c550ff68aeb11.js → agents-grid.5da78e9a741b028a.js} +7 -7
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{connect-apps.7a4cfa5c917e5db9.js → connect-apps.722bc3e4ec1f9fad.js} +8 -7
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.fd26a5414b0a06db.js → loading.2815a010098aa676.js} +4 -4
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.b2bed855b68a77b2.js → page.b01992337eeca2dc.js} +7 -7
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.95b8bf3c438955c2.js → layout.8aeb0fddffe22ad5.js} +24 -26
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{loading.39c596735b108f80.js → loading.50692149df9abb28.js} +1 -1
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.1401a08ea4e27c01.js → page.e2e23101c05b9548.js} +15 -14
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.2d6e75e5923f73f2.js → loading.31d2c13229ae9222.js} +2 -2
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.848ccc3a609385a9.js → page.11c7b50d6119efe6.js} +32 -37
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.4b14873a20ebd56c.js → platform-actions.92ac7aa258e706a4.js} +49 -66
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.dd8f3cbc00876ebd.js → agent-settings-form.fc530622fa2292a0.js} +16 -19
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.80f597fd04fc4a97.js → loading.bf17bd39f41db826.js} +1 -1
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.35d01036ce840ff9.js → page.6e95dfe07dfebf4b.js} +4 -4
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.ff54c7100f781fbc.js → loading.7b17368ee81275ab.js} +1 -1
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.e5a405c518c1d8e6.js → page.0bd3da9b3227b12f.js} +1 -1
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.55aa8df7712e6820.js → loading.d2cc33cf044a92a3.js} +3 -3
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.67c3489c62b661da.js → page.91c43fbc54e37646.js} +4 -4
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.0c20e2100b321316.js → versions-list.23e4131cdf71daa5.js} +2 -2
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/loading.47c4c8f31b4f17cc.js +23 -0
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.7132b3ef68d33cc4.js → page.cbd2bad8fede6fef.js} +6 -6
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.19e913c8cb22db21.js → agent-pills.d8e785c45f5410a6.js} +9 -10
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.ec6d07ccd1f9796e.js → agent-toggle.a6e27ac4171bfdb0.js} +13 -6
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.9de48723967d8546.js → hero.96bdca9762ff3e2e.js} +5 -5
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{instructions.6558ffd02a59ad53.js → instructions.ca0c09d4849bfc30.js} +1 -1
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.9e1a0945f6880076.js → editor.20c42102ed262db7.js} +33 -36
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.e54af9841da11373.js → import-picker.b8093a7ca97656a5.js} +27 -32
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.38715a27e2d25ebd.js → loading.6012b36c10c68657.js} +11 -13
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.6c8e9ef5d72b7ef1.js → page.1ebdb0247922fc14.js} +4 -4
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.c67ccee8b4770821.js → layout.6d2242d49ae9dd35.js} +51 -81
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.3365f9248dfe735d.js → operator-apps.a56516bc0ba79187.js} +18 -21
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.c60ebc5afe4dcdae.js → page.af19494c89ac62c0.js} +6 -6
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.544315916300ed07.js → connections-list.9b96914a4fa4e2a9.js} +52 -58
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.41ce6eb622300bb3.js → credentials-list.dbaa8f3d82445b90.js} +147 -165
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.c1a312e6ec58db83.js → credentials.c4b01484d183549d.js} +7 -7
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.75dc69caed34ff8f.js → engines-list.5c03e83663a6a9b7.js} +9 -9
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.6d6180438e2bd0c8.js → list.df5ee5d74bec0f5b.js} +10 -8
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{loading.9d7c30db2ecccda3.js → loading.480b8f915bae18c1.js} +1 -1
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.04eb5a47bca3bd09.js → models-list.2835a48d1edeb6d1.js} +17 -18
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.dd00f57d398be882.js → page.1d53415d55e77fee.js} +15 -15
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.e644287ae91ea8c3.js → runners-list.bf5746f48e3f78f5.js} +30 -37
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.35fa72bf3f00d1af.js → secrets-list.b0dedc1567efc09f.js} +14 -13
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.3a17085fb262e4ab.js → layout.567d27e39d42d719.js} +8 -8
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.a14b9796a8af62dc.js → settings-head.5e2dff2550b3b73e.js} +1 -1
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{tunnel-guide.1fd664df1fd0e3c1.js → tunnel-guide.d6fae1c5d62f2c74.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.3acdd50e1cc0c729.js → create-link.03989d2f7585a045.js} +5 -6
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.d730e0bfbe0cf2f8.js → outcome-dialog.4debc1a8c644df4b.js} +6 -6
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.079600422889e725.js → page.43c969f59a710781.js} +9 -8
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.ed49ee2686d1ee41.js → activity.3755ae6065c3fc28.js} +3 -3
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.0d973b51fee68801.js → loading.9efbed6531879838.js} +4 -4
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.05dd344bada1d4d8.js → page.7b92dcd08095b934.js} +4 -4
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.ece7ec732352ce70.js → task-actions.62422b873f98ee8e.js} +24 -24
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.8a5908c42647923f.js → task-view.ae0e9c9dffe0ff9f.js} +32 -38
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.c7ec618e215d63ce.js → composer.fdad306647cbaa59.js} +71 -109
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.0976f1812d6d15f5.js → tasks-list.952f37a9486aebe7.js} +28 -28
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.fd72404364042b87.js → tasks-section.1247d4765d0e1bdc.js} +4 -4
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.293492d13a9dca2e.js → page.cf74c55e6528c7c9.js} +2 -2
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{custom-range.471edcb853889c2e.js → custom-range.2d55812ec086b540.js} +25 -26
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{day-chart.d40438efa74b0596.js → day-chart.08d378cca93d3ab1.js} +1 -1
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.5b28c7d8f3a473a3.js → loading.7aed78a276b08a4f.js} +3 -3
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.69adbf6cde427292.js → page.fed9345ebac3e1b3.js} +6 -6
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/range-bar.b1296c2378128472.js +57 -0
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{top-agents.b00f571862b5b608.js → top-agents.e215d44e00192271.js} +2 -2
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.ab6f86cc5b8b2dab.js → layout.b7e3af142b17941b.js} +1 -1
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.088b41424cd6cf3c.js → page.226544940a39fd3a.js} +5 -3
  100. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.0e2e3636f33049f5.js → drawer.8287e5a02144e4f1.js} +8 -9
  101. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.fe46528a6a66c0f4.js → foreign-link.86f0cc228353da6e.js} +4 -4
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.0c6ac62ff3ccf38a.js +40 -0
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.e5d2185c1cdac740.js → page-head.bd54e52ac4a7a89c.js} +8 -1
  104. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.2fea238dc4f4f9a4.js → stream.1cc355a530dcc5e3.js} +1 -1
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.4282affa47415a36.js → task-toasts.63f673632770924d.js} +2 -2
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.ef190ef1cd197199.js → theme-choices.5f59814a635caeec.js} +8 -17
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.af528135d7e33d6d.js → back.5681714d0cf45454.js} +6 -6
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.813dc34bd23a336f.js → org.4d84ad0ac340fbe2.js} +1 -1
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.bafcb4b273b1c4d0.js → side-toggle.249400957d6a7527.js} +9 -9
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.0851f234f300c694.js +83 -0
  111. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/button.983daea9e687fc5d.js +91 -0
  112. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.6227f43fc0ae4bd1.js → card.c08471eaa0bc1cec.js} +14 -9
  113. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.dab7f208cbbe6a33.js → collapse.762eba56417214ca.js} +5 -3
  114. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.0572dd5730c94112.js → combo.efb84f0cca771948.js} +13 -20
  115. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.53edc755945b0563.js +27 -0
  116. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.9be99c94423eb1ca.js → copy.0b23d7dc05757df5.js} +8 -10
  117. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.4f703a4ce7d2a519.js → filter.1983b85dd0679af6.js} +33 -52
  118. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.868385119bf2de28.js → icons.a34176f37808cd66.js} +1 -0
  119. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu-items.a8e580a0c90631ff.js +145 -0
  120. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.0f064f75822888be.js → menu.a41edd5cde1c90cf.js} +16 -45
  121. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.92432959e3a3e2c0.js → modal.b5f74ebf59590fa6.js} +10 -11
  122. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.5ac52bb38fb64ae5.js → segmented.a08dc08338d080e9.js} +13 -2
  123. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.7f481669998074f8.js → select.36c6f21ce6aa720f.js} +36 -40
  124. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.30913c92f5ca6102.js → tail.a8a951c757376590.js} +5 -4
  125. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.801bbd3163d3fbb0.js → toolbar.9621ef221a896a8e.js} +9 -4
  126. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.568346602027ac74.js → action.1a6356d5b722cafb.js} +1 -1
  127. package/dist/dash/standalone/static/assets/chunks/action-977f2355e308d7d0.js +1 -0
  128. package/dist/dash/standalone/static/assets/chunks/agent-pills-e75e6ac80d515ffc.js +1 -0
  129. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-09f23ed893d441c7.js +1 -0
  130. package/dist/dash/standalone/static/assets/chunks/agent-toggle-b2f2c22e63dedc1f.js +1 -0
  131. package/dist/dash/standalone/static/assets/chunks/agents-grid-bb4f3e4d38b2f459.js +1 -0
  132. package/dist/dash/standalone/static/assets/chunks/back-1d1b062f0e1b29b7.js +1 -0
  133. package/dist/dash/standalone/static/assets/chunks/combo-126d5709a0b3a5bd.js +1 -0
  134. package/dist/dash/standalone/static/assets/chunks/composer-6bf94d1087a6e6a6.js +1 -0
  135. package/dist/dash/standalone/static/assets/chunks/composer-9c1fe67a0de73997.js +1 -0
  136. package/dist/dash/standalone/static/assets/chunks/confirm-1cb4d8df3974f34a.js +1 -0
  137. package/dist/dash/standalone/static/assets/chunks/connect-apps-32c169b6e00711ff.js +1 -0
  138. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-569c181ff81509f4.js → connect-repositories-995d55b3f166337d.js} +1 -1
  139. package/dist/dash/standalone/static/assets/chunks/connections-list-a102e909edff14d4.js +1 -0
  140. package/dist/dash/standalone/static/assets/chunks/copy-c938369a1bfe75fd.js +1 -0
  141. package/dist/dash/standalone/static/assets/chunks/create-link-a147953f343355ec.js +1 -0
  142. package/dist/dash/standalone/static/assets/chunks/credentials-list-31e0fbc1ef0d003e.js +1 -0
  143. package/dist/dash/standalone/static/assets/chunks/custom-range-4eeb710748887f3a.js +1 -0
  144. package/dist/dash/standalone/static/assets/chunks/editor-79560c0f91cfc2f6.js +7 -0
  145. package/dist/dash/standalone/static/assets/chunks/engines-list-d22f50040e6842ae.js +1 -0
  146. package/dist/dash/standalone/static/assets/chunks/{field-f40df6a5289dfe05.js → field-657227821326b5b3.js} +1 -1
  147. package/dist/dash/standalone/static/assets/chunks/instructions-a08bb02650dedb8d.js +2 -0
  148. package/dist/dash/standalone/static/assets/chunks/instructions-a1f10bc3c2866e3f.js +1 -0
  149. package/dist/dash/standalone/static/assets/chunks/list-a0cc9bdb05fc71d4.js +1 -0
  150. package/dist/dash/standalone/static/assets/chunks/models-list-63ab774de3bf3788.js +1 -0
  151. package/dist/dash/standalone/static/assets/chunks/{notice-84358e912a9f01cc.js → notice-cd32ca98bbc10844.js} +1 -1
  152. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-4ab62d613bee243a.js +1 -0
  153. package/dist/dash/standalone/static/assets/chunks/platform-actions-40824017c7b5b910.js +1 -0
  154. package/dist/dash/standalone/static/assets/chunks/platform-actions-a515643f341df568.js +1 -0
  155. package/dist/dash/standalone/static/assets/chunks/runners-list-a9f4f71695f7b376.js +1 -0
  156. package/dist/dash/standalone/static/assets/chunks/{runtime-37175329f2865f15-1.js → runtime-e8b9eb1e537215ed-1.js} +1 -1
  157. package/dist/dash/standalone/static/assets/chunks/secrets-list-34e09c332363564c.js +1 -0
  158. package/dist/dash/standalone/static/assets/chunks/segmented-24da438244eedc8f.js +1 -0
  159. package/dist/dash/standalone/static/assets/chunks/shared-init-02aaa49ed4606a76.js +2 -0
  160. package/dist/dash/standalone/static/assets/chunks/shared-init-03e620f936463465.js +5 -0
  161. package/dist/dash/standalone/static/assets/chunks/shared-init-6f8c76316a2cd9da.js +1 -0
  162. package/dist/dash/standalone/static/assets/chunks/shared-init-e8b9eb1e537215ed-2.js +1 -0
  163. package/dist/dash/standalone/static/assets/chunks/side-toggle-8563e6056e862225.js +1 -0
  164. package/dist/dash/standalone/static/assets/chunks/tail-ebdefca4d5c23266.js +1 -0
  165. package/dist/dash/standalone/static/assets/chunks/task-actions-462507b76bda4657.js +1 -0
  166. package/dist/dash/standalone/static/assets/chunks/{task-view-1696d47594c6dbfa.js → task-view-341d79730a341007.js} +5 -5
  167. package/dist/dash/standalone/static/assets/chunks/tasks-list-6037ecd098332564.js +1 -0
  168. package/dist/dash/standalone/static/assets/chunks/versions-list-31f31eb1923a0ded.js +1 -0
  169. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-37175329f2865f15-0.js → wular-pnext-e8b9eb1e537215ed-0.js} +1 -1
  170. package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +1 -0
  171. package/dist/dash/standalone/static/assets/create-param-id-8fa3e9101430f26a.css +1 -0
  172. package/dist/dash/standalone/static/assets/dash-param-org-67f7811b1343c064.css +1 -0
  173. package/dist/dash/standalone/static/assets/dash-param-org-account-3f646d473e3bd795.css +1 -0
  174. package/dist/dash/standalone/static/assets/dash-param-org-agents-0ddb989cab5b0fbf.css +1 -0
  175. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-504d1a906feabb6f.css +1 -0
  176. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-7cd987a1a42a3b44.css +1 -0
  177. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-fcdddf2dc26453ce.css +1 -0
  178. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-26b84d659dbca7f4.css +1 -0
  179. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-97ff652f9fe5979d.css +1 -0
  180. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-d47377c0f877c5c0.css +1 -0
  181. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-6a09580f11d669b7.css +1 -0
  182. package/dist/dash/standalone/static/assets/dash-param-org-operator-56742192a9aafc19.css +1 -0
  183. package/dist/dash/standalone/static/assets/dash-param-org-settings-a851a659784d94b5.css +1 -0
  184. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-06283106fffbd5c6.css +1 -0
  185. package/dist/dash/standalone/static/assets/dash-param-org-setup-1b708aa5bb2f83ef.css +1 -0
  186. package/dist/dash/standalone/static/assets/dash-param-org-tasks-9cb2bb12389c9a04.css +1 -0
  187. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-a87fa0eaa02e4008.css +1 -0
  188. package/dist/dash/standalone/static/assets/dash-param-org-usage-786c91a7640542e6.css +1 -0
  189. package/dist/dash/standalone/static/assets/global-eee296f070a9bb95.css +1 -0
  190. package/dist/dash/standalone/static/assets/login-9760b85feae40270.css +1 -0
  191. package/dist/dash/standalone/static/assets/pnext-client-17c3ee29b7487596.js +1 -0
  192. package/dist/dash/standalone/static/assets/pnext-client-1eaa8deb5395345f.js +1 -0
  193. package/dist/dash/standalone/static/assets/pnext-client-29e2b964470f6587.js +1 -0
  194. package/dist/dash/standalone/static/assets/pnext-client-2a1e756934e7be1a.js +1 -0
  195. package/dist/dash/standalone/static/assets/pnext-client-31e64d49f6132b26.js +1 -0
  196. package/dist/dash/standalone/static/assets/pnext-client-3d13328ad0b1148b.js +1 -0
  197. package/dist/dash/standalone/static/assets/pnext-client-4ac29d3e9f1a91be.js +1 -0
  198. package/dist/dash/standalone/static/assets/pnext-client-7d479b3375e3c07e.js +1 -0
  199. package/dist/dash/standalone/static/assets/pnext-client-9eac45990b233b55.js +1 -0
  200. package/dist/dash/standalone/static/assets/pnext-client-a8c9c169322e7e3d.js +1 -0
  201. package/dist/dash/standalone/static/assets/pnext-client-b622d087a38b1b77.js +1 -0
  202. package/dist/dash/standalone/static/assets/pnext-client-b7fea94dfda72453.js +1 -0
  203. package/dist/dash/standalone/static/assets/pnext-client-cc8e5e6c95040688.js +1 -0
  204. package/dist/dash/standalone/static/assets/pnext-client-d16e2a42b0a274c0.js +1 -0
  205. package/dist/dash/standalone/static/assets/pnext-client-dbccfef0cbb6b18d.js +1 -0
  206. package/dist/dash/standalone/static/assets/pnext-client-e74706ae238018e5.js +1 -0
  207. package/dist/dash/standalone/static/assets/pnext-client-ebe7c9692619ea00.js +1 -0
  208. package/dist/dash/standalone/static/assets/pnext-client-ef8d348060493085.js +1 -0
  209. package/dist/dash/standalone/static/assets/pnext-client-fcdfa8b2c8824449.js +1 -0
  210. package/dist/dash/standalone/static/assets/pnext-client-ff36e2f8a0522759.js +1 -0
  211. package/dist/{default-CNhVH61w.js → default-DcYwZCnl.js} +1 -1
  212. package/dist/{default-dQC33jLt.js → default-EXRzdZUY.js} +1 -1
  213. package/dist/{delete-BDOtztW_.js → delete-Bmn2_TiV.js} +1 -1
  214. package/dist/{delete-Dbo9goyQ.js → delete-DS6P_fun.js} +1 -1
  215. package/dist/{disable-VvU6oDku.js → disable-CnCxTC3X.js} +1 -1
  216. package/dist/{discover-hpHsnxqU.js → discover-pKrMDvpW.js} +1 -1
  217. package/dist/{docs-CYMICGEv.js → docs-sFUXzJbk.js} +1 -1
  218. package/dist/{enable-BmvNVDHO.js → enable-BWvDv7dP.js} +1 -1
  219. package/dist/flow/builtin/review.d.ts +1 -1
  220. package/dist/flow/index.d.ts +1 -1
  221. package/dist/{flow-4Rr-2NUz.js → flow-CuUq-MDm.js} +1 -1
  222. package/dist/{http-BYMXT_p6.js → http-Cg_wYcZT.js} +1 -1
  223. package/dist/{index-CVjkwYeS.d.ts → index-vd37q3fn.d.ts} +1 -1
  224. package/dist/{init-kZdO2PF5.js → init-Dgj6V-aS.js} +1 -1
  225. package/dist/integrations-DsFX2KCq.js +1 -0
  226. package/dist/{list-D3LCULQt.js → list-B6lwbCEp.js} +1 -1
  227. package/dist/{list-uS9iEE0F.js → list-BDpYPbJF.js} +1 -1
  228. package/dist/{list-CbN2giPy.js → list-BE3xmX_4.js} +1 -1
  229. package/dist/{list-P2Ztf1bQ.js → list-BVIAyAAE.js} +1 -1
  230. package/dist/{list-CLqNS8_q.js → list-Bggy3HZY.js} +1 -1
  231. package/dist/{list-ChFFjT_a.js → list-CLtqMYPK.js} +2 -2
  232. package/dist/{list-D2eSpGoo.js → list-CaFQOnfI.js} +1 -1
  233. package/dist/{list-D0NK3Iqu.js → list-DkO78ZEF.js} +1 -1
  234. package/dist/{local-XNsjb-UM.js → local-ccKBhpQc.js} +1 -1
  235. package/dist/{login-BoOBMH4y.js → login-BCdXHQ7z.js} +1 -1
  236. package/dist/{login-CCA0uLsW.js → login-CpHx_RCq.js} +1 -1
  237. package/dist/{logout-Cv0cm9F8.js → logout-zSQBDPCK.js} +1 -1
  238. package/dist/{maintenance-B_79IJ_E.js → maintenance-DuIspk-y.js} +1 -1
  239. package/dist/{mcp-C13n4A3y.js → mcp-O8VTfzdL.js} +1 -1
  240. package/dist/{model-0sxp5GdI.js → model-Bzpwl_95.js} +1 -1
  241. package/dist/{push-IpLeKMp-.js → push-vt81gcxD.js} +1 -1
  242. package/dist/{reconnect-CR3RaXX0.js → reconnect-BfghDbl1.js} +1 -1
  243. package/dist/{refresh-D0YjtXBD.js → refresh-yXJ13FAf.js} +1 -1
  244. package/dist/{remove-B01SXfEq.js → remove-5iAM2aTO.js} +1 -1
  245. package/dist/{remove-D65xtbw5.js → remove-BZCA-gdU.js} +1 -1
  246. package/dist/{remove-D1UOd48O.js → remove-BcewhH1U.js} +1 -1
  247. package/dist/{remove-C9eahMDh.js → remove-BwhcR6ig.js} +1 -1
  248. package/dist/{rename-Qwr_XDxD.js → rename-lyssPQfD.js} +1 -1
  249. package/dist/{result-70jciKDJ.js → result-Bg557zR6.js} +1 -1
  250. package/dist/{result-DXL9N9Ip.js → result-jeiRJTzA.js} +1 -1
  251. package/dist/{resume-xqhwHn3l.js → resume-fnx4FUQF.js} +1 -1
  252. package/dist/{review-vlPAshsb.js → review-CAHDqPq8.js} +1 -1
  253. package/dist/{review-D-U_2KyT.d.ts → review-CJS59vO-.d.ts} +1 -1
  254. package/dist/{rotate-key-CfeZ6Rg7.js → rotate-key-Dpx_WmuU.js} +1 -1
  255. package/dist/{run-VOuS-hHe.js → run-CLy9a2MO.js} +1 -1
  256. package/dist/{run-CoTg7SkY.js → run-DU4G8gNw.js} +1 -1
  257. package/dist/{run-CvdayZfK.js → run-D_pl9GF_.js} +1 -1
  258. package/dist/runner-zT5Oyrfr.js +1 -0
  259. package/dist/{runners-UNKPlmYE.js → runners-CNhxPjg8.js} +1 -1
  260. package/dist/schema.d.ts +1 -1
  261. package/dist/{sdk-4Vjo5Q6R.d.ts → sdk-CWerLcF5.d.ts} +19 -19
  262. package/dist/sdk.d.ts +4 -4
  263. package/dist/sdk.js +1 -1
  264. package/dist/{serve-HNXk3HMY.js → serve-FG2LgXxM.js} +2 -2
  265. package/dist/{serve-ByWMT5Gm.js → serve-UE1fcf4t.js} +1 -1
  266. package/dist/{serve-BoTW4P2G.js → serve-w-9qRCP1.js} +2 -2
  267. package/dist/{serve-BQsv2KZs.js → serve-wQgyxwdY.js} +1 -1
  268. package/dist/{server-B1x8gx33.js → server-Bw_YmgCf.js} +1 -1
  269. package/dist/{setup-host-DExG-bWZ.js → setup-host-BsbDs4lJ.js} +1 -1
  270. package/dist/{show-BeacgzZ0.js → show-Cajmf606.js} +1 -1
  271. package/dist/{show-D3OC0c35.js → show-D0qTuXRU.js} +1 -1
  272. package/dist/{status-ZN0HYtLa.js → status-PO1YXbt4.js} +1 -1
  273. package/dist/{steer-DwSC8AO4.js → steer-i6w87g_t.js} +1 -1
  274. package/dist/{stop-CEEiI1RA.js → stop-CJ0PHvKp.js} +1 -1
  275. package/dist/{stop-DTzpTbg1.js → stop-CkvoZEAH.js} +1 -1
  276. package/dist/{task-4gw9OZun.js → task-DTN_fIGC.js} +1 -1
  277. package/dist/task-DXHKWB_J.js +5 -0
  278. package/dist/{test-BnGF24Hg.js → test-BTkKFbnx.js} +1 -1
  279. package/dist/{tools-ar-D3jOh.js → tools-B-2oi2wI.js} +1 -1
  280. package/dist/{types-BktBEKW5.d.ts → types-C1tWi5lP.d.ts} +5 -5
  281. package/dist/{unalias-9AwJnbpE.js → unalias-Cqx7i_L0.js} +1 -1
  282. package/dist/{update-DoJEPBvm.js → update-MNyeVXyy.js} +1 -1
  283. package/dist/{upgrade-DRPBwDYe.js → upgrade-CGSkY0FY.js} +2 -2
  284. package/dist/{usage-CItBLFFE.js → usage-sx-FR0bz.js} +1 -1
  285. package/dist/{watch-BMuVZorc.js → watch-IL2eEgwD.js} +1 -1
  286. package/dist/{watch-Bl_pCGfq.js → watch-qfr7aSfo.js} +1 -1
  287. package/dist/{worker-BFGETvid.js → worker-BBZ36xL0.js} +1 -1
  288. package/dist/{worker-BiJ7jiOr.js → worker-D2csFtoH.js} +1 -1
  289. package/dist/{workflow-CcC-xbfp.js → workflow-BKxG9OUk.js} +1 -1
  290. package/package.json +1 -1
  291. package/dist/agent-C1HI4JlI.js +0 -3
  292. package/dist/auth-Cx4ePjWG.js +0 -1
  293. package/dist/credentials-BOAy2_-6.js +0 -1
  294. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/sign-out.1ee9b7f1343376e9.js +0 -13
  295. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agent-menu.79e38c6e4139b9de.js +0 -12
  296. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/loading.2fa9e225a5c42496.js +0 -29
  297. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/range-bar.884e58b044238e98.js +0 -60
  298. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.df3717186948c93f.js +0 -64
  299. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.3d9163a51e6f6d6e.js +0 -43
  300. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.fe133a074c2743af.js +0 -26
  301. package/dist/dash/standalone/static/assets/chunks/action-df9907c7a10bf826.js +0 -1
  302. package/dist/dash/standalone/static/assets/chunks/agent-pills-106a518bef96408e.js +0 -1
  303. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-d1aa82950d30d829.js +0 -1
  304. package/dist/dash/standalone/static/assets/chunks/agent-toggle-44667051d8be2040.js +0 -1
  305. package/dist/dash/standalone/static/assets/chunks/agents-grid-69fabb48962a282a.js +0 -1
  306. package/dist/dash/standalone/static/assets/chunks/back-e02e04679467c05b.js +0 -1
  307. package/dist/dash/standalone/static/assets/chunks/badge-b302b4d707908367.js +0 -1
  308. package/dist/dash/standalone/static/assets/chunks/card-31a2cdcfeda5254f.js +0 -1
  309. package/dist/dash/standalone/static/assets/chunks/combo-fd495e7fa91b69ed.js +0 -1
  310. package/dist/dash/standalone/static/assets/chunks/composer-10f0a825a16e1fc7.js +0 -1
  311. package/dist/dash/standalone/static/assets/chunks/composer-8c1198d45f700738.js +0 -1
  312. package/dist/dash/standalone/static/assets/chunks/confirm-7b6112578a1c4877.js +0 -1
  313. package/dist/dash/standalone/static/assets/chunks/connect-apps-bd95a6cbdc89a438.js +0 -1
  314. package/dist/dash/standalone/static/assets/chunks/connections-list-5bbf7321d9bfd08f.js +0 -1
  315. package/dist/dash/standalone/static/assets/chunks/copy-f057128db8aefd1b.js +0 -1
  316. package/dist/dash/standalone/static/assets/chunks/create-link-6f6e6b87e46f67c8.js +0 -1
  317. package/dist/dash/standalone/static/assets/chunks/credentials-list-8fc72c0331289ac6.js +0 -2
  318. package/dist/dash/standalone/static/assets/chunks/custom-range-d06cd17fcc05183d.js +0 -1
  319. package/dist/dash/standalone/static/assets/chunks/editor-b5a9659f85edea17.js +0 -7
  320. package/dist/dash/standalone/static/assets/chunks/engines-list-c10ca5e7410b790f.js +0 -1
  321. package/dist/dash/standalone/static/assets/chunks/filter-966a9aae3b0b6d77.js +0 -1
  322. package/dist/dash/standalone/static/assets/chunks/instructions-c9e1097c4e1b352a.js +0 -2
  323. package/dist/dash/standalone/static/assets/chunks/instructions-e969d4439f6676c9.js +0 -1
  324. package/dist/dash/standalone/static/assets/chunks/list-5db1dd782965a5fc.js +0 -1
  325. package/dist/dash/standalone/static/assets/chunks/models-list-b6237067c9a39f97.js +0 -1
  326. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-c4f75d37645035b8.js +0 -1
  327. package/dist/dash/standalone/static/assets/chunks/paged-c44eccacea100110.js +0 -1
  328. package/dist/dash/standalone/static/assets/chunks/platform-actions-6004e96f54953935.js +0 -1
  329. package/dist/dash/standalone/static/assets/chunks/platform-actions-d8dd016336a3d768.js +0 -1
  330. package/dist/dash/standalone/static/assets/chunks/runners-list-0b288b2b79de8968.js +0 -1
  331. package/dist/dash/standalone/static/assets/chunks/secrets-list-64650cb827e93322.js +0 -1
  332. package/dist/dash/standalone/static/assets/chunks/segmented-5423dcc766dc7abc.js +0 -1
  333. package/dist/dash/standalone/static/assets/chunks/select-53722330d2e3f1c6.js +0 -1
  334. package/dist/dash/standalone/static/assets/chunks/shared-init-35a0e9007eeca198.js +0 -2
  335. package/dist/dash/standalone/static/assets/chunks/shared-init-37175329f2865f15-2.js +0 -1
  336. package/dist/dash/standalone/static/assets/chunks/shared-init-a7f2e71a718bc285.js +0 -5
  337. package/dist/dash/standalone/static/assets/chunks/shared-init-b8184e0e554d5aa4.js +0 -1
  338. package/dist/dash/standalone/static/assets/chunks/shared-init-e0aa7cbf9ac680b5.js +0 -1
  339. package/dist/dash/standalone/static/assets/chunks/side-toggle-34ee3bbe5ac64a60.js +0 -1
  340. package/dist/dash/standalone/static/assets/chunks/tail-7dece33a58f72850.js +0 -1
  341. package/dist/dash/standalone/static/assets/chunks/task-actions-b36dc5fcd9b2b2c5.js +0 -1
  342. package/dist/dash/standalone/static/assets/chunks/tasks-list-7c70210e7121b95a.js +0 -1
  343. package/dist/dash/standalone/static/assets/chunks/versions-list-26475f0d05e2d434.js +0 -1
  344. package/dist/dash/standalone/static/assets/connect-b73a327c12fa5c63.css +0 -1
  345. package/dist/dash/standalone/static/assets/create-param-id-d679f8832eafd7e8.css +0 -1
  346. package/dist/dash/standalone/static/assets/dash-param-org-14abc8f62d04dc4c.css +0 -1
  347. package/dist/dash/standalone/static/assets/dash-param-org-account-aba6d7e7f99c97cb.css +0 -1
  348. package/dist/dash/standalone/static/assets/dash-param-org-agents-570ddee6de22492e.css +0 -1
  349. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-9fa9b19084b3cd2f.css +0 -1
  350. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-0e7e591f05cbddf5.css +0 -1
  351. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-f16fb90321952887.css +0 -1
  352. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cf30b084239d643.css +0 -1
  353. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-1c84b31df8c64b88.css +0 -1
  354. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-7da323ffa5be29aa.css +0 -1
  355. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-4900a42b805e90cb.css +0 -1
  356. package/dist/dash/standalone/static/assets/dash-param-org-operator-2f4e497a01a78f29.css +0 -1
  357. package/dist/dash/standalone/static/assets/dash-param-org-settings-0ea983332482dbc6.css +0 -1
  358. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-e1c1f81610bb925f.css +0 -1
  359. package/dist/dash/standalone/static/assets/dash-param-org-setup-6824fce3862dbb43.css +0 -1
  360. package/dist/dash/standalone/static/assets/dash-param-org-tasks-f914c28afa705d66.css +0 -1
  361. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-65c8bb06f94ff868.css +0 -1
  362. package/dist/dash/standalone/static/assets/dash-param-org-usage-5dbb2aa369c46eed.css +0 -1
  363. package/dist/dash/standalone/static/assets/global-eecd2b20d5e4b08d.css +0 -1
  364. package/dist/dash/standalone/static/assets/login-ca4c0cd7d65b3269.css +0 -1
  365. package/dist/dash/standalone/static/assets/pnext-client-0bcd0cbf2549bdf2.js +0 -1
  366. package/dist/dash/standalone/static/assets/pnext-client-22414b6c8a870c92.js +0 -1
  367. package/dist/dash/standalone/static/assets/pnext-client-2a02ab5209cae1ea.js +0 -1
  368. package/dist/dash/standalone/static/assets/pnext-client-46d843cfdabf3e71.js +0 -1
  369. package/dist/dash/standalone/static/assets/pnext-client-5a50a2a4da7e870e.js +0 -1
  370. package/dist/dash/standalone/static/assets/pnext-client-5b6ea850cead1482.js +0 -1
  371. package/dist/dash/standalone/static/assets/pnext-client-5b94497ba23568a8.js +0 -1
  372. package/dist/dash/standalone/static/assets/pnext-client-6686f1714e481293.js +0 -1
  373. package/dist/dash/standalone/static/assets/pnext-client-67155accb837a12a.js +0 -1
  374. package/dist/dash/standalone/static/assets/pnext-client-7db5d810ee904f4b.js +0 -1
  375. package/dist/dash/standalone/static/assets/pnext-client-8d779b89650f4b7a.js +0 -1
  376. package/dist/dash/standalone/static/assets/pnext-client-9d7a7a634c9be6ac.js +0 -1
  377. package/dist/dash/standalone/static/assets/pnext-client-9edebc462604c881.js +0 -1
  378. package/dist/dash/standalone/static/assets/pnext-client-aa5a424e38b430a5.js +0 -1
  379. package/dist/dash/standalone/static/assets/pnext-client-b983cd476c808b15.js +0 -1
  380. package/dist/dash/standalone/static/assets/pnext-client-bdf1cb75a3de35ea.js +0 -1
  381. package/dist/dash/standalone/static/assets/pnext-client-c5177dd613b27b84.js +0 -1
  382. package/dist/dash/standalone/static/assets/pnext-client-d998d7077d159f68.js +0 -1
  383. package/dist/dash/standalone/static/assets/pnext-client-f01c6d0c6beb582b.js +0 -1
  384. package/dist/dash/standalone/static/assets/pnext-client-fd4c0f3ecbcc461c.js +0 -1
  385. package/dist/integrations-35T26qmP.js +0 -1
  386. package/dist/runner-D0TLZrrO.js +0 -1
  387. package/dist/task-CB-j4EO8.js +0 -5
  388. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.d2e3bc878dcb47da.css.pnext-asset.js → editor.c496247a81ed832c.css.pnext-asset.js} +0 -0
  389. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.3827c440c6421a06.css.pnext-asset.js → layout.a4efa8d807fe5416.css.pnext-asset.js} +0 -0
  390. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.1236d6680ec02696.css.pnext-asset.js → credentials-list.98e0b34932a6ee4c.css.pnext-asset.js} +0 -0
  391. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.360b393e5938c60b.css.pnext-asset.js → composer.79c015348f861749.css.pnext-asset.js} +0 -0
  392. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.1da88d087e3b5302.css.pnext-asset.js → range-bar.476c059123ef6c23.css.pnext-asset.js} +0 -0
  393. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.76731787d2a1aa3b.css.pnext-asset.js → globals.dccea8b03fa4b6d2.css.pnext-asset.js} +0 -0
  394. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.57e5198339e9ca28.css.pnext-asset.js → page.586a41a7ab9988e0.css.pnext-asset.js} +0 -0
  395. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{@/comps/ui/toast.a4c3e977997216cf.css.pnext-asset.js → drawer.0b0220d1edabce29.css.pnext-asset.js} +0 -0
  396. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.e8201d78154045bc.css.pnext-asset.js → task-toasts.d13d9f628e530552.css.pnext-asset.js} +0 -0
  397. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.d18497f656702a16.css.pnext-asset.js → button.d7f4433f4e7faa80.css.pnext-asset.js} +0 -0
  398. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.991f1efa061e71d6.css.pnext-asset.js → copy.fb3240de6c9479cd.css.pnext-asset.js} +0 -0
  399. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.e20fbd035f24ed01.css.pnext-asset.js → filter.b53f21acc3e2cfef.css.pnext-asset.js} +0 -0
  400. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.1d42c8d0493e2221.css.pnext-asset.js → menu.25b184f68cba7b46.css.pnext-asset.js} +0 -0
  401. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.32a95ad31c0436ad.css.pnext-asset.js → select.419208bb34700af2.css.pnext-asset.js} +0 -0
  402. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.40284b41c03c5dcb.css.pnext-asset.js → toolbar.19e1ce5224a23acf.css.pnext-asset.js} +0 -0
@@ -1 +1 @@
1
- import{i as e}from"./cli-D5hyqGq0.js";import{n as t}from"./args-CxsMr9Un.js";import n from"node:process";const r=e({name:`server rotate-key`,globalFlags:{cwd:!1},help:{usage:`coder server rotate-key [--json]`,summary:`Re-seal stored app, installation, engine, and linked user secrets with the current key.`,env:[[`SERVER_ENCRYPTION_KEY`,`the new key`],[`SERVER_ENCRYPTION_KEY_PREVIOUS`,`the old key, still accepted while rotating`]]},options:{json:t},run:async()=>{let{rotateKey:e}=await import(`./maintenance-B_79IJ_E.js`).then(e=>e.t);return e()},json:({moved:e})=>({ok:!0,moved:e}),print:({moved:e})=>n.stdout.write(`Re-sealed ${e} secret${e===1?``:`s`}.\n`)});export{r as commandServerRotateKey};
1
+ import{i as e}from"./cli-ZUdhZnuW.js";import{n as t}from"./args-CxsMr9Un.js";import n from"node:process";const r=e({name:`server rotate-key`,globalFlags:{cwd:!1},help:{usage:`coder server rotate-key [--json]`,summary:`Re-seal stored app, installation, engine, and linked user secrets with the current key.`,env:[[`SERVER_ENCRYPTION_KEY`,`the new key`],[`SERVER_ENCRYPTION_KEY_PREVIOUS`,`the old key, still accepted while rotating`]]},options:{json:t},run:async()=>{let{rotateKey:e}=await import(`./maintenance-DuIspk-y.js`).then(e=>e.t);return e()},json:({moved:e})=>({ok:!0,moved:e}),print:({moved:e})=>n.stdout.write(`Re-sealed ${e} secret${e===1?``:`s`}.\n`)});export{r as commandServerRotateKey};
@@ -1,2 +1,2 @@
1
- import{m as e}from"./prompt-C--TI1qn.js";import{i as t,r as n}from"./cli-D5hyqGq0.js";import{p as r,s as i}from"./output-BKeyLbvt.js";import{i as a,n as o,s,t as c}from"./args-CxsMr9Un.js";import{i as l}from"./result-DXL9N9Ip.js";import{printLine as u}from"./watch-BMuVZorc.js";import d from"node:process";const f={...c,flow:s,server:a,workspace:s,wait:o,task:s,yes:o},p=t({name:`agent run --task`,options:f,run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-C1HI4JlI.js`).then(e=>e.t);return n.runTask(e.task,{cwd:t})}}),m=t({name:`agent run`,help:{usage:`coder agent run <agent> <file> [--server [url] [--wait]] [--flow <name>] [--json] [--cwd <dir>]`,summary:`Run a recorded platform event (AgentEvent JSON) through an agent. With --server it goes through your Coder server exactly like a webhook: real app, tokens, runner, and the reply is posted. Without it the engine runs here on the agent's prompt and this checkout, platform tools off, and the reply is printed.`,flags:[n,[`--wait`,`with --server: follow the task log here until it finishes, then print the reply`],[`--flow <name>`,`override the matched flow`]],examples:[[`coder agent run helper sample-slack-mention.json`,`offline: print what the agent would reply`],[`coder agent run helper event.json --server`,`for real, through the server`]]},options:f,args:2,run:async({options:e,args:[t,n],cwd:i})=>{let{agents:a}=await import(`./agent-C1HI4JlI.js`).then(e=>e.t);return a.run(t,n,{...e,cwd:i,organization:e.workspace,...e.json?{}:{onLog:e=>u(e,r),onDone:e=>l(e,r)}})},json:e=>Array.isArray(e)&&e.length===1?e[0]:e,print(t,{options:n}){if(!Array.isArray(t)){if(`tasks`in t){if(!t.tasks.length)return void d.stdout.write(`The server accepted the event but no agent matched it.
1
+ import{m as e}from"./prompt-C--TI1qn.js";import{i as t,r as n}from"./cli-ZUdhZnuW.js";import{p as r,s as i}from"./output-BKeyLbvt.js";import{i as a,n as o,s,t as c}from"./args-CxsMr9Un.js";import{i as l}from"./result-jeiRJTzA.js";import{printLine as u}from"./watch-IL2eEgwD.js";import d from"node:process";const f={...c,flow:s,server:a,workspace:s,wait:o,task:s,yes:o},p=t({name:`agent run --task`,options:f,run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-ChnedLBv.js`).then(e=>e.t);return n.runTask(e.task,{cwd:t})}}),m=t({name:`agent run`,help:{usage:`coder agent run <agent> <file> [--server [url] [--wait]] [--flow <name>] [--json] [--cwd <dir>]`,summary:`Run a recorded platform event (AgentEvent JSON) through an agent. With --server it goes through your Coder server exactly like a webhook: real app, tokens, runner, and the reply is posted. Without it the engine runs here on the agent's prompt and this checkout, platform tools off, and the reply is printed.`,flags:[n,[`--wait`,`with --server: follow the task log here until it finishes, then print the reply`],[`--flow <name>`,`override the matched flow`]],examples:[[`coder agent run helper sample-slack-mention.json`,`offline: print what the agent would reply`],[`coder agent run helper event.json --server`,`for real, through the server`]]},options:f,args:2,run:async({options:e,args:[t,n],cwd:i})=>{let{agents:a}=await import(`./agent-ChnedLBv.js`).then(e=>e.t);return a.run(t,n,{...e,cwd:i,organization:e.workspace,...e.json?{}:{onLog:e=>u(e,r),onDone:e=>l(e,r)}})},json:e=>Array.isArray(e)&&e.length===1?e[0]:e,print(t,{options:n}){if(!Array.isArray(t)){if(`tasks`in t){if(!t.tasks.length)return void d.stdout.write(`The server accepted the event but no agent matched it.
2
2
  `);d.stdout.write(`${r.bold(`Queued on the server`)} as task ${t.tasks.join(`, `)}.\n\n${i([`Watch it: coder task watch ${t.tasks[0]} --server ${e(n.server)}`],r)}\n`);return}t.reply===void 0?t.result!==void 0&&d.stdout.write(`${JSON.stringify(t.result,null,2)}\n`):d.stdout.write(`${t.reply.trim()}\n`)}}}),h=Object.assign(e=>(e.some(e=>e===`--task`||e.startsWith(`--task=`))?p:m)(e),{commandName:`agent run`,help:m.help});export{h as commandAgentRun};
@@ -1,2 +1,2 @@
1
- import{d as e,i as t,n,p as r}from"./cli-D5hyqGq0.js";import{p as i,r as a,s as o,u as s}from"./output-BKeyLbvt.js";import{c,i as l,n as u,s as d,t as f}from"./args-CxsMr9Un.js";import{i as p,r as m}from"./result-DXL9N9Ip.js";import{printLine as h}from"./watch-BMuVZorc.js";import{TASK_FLAGS as g}from"./task-4gw9OZun.js";import _ from"node:process";function v(t){let n=e([{usage:`coder task result ${t} --wait`,blurb:`run this in its own background shell, one per task (never wait on several tasks in one call). Returns with the answer or a pending approval.`},{usage:`coder task steer ${t} "<follow-up>"`,blurb:`steer the task with a message (use 'ask' without interrupting main thread)`},{usage:`coder task stop ${t}`,blurb:`stop the task`},{usage:`coder task list`,blurb:`recent tasks`},{usage:`coder task --help`,blurb:`all task commands`}],i,i.blue);return[...r(`Next step`,n.slice(0,1),i),...r(`Related`,n.slice(1),i)].join(`
1
+ import{d as e,i as t,n,p as r}from"./cli-ZUdhZnuW.js";import{p as i,r as a,s as o,u as s}from"./output-BKeyLbvt.js";import{c,i as l,n as u,s as d,t as f}from"./args-CxsMr9Un.js";import{i as p,r as m}from"./result-jeiRJTzA.js";import{printLine as h}from"./watch-IL2eEgwD.js";import{TASK_FLAGS as g}from"./task-DTN_fIGC.js";import _ from"node:process";function v(t){let n=e([{usage:`coder task result ${t} --wait`,blurb:`run this in its own background shell, one per task (never wait on several tasks in one call). Returns with the answer or a pending approval.`},{usage:`coder task steer ${t} "<follow-up>"`,blurb:`steer the task with a message (use 'ask' without interrupting main thread)`},{usage:`coder task stop ${t}`,blurb:`stop the task`},{usage:`coder task list`,blurb:`recent tasks`},{usage:`coder task --help`,blurb:`all task commands`}],i,i.blue);return[...r(`Next step`,n.slice(0,1),i),...r(`Related`,n.slice(1),i)].join(`
2
2
  `)}function y(e,t){_.stdout.write(`${i.dim(`[coder]`)} task ${i.blue(e)} started in the background (${t}).\n`),_.stdout.write(`${v(e)}\n`)}function b(e){_.stderr.write(`${i.dim(`[coder]`)} Task ${i.cyan(e)} started and is waiting to finish. Press Ctrl-C to detach. It keeps running.\n`),_.stderr.write(`${v(e)}\n`)}function x(e){_.stderr.write(`\n${i.dim(`[coder] Detached. The task is still running.`)}\n\n${o([`Wait in its own background shell, one per task: coder task result ${e} --wait`],a)}\n`)}function S(e){_.stdout.write(`\n${e.finalMessage||(e.error?`${i.red(`error:`)} ${e.error}`:`(no final message)`)}\n\n`);let t=e.tokens?` tokens=${s(e.tokens,e.model)}`:``;_.stderr.write(`${i.dim(`[coder] task=${e.taskId} status=${e.status}${t}`)}\n\n${m(e.taskId,a)}\n`)}const C=t({name:`task run`,help:{usage:`coder task run "<task text>"`,summary:`Dispatch a coding task to the configured engine. Backgrounds by default and\nprints a task id; --wait runs in the foreground and prints the answer.\nShortcut: \`coder run "<text>"\`.\n\nWriting a task: one task per focused goal, independent goals as parallel runs.\nThe worker starts with nothing but the text, so include the goal, file paths,\nconstraints and any context only you have. Delegate rather than doing the work\nyourself first, however small it looks.\n\nWaiting: run \`coder task result <task-id> --wait\` in its own background shell, one\nper task. Never wait on several tasks in one call, or their approvals and answers\nnever reach you one by one.\n\n${n}`,flags:[[`--output-schema <json>`,`JSON Schema for the task answer`],[`--name <name>`,`label the task (shown in list/result)`],[`--agent <id>`,`run as that agent: its system.md, engine settings, MCP servers and flows; flags override them`],[`--system <text>`,`standing instructions prepended to the task (kept out of prompt previews)`],...g,[`--server [url] [--workspace <slug>]`,`run the task on your Coder server and follow it here (--background prints its id)`],[`--repo <owner/name>`,`with --server: check out a repo from the workspace's installs`],[`--runner <name>`,`with --server: where it runs (a runner kind or a registered runner)`]],exitCodes:[[`0`,`The task started, or --wait printed a successful answer.`],[`1`,`Dispatch or the task failed.`],[`3`,`No engine could start; follow fallback.instructions in the JSON payload.`],[`4`,`An approval is pending; answer it, then run result --wait again.`],[`130`,`The foreground wait was detached and the task is still running.`]],examples:[[`coder run "add a /health endpoint"`,`dispatch in the background, print a task id`],[`coder result <task-id> --wait`,`then block until it finishes and print the answer`],[`coder run --wait "fix the failing test"`,`or block on the run itself`],[`coder task run --model luna --system "tests live in test/, don't touch anything outside of it" "rename foo to bar"`,`pick an engine via its model alias; --system adds standing instructions`],[`coder task run --agent reviewer "review the last commit"`,`run a repo agent from .coder/agents/reviewer`],[`coder run --add-dir ../api --add-dir ../shared "update the client for the new endpoint"`,`let the task reach sibling repos too`]]},options:{...f,agent:d,"output-schema":d,engine:d,model:d,effort:d,permissions:d,host:d,name:d,system:d,mcp:d,connections:d,"add-dir":c,background:u,wait:u,"simulate-approval":u,server:l,workspace:d,yes:u,repo:d,runner:d},args:1/0,async run({options:e,args:t}){let{tasks:n}=await import(`./task-IoBYe7ok.js`).then(e=>e.t),r=e.json,a;return _.on(`SIGINT`,()=>{a&&x(a),_.exit(130)}),n.run(t.join(` `).trim(),{cwd:e.cwd,agent:e.agent,outputSchema:e[`output-schema`]?JSON.parse(e[`output-schema`]):void 0,engine:e.engine,model:e.model,effort:e.effort,permissions:e.permissions,name:e.name,system:e.system,mcp:e.mcp,connections:e.connections?.split(`,`).map(e=>e.trim()).filter(Boolean),addDirs:e[`add-dir`],wait:e.server===void 0?e.wait:!e.background,simulateApproval:e[`simulate-approval`],repo:e.repo,runner:e.runner,server:e.server,yes:e.yes,organization:e.workspace,onFallback:({engine:e,detail:t,next:n})=>_.stderr.write(`[coder] ${e} failed to start (${t}); falling back to ${n}.\n`),onNote:e=>_.stderr.write(`[coder] ${e}\n`),onWaiting:e=>{a=e,r||b(e)},onLog:e=>r?_.stdout.write(`${JSON.stringify(e,null,2)}\n`):h(e,i)})},print(e,{options:t}){if(`attempts`in e)return t.background?void _.stdout.write(`${e.task.id}\n`):p(e,i);t.wait?S(e):y(e.taskId,e.status)},exit:(e,{options:t})=>(`attempts`in e?!t.background:t.wait)?e.status===`completed`?0:1:void 0});export{C as commandTask};
@@ -1,4 +1,4 @@
1
- import{H as e}from"./dispatch-D3Dqxijf.js";import{i as t}from"./cli-D5hyqGq0.js";import{p as n,s as r}from"./output-BKeyLbvt.js";import{n as i,s as a,t as o}from"./args-CxsMr9Un.js";import{FlowStepRenderer as s,printFollow as c,printRunSummary as l}from"./watch-Bl_pCGfq.js";import u from"node:process";const d={...o,args:a,wait:i,concurrency:a,"max-tasks":a,"dry-run":i};function f(t){let n={};for(let r of t){let t=r.indexOf(`=`);if(t===-1)throw new e(`invalid-option`,`Invalid argument "${r}": expected key=value.`,{hint:`Help: coder flow run --help`});let i=r.slice(0,t),a=r.slice(t+1);try{n[i]=JSON.parse(a)}catch{n[i]=a}}return n}function p(t,n){if(t!==void 0)try{return JSON.parse(t)}catch(t){throw new e(`invalid-option`,`Invalid --args JSON: ${t instanceof Error?t.message:String(t)}`)}return n.length?f(n):{}}const m=e=>e?Number(e):void 0,h=(e,t)=>({cwd:t,dryRun:e[`dry-run`],concurrency:m(e.concurrency),maxTasks:m(e[`max-tasks`]),argv:u.argv.slice(2),wait:e.wait}),g=e=>e[`dry-run`]&&!e.json?v():{},_=t({name:`flow run`,help:{usage:`coder flow run <name|path> [--args '<json>' | key=value...] [--wait] [--concurrency N] [--max-tasks N] [--json] [--dry-run]`,summary:`Run a flow: a TypeScript file that orchestrates many coder tasks with gates,
1
+ import{H as e}from"./dispatch-D3Dqxijf.js";import{i as t}from"./cli-ZUdhZnuW.js";import{p as n,s as r}from"./output-BKeyLbvt.js";import{n as i,s as a,t as o}from"./args-CxsMr9Un.js";import{FlowStepRenderer as s,printFollow as c,printRunSummary as l}from"./watch-qfr7aSfo.js";import u from"node:process";const d={...o,args:a,wait:i,concurrency:a,"max-tasks":a,"dry-run":i};function f(t){let n={};for(let r of t){let t=r.indexOf(`=`);if(t===-1)throw new e(`invalid-option`,`Invalid argument "${r}": expected key=value.`,{hint:`Help: coder flow run --help`});let i=r.slice(0,t),a=r.slice(t+1);try{n[i]=JSON.parse(a)}catch{n[i]=a}}return n}function p(t,n){if(t!==void 0)try{return JSON.parse(t)}catch(t){throw new e(`invalid-option`,`Invalid --args JSON: ${t instanceof Error?t.message:String(t)}`)}return n.length?f(n):{}}const m=e=>e?Number(e):void 0,h=(e,t)=>({cwd:t,dryRun:e[`dry-run`],concurrency:m(e.concurrency),maxTasks:m(e[`max-tasks`]),argv:u.argv.slice(2),wait:e.wait}),g=e=>e[`dry-run`]&&!e.json?v():{},_=t({name:`flow run`,help:{usage:`coder flow run <name|path> [--args '<json>' | key=value...] [--wait] [--concurrency N] [--max-tasks N] [--json] [--dry-run]`,summary:`Run a flow: a TypeScript file that orchestrates many coder tasks with gates,
2
2
  journaling, and resume. Prints the run id and orchestrates in the background;
3
3
  --wait follows the run in the foreground with live progress (Ctrl-C detaches;
4
4
  it keeps running), and \`coder flow watch\` shows the same lines any time.
@@ -0,0 +1 @@
1
+ import{s as e}from"./cli-ZUdhZnuW.js";const t=e(`runner`,{add:async()=>(await import(`./add-CXAGrCnC.js`)).commandRunnerAdd,default:async()=>(await import(`./default-EXRzdZUY.js`)).commandRunnerDefault,test:async()=>(await import(`./test-BTkKFbnx.js`)).commandRunnerTest,serve:async()=>(await import(`./serve-UE1fcf4t.js`)).commandRunnerServe,list:async()=>(await import(`./list-CaFQOnfI.js`)).commandRunnerList,rename:async()=>(await import(`./rename-lyssPQfD.js`)).commandRunnerRename,remove:async()=>(await import(`./remove-BZCA-gdU.js`)).commandRunnerRemove},{menu:[{usage:`add <kind>`,blurb:`connect a runner`},{usage:`default <id>`,blurb:`set the default in its scope`},{usage:`test <id>`,blurb:`check a runner connection`},{usage:`serve --url <public url>`,blurb:`run your server's tasks on this machine`},{usage:`list`,blurb:`list your runners and the workspace's`},{usage:`rename <id> <name>`,blurb:`rename a runner`},{usage:`remove <id>`,blurb:`remove a runner`}],description:[`Run your Coder server's tasks on your own machine, reached through any tunnel.`],exampleCommand:`runner serve`});export{t as commandRunner};
@@ -1,4 +1,4 @@
1
- import{Rt as e,qi as t}from"./core-DwsAMCnL.js";import{Hn as n,In as r,Yt as i,c as a,zn as o}from"./config-D2FxHWwi.js";import{u as s}from"./slack-C_RlVDz7.js";import{t as c}from"./integrations-D3OgJk6Y.js";import{n as l,t as u}from"./task-CB-j4EO8.js";import{a as d,i as f,n as p,r as ee,t as te}from"./local-XNsjb-UM.js";import m from"node:process";import{execFile as h}from"node:child_process";import{createCipheriv as g,createDecipheriv as _,createHash as v,createHmac as ne,randomBytes as y,randomUUID as b}from"node:crypto";import x,{isIP as S}from"node:net";import{lookup as re}from"node:dns/promises";import{request as ie}from"node:https";const ae=r({env:o(n(),n().check(e(1)))}),C=`plain`;function w(e,t=`SERVER_ENCRYPTION_KEY`){if(!e)return;let n=Buffer.from(e,`base64`);if(n.length!==32)throw Error(`${t} must be a base64-encoded 32-byte key`);return n}function T(e){return w(e.encryptionKey)}function E(e){let t=w(e);return t?v(`sha256`).update(t).digest().readInt32BE(0):0}function D(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:w(e,t),version:E(e)}))}function O(e){let t=ae.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function oe(e,t){let n=T(e);if(!n)return{iv:C,tag:``,ciphertext:Buffer.from(JSON.stringify(O(t))).toString(`base64`)};let r=y(12),i=g(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(O(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function se(e,t){if(t.iv===C)return O(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of D(e))try{let e=_(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),O(JSON.parse(Buffer.concat([e.update(Buffer.from(t.ciphertext,`base64`)),e.final()]).toString(`utf8`)))}catch{}throw Error(`Stored credential was sealed with an unavailable encryption key`)}function ce(e,t){let n=T(e);if(!n)return`${C}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=y(12),i=g(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(t),`utf8`),i.final()]);return[r,i.getAuthTag(),a].map(e=>e.toString(`base64`)).join(`.`)}function k(e,t){if(t.startsWith(`${C}.`))return JSON.parse(Buffer.from(t.slice(6),`base64`).toString(`utf8`));let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=_(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),JSON.parse(Buffer.concat([e.update(i),e.final()]).toString(`utf8`))}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function A(e,t){if(t.startsWith(`${C}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=_(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),e.update(i),e.final(),t.version}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function le(e,t,n={}){let r=`coder-${e.id.replace(/[^a-zA-Z0-9_.-]/g,`-`).slice(0,48)}-${Date.now()}`;n.tarballUrl&&(t={...t,CODER_RUNNER_TARBALL_URL:n.tarballUrl});let i=Object.keys(t).flatMap(e=>[`-e`,e]);return{args:[`run`,`-d`,`--name`,r,`--memory`,String(n.memory??`4g`),`--cpus`,String(n.cpus??2),`--pids-limit`,String(n.pidsLimit??512),`--network`,n.network??`bridge`,...i,n.image??`ghcr.io/muzam1l/coder-runner:latest`,`sh`,`-c`,q(),`coder-task`,e.id,K],env:t}}var ue=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=this.options.image??`ghcr.io/muzam1l/coder-runner:latest`,r=await p(`docker`,[`run`,`--rm`,`--network`,`none`,`--entrypoint`,`sh`,n,`-c`,`for binary in node bun git curl tar claude codex github-mcp-server; do command -v "$binary" >/dev/null 2>&1 || { printf "%s\\n" "$binary"; exit 127; }; done`],{PATH:m.env.PATH??``});if(r.code!==0)throw r.code===127&&r.stdout.trim()?Error(`Docker image ${n} is missing required binary ${r.stdout.trim()}`):Error(`Docker image ${n} validation failed: ${r.stderr.trim()||`docker run failed`}`);let i=le(e,{...t,CODER_INBOX_SOCKET:l},this.options),a=await p(`docker`,i.args,{PATH:m.env.PATH??``,...i.env});if(a.code!==0)throw Error(a.stderr.trim()||`docker run failed`);return a.stdout.trim()}async status(e){let t=await p(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:m.env.PATH??``});if(t.code!==0)return{state:`exited`};let[n,r]=t.stdout.trim().split(/\s+/);return n===`true`?{state:`running`}:{state:`exited`,code:Number(r)||0}}async stop(e){await p(`docker`,[`rm`,`-f`,e],{PATH:m.env.PATH??``})}async push(e,t){let n=await p(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,u],{PATH:m.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}},de=t({GithubActionsRunner:()=>N,actionsWorkflow:()=>j});function j(){return`name: Coder agent
1
+ import{Rt as e,qi as t}from"./core-DwsAMCnL.js";import{Hn as n,In as r,Yt as i,c as a,zn as o}from"./config-D2FxHWwi.js";import{u as s}from"./slack-C_RlVDz7.js";import{t as c}from"./integrations-D3OgJk6Y.js";import{n as l,t as u}from"./task-DXHKWB_J.js";import{a as d,i as f,n as p,r as ee,t as te}from"./local-ccKBhpQc.js";import m from"node:process";import{execFile as h}from"node:child_process";import{createCipheriv as g,createDecipheriv as _,createHash as v,createHmac as ne,randomBytes as y,randomUUID as b}from"node:crypto";import x,{isIP as S}from"node:net";import{lookup as re}from"node:dns/promises";import{request as ie}from"node:https";const ae=r({env:o(n(),n().check(e(1)))}),C=`plain`;function w(e,t=`SERVER_ENCRYPTION_KEY`){if(!e)return;let n=Buffer.from(e,`base64`);if(n.length!==32)throw Error(`${t} must be a base64-encoded 32-byte key`);return n}function T(e){return w(e.encryptionKey)}function E(e){let t=w(e);return t?v(`sha256`).update(t).digest().readInt32BE(0):0}function D(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:w(e,t),version:E(e)}))}function O(e){let t=ae.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function oe(e,t){let n=T(e);if(!n)return{iv:C,tag:``,ciphertext:Buffer.from(JSON.stringify(O(t))).toString(`base64`)};let r=y(12),i=g(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(O(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function se(e,t){if(t.iv===C)return O(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of D(e))try{let e=_(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),O(JSON.parse(Buffer.concat([e.update(Buffer.from(t.ciphertext,`base64`)),e.final()]).toString(`utf8`)))}catch{}throw Error(`Stored credential was sealed with an unavailable encryption key`)}function ce(e,t){let n=T(e);if(!n)return`${C}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=y(12),i=g(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(t),`utf8`),i.final()]);return[r,i.getAuthTag(),a].map(e=>e.toString(`base64`)).join(`.`)}function k(e,t){if(t.startsWith(`${C}.`))return JSON.parse(Buffer.from(t.slice(6),`base64`).toString(`utf8`));let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=_(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),JSON.parse(Buffer.concat([e.update(i),e.final()]).toString(`utf8`))}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function A(e,t){if(t.startsWith(`${C}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=_(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),e.update(i),e.final(),t.version}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function le(e,t,n={}){let r=`coder-${e.id.replace(/[^a-zA-Z0-9_.-]/g,`-`).slice(0,48)}-${Date.now()}`;n.tarballUrl&&(t={...t,CODER_RUNNER_TARBALL_URL:n.tarballUrl});let i=Object.keys(t).flatMap(e=>[`-e`,e]);return{args:[`run`,`-d`,`--name`,r,`--memory`,String(n.memory??`4g`),`--cpus`,String(n.cpus??2),`--pids-limit`,String(n.pidsLimit??512),`--network`,n.network??`bridge`,...i,n.image??`ghcr.io/muzam1l/coder-runner:latest`,`sh`,`-c`,q(),`coder-task`,e.id,K],env:t}}var ue=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=this.options.image??`ghcr.io/muzam1l/coder-runner:latest`,r=await p(`docker`,[`run`,`--rm`,`--network`,`none`,`--entrypoint`,`sh`,n,`-c`,`for binary in node bun git curl tar claude codex github-mcp-server; do command -v "$binary" >/dev/null 2>&1 || { printf "%s\\n" "$binary"; exit 127; }; done`],{PATH:m.env.PATH??``});if(r.code!==0)throw r.code===127&&r.stdout.trim()?Error(`Docker image ${n} is missing required binary ${r.stdout.trim()}`):Error(`Docker image ${n} validation failed: ${r.stderr.trim()||`docker run failed`}`);let i=le(e,{...t,CODER_INBOX_SOCKET:l},this.options),a=await p(`docker`,i.args,{PATH:m.env.PATH??``,...i.env});if(a.code!==0)throw Error(a.stderr.trim()||`docker run failed`);return a.stdout.trim()}async status(e){let t=await p(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:m.env.PATH??``});if(t.code!==0)return{state:`exited`};let[n,r]=t.stdout.trim().split(/\s+/);return n===`true`?{state:`running`}:{state:`exited`,code:Number(r)||0}}async stop(e){await p(`docker`,[`rm`,`-f`,e],{PATH:m.env.PATH??``})}async push(e,t){let n=await p(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,u],{PATH:m.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}},de=t({GithubActionsRunner:()=>N,actionsWorkflow:()=>j});function j(){return`name: Coder agent
2
2
  run-name: Coder agent \${{ inputs.task }}
3
3
  on:
4
4
  workflow_dispatch:
package/dist/schema.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as platformLink, C as agentVersion, D as engineCredential, E as coder, F as taskInbox, I as taskLog, L as taskTombstone, M as secret, N as tables, O as integrationApp, P as task, R as usage, S as agent, T as chatState, j as runner, k as integrationAppInstallation, w as chatItem } from "./sdk-4Vjo5Q6R.js";
1
+ import { A as platformLink, C as agentVersion, D as engineCredential, E as coder, F as taskInbox, I as taskLog, L as taskTombstone, M as secret, N as tables, O as integrationApp, P as task, R as usage, S as agent, T as chatState, j as runner, k as integrationAppInstallation, w as chatItem } from "./sdk-CWerLcF5.js";
2
2
  export { agent, agentVersion, chatItem, chatState, coder, engineCredential, integrationApp, integrationAppInstallation, platformLink, runner, secret, tables, task, taskInbox, taskLog, taskTombstone, usage };
@@ -1,6 +1,6 @@
1
- import { A as InstallationLink, C as RunnerUpdate, D as AgentEvent, E as AgentDefinition, F as CoderConfig, I as CustomModelConfig, M as Preset, N as TaskContext, O as AgentTask, P as TaskSource, S as RunnerTest, T as Agent, _ as RunnerInput, b as RunnerRow, c as TaskStatus$1, d as TokenUsage, f as AppSync, g as ProbeResult, h as LocalFolders, j as InstallationSettings, k as AgentUsage, m as LocalFolder, n as Availability, p as ConnectionRow, s as Task, u as TaskLogEntry, v as RunnerKind, w as TaskTurn, x as RunnerSpec, y as RunnerPairing } from "./types-BktBEKW5.js";
2
- import { a as readTurnResults, b as FlowEvent, c as archiveRuns, d as RunSummary, f as StopSummary, i as readTask, l as deleteRuns, s as RunResult$1, u as RunOptions, x as FlowRecord, y as DiscoveredFlow } from "./index-CVjkwYeS.js";
3
- import { i as ReviewArgs, u as ReviewResult } from "./review-D-U_2KyT.js";
1
+ import { A as InstallationLink, C as RunnerUpdate, D as AgentEvent, E as AgentDefinition, F as CoderConfig, I as CustomModelConfig, M as Preset, N as TaskContext, O as AgentTask, P as TaskSource, S as RunnerTest, T as Agent, _ as RunnerInput, b as RunnerRow, c as TaskStatus$1, d as TokenUsage, f as AppSync, g as ProbeResult, h as LocalFolders, j as InstallationSettings, k as AgentUsage, m as LocalFolder, n as Availability, p as ConnectionRow, s as Task, u as TaskLogEntry, v as RunnerKind, w as TaskTurn, x as RunnerSpec, y as RunnerPairing } from "./types-C1tWi5lP.js";
2
+ import { a as readTurnResults, b as FlowEvent, c as archiveRuns, d as RunSummary, f as StopSummary, i as readTask, l as deleteRuns, s as RunResult$1, u as RunOptions, x as FlowRecord, y as DiscoveredFlow } from "./index-vd37q3fn.js";
3
+ import { i as ReviewArgs, u as ReviewResult } from "./review-CJS59vO-.js";
4
4
  import "zod/mini";
5
5
  //#region src/core/engines/codex/index.d.ts
6
6
  declare function getCodexAvailability(cwd: string): Availability;
@@ -5294,7 +5294,7 @@ declare const secret: PgTableWithColumns<{
5294
5294
  tableName: "secret";
5295
5295
  dataType: "string";
5296
5296
  columnType: "PgText";
5297
- data: "app" | "installation" | "engine" | "runner";
5297
+ data: "engine" | "runner" | "installation" | "app";
5298
5298
  driverParam: string;
5299
5299
  notNull: true;
5300
5300
  hasDefault: false;
@@ -5306,7 +5306,7 @@ declare const secret: PgTableWithColumns<{
5306
5306
  identity: undefined;
5307
5307
  generated: undefined;
5308
5308
  }, {}, {
5309
- $type: "app" | "installation" | "engine" | "runner";
5309
+ $type: "engine" | "runner" | "installation" | "app";
5310
5310
  }>;
5311
5311
  iv: PgColumn<{
5312
5312
  name: "iv";
@@ -5999,7 +5999,7 @@ declare const engineCredential: PgTableWithColumns<{
5999
5999
  tableName: "engine_credential";
6000
6000
  dataType: "string";
6001
6001
  columnType: "PgText";
6002
- data: "custom" | "claude" | "codex";
6002
+ data: "custom" | "codex" | "claude";
6003
6003
  driverParam: string;
6004
6004
  notNull: true;
6005
6005
  hasDefault: false;
@@ -6011,7 +6011,7 @@ declare const engineCredential: PgTableWithColumns<{
6011
6011
  identity: undefined;
6012
6012
  generated: undefined;
6013
6013
  }, {}, {
6014
- $type: "custom" | "claude" | "codex";
6014
+ $type: "custom" | "codex" | "claude";
6015
6015
  }>;
6016
6016
  label: PgColumn<{
6017
6017
  name: "label";
@@ -6223,7 +6223,7 @@ declare const runner$1: PgTableWithColumns<{
6223
6223
  tableName: "runner";
6224
6224
  dataType: "string";
6225
6225
  columnType: "PgText";
6226
- data: "personal" | "workspace";
6226
+ data: "workspace" | "personal";
6227
6227
  driverParam: string;
6228
6228
  notNull: true;
6229
6229
  hasDefault: false;
@@ -6235,7 +6235,7 @@ declare const runner$1: PgTableWithColumns<{
6235
6235
  identity: undefined;
6236
6236
  generated: undefined;
6237
6237
  }, {}, {
6238
- $type: "personal" | "workspace";
6238
+ $type: "workspace" | "personal";
6239
6239
  }>;
6240
6240
  config: PgColumn<{
6241
6241
  name: "config";
@@ -8509,7 +8509,7 @@ declare const tables: {
8509
8509
  tableName: "secret";
8510
8510
  dataType: "string";
8511
8511
  columnType: "PgText";
8512
- data: "app" | "installation" | "engine" | "runner";
8512
+ data: "engine" | "runner" | "installation" | "app";
8513
8513
  driverParam: string;
8514
8514
  notNull: true;
8515
8515
  hasDefault: false;
@@ -8521,7 +8521,7 @@ declare const tables: {
8521
8521
  identity: undefined;
8522
8522
  generated: undefined;
8523
8523
  }, {}, {
8524
- $type: "app" | "installation" | "engine" | "runner";
8524
+ $type: "engine" | "runner" | "installation" | "app";
8525
8525
  }>;
8526
8526
  iv: PgColumn<{
8527
8527
  name: "iv";
@@ -9211,7 +9211,7 @@ declare const tables: {
9211
9211
  tableName: "engine_credential";
9212
9212
  dataType: "string";
9213
9213
  columnType: "PgText";
9214
- data: "custom" | "claude" | "codex";
9214
+ data: "custom" | "codex" | "claude";
9215
9215
  driverParam: string;
9216
9216
  notNull: true;
9217
9217
  hasDefault: false;
@@ -9223,7 +9223,7 @@ declare const tables: {
9223
9223
  identity: undefined;
9224
9224
  generated: undefined;
9225
9225
  }, {}, {
9226
- $type: "custom" | "claude" | "codex";
9226
+ $type: "custom" | "codex" | "claude";
9227
9227
  }>;
9228
9228
  label: PgColumn<{
9229
9229
  name: "label";
@@ -9434,7 +9434,7 @@ declare const tables: {
9434
9434
  tableName: "runner";
9435
9435
  dataType: "string";
9436
9436
  columnType: "PgText";
9437
- data: "personal" | "workspace";
9437
+ data: "workspace" | "personal";
9438
9438
  driverParam: string;
9439
9439
  notNull: true;
9440
9440
  hasDefault: false;
@@ -9446,7 +9446,7 @@ declare const tables: {
9446
9446
  identity: undefined;
9447
9447
  generated: undefined;
9448
9448
  }, {}, {
9449
- $type: "personal" | "workspace";
9449
+ $type: "workspace" | "personal";
9450
9450
  }>;
9451
9451
  config: PgColumn<{
9452
9452
  name: "config";
@@ -11596,7 +11596,7 @@ declare const task: {
11596
11596
  }) => Promise<TaskWatch>;
11597
11597
  stream: (id?: string, opts?: TaskOptions & {
11598
11598
  tail?: number | "all";
11599
- }) => AsyncGenerator<TaskLogLine | TaskLogEntry, void, any>;
11599
+ }) => AsyncGenerator<TaskLogEntry | TaskLogLine, void, any>;
11600
11600
  steer: (id: string, text: string, opts?: TaskOptions & {
11601
11601
  model?: string;
11602
11602
  effort?: string;
@@ -11715,7 +11715,7 @@ declare const model: {
11715
11715
  workspace?: boolean;
11716
11716
  cwd?: string;
11717
11717
  }) => {
11718
- provider: "claude" | "codex";
11718
+ provider: "codex" | "claude";
11719
11719
  model: string;
11720
11720
  effort?: "low" | "medium" | "high" | undefined;
11721
11721
  disabled?: boolean | undefined;
@@ -11993,7 +11993,7 @@ declare const _default: {
11993
11993
  }) => Promise<TaskWatch>;
11994
11994
  stream: (id?: string, opts?: TaskOptions & {
11995
11995
  tail?: number | "all";
11996
- }) => AsyncGenerator<TaskLogLine | TaskLogEntry, void, any>;
11996
+ }) => AsyncGenerator<TaskLogEntry | TaskLogLine, void, any>;
11997
11997
  steer: (id: string, text: string, opts?: TaskOptions & {
11998
11998
  model?: string;
11999
11999
  effort?: string;
@@ -12131,7 +12131,7 @@ declare const _default: {
12131
12131
  workspace?: boolean;
12132
12132
  cwd?: string;
12133
12133
  }) => {
12134
- provider: "claude" | "codex";
12134
+ provider: "codex" | "claude";
12135
12135
  model: string;
12136
12136
  effort?: "low" | "medium" | "high" | undefined;
12137
12137
  disabled?: boolean | undefined;
package/dist/sdk.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { C as RunnerUpdate, S as RunnerTest, _ as RunnerInput, b as RunnerRow, h as LocalFolders, l as TurnResult, m as LocalFolder, p as ConnectionRow, s as Task, t as Approval, u as TaskLogEntry, v as RunnerKind, x as RunnerSpec, y as RunnerPairing } from "./types-BktBEKW5.js";
2
- import { C as FlowStep, b as FlowEvent, n as flowSdk, o as CoderError, r as TaskResult } from "./index-CVjkwYeS.js";
3
- import { i as ReviewArgs, u as ReviewResult } from "./review-D-U_2KyT.js";
4
- import { _ as ConnectionOptions, a as connection, b as TaskRunOptions, c as folders, d as runner, f as server, g as ConnectionAddOptions, h as upgrade, i as config, l as model, m as task, n as agent, o as credentials, p as setupHost, r as auth, s as docs, t as _default, u as review, v as DeclaredServer, x as ServerOptions, y as Session, z as SteerOutcome } from "./sdk-4Vjo5Q6R.js";
1
+ import { C as RunnerUpdate, S as RunnerTest, _ as RunnerInput, b as RunnerRow, h as LocalFolders, l as TurnResult, m as LocalFolder, p as ConnectionRow, s as Task, t as Approval, u as TaskLogEntry, v as RunnerKind, x as RunnerSpec, y as RunnerPairing } from "./types-C1tWi5lP.js";
2
+ import { C as FlowStep, b as FlowEvent, n as flowSdk, o as CoderError, r as TaskResult } from "./index-vd37q3fn.js";
3
+ import { i as ReviewArgs, u as ReviewResult } from "./review-CJS59vO-.js";
4
+ import { _ as ConnectionOptions, a as connection, b as TaskRunOptions, c as folders, d as runner, f as server, g as ConnectionAddOptions, h as upgrade, i as config, l as model, m as task, n as agent, o as credentials, p as setupHost, r as auth, s as docs, t as _default, u as review, v as DeclaredServer, x as ServerOptions, y as Session, z as SteerOutcome } from "./sdk-CWerLcF5.js";
5
5
  export { type Approval, CoderError, type ConnectionAddOptions, type ConnectionOptions, type ConnectionRow, type DeclaredServer, type FlowEvent, type FlowStep, type LocalFolder, type LocalFolders, type ReviewArgs, type ReviewResult, type RunnerInput, type RunnerKind, type RunnerPairing, type RunnerRow, type RunnerSpec, type RunnerTest, type RunnerUpdate, type ServerOptions, type Session, type SteerOutcome, type Task, type TaskLogEntry, type TaskResult, type TaskRunOptions, type TurnResult, agent, auth, config, connection, credentials, _default as default, docs, flowSdk as flow, folders, model, review, runner, server, setupHost, task, upgrade };
package/dist/sdk.js CHANGED
@@ -1 +1 @@
1
- import{m as e,p as t}from"./config-D2FxHWwi.js";import{E as n,H as r,T as i}from"./dispatch-D3Dqxijf.js";import{n as a,r as o,s,t as c}from"./remote-oQs6My_3.js";import{n as l}from"./executor-5j-Ewzzb.js";import{n as u}from"./agent-C1HI4JlI.js";import{t as d}from"./connection-wq0CJZKh.js";import{t as f}from"./docs-3SW1O9iS.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./models-CdvmuaLv.js";import{n as b}from"./task-IoBYe7ok.js";import x from"./flow/index.js";import{i as S,n as C,o as w,r as T,s as E,t as D}from"./runner-DME7ohjt.js";import{t as O}from"./serve-BQsv2KZs.js";import{n as k}from"./apps-aj_JtpAm.js";import{_ as A}from"./runners-UNKPlmYE.js";import{n as j}from"./maintenance-B_79IJ_E.js";import{r as M,t as N}from"./serve-HNXk3HMY.js";import P from"node:path";import F from"node:process";function I(e){return e?P.resolve(e):F.cwd()}const L=b,R={add:(e,t)=>y(I(t.cwd),e,t),update:(e,t)=>v(I(t.cwd),e,t),remove:(e,t={})=>m(I(t.cwd),e,t),list:(e={})=>_(I(e.cwd)),alias:(e,t,n={})=>h(I(n.cwd),e,t,n),unalias:(e,t={})=>g(I(t.cwd),e,t),disable:(e,t={})=>p(I(t.cwd),e,!0,t),enable:(e,t={})=>p(I(t.cwd),e,!1,t)},z={get:(e,n={})=>t(I(n.cwd),e),set:(t,n,r={})=>e(I(r.cwd),t,n,r)},B=d;function V(e=[],t={}){return i(I(t.cwd),{hosts:e})}function H(e={}){return n(e)}function U(e,t={}){return f(e,t)}const W={async run(e={}){let t=await l(`review`,{cwd:e.cwd,args:e});return{...t.result,runId:t.runId}}},G=s,K={serve:N,rotateKey:j,workflow:A,app:{create:k},handler:M},q={list:(e={})=>a(e).credentials.list(),add:c,remove:(e,t={})=>a(t).credentials.remove(e,t),default:(e,t={})=>a(t).credentials.setDefault(e,t),login:o},J={list:(e={})=>a(e).folders.list(),check:(e,t={})=>a(t).folders.check(e)},Y={list:C,add:D,pair:T,update:E,default:(e,t={})=>E(e,{default:!0},t),test:w,rename:(e,t,n={})=>E(e,{name:t},n),remove:S,serve:O},X=u;var Z={task:L,flow:x,model:R,config:z,connection:B,setupHost:V,upgrade:H,docs:U,review:W,auth:G,agent:X,credentials:q,folders:J,runner:Y,server:K};export{r as CoderError,X as agent,G as auth,z as config,B as connection,q as credentials,Z as default,U as docs,x as flow,J as folders,R as model,W as review,Y as runner,K as server,V as setupHost,L as task,H as upgrade};
1
+ import{m as e,p as t}from"./config-D2FxHWwi.js";import{E as n,H as r,T as i}from"./dispatch-D3Dqxijf.js";import{n as a,r as o,s,t as c}from"./remote-oQs6My_3.js";import{n as l}from"./executor-5j-Ewzzb.js";import{n as u}from"./agent-ChnedLBv.js";import{t as d}from"./connection-BCRJHTgp.js";import{t as f}from"./docs-3SW1O9iS.js";import{a as p,i as m,n as h,o as g,r as _,s as v,t as y}from"./models-CdvmuaLv.js";import{n as b}from"./task-IoBYe7ok.js";import x from"./flow/index.js";import{i as S,n as C,o as w,r as T,s as E,t as D}from"./runner-DME7ohjt.js";import{t as O}from"./serve-wQgyxwdY.js";import{n as k}from"./apps-B60OpAHX.js";import{_ as A}from"./runners-CNhxPjg8.js";import{n as j}from"./maintenance-DuIspk-y.js";import{r as M,t as N}from"./serve-FG2LgXxM.js";import P from"node:path";import F from"node:process";function I(e){return e?P.resolve(e):F.cwd()}const L=b,R={add:(e,t)=>y(I(t.cwd),e,t),update:(e,t)=>v(I(t.cwd),e,t),remove:(e,t={})=>m(I(t.cwd),e,t),list:(e={})=>_(I(e.cwd)),alias:(e,t,n={})=>h(I(n.cwd),e,t,n),unalias:(e,t={})=>g(I(t.cwd),e,t),disable:(e,t={})=>p(I(t.cwd),e,!0,t),enable:(e,t={})=>p(I(t.cwd),e,!1,t)},z={get:(e,n={})=>t(I(n.cwd),e),set:(t,n,r={})=>e(I(r.cwd),t,n,r)},B=d;function V(e=[],t={}){return i(I(t.cwd),{hosts:e})}function H(e={}){return n(e)}function U(e,t={}){return f(e,t)}const W={async run(e={}){let t=await l(`review`,{cwd:e.cwd,args:e});return{...t.result,runId:t.runId}}},G=s,K={serve:N,rotateKey:j,workflow:A,app:{create:k},handler:M},q={list:(e={})=>a(e).credentials.list(),add:c,remove:(e,t={})=>a(t).credentials.remove(e,t),default:(e,t={})=>a(t).credentials.setDefault(e,t),login:o},J={list:(e={})=>a(e).folders.list(),check:(e,t={})=>a(t).folders.check(e)},Y={list:C,add:D,pair:T,update:E,default:(e,t={})=>E(e,{default:!0},t),test:w,rename:(e,t,n={})=>E(e,{name:t},n),remove:S,serve:O},X=u;var Z={task:L,flow:x,model:R,config:z,connection:B,setupHost:V,upgrade:H,docs:U,review:W,auth:G,agent:X,credentials:q,folders:J,runner:Y,server:K};export{r as CoderError,X as agent,G as auth,z as config,B as connection,q as credentials,Z as default,U as docs,x as flow,J as folders,R as model,W as review,Y as runner,K as server,V as setupHost,L as task,H as upgrade};
@@ -1,9 +1,9 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{$ as t,B as n,Cn as r,Ct as i,Q as a,R as o,S as s,_ as c,ct as l,g as u,j as d,n as f,o as p,s as m,t as h,v as g,w as _}from"./config-D2FxHWwi.js";import{H as v}from"./dispatch-D3Dqxijf.js";import{i as y,n as b,p as x,r as ee,s as S,t as C}from"./load-CRmQB1LD.js";import{s as w,u as T}from"./slack-C_RlVDz7.js";import{n as E}from"./integrations-D3OgJk6Y.js";import{i as D,t as te}from"./discover-CBP4Uw0N.js";import{c as ne}from"./models-CdvmuaLv.js";import{a as re}from"./local-XNsjb-UM.js";import{a as O,d as ie,f as ae,l as k,n as oe,o as se,p as ce,r as le,s as ue,t as de,u as fe}from"./http-BYMXT_p6.js";import{$ as pe,$n as A,$t as me,A as he,An as ge,Ar as _e,B as ve,Bn as ye,Bt as be,C as xe,D as Se,Dn as Ce,Dr as j,Dt as we,E as Te,En as Ee,Er as M,Et as De,F as Oe,Fn as ke,Ft as Ae,G as je,Gn as Me,Gt as Ne,H as Pe,Hn as Fe,Ht as Ie,I as Le,In as Re,It as N,J as ze,Jn as Be,Jt as Ve,K as He,Kn as Ue,Kt as We,L as Ge,Ln as Ke,Lt as qe,M as Je,Mn as Ye,Mt as Xe,N as Ze,Nn as Qe,Nt as $e,O as P,On as et,Or as F,Ot as I,P as tt,Pn as nt,Pt as rt,Q as it,Qn as L,Qt as at,R as ot,Rn as st,Rt as R,S as z,Sn as ct,Sr as lt,St as ut,T as dt,Tn as ft,Tr as pt,Tt as mt,U as ht,Un as gt,Ut as _t,V as vt,Vt as yt,W as bt,Wn as xt,Wt as St,X as Ct,Xn as wt,Xt as Tt,Y as Et,Yn as Dt,Yt as Ot,Z as kt,Zn as At,Zt as jt,_ as Mt,_r as Nt,_t as Pt,a as Ft,an as It,ar as Lt,at as Rt,b as zt,bn as Bt,br as Vt,bt as Ht,c as B,cn as Ut,cr as Wt,ct as Gt,d as Kt,dn as qt,dr as Jt,dt as V,en as Yt,er as Xt,et as Zt,f as Qt,fn as $t,fr as en,ft as tn,g as nn,gn as rn,gr as an,gt as on,h as H,hn as sn,hr as cn,i as ln,in as un,ir as dn,it as fn,j as U,jn as pn,jt as mn,k as hn,kn as gn,kr as _n,kt as W,l as vn,ln as yn,lr as bn,lt as xn,m as Sn,mn as Cn,mr as wn,mt as Tn,nn as En,nr as G,nt as Dn,o as On,on as kn,or as An,ot as jn,p as Mn,pn as Nn,pr as Pn,pt as Fn,q as In,qn as Ln,qt as Rn,r as zn,rn as Bn,rr as Vn,rt as Hn,s as Un,sn as Wn,sr as Gn,tn as Kn,tr as qn,tt as Jn,u as Yn,un as Xn,ur as Zn,ut as Qn,v as $n,vr as er,vt as tr,w as nr,wn as rr,wt as ir,x as ar,xr as or,xt as sr,y as cr,yn as lr,yr as ur,zn as dr,zt as fr}from"./apps-aj_JtpAm.js";import{n as pr,r as mr}from"./env-C_DoQYl5.js";import{S as hr,a as gr,b as K,h as _r,i as vr,n as yr,p as br,x as xr}from"./runners-UNKPlmYE.js";import{X as Sr}from"./schema-BSlHRFSP.js";import q from"node:path";import J from"node:process";import Cr from"node:fs";import{spawnSync as wr}from"node:child_process";import{createHash as Tr,randomBytes as Er,randomUUID as Dr}from"node:crypto";import Y from"node:fs/promises";import{isDeepStrictEqual as Or}from"node:util";import kr from"node:http";async function Ar(e){try{return await Y.readdir(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function X(e){try{return await Y.lstat(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function jr(e,t){if(e===t||!await X(e))return 0;let n=await Ar(e),i=n.filter(e=>e.isDirectory()).length;if(!await X(t))return await r(e,t),i;for(let i of n)await r(q.join(e,i.name),q.join(t,i.name));return await Y.rmdir(e),i}async function Mr(e){let t=q.dirname(e),n=q.basename(e);for(let e of await Ar(t)){let r=e.name.startsWith(n)?e.name.slice(n.length):``;if(!e.isFile()||!(r===`.tmp`||/^\.\d+(?:\.[a-f0-9-]{36})?\.tmp$/.test(r)))continue;let i=Number(e.name.slice(n.length+1).split(`.`)[0]);if(Number.isInteger(i)&&i>0)try{process.kill(i,0);continue}catch(e){if(e.code!==`ESRCH`)continue}await Y.unlink(q.join(t,e.name)).catch(e=>{if(e.code!==`ENOENT`)throw e})}}async function Nr(e,t){if(await Mr(e),e===t||!await X(e))return 0;if(!await X(t))return await r(e,t),1;let n=JSON.parse(await Y.readFile(e,`utf8`)),i=JSON.parse(await Y.readFile(t,`utf8`)),a={...n,...i,...n.rows||i.rows?{rows:{...n.rows,...i.rows}}:{}},o=`${t}.${process.pid}.${Dr()}.tmp`;try{await Y.writeFile(o,`${JSON.stringify(a)}\n`,{mode:384,flag:`wx`}),await Y.rename(o,t),await Y.unlink(e)}finally{await Y.rm(o,{force:!0})}return 1}async function Pr(){let e=a(),n=t(`state`),r=a(`archive`),i=a(`flows-archived`),o=a(`usage.json`),s=a(`runner`,`usage.json`),c={from:t(`checkouts`),to:a(`checkouts`)},l={from:t(`update-check.json`),to:a(`update-check.json`)},u={cache:e,tasks:0,flows:0,files:0},d=(await Ar(n)).filter(e=>e.isDirectory()).map(e=>({archive:t(`state`,e.name,`archive`),flows:t(`state`,e.name,`flows-archived`),usage:t(`state`,e.name,`usage.json`),runnerUsage:t(`state`,e.name,`runner`,`usage.json`)}));await Mr(o),await Mr(s);for(let e of d)u.tasks+=await jr(e.archive,r),u.flows+=await jr(e.flows,i),u.files+=await Nr(e.usage,o),u.files+=await Nr(e.runnerUsage,s);return await jr(c.from,c.to),u.files+=await Nr(l.from,l.to),u}async function Fr(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function Ir(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await Lr(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,O({ok:r},r?200:503,{"cache-control":`no-store`})}async function Lr(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Rr(e){let t=(e.now??Date.now)();if(e.queue.metrics&&!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await Fr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...W(e.local.cwd,!1),...W(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await Fr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}async function zr(e,t,n,r){let i=t.session.user.id;n.id;let a=(await e.json().catch(()=>({}))).engine??``;if(!Wr.has(a)||!t.config.subscriptions?.[a])return O({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return O({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=(await t.store.list(`login`)).find(({value:e})=>e.owner===i&&e.engine===a&&e.state!==`done`&&e.state!==`failed`&&e.expiresAt>Z(t));if(s)return O(Kr(s.id,s.value));let c=`login-${Er(12).toString(`base64url`)}`,l=rn(c,t.organizationId,0),u={owner:i,engine:a,state:`starting`,tokenHash:l.hash,runner:o.kind,createdAt:Z(t),expiresAt:Z(t)+Ur};await Gr(t,c,u);let d;try{let e=await o.start({id:c},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:l.token,CODER_LOGIN:a},void 0,{timeoutMs:Ur,hosts:[br[a].api,...br[a].account]}),n=await t.store.patchLogin(c,{handle:e},{tokenHash:u.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),O({error:`This sign-in is gone. Start again.`},409);d=n}catch(e){return await t.store.delete(`login`,c),O({error:e instanceof Error?e.message:String(e)},502)}return O(Kr(c,d),201)}async function Br(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;return a?O(Kr(i,a)):O({error:`This sign-in is gone. Start again.`},404)}async function Vr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;if(!a)return O({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:hr(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?O({error:`This sign-in is not waiting for a code.`},409):O({ok:!0})}async function Hr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),O({ok:!0})):O({error:`This sign-in is gone. Start again.`},404)}const Ur=6e5,Wr=new Set([`claude`,`codex`]),Z=e=>(e.now??Date.now)();function Gr(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-Z(e))})}function Kr(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{},...t.label?{label:t.label}:{}}}async function qr(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}function Jr(e,t){let n=t.handle&&e.runners[t.runner]?.stop(t.handle);if(!n)return;let r=n.catch(e=>console.error(`coder server: could not stop the machine of a finished ${t.engine} sign-in`,e));e.waitUntil?.(r)}async function Yr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=Date.now()+25e3;for(;!a.input&&Date.now()<o&&!e.signal.aborted;){await new Promise(e=>setTimeout(e,250));let e=await t.store.get(`login`,i);if(!e)return new Response(`Unauthorized`,{status:401});a=e}if(!a.input)return O({});let s=await t.store.patchLogin(i,{input:null},{input:a.input,tokenHash:a.tokenHash});return O(s?{code:K(t.config,a.input)}:{})}async function Xr(e,t,n,r){n.id;let i=t.callbackLogin;return O({engine:i.engine})}async function Zr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return O({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s)&&Jr(t,a),O({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return O({error:`Invalid sign-in result`},400);let n=`${a.engine}-subscription`,r=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,n,{...xr(t.config,{env:c}),engine:a.engine,createdAt:(t.now??Date.now)(),...r?.email||r?.plan?{account:{...typeof r.email==`string`?{email:r.email}:{},...typeof r.plan==`string`?{plan:r.plan}:{}}}:{}})?(Jr(t,a),O({ok:!0})):O({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return(a.state===`starting`?await t.store.patchLogin(i,{...l,state:`open`},{state:`starting`,tokenHash:a.tokenHash})??await t.store.patchLogin(i,l,{...s,state:[`open`,`verifying`]}):await t.store.patchLogin(i,l,s))?O({ok:!0}):O({error:`This sign-in changed. Try again.`},409)}const Qr=e=>`audit:${String(9999999999999-e).padStart(13,`0`)}:${Er(4).toString(`hex`)}`,$r=e=>e.config.name??`Wular`,ei=e=>wn(e,e.serverOrganizationId??e.organizationId);async function ti(e,t,n){let r=(e.now??Date.now)(),i=e.session?.user,a={at:r,actor:i?{id:i.id,name:i.name,email:i.email}:{id:`admin-token`},action:t,target:n};await ei(e).store.put(`snapshot`,Qr(r),a)}async function ni(e,t){let n=await ei(t).store.list(`app`),r=Object.values(t.integrations).filter(e=>e.app.builtin===`shared`).map(e=>{let t=n.find(({value:t})=>t.builtin&&t.integration===e.id)?.value;return{integration:e.id,name:e.name,brand:e.brand,organizationApps:e.organizationApps===!0,...t?{app:{id:t.id,name:t.name,createdAt:t.createdAt}}:{}}}),i=t.config.publicUrl,a=!!i&&H.has(new URL(i).hostname);return O({name:$r(t),platforms:r,...a?{unreachable:!0}:{}})}async function ri(e,t,n){let r=t.integrations[n.integration];if(!r)return O({error:`Unknown integration "${n.integration}".`},404);if(r.app.builtin!==`shared`)return O({error:`Create ${r.name} apps in your workspace from the agent's Platforms tab.`},400);if(!t.config.publicUrl)return O({error:`Set PUBLIC_URL on this server first. Platforms call it.`},400);let i=await e.json().catch(()=>void 0),a=e=>typeof e==`string`&&e.trim()||void 0,o=a(i?.name)??$r(t),s=r.organizationApps?a(i?.owner):void 0,c=await zn(ei(t),r.id,{name:o,owner:s});return await ti(t,`Started setting up a shared app`,`${o} on ${r.name}`),O({url:c})}async function ii(e,t){let n=await ei(t).store.list(`snapshot`,{prefix:`audit:`,limit:100});return O(n.map(e=>e.value))}const ai=e=>`create-finished:${T(e)}`;async function oi(e,t){let n=await e.store.get(`delivery`,ai(t));return n&&`target`in n?n.target:void 0}async function si(e,t,n){let r=e.operatorApp??!1,i=r?`*`:e.session?.user.id??`anonymous`;if(!e.integrations[t])return{error:`Unknown integration "${t}"; run coder agent integrations list to see them`,status:404};if(!e.config.publicUrl)return{error:`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,status:400};if(r&&e.integrations[t].app.builtin!==`shared`)return{error:`Create this app in your workspace from the agent's Platforms tab.`,status:400};let a=Yn(n);if(!a)return{error:`Setup link is missing or malformed; start again from the agent's Platforms tab`,status:400};if(!a.definition.integrations[t])return{error:`This agent declares no ${t} integration in its agent.json`,status:400};if(a.state.public&&!r&&!e.integrations[t].publicApps)return{error:`${e.integrations[t].name} apps cannot be public here. Create a private one.`,status:400};let o=On(t,a.state),s=a.state.tx?await _n(e,a.state.tx,`create`,i)===o?a.state.tx:void 0:await _e(e,`create`,i,o);return s?{state:{...a.state,tx:s},definition:a.definition}:{error:`This app creation link is invalid, expired, or already used`,status:403}}async function ci(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=r.searchParams.get(`tx`);if(t.operatorApp&&i&&(await _n(t,i,`create`,`*`)||await oi(t,i)===n.id))return await or(e,void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503});let a=new URLSearchParams(r.searchParams);return a.set(`create`,n.id),ce(`${Un(t)}${Qt(Sn(t),`/setup`)}?${a}`)}async function li(e,t,n){let r=await si(e,t,n);if(`error`in r)return O({error:r.error},r.status);let{app:i}=e.integrations[t],a=r.state.tx,o=i.createStep&&(e.operatorApp||r.state.public)?i.createStep(e.config.publicUrl,{name:r.definition.name,public:r.state.public}):void 0,s=e.config.publicUrl;if(i.createPost&&H.has(new URL(s).hostname))return O({error:`${e.integrations[t].name} cannot reach ${s}. Set a public address first.`},400);let c=e.operatorApp?void 0:vn(e,r.state.agent),l=i.createPost?.({publicUrl:s,...r,encodedState:re({tx:a,...c?{back:c}:{}})});return O({tx:a,...l?{post:l}:{},...o?{create:o}:{}})}async function ui(e,t,n,r){if(/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return li(t,n.id,r.searchParams)}async function di(e,t,n){let r=await e.json().catch(()=>void 0);return li(t,n.integration,new URLSearchParams(r&&typeof r==`object`?r:{}))}async function fi(e,t,n,r,i){let a=t.operatorApp??!1,o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[n];if(!s)return B(t,`unknown-integration`,{platform:n},i);if(a&&s.app.builtin!==`shared`)return O({error:`Create this app in your workspace from the agent's Platforms tab.`},400);let c=t.config.publicUrl;if(!c)return B(t,`no-public-url`,{},i);let l=r?await Kt(t,r,n,o):void 0;if(!l)return B(t,`create-expired`,{platform:n},i);a&&await t.store.put(`delivery`,ai(r),{at:t.now?.()??Date.now(),target:n},{ttlMs:6e5});let u=a?`/create/${n}`:vn(t,l.state.agent),d=a?{tx:r}:{},f=a?void 0:(await ln(t)).find(e=>e.integration===n),p=await s.app.createCallback(e,{publicUrl:c,...l,fetch:t.fetch??fetch,...f?{shared:K(t.config,f.credentials)}:{}}).catch(r=>r instanceof w&&r.code===`invalid-field`&&e.headers.get(`accept`)===`application/json`?O({error:r.message},400):r instanceof w?B(t,r.code,{platform:n,error:r.error,...d},u):(console.error(`coder server: creating the ${n} app failed`,r),B(t,`failed`,{platform:n,...d},u)));if(p instanceof Response)return p;let m={id:`${n}:${p.platformAppId}`,integration:n,agent:l.state.agent,name:p.name,...l.state.repo?{agentsRepo:l.state.repo}:{},...l.state.repo?{branch:l.state.branch??`main`}:{},...a?{builtin:!0}:{},...`shared`in p?{shared:f.id,credentials:``}:{credentials:hr(t.config,p.credentials)},createdAt:t.now?.()??Date.now()};if(await t.store.put(`app`,m.id,m),s.app.values&&await t.store.put(`delivery`,Be(m.id),{version:0,manifest:s.app.values(m,{publicUrl:c,definition:l.definition}).lines,changed:!1}),a)return await ti(t,`Created the shared app`,`${p.name} on ${s.name}`),B(t,`created`,{platform:n,app:p.name,...d},u);let h=await _e(t,`install`,o,m.id);return ce(`${c}/install/${n}?app=${encodeURIComponent(m.id)}&state=${re({tx:h,back:u})}`)}async function pi(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=le(r.searchParams.get(`state`));return fi(e,t,n.id,i?.tx,Ft(i?.back))}async function mi(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=new URLSearchParams(await e.clone().text()).get(`tx`),a=await fi(e,t,n.id,i,void 0),o=a.headers.get(`location`);return o&&e.headers.get(`accept`)===`application/json`?O({url:o}):a}async function hi(e,t,n,r){if(t.source!==`repo`||!t.repo)return;let i=(await(r??e.store.list(`app`))).find(({value:e})=>e.agent===t.id&&e.agentsRepo===t.repo)?.value;return((i&&e.integrations[i.integration])??Object.values(e.integrations).find(e=>e.repos))?.repos?.url(t.repo,t.path,i?.branch??n?.commit)}async function gi(e,t,n){let r=await wt(e.store,t);return await qn(e.store,n,t,r)?wt(e.store,t):r}async function Q(e,t){let n=(e.now??Date.now)(),r=e.local?await Fe(e.store,e.local.cwd,e.integrations,t).catch(()=>void 0):void 0;return{now:n,local:r,loadCurrent:()=>r?Promise.resolve(r.find(({record:e})=>e.id===t)??{}):gi(e,t,n)}}async function _i(e,t,{after:n,q:r,source:i,platform:a,limit:o}){return!t&&e.store.listAgentSummaries?(await e.store.listAgentSummaries({after:n,q:r,source:i,platform:a,limit:o})).map(({record:e})=>e):(t??(a?await At(e.store):(await e.store.list(`agent`)).map(({value:e})=>({record:e,version:void 0})))).filter(({version:e})=>!a||!!e?.definition?.integrations?.[a]).map(({record:e})=>e).filter(e=>(!n||e.id>n)&&(!i||e.source===i)&&(!r||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(r)))).sort((e,t)=>e.id.localeCompare(t.id)).slice(0,o)}async function vi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let a=r.searchParams.get(`fields`);if(a&&![`id`,`id,name`].includes(a))return O({error:`Invalid fields`},400);let{now:o,local:s,loadCurrent:c}=await Q(t,i);if(!s&&t.store.listAgentSummaries&&(await G(t.store,o),ae(r)&&!a))return O(await Ci(t,r));let l=ie(r,200);if(a){!s&&!t.store.listAgentSummaries&&await G(t.store,o);let e=await _i(t,s,{after:oe(r),q:r.searchParams.get(`q`)?.trim().toLowerCase(),source:Si[r.searchParams.get(`type`)??``],platform:r.searchParams.get(`platform`)??void 0,limit:l+ +!!ae(r)}),n=e=>a===`id`?{id:e.id}:{id:e.id,name:e.name},i=fe(e,l,e=>e.id);return O(ae(r)?{...i,items:i.items.map(n)}:e.map(n))}let u=s??(t.store.listAgentSummaries?await t.store.listAgentSummaries({limit:l}):await At(t.store));if(!s&&!t.store.listAgentSummaries&&await G(t.store,o,u)&&(u=await At(t.store)),ae(r))return O(await Ci(t,r,u));let d,f=y();return O(await Promise.all(u.slice(0,l).map(async({record:e,version:n})=>{e.source===`repo`&&e.repo&&(d??=t.store.list(`app`));let r=await hi(t,e,n,d);return{...e,...e.id===f?{default:!0}:{},definition:n?.definition,...r?{sourceUrl:r}:{}}})))}async function yi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=ie(r,10,50),l=oe(r),[u,d]=await Promise.all([o?s().then(e=>e.record):L(t.store,i),o?Promise.resolve(o.flatMap(({version:e})=>e?[{value:e}]:[])):t.store.listVersions?.(i,c+1,l)]);return u?O(await wi(t,u,c,l??u.currentVersion+1,d)):O({error:`No agent named "${i}"`},404)}async function bi(e,t,n,r){let i=n.slug,a=n.version?Number(n.version):void 0;if(n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,i),l=s?s.find(({version:e})=>e?.version===a)?.version:await A(t.store,i,a);return l?O(l):O({error:`No version ${a} for agent "${i}"`},404)}async function xi(e,t,r,i){let a=r.slug;if(r.version&&Number(r.version),r.version&&!/^\d+$/.test(i.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,a),l=i.searchParams.get(`versions`)!==`0`,u=i.searchParams.get(`content`)!==`0`,d=i.searchParams.get(`handles`)===`1`,f=t.session?.user.id,[{record:p,version:m},h,g,_,v]=await Promise.all([!u&&!s&&t.store.listAgentSummaries&&!ee()[a]?t.store.listAgentSummaries({slug:a}).then(e=>e[0]??{}):c(),l?s?s.flatMap(({version:e})=>e?[{value:e}]:[]):t.store.listVersions?t.store.listVersions(a):t.store.list(`agentversion`,{prefix:`${a}:`}):[],d?pn(t,a):[],d?Cn(t.store,a):void 0,d?t.store.listCredentials?t.store.listCredentials({owner:f}):t.store.list(`credential`):void 0]);if(!p)return O({error:`No agent named "${a}"`},404);let y=p.settings?.engine??m?.definition.engine??n,b=v!==void 0&&!v.some(({value:e})=>e.engine===y&&(!e.owner||e.owner===f))&&!await mn(t,p.settings?.engine??m?.definition.engine),x=m?.definition.integrations??{},S=e=>{let t=x[e]?.events;return Array.isArray(t)?t.includes(`mention`):!!(t&&`mention`in t)},C=[],w=Object.keys(t.integrations),T=(e,t)=>w.indexOf(e.value.integration)-w.indexOf(t.value.integration);for(let{value:e}of[...g].sort(T))S(e.integration)&&!C.some(t=>t.integration===e.integration&&t.name.toLowerCase()===e.name.toLowerCase())&&C.push({name:e.name,integration:e.integration,platform:t.integrations[e.integration]?.name??e.integration});let E=h.map(({value:e})=>{let{systemPrompt:t,files:n,...r}=e;return r}),D=await hi(t,p,m);return O({...p,...m?{definition:m.definition,...u&&`systemPrompt`in m?{systemPrompt:m.systemPrompt,...m.files?{files:m.files}:{}}:{}}:{},...D?{sourceUrl:D}:{},...l?{versions:E}:{},...C.length?{handles:C}:{},..._?.failed?{deliveries:{failed:_.failed,recent:_.recent.map(e=>({at:e.at,platform:t.integrations[e.integration]?.name??e.integration,...e.type?{type:e.type}:{},error:e.error,...e.url?{url:e.url}:{}}))}}:{},...b?{needsModel:!0}:{}})}const Si={builtin:`builtin`,dashboard:`upload`,repository:`repo`};async function Ci(e,t,n){let r=ie(t,24,100),i=oe(t),a=t.searchParams.get(`q`)?.trim().toLowerCase(),o=Si[t.searchParams.get(`type`)??``],s=t.searchParams.get(`platform`),c=t.searchParams.get(`connect`)===`1`,l=e.serverOrganizationId,u=e.store.list(`app`),[d,f,p,m]=await Promise.all([u,e.store.list(`installation`),c&&l!==void 0&&l!==e.organizationId&&e.scope?e.scope(l).store.list(`app`):[],n?n.filter(({record:e})=>(!i||e.id>i)&&(!o||e.source===o)&&(!a||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(a)))):e.store.listAgentSummaries({after:i,source:o,q:a,platform:s??void 0,limit:r+1})]),h=new Set(f.filter(({value:e})=>!e.deletedAt).map(({value:e})=>e.app)),g=(e,t)=>{let n=d.filter(({value:n})=>n.agent===e&&n.integration===t);return n.length?n.some(({value:e})=>h.has(e.id))?`installed`:`created`:`none`},_=[];for(let{record:e,version:t}of m){let n=Object.keys(t?.definition?.integrations??{}).sort();if(!(s&&!n.includes(s))&&(_.push({record:e,version:t,ids:n}),_.length>r))break}let v=fe(_,r,e=>e.record.id),b=y();return{...v,...c?{connectable:[...d,...p].filter(({value:t})=>t.builtin&&e.integrations[t.integration]?.app.builtin===`shared`&&!h.has(t.id)).map(({value:e})=>({id:e.id,integration:e.integration,agent:e.agent}))}:{},items:await Promise.all(v.items.map(async({record:t,version:n,ids:r})=>{let i=await hi(e,t,n,u);return{...t,...t.id===b?{default:!0}:{},definition:n?.definition,...i?{sourceUrl:i}:{},platforms:r.map(e=>({id:e,state:g(t.id,e)}))}}))}}async function wi(e,t,n,r,i){let a=r-n-2,o=(i??await e.store.list(`agentversion`,{prefix:`${t.id}:`,...a>0?{after:Lt(t.id,a)}:{},limit:n+1})).map(({value:e})=>{let{systemPrompt:t,files:n,definition:r,...i}=e;return i}).filter(e=>e.version<r).reverse();return fe(o,n,e=>e.version)}var Ti=class{options;entries=new Map;pending=new Map;constructor(e={ttlMs:6e5,max:100}){this.options=e}get size(){return this.entries.size}get inFlight(){return this.pending.size}has(e){return this.entries.has(e)}keys(){return this.entries.keys()}async get(e,t){let n=this.options.now??Date.now,r=n(),i=this.entries.get(e);if(i&&r-i.at<this.options.ttlMs)return i.value;for(let[t,n]of this.entries)t!==e&&r-n.at>=this.options.ttlMs&&this.entries.delete(t);let a=this.pending.get(e);return a||(a=Promise.resolve().then(t).then(t=>{if(t===void 0)return i?.value;if(this.options.accept&&!this.options.accept(t))return i?.value??t;this.entries.set(e,{value:t,at:n()});let r=this.entries.keys().next().value;return this.entries.size>this.options.max&&r!==void 0&&this.entries.delete(r),t}).catch(()=>i?.value).finally(()=>this.pending.delete(e)),this.pending.set(e,a)),a}};const Ei=/^[a-z0-9][a-z0-9-]*$/,Di=new Set([`openrouter.ai`,`ai-gateway.vercel.sh`,`api.groq.com`,`api.together.xyz`]);function Oi(e){return{builtin:{codex:m,claude:f},models:e.models??{}}}async function ki(e,t){let{baseUrl:n,envKey:r,key:i}=await qe(e);if(!n||!/^https?:\/\//.test(n)||!URL.canParse(n))return O({error:`An http or https base URL is required`},400);let a=!i&&r&&await Ai(t,n,r)?await tr(t,r):void 0,o=i||a,s=t.settings??={},c=s.probes??=new Ti({ttlMs:6e5,max:100,now:t.now,accept:e=>e.reachable}),l=`${new URL(n).host}|${r??``}|${T(String(o??``))}`;return O(await c.get(l,()=>ne({baseUrl:n},{key:o,fetch:t.fetch})))}async function Ai(e,t,n){let r=new URL(t).host;if(Di.has(r))return!0;let i=(await _t(e)).models??{};return Object.values(i).some(e=>`baseUrl`in e&&e.envKey===n&&new URL(e.baseUrl).host===r)}async function ji(e,t,n,r){return O(Oi(await _t(t)))}async function Mi(e,t,n,r){let{name:i=``,...a}=await qe(e);return!Ei.test(i)||c(i)?O({error:`Invalid model name "${i}"`},400):R(t,e=>{if(e.models?.[i])throw new N(`"${i}" already exists`);e.models={...e.models,[i]:a}})}async function Ni(e,t,n,r){let i=n.name;return R(t,e=>{if(!e.models?.[i])throw new N(`No model "${i}"`);_(e,i)})}async function Pi(e,t,n,r){let i=n.name,{spec:a}=await qe(e);return R(t,e=>{if(!Ei.test(i))throw new N(`Invalid alias name "${i}"`);let t=e.models?.[i];if(t&&g(t))throw new N(`"${i}" is a custom model name`);let n=s(a,d(e));if(!n?.model||n.engine===`custom`)throw new N(`"${a}" does not name a codex or claude model`);let r=n.engine===`claude`?f:m,o=a.split(`:`).some(e=>p.has(e)||h.has(e));e.models={...e.models,[i]:{provider:n.engine,model:r[n.model]??n.model,...o&&n.effort?{effort:n.effort}:{}}}})}async function Fi(e,t,n,r){let i=n.name;return R(t,e=>{let t=e.models??={},n=t[i];n&&(g(n)||u(n))?n.disabled=!0:t[i]={disabled:!0}})}async function Ii(e,t,n,r){let i=n.name;return R(t,e=>{let t=e.models??={},n=t[i];n&&(g(n)||u(n))?delete n.disabled:delete t[i]})}async function Li(e,t){let{now:n,local:r}=await Q(t);r||await G(t.store,n);let[i,a,o]=await Promise.all([_i(t,r,{limit:200}),_t(t),t.store.list(`runner`)]),s=y(),c=i.filter(e=>!e.settings?.disabled).sort((e,t)=>Number(t.id===s)-Number(e.id===s)).map(({id:e,name:t})=>({id:e,name:t,...e===s?{default:!0}:{}})),l=fr(t,a),u=Object.values(t.integrations).find(e=>e.repos);return O({agents:c,...l.chain?.[0]?{engine:l.chain[0]}:{},engines:l.engines??{},models:Oi(a),runners:fn(t,o,n).map(({id:e,name:t,default:n})=>({id:e,name:t,default:n})),flows:D(te(),`builtin`).map(e=>e.name),...t.local?{folders:Wt(t.local.cwd)}:{},...u?{connectLabel:u.installLabel??`Connect ${u.id}`}:{}})}async function Ri(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await dr(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=i.token?{...i,token:K(e.config,i.token)}:i,o=await n.auth.token(r,K(e.config,a.credentials));if((await n.repos.list(r,o)).includes(t))return{contents:n,token:o,app:a,installation:i}}catch{}}}async function zi(e,t,n){let r=await Ri(e,t);if(!r)return O({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,xt,r.token,n).catch(()=>[]),a=await Promise.all(i.map(async i=>{let a=await r.contents.repos.readFile(t,`${xt}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(a===void 0)return;let s={};try{let e=JSON.parse(a);e&&typeof e==`object`&&(s=e)}catch{}let c=Object.entries(s.mcp&&typeof s.mcp==`object`&&!Array.isArray(s.mcp)?s.mcp:{}).flatMap(([e,t])=>o(e,t)),l=await L(e.store,i),u=l?.source===`repo`&&l.repo===t,d=u?await A(e.store,i):void 0;return{id:i,name:typeof s.name==`string`?s.name:i,...c.length?{warnings:c}:{},...typeof s.description==`string`?{description:s.description}:{},...u?{version:l.currentVersion,...d?.source?{commit:d.source.commit}:{}}:{},...l&&!u?{taken:!0}:{}}}));return O({repo:t,agents:a.filter(Boolean)})}async function Bi(e,t,n,r){let i=r.searchParams.get(`repo`);return i?zi(t,i,r.searchParams.get(`ref`)||`HEAD`):O({error:`repo is required`},400)}async function Vi(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return O({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await Ri(t,i.repo);if(!e)return O({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await L(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return O({error:`Agent id "${e}" is already taken`},409)}let o=await Me(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await Dt(t,o),O({imported:o.map(e=>e.agent)})}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}function Hi(e){if(!e||Array.isArray(e)||typeof e!=`object`)return!1;let t=Object.entries(e);if(t.length>100)return!1;let n=0;for(let[e,r]of t){if(typeof r!=`string`||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)||e.split(`/`).includes(`..`)||e===`agent.json`||e===`system.md`)return!1;n+=Buffer.byteLength(e)+Buffer.byteLength(r)}return n<=262144}async function Ui(e,t){return(await Ln(e,[t])).flatMap(({app:e,error:t,check:n})=>{let r={id:e.id,integration:e.integration,name:e.name};return t?[{...r,error:t}]:n?n.changed?[{...r,drift:!0}]:[]:[{...r,updated:!0}]})}async function Wi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);try{let e=x({[i]:c})[i];if(!e||typeof e!=`object`)throw Error(`settings must be an object`);let{disabled:n,...r}=e,a=n?{...r,disabled:n}:r,{record:o,version:l}=await s();if(!o||!l)throw Error(`No agent named "${i}".`);if(dn({...o,settings:void 0},l,r,t.integrations),t.local){let e=S(t.local.cwd,i,!!n);return e?O({error:`Agent "${i}" is ${n?`enabled`:`disabled`} by agents.${i} in ${e}. Change it there.`},409):(await St(t,e=>{e.agents={...e.agents,[i]:a}}),await Fe(t.store,t.local.cwd,t.integrations),O(await L(t.store,i)))}return O(await Vn(t.store,i,a,(t.now??Date.now)()))}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}async function Gi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),{record:c}=await s();if(!c)return O({error:`No agent named "${i}"`},404);if(c.source===`builtin`)return O({error:`Built-in agents cannot be deleted.`},400);if(t.local&&!await ye(t.local.cwd,t.integrations,i))return O({error:`Delete .coder/agents/${i} in the repo`},409);for(let{id:e}of await t.store.list(`agentversion`,{prefix:`${i}:`}))await t.store.delete(`agentversion`,e);return await t.store.delete(`agent`,i),O({ok:!0})}async function Ki(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);if(!c||typeof c.systemPrompt!=`string`||c.files!==void 0&&!Hi(c.files)||c.name!==void 0&&typeof c.name!=`string`||c.description!==void 0&&typeof c.description!=`string`)return O({error:`definition and systemPrompt are required; files must contain strings`},400);try{b([i]);let[e]=C({definitions:{[i]:{json:c.definition,builtin:!1}},usage:void 0},t.integrations);if(!e)throw Error(`No agent named "${i}".`);let n=t.local?await L(t.store,i):void 0,r=t.local&&n?await A(t.store,i):void 0,a=c.files;t.local&&(await gt(t.local.cwd,t.integrations,i,{definition:{...c.definition,...c.name===void 0?{}:{name:c.name},...c.description===void 0?{}:{description:c.description}},systemPrompt:c.systemPrompt,...a?{files:a}:{}}),await Fe(t.store,t.local.cwd,t.integrations));let o=t.local?void 0:await Xt(t.store,{id:i,name:c.name??e.name,description:c.description??e.definition.description,source:`upload`,definition:e.definition,systemPrompt:c.systemPrompt,files:a,importedFrom:`upload`},(t.now??Date.now)()),s=o?.version??await A(t.store,i),l=o?.unchanged??Or(r&&{...r,createdAt:0},{...s,createdAt:0}),u=await Ui(t,s),d=o?.record??await L(t.store,i);return O({...d,definition:s.definition,version:s.version,unchanged:l,apps:u})}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}async function qi(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1;r.searchParams.has(`limit`)&&ie(r,500,2e3);let s=await t.store.get(`task`,i);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!I(n,i,!1))return O({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return ta(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=I(n,i);if(t)return{status:t,lines:we(n,i,e,500),pendingResult:Ji(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o),l=t.statementTimeout??((e,t)=>t());return ta(e,t,i,Number.isFinite(c)?c:o,e=>l($i,async()=>{let n=await t.store.get(`task`,i);if(n)return{status:await rr(t,n),lines:await sn(t.store,i,e,500)}}))}function Ji(e,t,n=!1){if(!Ne.has(t.status)||t.error||t.status===`cancelled`)return!1;let r=l(e,t.task.id),a=Date.parse(r?.resumedAt??r?.createdAt??``)||0;return n||(Cr.statSync(q.join(i(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<a}const Yi=1e3,$=3e4;function Xi(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new Qi,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-29e4),a):a,p=u>0&&(!d||u<f)?`event: reset
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{$ as t,B as n,Cn as r,Ct as i,Q as a,R as o,S as s,_ as c,ct as l,g as u,j as d,n as f,o as p,s as m,t as h,v as g,w as _}from"./config-D2FxHWwi.js";import{H as v}from"./dispatch-D3Dqxijf.js";import{i as y,n as b,p as x,r as ee,s as S,t as C}from"./load-CRmQB1LD.js";import{s as w,u as T}from"./slack-C_RlVDz7.js";import{n as E}from"./integrations-D3OgJk6Y.js";import{i as D,t as te}from"./discover-CBP4Uw0N.js";import{c as ne}from"./models-CdvmuaLv.js";import{a as re}from"./local-ccKBhpQc.js";import{a as O,d as ie,f as ae,l as k,n as oe,o as se,p as ce,r as le,s as ue,t as de,u as fe}from"./http-Cg_wYcZT.js";import{$ as pe,$n as A,$t as me,A as he,An as ge,Ar as _e,B as ve,Bn as ye,Bt as be,C as xe,D as Se,Dn as Ce,Dr as j,Dt as we,E as Te,En as Ee,Er as M,Et as De,F as Oe,Fn as ke,Ft as Ae,G as je,Gn as Me,Gt as Ne,H as Pe,Hn as Fe,Ht as Ie,I as Le,In as Re,It as N,J as ze,Jn as Be,Jt as Ve,K as He,Kn as Ue,Kt as We,L as Ge,Ln as Ke,Lt as qe,M as Je,Mn as Ye,Mt as Xe,N as Ze,Nn as Qe,Nt as $e,O as P,On as et,Or as F,Ot as I,P as tt,Pn as nt,Pt as rt,Q as it,Qn as L,Qt as at,R as ot,Rn as st,Rt as R,S as z,Sn as ct,Sr as lt,St as ut,T as dt,Tn as ft,Tr as pt,Tt as mt,U as ht,Un as gt,Ut as _t,V as vt,Vt as yt,W as bt,Wn as xt,Wt as St,X as Ct,Xn as wt,Xt as Tt,Y as Et,Yn as Dt,Yt as Ot,Z as kt,Zn as At,Zt as jt,_ as Mt,_r as Nt,_t as Pt,a as Ft,an as It,ar as Lt,at as Rt,b as zt,bn as Bt,br as Vt,bt as Ht,c as B,cn as Ut,cr as Wt,ct as Gt,d as Kt,dn as qt,dr as Jt,dt as V,en as Yt,er as Xt,et as Zt,f as Qt,fn as $t,fr as en,ft as tn,g as nn,gn as rn,gr as an,gt as on,h as H,hn as sn,hr as cn,i as ln,in as un,ir as dn,it as fn,j as U,jn as pn,jt as mn,k as hn,kn as gn,kr as _n,kt as W,l as vn,ln as yn,lr as bn,lt as xn,m as Sn,mn as Cn,mr as wn,mt as Tn,nn as En,nr as G,nt as Dn,o as On,on as kn,or as An,ot as jn,p as Mn,pn as Nn,pr as Pn,pt as Fn,q as In,qn as Ln,qt as Rn,r as zn,rn as Bn,rr as Vn,rt as Hn,s as Un,sn as Wn,sr as Gn,tn as Kn,tr as qn,tt as Jn,u as Yn,un as Xn,ur as Zn,ut as Qn,v as $n,vr as er,vt as tr,w as nr,wn as rr,wt as ir,x as ar,xr as or,xt as sr,y as cr,yn as lr,yr as ur,zn as dr,zt as fr}from"./apps-B60OpAHX.js";import{n as pr,r as mr}from"./env-C_DoQYl5.js";import{S as hr,a as gr,b as K,h as _r,i as vr,n as yr,p as br,x as xr}from"./runners-CNhxPjg8.js";import{X as Sr}from"./schema-BSlHRFSP.js";import q from"node:path";import J from"node:process";import Cr from"node:fs";import{spawnSync as wr}from"node:child_process";import{createHash as Tr,randomBytes as Er,randomUUID as Dr}from"node:crypto";import Y from"node:fs/promises";import{isDeepStrictEqual as Or}from"node:util";import kr from"node:http";async function Ar(e){try{return await Y.readdir(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function X(e){try{return await Y.lstat(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function jr(e,t){if(e===t||!await X(e))return 0;let n=await Ar(e),i=n.filter(e=>e.isDirectory()).length;if(!await X(t))return await r(e,t),i;for(let i of n)await r(q.join(e,i.name),q.join(t,i.name));return await Y.rmdir(e),i}async function Mr(e){let t=q.dirname(e),n=q.basename(e);for(let e of await Ar(t)){let r=e.name.startsWith(n)?e.name.slice(n.length):``;if(!e.isFile()||!(r===`.tmp`||/^\.\d+(?:\.[a-f0-9-]{36})?\.tmp$/.test(r)))continue;let i=Number(e.name.slice(n.length+1).split(`.`)[0]);if(Number.isInteger(i)&&i>0)try{process.kill(i,0);continue}catch(e){if(e.code!==`ESRCH`)continue}await Y.unlink(q.join(t,e.name)).catch(e=>{if(e.code!==`ENOENT`)throw e})}}async function Nr(e,t){if(await Mr(e),e===t||!await X(e))return 0;if(!await X(t))return await r(e,t),1;let n=JSON.parse(await Y.readFile(e,`utf8`)),i=JSON.parse(await Y.readFile(t,`utf8`)),a={...n,...i,...n.rows||i.rows?{rows:{...n.rows,...i.rows}}:{}},o=`${t}.${process.pid}.${Dr()}.tmp`;try{await Y.writeFile(o,`${JSON.stringify(a)}\n`,{mode:384,flag:`wx`}),await Y.rename(o,t),await Y.unlink(e)}finally{await Y.rm(o,{force:!0})}return 1}async function Pr(){let e=a(),n=t(`state`),r=a(`archive`),i=a(`flows-archived`),o=a(`usage.json`),s=a(`runner`,`usage.json`),c={from:t(`checkouts`),to:a(`checkouts`)},l={from:t(`update-check.json`),to:a(`update-check.json`)},u={cache:e,tasks:0,flows:0,files:0},d=(await Ar(n)).filter(e=>e.isDirectory()).map(e=>({archive:t(`state`,e.name,`archive`),flows:t(`state`,e.name,`flows-archived`),usage:t(`state`,e.name,`usage.json`),runnerUsage:t(`state`,e.name,`runner`,`usage.json`)}));await Mr(o),await Mr(s);for(let e of d)u.tasks+=await jr(e.archive,r),u.flows+=await jr(e.flows,i),u.files+=await Nr(e.usage,o),u.files+=await Nr(e.runnerUsage,s);return await jr(c.from,c.to),u.files+=await Nr(l.from,l.to),u}async function Fr(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function Ir(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await Lr(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,O({ok:r},r?200:503,{"cache-control":`no-store`})}async function Lr(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Rr(e){let t=(e.now??Date.now)();if(e.queue.metrics&&!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await Fr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...W(e.local.cwd,!1),...W(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await Fr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}async function zr(e,t,n,r){let i=t.session.user.id;n.id;let a=(await e.json().catch(()=>({}))).engine??``;if(!Wr.has(a)||!t.config.subscriptions?.[a])return O({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return O({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=(await t.store.list(`login`)).find(({value:e})=>e.owner===i&&e.engine===a&&e.state!==`done`&&e.state!==`failed`&&e.expiresAt>Z(t));if(s)return O(Kr(s.id,s.value));let c=`login-${Er(12).toString(`base64url`)}`,l=rn(c,t.organizationId,0),u={owner:i,engine:a,state:`starting`,tokenHash:l.hash,runner:o.kind,createdAt:Z(t),expiresAt:Z(t)+Ur};await Gr(t,c,u);let d;try{let e=await o.start({id:c},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:l.token,CODER_LOGIN:a},void 0,{timeoutMs:Ur,hosts:[br[a].api,...br[a].account]}),n=await t.store.patchLogin(c,{handle:e},{tokenHash:u.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),O({error:`This sign-in is gone. Start again.`},409);d=n}catch(e){return await t.store.delete(`login`,c),O({error:e instanceof Error?e.message:String(e)},502)}return O(Kr(c,d),201)}async function Br(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;return a?O(Kr(i,a)):O({error:`This sign-in is gone. Start again.`},404)}async function Vr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;if(!a)return O({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:hr(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?O({error:`This sign-in is not waiting for a code.`},409):O({ok:!0})}async function Hr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await qr(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),O({ok:!0})):O({error:`This sign-in is gone. Start again.`},404)}const Ur=6e5,Wr=new Set([`claude`,`codex`]),Z=e=>(e.now??Date.now)();function Gr(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-Z(e))})}function Kr(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{},...t.label?{label:t.label}:{}}}async function qr(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}function Jr(e,t){let n=t.handle&&e.runners[t.runner]?.stop(t.handle);if(!n)return;let r=n.catch(e=>console.error(`coder server: could not stop the machine of a finished ${t.engine} sign-in`,e));e.waitUntil?.(r)}async function Yr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=Date.now()+25e3;for(;!a.input&&Date.now()<o&&!e.signal.aborted;){await new Promise(e=>setTimeout(e,250));let e=await t.store.get(`login`,i);if(!e)return new Response(`Unauthorized`,{status:401});a=e}if(!a.input)return O({});let s=await t.store.patchLogin(i,{input:null},{input:a.input,tokenHash:a.tokenHash});return O(s?{code:K(t.config,a.input)}:{})}async function Xr(e,t,n,r){n.id;let i=t.callbackLogin;return O({engine:i.engine})}async function Zr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return O({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s)&&Jr(t,a),O({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return O({error:`Invalid sign-in result`},400);let n=`${a.engine}-subscription`,r=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,n,{...xr(t.config,{env:c}),engine:a.engine,createdAt:(t.now??Date.now)(),...r?.email||r?.plan?{account:{...typeof r.email==`string`?{email:r.email}:{},...typeof r.plan==`string`?{plan:r.plan}:{}}}:{}})?(Jr(t,a),O({ok:!0})):O({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return await t.store.patchLogin(i,l.url?{...l,state:`open`}:l,s)?O({ok:!0}):O({error:`This sign-in changed. Try again.`},409)}const Qr=e=>`audit:${String(9999999999999-e).padStart(13,`0`)}:${Er(4).toString(`hex`)}`,$r=e=>e.config.name??`Wular`,ei=e=>wn(e,e.serverOrganizationId??e.organizationId);async function ti(e,t,n){let r=(e.now??Date.now)(),i=e.session?.user,a={at:r,actor:i?{id:i.id,name:i.name,email:i.email}:{id:`admin-token`},action:t,target:n};await ei(e).store.put(`snapshot`,Qr(r),a)}async function ni(e,t){let n=await ei(t).store.list(`app`),r=Object.values(t.integrations).filter(e=>e.app.builtin===`shared`).map(e=>{let t=n.find(({value:t})=>t.builtin&&t.integration===e.id)?.value;return{integration:e.id,name:e.name,brand:e.brand,organizationApps:e.organizationApps===!0,...t?{app:{id:t.id,name:t.name,createdAt:t.createdAt}}:{}}}),i=t.config.publicUrl,a=!!i&&H.has(new URL(i).hostname);return O({name:$r(t),platforms:r,...a?{unreachable:!0}:{}})}async function ri(e,t,n){let r=t.integrations[n.integration];if(!r)return O({error:`Unknown integration "${n.integration}".`},404);if(r.app.builtin!==`shared`)return O({error:`Create ${r.name} apps in your workspace from the agent's Platforms tab.`},400);if(!t.config.publicUrl)return O({error:`Set PUBLIC_URL on this server first. Platforms call it.`},400);let i=await e.json().catch(()=>void 0),a=e=>typeof e==`string`&&e.trim()||void 0,o=a(i?.name)??$r(t),s=r.organizationApps?a(i?.owner):void 0,c=await zn(ei(t),r.id,{name:o,owner:s});return await ti(t,`Started setting up a shared app`,`${o} on ${r.name}`),O({url:c})}async function ii(e,t){let n=await ei(t).store.list(`snapshot`,{prefix:`audit:`,limit:100});return O(n.map(e=>e.value))}const ai=e=>`create-finished:${T(e)}`;async function oi(e,t){let n=await e.store.get(`delivery`,ai(t));return n&&`target`in n?n.target:void 0}async function si(e,t,n){let r=e.operatorApp??!1,i=r?`*`:e.session?.user.id??`anonymous`;if(!e.integrations[t])return{error:`Unknown integration "${t}"; run coder agent integrations list to see them`,status:404};if(!e.config.publicUrl)return{error:`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,status:400};if(r&&e.integrations[t].app.builtin!==`shared`)return{error:`Create this app in your workspace from the agent's Platforms tab.`,status:400};let a=Yn(n);if(!a)return{error:`Setup link is missing or malformed; start again from the agent's Platforms tab`,status:400};if(!a.definition.integrations[t])return{error:`This agent declares no ${t} integration in its agent.json`,status:400};if(a.state.public&&!r&&!e.integrations[t].publicApps)return{error:`${e.integrations[t].name} apps cannot be public here. Create a private one.`,status:400};let o=On(t,a.state),s=a.state.tx?await _n(e,a.state.tx,`create`,i)===o?a.state.tx:void 0:await _e(e,`create`,i,o);return s?{state:{...a.state,tx:s},definition:a.definition}:{error:`This app creation link is invalid, expired, or already used`,status:403}}async function ci(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=r.searchParams.get(`tx`);if(t.operatorApp&&i&&(await _n(t,i,`create`,`*`)||await oi(t,i)===n.id))return await or(e,void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503});let a=new URLSearchParams(r.searchParams);return a.set(`create`,n.id),ce(`${Un(t)}${Qt(Sn(t),`/setup`)}?${a}`)}async function li(e,t,n){let r=await si(e,t,n);if(`error`in r)return O({error:r.error},r.status);let{app:i}=e.integrations[t],a=r.state.tx,o=i.createStep&&(e.operatorApp||r.state.public)?i.createStep(e.config.publicUrl,{name:r.definition.name,public:r.state.public}):void 0,s=e.config.publicUrl;if(i.createPost&&H.has(new URL(s).hostname))return O({error:`${e.integrations[t].name} cannot reach ${s}. Set a public address first.`},400);let c=e.operatorApp?void 0:vn(e,r.state.agent),l=i.createPost?.({publicUrl:s,...r,encodedState:re({tx:a,...c?{back:c}:{}})});return O({tx:a,...l?{post:l}:{},...o?{create:o}:{}})}async function ui(e,t,n,r){if(/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return li(t,n.id,r.searchParams)}async function di(e,t,n){let r=await e.json().catch(()=>void 0);return li(t,n.integration,new URLSearchParams(r&&typeof r==`object`?r:{}))}async function fi(e,t,n,r,i){let a=t.operatorApp??!1,o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[n];if(!s)return B(t,`unknown-integration`,{platform:n},i);if(a&&s.app.builtin!==`shared`)return O({error:`Create this app in your workspace from the agent's Platforms tab.`},400);let c=t.config.publicUrl;if(!c)return B(t,`no-public-url`,{},i);let l=r?await Kt(t,r,n,o):void 0;if(!l)return B(t,`create-expired`,{platform:n},i);a&&await t.store.put(`delivery`,ai(r),{at:t.now?.()??Date.now(),target:n},{ttlMs:6e5});let u=a?`/create/${n}`:vn(t,l.state.agent),d=a?{tx:r}:{},f=a?void 0:(await ln(t)).find(e=>e.integration===n),p=await s.app.createCallback(e,{publicUrl:c,...l,fetch:t.fetch??fetch,...f?{shared:K(t.config,f.credentials)}:{}}).catch(r=>r instanceof w&&r.code===`invalid-field`&&e.headers.get(`accept`)===`application/json`?O({error:r.message},400):r instanceof w?B(t,r.code,{platform:n,error:r.error,...d},u):(console.error(`coder server: creating the ${n} app failed`,r),B(t,`failed`,{platform:n,...d},u)));if(p instanceof Response)return p;let m={id:`${n}:${p.platformAppId}`,integration:n,agent:l.state.agent,name:p.name,...l.state.repo?{agentsRepo:l.state.repo}:{},...l.state.repo?{branch:l.state.branch??`main`}:{},...a?{builtin:!0}:{},...`shared`in p?{shared:f.id,credentials:``}:{credentials:hr(t.config,p.credentials)},createdAt:t.now?.()??Date.now()};if(await t.store.put(`app`,m.id,m),s.app.values&&await t.store.put(`delivery`,Be(m.id),{version:0,manifest:s.app.values(m,{publicUrl:c,definition:l.definition}).lines,changed:!1}),a)return await ti(t,`Created the shared app`,`${p.name} on ${s.name}`),B(t,`created`,{platform:n,app:p.name,...d},u);let h=await _e(t,`install`,o,m.id);return ce(`${c}/install/${n}?app=${encodeURIComponent(m.id)}&state=${re({tx:h,back:u})}`)}async function pi(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=le(r.searchParams.get(`state`));return fi(e,t,n.id,i?.tx,Ft(i?.back))}async function mi(e,t,n,r){if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let i=new URLSearchParams(await e.clone().text()).get(`tx`),a=await fi(e,t,n.id,i,void 0),o=a.headers.get(`location`);return o&&e.headers.get(`accept`)===`application/json`?O({url:o}):a}async function hi(e,t,n,r){if(t.source!==`repo`||!t.repo)return;let i=(await(r??e.store.list(`app`))).find(({value:e})=>e.agent===t.id&&e.agentsRepo===t.repo)?.value;return((i&&e.integrations[i.integration])??Object.values(e.integrations).find(e=>e.repos))?.repos?.url(t.repo,t.path,i?.branch??n?.commit)}async function gi(e,t,n){let r=await wt(e.store,t);return await qn(e.store,n,t,r)?wt(e.store,t):r}async function Q(e,t){let n=(e.now??Date.now)(),r=e.local?await Fe(e.store,e.local.cwd,e.integrations,t).catch(()=>void 0):void 0;return{now:n,local:r,loadCurrent:()=>r?Promise.resolve(r.find(({record:e})=>e.id===t)??{}):gi(e,t,n)}}async function _i(e,t,{after:n,q:r,source:i,platform:a,limit:o}){return!t&&e.store.listAgentSummaries?(await e.store.listAgentSummaries({after:n,q:r,source:i,platform:a,limit:o})).map(({record:e})=>e):(t??(a?await At(e.store):(await e.store.list(`agent`)).map(({value:e})=>({record:e,version:void 0})))).filter(({version:e})=>!a||!!e?.definition?.integrations?.[a]).map(({record:e})=>e).filter(e=>(!n||e.id>n)&&(!i||e.source===i)&&(!r||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(r)))).sort((e,t)=>e.id.localeCompare(t.id)).slice(0,o)}async function vi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let a=r.searchParams.get(`fields`);if(a&&![`id`,`id,name`].includes(a))return O({error:`Invalid fields`},400);let{now:o,local:s,loadCurrent:c}=await Q(t,i);if(!s&&t.store.listAgentSummaries&&(await G(t.store,o),ae(r)&&!a))return O(await Ci(t,r));let l=ie(r,200);if(a){!s&&!t.store.listAgentSummaries&&await G(t.store,o);let e=await _i(t,s,{after:oe(r),q:r.searchParams.get(`q`)?.trim().toLowerCase(),source:Si[r.searchParams.get(`type`)??``],platform:r.searchParams.get(`platform`)??void 0,limit:l+ +!!ae(r)}),n=e=>a===`id`?{id:e.id}:{id:e.id,name:e.name},i=fe(e,l,e=>e.id);return O(ae(r)?{...i,items:i.items.map(n)}:e.map(n))}let u=s??(t.store.listAgentSummaries?await t.store.listAgentSummaries({limit:l}):await At(t.store));if(!s&&!t.store.listAgentSummaries&&await G(t.store,o,u)&&(u=await At(t.store)),ae(r))return O(await Ci(t,r,u));let d,f=y();return O(await Promise.all(u.slice(0,l).map(async({record:e,version:n})=>{e.source===`repo`&&e.repo&&(d??=t.store.list(`app`));let r=await hi(t,e,n,d);return{...e,...e.id===f?{default:!0}:{},definition:n?.definition,...r?{sourceUrl:r}:{}}})))}async function yi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=ie(r,10,50),l=oe(r),[u,d]=await Promise.all([o?s().then(e=>e.record):L(t.store,i),o?Promise.resolve(o.flatMap(({version:e})=>e?[{value:e}]:[])):t.store.listVersions?.(i,c+1,l)]);return u?O(await wi(t,u,c,l??u.currentVersion+1,d)):O({error:`No agent named "${i}"`},404)}async function bi(e,t,n,r){let i=n.slug,a=n.version?Number(n.version):void 0;if(n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,i),l=s?s.find(({version:e})=>e?.version===a)?.version:await A(t.store,i,a);return l?O(l):O({error:`No version ${a} for agent "${i}"`},404)}async function xi(e,t,r,i){let a=r.slug;if(r.version&&Number(r.version),r.version&&!/^\d+$/.test(i.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,a),l=i.searchParams.get(`versions`)!==`0`,u=i.searchParams.get(`content`)!==`0`,d=i.searchParams.get(`handles`)===`1`,f=t.session?.user.id,[{record:p,version:m},h,g,_,v]=await Promise.all([!u&&!s&&t.store.listAgentSummaries&&!ee()[a]?t.store.listAgentSummaries({slug:a}).then(e=>e[0]??{}):c(),l?s?s.flatMap(({version:e})=>e?[{value:e}]:[]):t.store.listVersions?t.store.listVersions(a):t.store.list(`agentversion`,{prefix:`${a}:`}):[],d?pn(t,a):[],d?Cn(t.store,a):void 0,d?t.store.listCredentials?t.store.listCredentials({owner:f}):t.store.list(`credential`):void 0]);if(!p)return O({error:`No agent named "${a}"`},404);let y=p.settings?.engine??m?.definition.engine??n,b=v!==void 0&&!v.some(({value:e})=>e.engine===y&&(!e.owner||e.owner===f))&&!await mn(t,p.settings?.engine??m?.definition.engine),x=m?.definition.integrations??{},S=e=>{let t=x[e]?.events;return Array.isArray(t)?t.includes(`mention`):!!(t&&`mention`in t)},C=[],w=Object.keys(t.integrations),T=(e,t)=>w.indexOf(e.value.integration)-w.indexOf(t.value.integration);for(let{value:e}of[...g].sort(T))S(e.integration)&&!C.some(t=>t.integration===e.integration&&t.name.toLowerCase()===e.name.toLowerCase())&&C.push({name:e.name,integration:e.integration,platform:t.integrations[e.integration]?.name??e.integration});let E=h.map(({value:e})=>{let{systemPrompt:t,files:n,...r}=e;return r}),D=await hi(t,p,m);return O({...p,...m?{definition:m.definition,...u&&`systemPrompt`in m?{systemPrompt:m.systemPrompt,...m.files?{files:m.files}:{}}:{}}:{},...D?{sourceUrl:D}:{},...l?{versions:E}:{},...C.length?{handles:C}:{},..._?.failed?{deliveries:{failed:_.failed,recent:_.recent.map(e=>({at:e.at,platform:t.integrations[e.integration]?.name??e.integration,...e.type?{type:e.type}:{},error:e.error,...e.url?{url:e.url}:{}}))}}:{},...b?{needsModel:!0}:{}})}const Si={builtin:`builtin`,dashboard:`upload`,repository:`repo`};async function Ci(e,t,n){let r=ie(t,24,100),i=oe(t),a=t.searchParams.get(`q`)?.trim().toLowerCase(),o=Si[t.searchParams.get(`type`)??``],s=t.searchParams.get(`platform`),c=t.searchParams.get(`connect`)===`1`,l=e.serverOrganizationId,u=e.store.list(`app`),[d,f,p,m]=await Promise.all([u,e.store.list(`installation`),c&&l!==void 0&&l!==e.organizationId&&e.scope?e.scope(l).store.list(`app`):[],n?n.filter(({record:e})=>(!i||e.id>i)&&(!o||e.source===o)&&(!a||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(a)))):e.store.listAgentSummaries({after:i,source:o,q:a,platform:s??void 0,limit:r+1})]),h=new Set(f.filter(({value:e})=>!e.deletedAt).map(({value:e})=>e.app)),g=(e,t)=>{let n=d.filter(({value:n})=>n.agent===e&&n.integration===t);return n.length?n.some(({value:e})=>h.has(e.id))?`installed`:`created`:`none`},_=[];for(let{record:e,version:t}of m){let n=Object.keys(t?.definition?.integrations??{}).sort();if(!(s&&!n.includes(s))&&(_.push({record:e,version:t,ids:n}),_.length>r))break}let v=fe(_,r,e=>e.record.id),b=y();return{...v,...c?{connectable:[...d,...p].filter(({value:t})=>t.builtin&&e.integrations[t.integration]?.app.builtin===`shared`&&!h.has(t.id)).map(({value:e})=>({id:e.id,integration:e.integration,agent:e.agent}))}:{},items:await Promise.all(v.items.map(async({record:t,version:n,ids:r})=>{let i=await hi(e,t,n,u);return{...t,...t.id===b?{default:!0}:{},definition:n?.definition,...i?{sourceUrl:i}:{},platforms:r.map(e=>({id:e,state:g(t.id,e)}))}}))}}async function wi(e,t,n,r,i){let a=r-n-2,o=(i??await e.store.list(`agentversion`,{prefix:`${t.id}:`,...a>0?{after:Lt(t.id,a)}:{},limit:n+1})).map(({value:e})=>{let{systemPrompt:t,files:n,definition:r,...i}=e;return i}).filter(e=>e.version<r).reverse();return fe(o,n,e=>e.version)}var Ti=class{options;entries=new Map;pending=new Map;constructor(e={ttlMs:6e5,max:100}){this.options=e}get size(){return this.entries.size}get inFlight(){return this.pending.size}has(e){return this.entries.has(e)}keys(){return this.entries.keys()}async get(e,t){let n=this.options.now??Date.now,r=n(),i=this.entries.get(e);if(i&&r-i.at<this.options.ttlMs)return i.value;for(let[t,n]of this.entries)t!==e&&r-n.at>=this.options.ttlMs&&this.entries.delete(t);let a=this.pending.get(e);return a||(a=Promise.resolve().then(t).then(t=>{if(t===void 0)return i?.value;if(this.options.accept&&!this.options.accept(t))return i?.value??t;this.entries.set(e,{value:t,at:n()});let r=this.entries.keys().next().value;return this.entries.size>this.options.max&&r!==void 0&&this.entries.delete(r),t}).catch(()=>i?.value).finally(()=>this.pending.delete(e)),this.pending.set(e,a)),a}};const Ei=/^[a-z0-9][a-z0-9-]*$/,Di=new Set([`openrouter.ai`,`ai-gateway.vercel.sh`,`api.groq.com`,`api.together.xyz`]);function Oi(e){return{builtin:{codex:m,claude:f},models:e.models??{}}}async function ki(e,t){let{baseUrl:n,envKey:r,key:i}=await qe(e);if(!n||!/^https?:\/\//.test(n)||!URL.canParse(n))return O({error:`An http or https base URL is required`},400);let a=!i&&r&&await Ai(t,n,r)?await tr(t,r):void 0,o=i||a,s=t.settings??={},c=s.probes??=new Ti({ttlMs:6e5,max:100,now:t.now,accept:e=>e.reachable}),l=`${new URL(n).host}|${r??``}|${T(String(o??``))}`;return O(await c.get(l,()=>ne({baseUrl:n},{key:o,fetch:t.fetch})))}async function Ai(e,t,n){let r=new URL(t).host;if(Di.has(r))return!0;let i=(await _t(e)).models??{};return Object.values(i).some(e=>`baseUrl`in e&&e.envKey===n&&new URL(e.baseUrl).host===r)}async function ji(e,t,n,r){return O(Oi(await _t(t)))}async function Mi(e,t,n,r){let{name:i=``,...a}=await qe(e);return!Ei.test(i)||c(i)?O({error:`Invalid model name "${i}"`},400):R(t,e=>{if(e.models?.[i])throw new N(`"${i}" already exists`);e.models={...e.models,[i]:a}})}async function Ni(e,t,n,r){let i=n.name;return R(t,e=>{if(!e.models?.[i])throw new N(`No model "${i}"`);_(e,i)})}async function Pi(e,t,n,r){let i=n.name,{spec:a}=await qe(e);return R(t,e=>{if(!Ei.test(i))throw new N(`Invalid alias name "${i}"`);let t=e.models?.[i];if(t&&g(t))throw new N(`"${i}" is a custom model name`);let n=s(a,d(e));if(!n?.model||n.engine===`custom`)throw new N(`"${a}" does not name a codex or claude model`);let r=n.engine===`claude`?f:m,o=a.split(`:`).some(e=>p.has(e)||h.has(e));e.models={...e.models,[i]:{provider:n.engine,model:r[n.model]??n.model,...o&&n.effort?{effort:n.effort}:{}}}})}async function Fi(e,t,n,r){let i=n.name;return R(t,e=>{let t=e.models??={},n=t[i];n&&(g(n)||u(n))?n.disabled=!0:t[i]={disabled:!0}})}async function Ii(e,t,n,r){let i=n.name;return R(t,e=>{let t=e.models??={},n=t[i];n&&(g(n)||u(n))?delete n.disabled:delete t[i]})}async function Li(e,t){let{now:n,local:r}=await Q(t);r||await G(t.store,n);let[i,a,o]=await Promise.all([_i(t,r,{limit:200}),_t(t),t.store.list(`runner`)]),s=y(),c=i.filter(e=>!e.settings?.disabled).sort((e,t)=>Number(t.id===s)-Number(e.id===s)).map(({id:e,name:t})=>({id:e,name:t,...e===s?{default:!0}:{}})),l=fr(t,a),u=Object.values(t.integrations).find(e=>e.repos);return O({agents:c,...l.chain?.[0]?{engine:l.chain[0]}:{},engines:l.engines??{},models:Oi(a),runners:fn(t,o,n).map(({id:e,name:t,default:n})=>({id:e,name:t,default:n})),flows:D(te(),`builtin`).map(e=>e.name),...t.local?{folders:Wt(t.local.cwd)}:{},...u?{connectLabel:u.installLabel??`Connect ${u.id}`}:{}})}async function Ri(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await dr(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=i.token?{...i,token:K(e.config,i.token)}:i,o=await n.auth.token(r,K(e.config,a.credentials));if((await n.repos.list(r,o)).includes(t))return{contents:n,token:o,app:a,installation:i}}catch{}}}async function zi(e,t,n){let r=await Ri(e,t);if(!r)return O({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,xt,r.token,n).catch(()=>[]),a=await Promise.all(i.map(async i=>{let a=await r.contents.repos.readFile(t,`${xt}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(a===void 0)return;let s={};try{let e=JSON.parse(a);e&&typeof e==`object`&&(s=e)}catch{}let c=Object.entries(s.mcp&&typeof s.mcp==`object`&&!Array.isArray(s.mcp)?s.mcp:{}).flatMap(([e,t])=>o(e,t)),l=await L(e.store,i),u=l?.source===`repo`&&l.repo===t,d=u?await A(e.store,i):void 0;return{id:i,name:typeof s.name==`string`?s.name:i,...c.length?{warnings:c}:{},...typeof s.description==`string`?{description:s.description}:{},...u?{version:l.currentVersion,...d?.source?{commit:d.source.commit}:{}}:{},...l&&!u?{taken:!0}:{}}}));return O({repo:t,agents:a.filter(Boolean)})}async function Bi(e,t,n,r){let i=r.searchParams.get(`repo`);return i?zi(t,i,r.searchParams.get(`ref`)||`HEAD`):O({error:`repo is required`},400)}async function Vi(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return O({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await Ri(t,i.repo);if(!e)return O({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await L(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return O({error:`Agent id "${e}" is already taken`},409)}let o=await Me(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await Dt(t,o),O({imported:o.map(e=>e.agent)})}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}function Hi(e){if(!e||Array.isArray(e)||typeof e!=`object`)return!1;let t=Object.entries(e);if(t.length>100)return!1;let n=0;for(let[e,r]of t){if(typeof r!=`string`||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)||e.split(`/`).includes(`..`)||e===`agent.json`||e===`system.md`)return!1;n+=Buffer.byteLength(e)+Buffer.byteLength(r)}return n<=262144}async function Ui(e,t){return(await Ln(e,[t])).flatMap(({app:e,error:t,check:n})=>{let r={id:e.id,integration:e.integration,name:e.name};return t?[{...r,error:t}]:n?n.changed?[{...r,drift:!0}]:[]:[{...r,updated:!0}]})}async function Wi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);try{let e=x({[i]:c})[i];if(!e||typeof e!=`object`)throw Error(`settings must be an object`);let{disabled:n,...r}=e,a=n?{...r,disabled:n}:r,{record:o,version:l}=await s();if(!o||!l)throw Error(`No agent named "${i}".`);if(dn({...o,settings:void 0},l,r,t.integrations),t.local){let e=S(t.local.cwd,i,!!n);return e?O({error:`Agent "${i}" is ${n?`enabled`:`disabled`} by agents.${i} in ${e}. Change it there.`},409):(await St(t,e=>{e.agents={...e.agents,[i]:a}}),await Fe(t.store,t.local.cwd,t.integrations),O(await L(t.store,i)))}return O(await Vn(t.store,i,a,(t.now??Date.now)()))}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}async function Gi(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),{record:c}=await s();if(!c)return O({error:`No agent named "${i}"`},404);if(c.source===`builtin`)return O({error:`Built-in agents cannot be deleted.`},400);if(t.local&&!await ye(t.local.cwd,t.integrations,i))return O({error:`Delete .coder/agents/${i} in the repo`},409);for(let{id:e}of await t.store.list(`agentversion`,{prefix:`${i}:`}))await t.store.delete(`agentversion`,e);return await t.store.delete(`agent`,i),O({ok:!0})}async function Ki(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);if(!c||typeof c.systemPrompt!=`string`||c.files!==void 0&&!Hi(c.files)||c.name!==void 0&&typeof c.name!=`string`||c.description!==void 0&&typeof c.description!=`string`)return O({error:`definition and systemPrompt are required; files must contain strings`},400);try{b([i]);let[e]=C({definitions:{[i]:{json:c.definition,builtin:!1}},usage:void 0},t.integrations);if(!e)throw Error(`No agent named "${i}".`);let n=t.local?await L(t.store,i):void 0,r=t.local&&n?await A(t.store,i):void 0,a=c.files;t.local&&(await gt(t.local.cwd,t.integrations,i,{definition:{...c.definition,...c.name===void 0?{}:{name:c.name},...c.description===void 0?{}:{description:c.description}},systemPrompt:c.systemPrompt,...a?{files:a}:{}}),await Fe(t.store,t.local.cwd,t.integrations));let o=t.local?void 0:await Xt(t.store,{id:i,name:c.name??e.name,description:c.description??e.definition.description,source:`upload`,definition:e.definition,systemPrompt:c.systemPrompt,files:a,importedFrom:`upload`},(t.now??Date.now)()),s=o?.version??await A(t.store,i),l=o?.unchanged??Or(r&&{...r,createdAt:0},{...s,createdAt:0}),u=await Ui(t,s),d=o?.record??await L(t.store,i);return O({...d,definition:s.definition,version:s.version,unchanged:l,apps:u})}catch(e){return O({error:e instanceof Error?e.message:String(e)},400)}}async function qi(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1;r.searchParams.has(`limit`)&&ie(r,500,2e3);let s=await t.store.get(`task`,i);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!I(n,i,!1))return O({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return ta(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=I(n,i);if(t)return{status:t,lines:we(n,i,e,500),pendingResult:Ji(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o),l=t.statementTimeout??((e,t)=>t());return ta(e,t,i,Number.isFinite(c)?c:o,e=>l($i,async()=>{let n=await t.store.get(`task`,i);if(n)return{status:await rr(t,n),lines:await sn(t.store,i,e,500)}}))}function Ji(e,t,n=!1){if(!Ne.has(t.status)||t.error||t.status===`cancelled`)return!1;let r=l(e,t.task.id),a=Date.parse(r?.resumedAt??r?.createdAt??``)||0;return n||(Cr.statSync(q.join(i(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<a}const Yi=1e3,$=3e4;function Xi(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new Qi,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-29e4),a):a,p=u>0&&(!d||u<f)?`event: reset
2
2
  data: {}
3
3
 
4
4
  `:``,m=new TextEncoder,h=()=>{},g=new ReadableStream({start(n){n.enqueue(m.encode(`retry: ${Yi}\nid: ${f}${s}\n\n${p}`)),h=o.watch(t,i,f,e=>n.enqueue(m.encode(e)),()=>n.close(),d);let r=()=>{h();try{n.close()}catch{}};e.signal.aborted?r():e.signal.addEventListener(`abort`,r)},cancel(){h()}});return new Response(g,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}function Zi(e,t){let{task:n,approval:r,archivedAt:i,createdAt:a,startedAt:o,finishedAt:s}=e;return{id:n.id,agent:n.agent,status:e.status,approval:r??null,archivedAt:e.autoArchived&&!t?void 0:i,createdAt:a,startedAt:o,finishedAt:s,...t?{result:e.result??null,error:e.error??null,answer:e.answer??null}:{}}}var Qi=class{options;watches=new Set;timer;counts=new Map;runners=new Map;reading=!1;closed=!1;last=Date.now();scans=new Map;left=new Map;archived=new Map;reads=0;generation=Dr().slice(0,8);constructor(e={}){this.options=e}watch(e,t,n,r,i,a=!1){if(this.closed)return queueMicrotask(i),()=>{};let o=Date.now();this.watches.size||(this.last=o);let s={ctx:e,ids:new Set(t),sent:new Map,gone:new Set,from:n,fresh:!0,...a?{runners:``}:{},tag:this.tag(e),beat:o,marked:o,until:o+(this.options.lifeMs??29e4),send:r,close:i};return this.watches.add(s),this.timer||(this.timer=setInterval(()=>this.tick(),this.options.pollMs??1e3),this.timer.unref?.()),this.tick(),()=>this.drop(s)}tag(e){return`-${Tr(`sha256`).update(e.organizationId).digest(`hex`).slice(0,8)}${e.queue instanceof jn?`.${this.generation}`:``}`}runnersChanged(e){this.runners.delete(e)}close(){this.closed=!0;for(let e of[...this.watches]){this.drop(e);try{e.close()}catch{}}}drop(e){this.watches.delete(e)&&([...this.watches].some(t=>t.ctx.organizationId===e.ctx.organizationId)||(this.counts.delete(e.ctx.organizationId),this.runners.delete(e.ctx.organizationId)),this.watches.size||(clearInterval(this.timer),this.timer=void 0,this.counts.clear(),this.runners.clear()))}tick(){let e=Date.now();for(let t of[...this.watches])if(e>=t.until){this.drop(t);try{t.close()}catch{}}else e-t.beat>=(this.options.heartbeatMs??2e4)&&(t.beat=e,this.send(t,`: ping
5
5
 
6
6
  `));this.reading||!this.watches.size||(this.reading=!0,this.read(e).finally(()=>this.reading=!1))}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){let t=[...this.watches],n=new Map;for(let e of t){let t=n.get(e.ctx.organizationId)??{ctx:e.ctx,ids:new Set};for(let n of e.ids)t.ids.add(n);n.set(e.ctx.organizationId,t)}let r=Math.min(this.last,...t.flatMap(e=>e.fresh?[e.from]:[]));this.reads++;let i=await this.changes(n,r-$,e).catch(e=>{console.error(`coder server: task events failed`,e)});if(i){this.last=e;try{for(let[e,{ctx:t}]of n){let n=this.counts.get(e),r=JSON.stringify([[...i.rows.get(e)??[]].map(([e,t])=>[e,t.status,t.archivedAt]).sort(),[...i.deleted.get(e)?.keys()??[]].sort()]),a=n?.fingerprint!==r,o=t.local?[...i.rows.get(e)?.values()??[]].filter(e=>!e.archivedAt&&[`queued`,`running`,`waiting`].includes(e.status)).length:a?(await t.queue.counts(e,{archived:!1,statuses:[`queued`,`running`,`waiting`]})).active:n.active;[...this.watches].some(t=>t.ctx.organizationId===e)&&this.counts.set(e,{active:o,fingerprint:r})}}catch(e){console.error(`coder server: task counts failed`,e);return}await Promise.all([...n].filter(([t])=>e-(this.runners.get(t)?.at??-1/0)>=15e3).map(async([t,{ctx:n}])=>{try{this.runners.set(t,{at:e,records:await n.store.list(`runner`)})}catch(e){console.error(`coder server: runner events failed`,e)}}));for(let n of t){if(!this.watches.has(n))continue;let t=[];try{t=this.news(n,i,e);let r=this.counts.get(n.ctx.organizationId)?.active;r!==void 0&&r!==n.active&&(n.active=r,t.push(`id: ${e}${n.tag}\nevent: counts\ndata: ${JSON.stringify({active:r})}\n\n`)),t.push(...this.runnerNews(n,e))}catch{}!t.length&&e-n.marked>=(this.options.heartbeatMs??2e4)&&t.push(`id: ${e}${n.tag}\n\n`),t.length&&(n.marked=e,this.send(n,t.join(``)))}}}runnerNews(e,t){let n=this.runners.get(e.ctx.organizationId);if(!n)return[];let r=fn(e.ctx,n.records,t),i=JSON.stringify(r.map(({lastSeen:e,...t})=>t.online?t:{...t,lastSeen:e})),a=e.runners;return e.runners=i,a===void 0||a===i?[]:[`id: ${t}${e.tag}\nevent: runners\ndata: ${JSON.stringify({items:r})}\n\n`]}async changes(e,t,n){let r=await[...e.values()][0].ctx.queue.changes([...e].map(([e,t])=>({organizationId:e,ids:[...t.ids]})),t),i=new Map;for(let{organizationId:e,status:t}of r.rows){let n=i.get(e)??new Map;i.set(e,n.set(t.task.id,t))}let a=new Map;for(let{organizationId:e,id:t,at:n}of r.deleted){let r=a.get(e)??new Map;a.set(e,r.set(t,n))}for(let[t,{ctx:r}]of e){if(!r.local)continue;let e=[...i.get(t)?.values()??[]],a=this.scans.get(r.local.cwd);if(!a||n-a.at>=(this.options.localScanMs??4e3)||e.some(e=>e.updatedAt>a.at)){let e=!a||n-a.archivedAt>=(this.options.archiveScanMs??15e3);await rt(r,r.local.cwd);let t=e?W(r.local.cwd,!0):a.archived,i=W(r.local.cwd,!1),o=new Set(i.map(e=>e.task.id)),s=[...i,...t.filter(e=>!o.has(e.task.id))],c=new Set(s.map(e=>e.task.id)),u=this.left.get(r.local.cwd)??new Map;for(let e of a?.rows??[])c.has(e.task.id)||u.set(e.task.id,a.at);for(let[e,t]of u)(t<n-6e5||c.has(e))&&u.delete(e);let d=this.archived.get(r.local.cwd)??new Set;for(let e of d)c.has(e)?d.delete(e):l(r.local.cwd,e)||(u.set(e,a?.at??n),d.delete(e));this.left.set(r.local.cwd,u),this.scans.set(r.local.cwd,a={at:n,rows:s,archived:t,archivedAt:e?n:a.archivedAt})}i.set(t,new Map(at(r.local.cwd,a.rows,e).map(e=>[e.task.id,e])))}return{rows:i,deleted:a}}news(e,{rows:t,deleted:n},r){let{ctx:i}=e,a=t.get(i.organizationId)??new Map,o=[],s=(t,n)=>{let i=JSON.stringify(n);e.sent.get(t)!==i&&(e.sent.set(t,i),o.push(`id: ${r}${e.tag}\nevent: task\ndata: ${i}\n\n`))},c=e=>({id:e,deleted:!0}),l=t=>{let n=i.local&&I(i.local.cwd,t,e.ids.has(t));if(s(t,n?Zi(n,e.ids.has(t)):c(t)),e.gone.add(t),n&&i.local){let e=this.archived.get(i.local.cwd)??new Set;this.archived.set(i.local.cwd,e.add(t))}};for(let[t,n]of a){let a=e.ids.has(t);e.gone.delete(t);let o=Zi(a&&i.local&&n.local&&Ne.has(n.status)?I(i.local.cwd,t)??n:n,a);if(i.local&&n.local&&e.sent.get(t)!==JSON.stringify(o)&&r-(n.finishedAt??0)<$&&Ji(i.local.cwd,n)){e.sent.has(t)||e.sent.set(t,``);continue}a||i.local&&!e.fresh||n.updatedAt>e.from-$?s(t,o):e.fresh&&e.sent.set(t,JSON.stringify(o))}for(let t of e.ids)a.has(t)||l(t);for(let[t,r]of n.get(i.organizationId)??[])r>e.from-$&&s(t,c(t));if(i.local){for(let t of e.sent.keys())!a.has(t)&&!e.ids.has(t)&&!e.gone.has(t)&&l(t);for(let[t,n]of this.left.get(i.local.cwd)??[])n>e.from-$&&!a.has(t)&&e.sent.get(t)!==JSON.stringify(c(t))&&l(t)}return e.fresh=!1,e.from=r,o}};const $i=1e4;var ea=class{options;feeds=new Map;closed=!1;reads=0;constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a=this.feeds.get(e),o=a?.reading!==void 0&&Date.now()-a.reading>=(this.options.stallMs??1e4);if(!a||o){let t={key:e,read:n,watches:new Set,head:1/0};if(a){clearTimeout(a.timer);for(let e of a.watches)t.watches.add(Object.assign(e,{feed:t}));a.watches.clear()}this.feeds.set(e,a=t)}let s={cursor:t,feed:a,timers:[],send:r,close:i};s.timers=[setTimeout(()=>this.end(s),this.options.lifeMs??5e4),setInterval(()=>this.send(s,`: ping
7
7
 
8
- `),this.options.heartbeatMs??2e4)];for(let e of s.timers)e.unref?.();return a.watches.add(s),a.reading===void 0&&t<a.head&&(clearTimeout(a.timer),this.read(a)),()=>this.drop(s)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;for(let t of e.timers)clearTimeout(t);!t.watches.delete(e)||t.watches.size||(clearTimeout(t.timer),this.feeds.get(t.key)===t&&this.feeds.delete(t.key))}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){if(e.timer=void 0,this.feeds.get(e.key)!==e||!e.watches.size)return;let t=[...e.watches],n=Math.min(...t.map(e=>e.cursor));e.reading=Date.now(),this.reads++;let r=await e.read(n).catch(()=>null);if(e.reading=void 0,this.feeds.get(e.key)!==e)return;let i=t.filter(t=>e.watches.has(t)),a=i.length<e.watches.size?0:this.options.pollMs??1e3;if(r===void 0)for(let e of i)this.end(e);else if(r){let{status:t,lines:o,pendingLogs:s,pendingResult:c}=r,l=o.length===500,u=Ne.has(t.status)&&!l&&!s&&!c,d=o.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]);e.head=Math.max(n,o.at(-1)?.seq??n),l&&(a=0);for(let e of i){let t=d.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);e.cursor=Math.max(e.cursor,o.at(-1)?.seq??-1),u?this.end(e,`${t}event: end\ndata: {}\n\n`):t&&this.send(e,t)}}this.feeds.get(e.key)===e&&(e.timer=setTimeout(()=>void this.read(e),a),e.timer.unref?.())}};function ta(e,t,n,r,i){let a=t.logWatcher??new ea,o=new TextEncoder,s=()=>{},c=new ReadableStream({start(c){c.enqueue(o.encode(`retry: ${Yi}\n\n`)),s=a.watch(`${t.organizationId}:${n}`,r,i,e=>c.enqueue(o.encode(e)),()=>c.close());let l=()=>{s();try{c.close()}catch{}};e.signal.aborted?l():e.signal.addEventListener(`abort`,l)},cancel(){s()}});return new Response(c,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}const na={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},ra=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function ia(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=ra([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function aa(e){let t=e.remotes?.find(e=>e.type===`streamable-http`||e.type===`sse`);if(t)return{type:t.type===`sse`?`sse`:`http`,url:t.url,env:[],headers:ra(t.headers)};let n=e.packages?.find(e=>na[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=na[n.registryType],a=[],o=ia(n.runtimeArguments,`runtime`,a),s=ia(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:ra(n.environmentVariables),headers:[]}}function oa(e,t){let[n=``,r]=e.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),[i=``,a]=t.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),o=n.localeCompare(i,`en`,{numeric:!0});if(o)return o;if(r===void 0||a===void 0)return Number(r===void 0)-Number(a===void 0);let s=r.split(`.`),c=a.split(`.`);for(let e=0;e<Math.max(s.length,c.length);e++){let t=s[e],n=c[e];if(t===void 0||n===void 0)return Number(t!==void 0)-Number(n!==void 0);let r=/^\d+$/.test(t),i=/^\d+$/.test(n),a=r===i?t.localeCompare(n,`en`,{numeric:r}):Number(i)-Number(r);if(a)return a}return 0}var sa=class{sources=[{url:`https://api.mcp.github.com/v0.1/servers`,curated:!0,rows:new Map,ready:!1,failed:!1},{url:`https://registry.modelcontextprotocol.io/v0.1/servers`,curated:!1,rows:new Map,ready:!1,failed:!1}];refreshAt=0;timer;controller;closed=!1;inFlight;response(e,t){if((e.now??Date.now)()>=this.refreshAt&&this.refresh(e),!this.inFlight&&this.sources.some(e=>e.failed)&&!this.sources.some(e=>[...e.rows.values()].some(e=>e.found)))return O({error:`The MCP registry did not answer. Try again.`},502);let n=t.trim().toLowerCase(),r=new Set,i=this.sources.flatMap(e=>[...e.rows].flatMap(([t,{found:i}],a)=>{if(r.has(t)||(r.add(t),!i))return[];let o=[i.name.split(`/`).pop(),i.title].map(e=>e.toLowerCase()),s=!n||o.includes(n)?0:o.some(e=>e.startsWith(n))?1:o.some(e=>e.includes(n))?2:i.description.toLowerCase().includes(n)?3:4;if(s===4)return[];let c=n&&i.verified&&s<3?0:1;return[{found:i,curated:e.curated,order:a,vendor:c,quality:s}]})),a=e=>Number(e===3);return i.sort((e,t)=>a(e.quality)-a(t.quality)||Number(t.curated)-Number(e.curated)||(e.curated?e.order-t.order:e.vendor-t.vendor||e.quality-t.quality||e.found.name.localeCompare(t.found.name))),O(i.slice(0,30).map(({found:e})=>e),200,this.sources.every(e=>e.ready)?{}:{partial:`true`})}refresh(e){if(this.inFlight||this.closed)return;this.timer&&clearTimeout(this.timer);let t=this.controller=new AbortController;this.inFlight=Promise.all(this.sources.map(n=>this.fill(e,n,t.signal))).then(()=>{}).finally(()=>{this.inFlight=void 0,this.refreshAt=(e.now??Date.now)()+36e5,this.closed||(this.timer=setTimeout(()=>this.refresh(e),36e5),this.timer.unref())}),e.waitUntil?.(this.inFlight)}async fill(e,t,n){let r=new Map,i=new Set,a;try{do{let o=new URLSearchParams({limit:`100`});a&&o.set(`cursor`,a);let s=await(e.fetch??fetch)(`${t.url}?${o}`,{headers:{accept:`application/json`},signal:AbortSignal.any([n,AbortSignal.timeout(2e4)])});if(!s.ok)throw Error(`Registry unavailable`);let{servers:c,metadata:l}=await s.json();for(let{server:e,_meta:n}of c){let i=n?.[`io.modelcontextprotocol.registry/official`]?.isLatest===!0,a=e.version??``,o=r.get(e.name);if(o&&(o.latest===i?oa(o.version,a)>=0:o.latest))continue;let s=aa(e),c=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+\//i.test(e.name)&&!/^io\.github(?:\.|\/)/i.test(e.name);r.set(e.name,{version:a,latest:i,found:s?{name:e.name,title:e._meta?.[`io.modelcontextprotocol.registry/publisher-provided`]?.github?.displayName??e.title??e.name.split(`/`).pop()??e.name,description:e.description??``,...c?{verified:!0}:{},...t.curated?{curated:!0}:{},...s}:void 0})}if(t.ready||(t.rows=new Map(r)),a=l?.nextCursor,a&&i.has(a))throw Error(`Registry cursor repeated`);a&&i.add(a)}while(a);t.rows=r,t.ready=!0,t.failed=!1}catch{t.failed=!0}}close(){this.closed=!0,this.timer&&clearTimeout(this.timer),this.controller?.abort()}};async function ca(e,t,n){let r=t.settings??={};return(r.registry??=new sa).response(t,n.searchParams.get(`q`)??``)}const la=`/api/auth/callback`,ua=`/.well-known/oauth-client.json`,da=`/.well-known/oauth-cli-client.json`,fa=`openid profile email offline_access organizations:read`;function pa(e,t){return{client_id:`${e}${ua}`,client_name:`Coder at ${new URL(e).host}`,redirect_uris:[`${e}${la}`],post_logout_redirect_uris:[`${e}/?signed_out=1`],grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],token_endpoint_auth_method:`private_key_jwt`,token_endpoint_auth_signing_alg:`ES256`,jwks:t,scope:fa}}function ma(e){return{client_id:`${e}${da}`,client_name:`Coder CLI for ${new URL(e).host}`,redirect_uris:[`http://127.0.0.1/callback`],grant_types:[`authorization_code`,`refresh_token`,`urn:ietf:params:oauth:grant-type:device_code`],response_types:[`code`],token_endpoint_auth_method:`none`,scope:fa}}function ha(e,t){return{resource:new URL(e).origin,authorization_servers:[t],bearer_methods_supported:[`header`],scopes_supported:fa.split(` `)}}function ga(e){let t=O(e);return t.headers.set(`cache-control`,`public, max-age=3600`),t}function _a(e,t,n,r){return t.config.publicUrl&&t.auth?ga(pa(t.config.publicUrl,t.auth.jwks)):void 0}function va(e,t,n,r){return t.config.publicUrl&&t.auth?ga(ma(t.config.publicUrl)):void 0}function ya(e,t,n,r){return t.config.publicUrl&&t.auth?ga(ha(t.config.publicUrl,t.auth.issuer)):void 0}const ba=[F(`GET`,Zn,en),F(`GET`,ua,_a,Ze),F(`GET`,da,va,Ze),F(`GET`,`/.well-known/oauth-protected-resource`,ya,Ze),F(`GET`,`/health`,(e,t)=>Ir(t)),F(`GET`,`/`,er,Ge),F(`GET`,`/login`,lt,vt),...j(`/login`,ur,vt).filter(e=>e.method!==`GET`),F(`POST`,`/dash/token`,Nt,dt),...j(`/dash/:org/operator`,an,Le),...j(`/dash`,an,nr)],xa=[F(`GET`,`/api/auth/capabilities`,(e,t)=>O({wular:t.auth?.issuer??null})),...j(`/api/auth`,(e,t)=>t.auth.handler(e),cr),F(`GET`,`/me`,Mn,nn)],Sa=[...M(`/tasks`,[F(`GET`,`/:id/messages`,ze,Se),F(`POST`,`/:id/ack`,je,Se),F(`POST`,`/:id/heartbeat`,He,Se),F(`POST`,`/:id/logs`,Ct,zt),F(`POST`,`/:id/result`,kt,zt),F(`POST`,`/:id/credential`,Et,zt),F(`GET`,`/:id`,In,ht)]),...M(`/logins`,[F(`GET`,`/:id/input`,Yr,Je),F(`GET`,`/:id`,Xr,Je),F(`POST`,`/:id`,Zr,Je)]),...M(`/runners`,[F(`POST`,`/register`,Hn)])],Ca=[...M(`/create`,[F(`GET`,`/:id`,ci,z),F(`POST`,`/:id`,ui,z),F(`GET`,`/:id/callback`,pi,z),F(`POST`,`/:id/callback`,mi,z)]),...M(`/install`,[F(`GET`,`/:id`,yn,P),F(`POST`,`/:id`,yn,P),F(`GET`,`/:id/callback`,Ut,P),F(`POST`,`/:id/callback`,Ut,P)])],wa=M(`/connect`,[F(`GET`,``,Nn,bt),F(`POST`,``,qt,bt),F(`GET`,`/:integration`,$t,tt),F(`GET`,`/:integration/callback`,Xn,tt)]),Ta=[...M(`/hooks`,[F(`POST`,`/*`,(e,t,n)=>Bn(e,t,n[`*`]),(e,t,n)=>t.integrations[n[`*`]]?t:k())]),...Ca,...wa],Ea=[F(`GET`,`/metrics`,async(e,t)=>O(await Rr(t),200,{"cache-control":`no-store`}),$n),F(`GET`,`/usage`,lr),F(`GET`,`/usage/totals`,Bt)],Da=M(``,[F(`GET`,`/folders`,(e,t)=>O(Wt(t.local.cwd))),F(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return O(An(n?.path))}),F(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return O(await Gn(n?.url))}),F(`POST`,`/folders/pick`,async(e,t)=>O(await bn()))],he),Oa=M(``,[F(`GET`,`/engines/status`,async(e,t)=>O(await De())),F(`POST`,`/engines/:engine/login`,ir),F(`POST`,`/engines/:engine/logout`,mt)],Te),ka=[F(`POST`,`/apps/:id/install`,(e,t,n,r)=>gn(e,t,n.id,r.searchParams.get(`back`),r.searchParams.get(`link`))),F(`POST`,`/apps/create/:integration`,di),F(`GET`,`/apps`,Qe),F(`DELETE`,`/apps/:id`,Re),F(`GET`,`/apps/:id/drift`,ke),F(`POST`,`/apps/:id/update`,Ke),F(`GET`,`/installations`,nt),F(`GET`,`/connections`,Tn,V),F(`POST`,`/connections`,tn,V),F(`PATCH`,`/connections/:id`,on,V),F(`DELETE`,`/connections/:id`,Fn,V),F(`POST`,`/connections/:id/authorize`,Qn,V),F(`GET`,`/integrations`,(e,t,n,r)=>Ye(t,r)),F(`GET`,`/repositories`,(e,t)=>ge(t)),F(`POST`,`/repositories/refresh`,(e,t)=>ge(t,!0))],Aa=[F(`GET`,`/agents/import`,Bi),F(`POST`,`/agents/import`,Vi),F(`GET`,`/agents`,vi),F(`PATCH`,`/agents/:slug/settings`,Wi),F(`GET`,`/agents/:slug/versions`,yi),F(`GET`,`/agents/:slug/versions/:version`,bi),F(`GET`,`/agents/:slug`,xi),F(`DELETE`,`/agents/:slug`,Gi,(e,t)=>ot(t,`Only an owner or admin can delete an agent.`)),F(`PUT`,`/agents/:slug`,Ki)],ja=[F(`GET`,`/credentials`,ut),F(`POST`,`/credentials`,Pt,xe),F(`POST`,`/credentials/:label/default`,Ht),F(`DELETE`,`/credentials/:label`,sr),F(`POST`,`/logins`,zr,U),F(`GET`,`/logins/:id`,Br,U),F(`POST`,`/logins/:id`,Vr,U),F(`DELETE`,`/logins/:id`,Hr,U)],Ma=[F(`GET`,`/runners`,Jn),F(`POST`,`/runners`,pe),F(`POST`,`/runners/pair`,Dn),F(`POST`,`/runners/:id/test`,it),F(`PATCH`,`/runners/:id`,Rt),F(`DELETE`,`/runners/:id`,Zt)],Na=[F(`GET`,`/composer`,Li),F(`GET`,`/tasks`,jt),F(`POST`,`/tasks`,We),F(`GET`,`/tasks/:id`,me),F(`DELETE`,`/tasks/:id`,Yt),F(`GET`,`/tasks/:id/logs`,En),F(`GET`,`/tasks/:id/stream`,qi),F(`POST`,`/tasks/:id/steer`,Kn),F(`POST`,`/tasks/:id/ask`,Ot),F(`POST`,`/tasks/:id/approve`,Rn),F(`POST`,`/tasks/:id/cancel`,Tt),F(`POST`,`/tasks/:id/archive`,Ve),F(`GET`,`/events`,Xi)],Pa=[F(`GET`,`/config`,yt),F(`PATCH`,`/config`,be),F(`PUT`,`/config`,Ie)],Fa=[F(`POST`,`/models/probe`,(e,t)=>ki(e,t)),F(`GET`,`/models`,ji),F(`POST`,`/models`,Mi),F(`DELETE`,`/models/:name`,Ni),F(`POST`,`/models/:name/alias`,Pi),F(`POST`,`/models/:name/disable`,Fi),F(`POST`,`/models/:name/enable`,Ii)],Ia=[F(`GET`,`/mcp-registry`,(e,t,n,r)=>ca(e,t,r))],La=M(`/operator`,[F(`GET`,`/apps`,ni),F(`POST`,`/apps/:integration`,ri),F(`GET`,`/audit`,ii)],Oe),Ra=[F(`GET`,`/flows`,un),F(`GET`,`/pulls`,It),F(`POST`,`/flows/:name/run`,Wn),F(`POST`,`/review`,kn)],za=M(`/admin`,[...Ea,...Da,...Oa,...ka,...Aa,...ja,...Ma,...Na,...Pa,...Fa,...Ia,...Ra,...La]).map(e=>({...e,guard:Mt(e.guard)})),Ba=[F(`GET`,`/connections/oauth/callback`,(e,t,n,r)=>Jt(e,t,r),ar),...Sa,...za,...xa,...Ta,...ba];async function Va(e,t,n){if(!hn(e,t))return k();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await pt(Ba,e,t,r)??Vt(e,t,r))}const Ha=`x-coder-request-scope`;function Ua(e,{sessions:t,operators:n,cookies:r}){let i=e.auth;return i?{...e,auth:{...i,session(e,n){let a=JSON.stringify([...[`cookie`,`authorization`].map(t=>e.get(t)),!!n]),o=t.get(a);if(!o){let s=new Headers(e);s.delete(`x-coder-organization`),o=i.session(s,n,r),t.set(a,o)}let s=e.get(`x-coder-organization`);return s?o.then(e=>e&&(e.stale?e:Pn(e,s))):o},setOrganization:(e,t)=>i.setOrganization(e,t,r),operator(e){let t=e.get(`cookie`)??``,a=n.get(t);return a||(a=i.operator(e,r),n.set(t,a)),a}}}:e}function Wa(e,t,n){let r=t.requestScopes??=new Map,i=e.headers.get(Ha),a=n&&i?r.get(i):void 0;if(a)return{req:e,ctx:Ua(t,a),end(){}};let o=new Headers(e.headers);if(o.delete(Ha),!t.auth)return{req:i?new Request(e,{headers:o}):e,ctx:t,end(){}};let s=Dr(),c={sessions:new Map,operators:new Map,cookies:[]};return r.set(s,c),o.set(Ha,s),{req:new Request(e,{headers:o}),ctx:Ua(t,c),cookies:c.cookies,end:()=>r.delete(s)}}async function Ga(e,t,n={}){t.limits??=new Ce((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new Qi,t.logWatcher??=new ea,t.dashboardHosts??=new cn;let r=()=>Ka(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function Ka(e,t,n){let r=await se(e,de(new URL(e.url).pathname));if(r instanceof Response)return r;let i=Wa(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await et(i.req,i.ctx,r),s=qa(o instanceof Response?o:await Va(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,u=c[1]===`admin`&&c[2]===`tasks`;if(e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&!(o instanceof Response)){let e=o.scope instanceof Response?void 0:o.scope??i.ctx;e&&xn(e,e.organizationId)}return e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&[`heartbeat`,`logs`].includes(c[3]))&&!(u&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||u||c[1]===`admin`&&c[2]===`review`||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&Ee(t,u&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?Ja(s,i.end):s}finally{a||i.end()}}function qa(e,t=[]){if(!t.length)return e;let n=new Headers(e.headers);for(let e of t)n.append(`set-cookie`,e);return new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}function Ja(e,t){let n=e.body.getReader(),r=new ReadableStream({async pull(e){try{let{done:r,value:i}=await n.read();r?(t(),e.close()):e.enqueue(i)}catch(n){t(),e.error(n)}},cancel(e){return t(),n.cancel(e)}});return new Response(r,e)}async function Ya(e={}){let t=e.env??J.env,n=pr(t,e.host??`node`),r=e.runner??n.runner;if((e.host===`vercel`||t.VERCEL)&&(r===`local`||r===`local-docker`))throw new v(`invalid-option`,`The ${r} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(n.store===`memory`&&r!==`local`&&r!==`local-docker`)throw new v(`invalid-option`,`The ${r} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!n.publicUrl)throw new v(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let i=[];if(n.store===`memory`&&!e.local&&i.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!t.SERVER_ENCRYPTION_KEY&&!e.local&&i.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),n.store===`postgres`&&!n.encryptionKey)throw new v(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let a=E(n.integrations),o=n.store===`memory`&&!n.adminToken?Er(18).toString(`base64url`):void 0;n.store===`postgres`&&n.adminToken&&i.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let s={...n,...n.store===`postgres`?{adminToken:void 0}:{},...o?{adminToken:o}:{},...e.runner?{runner:e.runner}:{}},c=await st(s,{local:!!e.local});try{s.store===`memory`&&await G(c.store(c.defaultOrganizationId),Date.now());let n=c.connection&&s.auth?await(await import(`./auth-B3RiDPMI.js`)).createAuth(c.connection.db,s):void 0,r=e.cwd??J.cwd(),l=c.store(c.defaultOrganizationId),u=vr({kind:s.runner,workDir:s.workDir,config:s.runnerConfig,local:!(e.host===`vercel`||t.VERCEL),sandbox:{region:_r(s.databaseUrl),snapshots:gr(l)}});if(!u[s.runner])throw await c.close(),new v(`invalid-option`,`Runner ${s.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let d=new cn,f=new Ce,p=new sa,m=new Map,h=new Map,g=new Qi,_=new ea,y=t=>{let i=m.get(t);if(i)return i;let o=c.store(t),l=new Map,v={limits:f,...c.connection?{databaseHealth:async()=>{await c.connection.db.execute(Sr`select 1`)},statementTimeout:c.connection.statementTimeout}:{},config:s,settings:{registry:p},organizationId:t,integrations:a,runners:u,store:o,queue:c.queue,requestScopes:h,taskWatcher:g,logWatcher:_,dashboardHosts:d,dbProfile:c.connection?.profile,chatState:c.chatState,fileReads:l,repositoryLists:new Map,loadAgent:Ue(a,{cwd:r,config:s,store:o,fileReads:l}),...n?{auth:n}:{},scope:y,webhookTarget:(e,t)=>c.webhookTarget(e,t),appRecord:e=>c.appRecord(e),apps:e=>c.apps(e),installationOrganization:e=>c.installationOrganization(e),installations:e=>c.installations(e),serverOrganizationId:c.defaultOrganizationId,taskOrganization:(e,t)=>c.taskOrganization(e,t),...e.local?{local:e.local}:{}};return m.set(t,v),v};globalThis.__coder={handle:e=>Ga(e,y(c.defaultOrganizationId),{inProcess:!0})};let b=y(c.defaultOrganizationId),x;return e.local&&(await Xe(b),x=setImmediate(()=>{Ae(b).catch(()=>void 0)})),{config:s,context:y,defaultContext:b,warnings:i,...o?{mintedToken:o}:{},sweep:c.sweep,close:async()=>{p.close(),g.close(),_.close(),x&&clearImmediate(x),await b.local?.usageSync?.catch(()=>void 0),await $e(b),await c.close()}}}catch(e){throw await c.close(),e}}var Xa=e({serve:()=>no,serverHandler:()=>Qa});function Za(e){try{let t=new URL(e);return H.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function Qa(e=J.env,t=e.VERCEL?`vercel`:`node`){mr();let n,r=()=>n??=Ya({env:e,host:t}).catch(e=>{throw n=void 0,e});return Object.assign(async(t,n)=>{let i=await r(),a=n?e=>n(e):e=>void e.catch(()=>{}),o=e=>({...i.context(e),waitUntil:a,scope:o});return Ga(t,o(i.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await r();await Promise.all([e.sweep(),ft(e.defaultContext,!1,!0),Gt(e.defaultContext)])},close:async()=>{let e=n;n=void 0,await(await e)?.close()}})}function $a(e){let t=wr(`lsof`,[`-nP`,`-iTCP:${e}`,`-sTCP:LISTEN`,`-t`],{encoding:`utf8`}),n=Number(t.stdout?.split(`
8
+ `),this.options.heartbeatMs??2e4)];for(let e of s.timers)e.unref?.();return a.watches.add(s),a.reading===void 0&&t<a.head&&(clearTimeout(a.timer),this.read(a)),()=>this.drop(s)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;for(let t of e.timers)clearTimeout(t);!t.watches.delete(e)||t.watches.size||(clearTimeout(t.timer),this.feeds.get(t.key)===t&&this.feeds.delete(t.key))}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){if(e.timer=void 0,this.feeds.get(e.key)!==e||!e.watches.size)return;let t=[...e.watches],n=Math.min(...t.map(e=>e.cursor));e.reading=Date.now(),this.reads++;let r=await e.read(n).catch(()=>null);if(e.reading=void 0,this.feeds.get(e.key)!==e)return;let i=t.filter(t=>e.watches.has(t)),a=i.length<e.watches.size?0:this.options.pollMs??1e3;if(r===void 0)for(let e of i)this.end(e);else if(r){let{status:t,lines:o,pendingLogs:s,pendingResult:c}=r,l=o.length===500,u=Ne.has(t.status)&&!l&&!s&&!c,d=o.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]);e.head=Math.max(n,o.at(-1)?.seq??n),l&&(a=0);for(let e of i){let t=d.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);e.cursor=Math.max(e.cursor,o.at(-1)?.seq??-1),u?this.end(e,`${t}event: end\ndata: {}\n\n`):t&&this.send(e,t)}}this.feeds.get(e.key)===e&&(e.timer=setTimeout(()=>void this.read(e),a),e.timer.unref?.())}};function ta(e,t,n,r,i){let a=t.logWatcher??new ea,o=new TextEncoder,s=()=>{},c=new ReadableStream({start(c){c.enqueue(o.encode(`retry: ${Yi}\n\n`)),s=a.watch(`${t.organizationId}:${n}`,r,i,e=>c.enqueue(o.encode(e)),()=>c.close());let l=()=>{s();try{c.close()}catch{}};e.signal.aborted?l():e.signal.addEventListener(`abort`,l)},cancel(){s()}});return new Response(c,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}const na={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},ra=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function ia(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=ra([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function aa(e){let t=e.remotes?.find(e=>e.type===`streamable-http`||e.type===`sse`);if(t)return{type:t.type===`sse`?`sse`:`http`,url:t.url,env:[],headers:ra(t.headers)};let n=e.packages?.find(e=>na[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=na[n.registryType],a=[],o=ia(n.runtimeArguments,`runtime`,a),s=ia(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:ra(n.environmentVariables),headers:[]}}function oa(e,t){let[n=``,r]=e.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),[i=``,a]=t.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),o=n.localeCompare(i,`en`,{numeric:!0});if(o)return o;if(r===void 0||a===void 0)return Number(r===void 0)-Number(a===void 0);let s=r.split(`.`),c=a.split(`.`);for(let e=0;e<Math.max(s.length,c.length);e++){let t=s[e],n=c[e];if(t===void 0||n===void 0)return Number(t!==void 0)-Number(n!==void 0);let r=/^\d+$/.test(t),i=/^\d+$/.test(n),a=r===i?t.localeCompare(n,`en`,{numeric:r}):Number(i)-Number(r);if(a)return a}return 0}var sa=class{sources=[{url:`https://api.mcp.github.com/v0.1/servers`,curated:!0,rows:new Map,ready:!1,failed:!1},{url:`https://registry.modelcontextprotocol.io/v0.1/servers`,curated:!1,rows:new Map,ready:!1,failed:!1}];refreshAt=0;timer;controller;closed=!1;inFlight;response(e,t){if((e.now??Date.now)()>=this.refreshAt&&this.refresh(e),!this.inFlight&&this.sources.some(e=>e.failed)&&!this.sources.some(e=>[...e.rows.values()].some(e=>e.found)))return O({error:`The MCP registry did not answer. Try again.`},502);let n=t.trim().toLowerCase(),r=new Set,i=this.sources.flatMap(e=>[...e.rows].flatMap(([t,{found:i}],a)=>{if(r.has(t)||(r.add(t),!i))return[];let o=[i.name.split(`/`).pop(),i.title].map(e=>e.toLowerCase()),s=!n||o.includes(n)?0:o.some(e=>e.startsWith(n))?1:o.some(e=>e.includes(n))?2:i.description.toLowerCase().includes(n)?3:4;if(s===4)return[];let c=n&&i.verified&&s<3?0:1;return[{found:i,curated:e.curated,order:a,vendor:c,quality:s}]})),a=e=>Number(e===3);return i.sort((e,t)=>a(e.quality)-a(t.quality)||Number(t.curated)-Number(e.curated)||(e.curated?e.order-t.order:e.vendor-t.vendor||e.quality-t.quality||e.found.name.localeCompare(t.found.name))),O(i.slice(0,30).map(({found:e})=>e),200,this.sources.every(e=>e.ready)?{}:{partial:`true`})}refresh(e){if(this.inFlight||this.closed)return;this.timer&&clearTimeout(this.timer);let t=this.controller=new AbortController;this.inFlight=Promise.all(this.sources.map(n=>this.fill(e,n,t.signal))).then(()=>{}).finally(()=>{this.inFlight=void 0,this.refreshAt=(e.now??Date.now)()+36e5,this.closed||(this.timer=setTimeout(()=>this.refresh(e),36e5),this.timer.unref())}),e.waitUntil?.(this.inFlight)}async fill(e,t,n){let r=new Map,i=new Set,a;try{do{let o=new URLSearchParams({limit:`100`});a&&o.set(`cursor`,a);let s=await(e.fetch??fetch)(`${t.url}?${o}`,{headers:{accept:`application/json`},signal:AbortSignal.any([n,AbortSignal.timeout(2e4)])});if(!s.ok)throw Error(`Registry unavailable`);let{servers:c,metadata:l}=await s.json();for(let{server:e,_meta:n}of c){let i=n?.[`io.modelcontextprotocol.registry/official`]?.isLatest===!0,a=e.version??``,o=r.get(e.name);if(o&&(o.latest===i?oa(o.version,a)>=0:o.latest))continue;let s=aa(e),c=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+\//i.test(e.name)&&!/^io\.github(?:\.|\/)/i.test(e.name);r.set(e.name,{version:a,latest:i,found:s?{name:e.name,title:e._meta?.[`io.modelcontextprotocol.registry/publisher-provided`]?.github?.displayName??e.title??e.name.split(`/`).pop()??e.name,description:e.description??``,...c?{verified:!0}:{},...t.curated?{curated:!0}:{},...s}:void 0})}if(t.ready||(t.rows=new Map(r)),a=l?.nextCursor,a&&i.has(a))throw Error(`Registry cursor repeated`);a&&i.add(a)}while(a);t.rows=r,t.ready=!0,t.failed=!1}catch{t.failed=!0}}close(){this.closed=!0,this.timer&&clearTimeout(this.timer),this.controller?.abort()}};async function ca(e,t,n){let r=t.settings??={};return(r.registry??=new sa).response(t,n.searchParams.get(`q`)??``)}const la=`/api/auth/callback`,ua=`/.well-known/oauth-client.json`,da=`/.well-known/oauth-cli-client.json`,fa=`openid profile email offline_access organizations:read`;function pa(e,t){return{client_id:`${e}${ua}`,client_name:`Coder at ${new URL(e).host}`,redirect_uris:[`${e}${la}`],post_logout_redirect_uris:[`${e}/?signed_out=1`],grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],token_endpoint_auth_method:`private_key_jwt`,token_endpoint_auth_signing_alg:`ES256`,jwks:t,scope:fa}}function ma(e){return{client_id:`${e}${da}`,client_name:`Coder CLI for ${new URL(e).host}`,redirect_uris:[`http://127.0.0.1/callback`],grant_types:[`authorization_code`,`refresh_token`,`urn:ietf:params:oauth:grant-type:device_code`],response_types:[`code`],token_endpoint_auth_method:`none`,scope:fa}}function ha(e,t){return{resource:new URL(e).origin,authorization_servers:[t],bearer_methods_supported:[`header`],scopes_supported:fa.split(` `)}}function ga(e){let t=O(e);return t.headers.set(`cache-control`,`public, max-age=3600`),t}function _a(e,t,n,r){return t.config.publicUrl&&t.auth?ga(pa(t.config.publicUrl,t.auth.jwks)):void 0}function va(e,t,n,r){return t.config.publicUrl&&t.auth?ga(ma(t.config.publicUrl)):void 0}function ya(e,t,n,r){return t.config.publicUrl&&t.auth?ga(ha(t.config.publicUrl,t.auth.issuer)):void 0}const ba=[F(`GET`,Zn,en),F(`GET`,ua,_a,Ze),F(`GET`,da,va,Ze),F(`GET`,`/.well-known/oauth-protected-resource`,ya,Ze),F(`GET`,`/health`,(e,t)=>Ir(t)),F(`GET`,`/`,er,Ge),F(`GET`,`/login`,lt,vt),...j(`/login`,ur,vt).filter(e=>e.method!==`GET`),F(`POST`,`/dash/token`,Nt,dt),...j(`/dash/:org/operator`,an,Le),...j(`/dash`,an,nr)],xa=[F(`GET`,`/api/auth/capabilities`,(e,t)=>O({wular:t.auth?.issuer??null})),...j(`/api/auth`,(e,t)=>t.auth.handler(e),cr),F(`GET`,`/me`,Mn,nn)],Sa=[...M(`/tasks`,[F(`GET`,`/:id/messages`,ze,Se),F(`POST`,`/:id/ack`,je,Se),F(`POST`,`/:id/heartbeat`,He,Se),F(`POST`,`/:id/logs`,Ct,zt),F(`POST`,`/:id/result`,kt,zt),F(`POST`,`/:id/credential`,Et,zt),F(`GET`,`/:id`,In,ht)]),...M(`/logins`,[F(`GET`,`/:id/input`,Yr,Je),F(`GET`,`/:id`,Xr,Je),F(`POST`,`/:id`,Zr,Je)]),...M(`/runners`,[F(`POST`,`/register`,Hn)])],Ca=[...M(`/create`,[F(`GET`,`/:id`,ci,z),F(`POST`,`/:id`,ui,z),F(`GET`,`/:id/callback`,pi,z),F(`POST`,`/:id/callback`,mi,z)]),...M(`/install`,[F(`GET`,`/:id`,yn,P),F(`POST`,`/:id`,yn,P),F(`GET`,`/:id/callback`,Ut,P),F(`POST`,`/:id/callback`,Ut,P)])],wa=M(`/connect`,[F(`GET`,``,Nn,bt),F(`POST`,``,qt,bt),F(`GET`,`/:integration`,$t,tt),F(`GET`,`/:integration/callback`,Xn,tt)]),Ta=[...M(`/hooks`,[F(`POST`,`/*`,(e,t,n)=>Bn(e,t,n[`*`]),(e,t,n)=>t.integrations[n[`*`]]?t:k())]),...Ca,...wa],Ea=[F(`GET`,`/metrics`,async(e,t)=>O(await Rr(t),200,{"cache-control":`no-store`}),$n),F(`GET`,`/usage`,lr),F(`GET`,`/usage/totals`,Bt)],Da=M(``,[F(`GET`,`/folders`,(e,t)=>O(Wt(t.local.cwd))),F(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return O(An(n?.path))}),F(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return O(await Gn(n?.url))}),F(`POST`,`/folders/pick`,async(e,t)=>O(await bn()))],he),Oa=M(``,[F(`GET`,`/engines/status`,async(e,t)=>O(await De())),F(`POST`,`/engines/:engine/login`,ir),F(`POST`,`/engines/:engine/logout`,mt)],Te),ka=[F(`POST`,`/apps/:id/install`,(e,t,n,r)=>gn(e,t,n.id,r.searchParams.get(`back`),r.searchParams.get(`link`))),F(`POST`,`/apps/create/:integration`,di),F(`GET`,`/apps`,Qe),F(`DELETE`,`/apps/:id`,Re),F(`GET`,`/apps/:id/drift`,ke),F(`POST`,`/apps/:id/update`,Ke),F(`GET`,`/installations`,nt),F(`GET`,`/connections`,Tn,V),F(`POST`,`/connections`,tn,V),F(`PATCH`,`/connections/:id`,on,V),F(`DELETE`,`/connections/:id`,Fn,V),F(`POST`,`/connections/:id/authorize`,Qn,V),F(`GET`,`/integrations`,(e,t,n,r)=>Ye(t,r)),F(`GET`,`/repositories`,(e,t)=>ge(t)),F(`POST`,`/repositories/refresh`,(e,t)=>ge(t,!0))],Aa=[F(`GET`,`/agents/import`,Bi),F(`POST`,`/agents/import`,Vi),F(`GET`,`/agents`,vi),F(`PATCH`,`/agents/:slug/settings`,Wi),F(`GET`,`/agents/:slug/versions`,yi),F(`GET`,`/agents/:slug/versions/:version`,bi),F(`GET`,`/agents/:slug`,xi),F(`DELETE`,`/agents/:slug`,Gi,(e,t)=>ot(t,`Only an owner or admin can delete an agent.`)),F(`PUT`,`/agents/:slug`,Ki)],ja=[F(`GET`,`/credentials`,ut),F(`POST`,`/credentials`,Pt,xe),F(`POST`,`/credentials/:label/default`,Ht),F(`DELETE`,`/credentials/:label`,sr),F(`POST`,`/logins`,zr,U),F(`GET`,`/logins/:id`,Br,U),F(`POST`,`/logins/:id`,Vr,U),F(`DELETE`,`/logins/:id`,Hr,U)],Ma=[F(`GET`,`/runners`,Jn),F(`POST`,`/runners`,pe),F(`POST`,`/runners/pair`,Dn),F(`POST`,`/runners/:id/test`,it),F(`PATCH`,`/runners/:id`,Rt),F(`DELETE`,`/runners/:id`,Zt)],Na=[F(`GET`,`/composer`,Li),F(`GET`,`/tasks`,jt),F(`POST`,`/tasks`,We),F(`GET`,`/tasks/:id`,me),F(`DELETE`,`/tasks/:id`,Yt),F(`GET`,`/tasks/:id/logs`,En),F(`GET`,`/tasks/:id/stream`,qi),F(`POST`,`/tasks/:id/steer`,Kn),F(`POST`,`/tasks/:id/ask`,Ot),F(`POST`,`/tasks/:id/approve`,Rn),F(`POST`,`/tasks/:id/cancel`,Tt),F(`POST`,`/tasks/:id/archive`,Ve),F(`GET`,`/events`,Xi)],Pa=[F(`GET`,`/config`,yt),F(`PATCH`,`/config`,be),F(`PUT`,`/config`,Ie)],Fa=[F(`POST`,`/models/probe`,(e,t)=>ki(e,t)),F(`GET`,`/models`,ji),F(`POST`,`/models`,Mi),F(`DELETE`,`/models/:name`,Ni),F(`POST`,`/models/:name/alias`,Pi),F(`POST`,`/models/:name/disable`,Fi),F(`POST`,`/models/:name/enable`,Ii)],Ia=[F(`GET`,`/mcp-registry`,(e,t,n,r)=>ca(e,t,r))],La=M(`/operator`,[F(`GET`,`/apps`,ni),F(`POST`,`/apps/:integration`,ri),F(`GET`,`/audit`,ii)],Oe),Ra=[F(`GET`,`/flows`,un),F(`GET`,`/pulls`,It),F(`POST`,`/flows/:name/run`,Wn),F(`POST`,`/review`,kn)],za=M(`/admin`,[...Ea,...Da,...Oa,...ka,...Aa,...ja,...Ma,...Na,...Pa,...Fa,...Ia,...Ra,...La]).map(e=>({...e,guard:Mt(e.guard)})),Ba=[F(`GET`,`/connections/oauth/callback`,(e,t,n,r)=>Jt(e,t,r),ar),...Sa,...za,...xa,...Ta,...ba];async function Va(e,t,n){if(!hn(e,t))return k();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await pt(Ba,e,t,r)??Vt(e,t,r))}const Ha=`x-coder-request-scope`;function Ua(e,{sessions:t,operators:n,cookies:r}){let i=e.auth;return i?{...e,auth:{...i,session(e,n){let a=JSON.stringify([...[`cookie`,`authorization`].map(t=>e.get(t)),!!n]),o=t.get(a);if(!o){let s=new Headers(e);s.delete(`x-coder-organization`),o=i.session(s,n,r),t.set(a,o)}let s=e.get(`x-coder-organization`);return s?o.then(e=>e&&(e.stale?e:Pn(e,s))):o},setOrganization:(e,t)=>i.setOrganization(e,t,r),operator(e){let t=e.get(`cookie`)??``,a=n.get(t);return a||(a=i.operator(e,r),n.set(t,a)),a}}}:e}function Wa(e,t,n){let r=t.requestScopes??=new Map,i=e.headers.get(Ha),a=n&&i?r.get(i):void 0;if(a)return{req:e,ctx:Ua(t,a),end(){}};let o=new Headers(e.headers);if(o.delete(Ha),!t.auth)return{req:i?new Request(e,{headers:o}):e,ctx:t,end(){}};let s=Dr(),c={sessions:new Map,operators:new Map,cookies:[]};return r.set(s,c),o.set(Ha,s),{req:new Request(e,{headers:o}),ctx:Ua(t,c),cookies:c.cookies,end:()=>r.delete(s)}}async function Ga(e,t,n={}){t.limits??=new Ce((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new Qi,t.logWatcher??=new ea,t.dashboardHosts??=new cn;let r=()=>Ka(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function Ka(e,t,n){let r=await se(e,de(new URL(e.url).pathname));if(r instanceof Response)return r;let i=Wa(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await et(i.req,i.ctx,r),s=qa(o instanceof Response?o:await Va(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,u=c[1]===`admin`&&c[2]===`tasks`;if(e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&!(o instanceof Response)){let e=o.scope instanceof Response?void 0:o.scope??i.ctx;e&&xn(e,e.organizationId)}return e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&[`heartbeat`,`logs`].includes(c[3]))&&!(u&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||u||c[1]===`admin`&&c[2]===`review`||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&Ee(t,u&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?Ja(s,i.end):s}finally{a||i.end()}}function qa(e,t=[]){if(!t.length)return e;let n=new Headers(e.headers);for(let e of t)n.append(`set-cookie`,e);return new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}function Ja(e,t){let n=e.body.getReader(),r=new ReadableStream({async pull(e){try{let{done:r,value:i}=await n.read();r?(t(),e.close()):e.enqueue(i)}catch(n){t(),e.error(n)}},cancel(e){return t(),n.cancel(e)}});return new Response(r,e)}async function Ya(e={}){let t=e.env??J.env,n=pr(t,e.host??`node`),r=e.runner??n.runner;if((e.host===`vercel`||t.VERCEL)&&(r===`local`||r===`local-docker`))throw new v(`invalid-option`,`The ${r} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(n.store===`memory`&&r!==`local`&&r!==`local-docker`)throw new v(`invalid-option`,`The ${r} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!n.publicUrl)throw new v(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let i=[];if(n.store===`memory`&&!e.local&&i.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!t.SERVER_ENCRYPTION_KEY&&!e.local&&i.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),n.store===`postgres`&&!n.encryptionKey)throw new v(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let a=E(n.integrations),o=n.store===`memory`&&!n.adminToken?Er(18).toString(`base64url`):void 0;n.store===`postgres`&&n.adminToken&&i.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let s={...n,...n.store===`postgres`?{adminToken:void 0}:{},...o?{adminToken:o}:{},...e.runner?{runner:e.runner}:{}},c=await st(s,{local:!!e.local});try{s.store===`memory`&&await G(c.store(c.defaultOrganizationId),Date.now());let n=c.connection&&s.auth?await(await import(`./auth-CWzSsiSC.js`)).createAuth(c.connection.db,s):void 0,r=e.cwd??J.cwd(),l=c.store(c.defaultOrganizationId),u=vr({kind:s.runner,workDir:s.workDir,config:s.runnerConfig,local:!(e.host===`vercel`||t.VERCEL),sandbox:{region:_r(s.databaseUrl),snapshots:gr(l)}});if(!u[s.runner])throw await c.close(),new v(`invalid-option`,`Runner ${s.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let d=new cn,f=new Ce,p=new sa,m=new Map,h=new Map,g=new Qi,_=new ea,y=t=>{let i=m.get(t);if(i)return i;let o=c.store(t),l=new Map,v={limits:f,...c.connection?{databaseHealth:async()=>{await c.connection.db.execute(Sr`select 1`)},statementTimeout:c.connection.statementTimeout}:{},config:s,settings:{registry:p},organizationId:t,integrations:a,runners:u,store:o,queue:c.queue,requestScopes:h,taskWatcher:g,logWatcher:_,dashboardHosts:d,dbProfile:c.connection?.profile,chatState:c.chatState,fileReads:l,repositoryLists:new Map,loadAgent:Ue(a,{cwd:r,config:s,store:o,fileReads:l}),...n?{auth:n}:{},scope:y,webhookTarget:(e,t)=>c.webhookTarget(e,t),appRecord:e=>c.appRecord(e),apps:e=>c.apps(e),installationOrganization:e=>c.installationOrganization(e),installations:e=>c.installations(e),serverOrganizationId:c.defaultOrganizationId,taskOrganization:(e,t)=>c.taskOrganization(e,t),...e.local?{local:e.local}:{}};return m.set(t,v),v};globalThis.__coder={handle:e=>Ga(e,y(c.defaultOrganizationId),{inProcess:!0})};let b=y(c.defaultOrganizationId),x;return e.local&&(await Xe(b),x=setImmediate(()=>{Ae(b).catch(()=>void 0)})),{config:s,context:y,defaultContext:b,warnings:i,...o?{mintedToken:o}:{},sweep:c.sweep,close:async()=>{p.close(),g.close(),_.close(),x&&clearImmediate(x),await b.local?.usageSync?.catch(()=>void 0),await $e(b),await c.close()}}}catch(e){throw await c.close(),e}}var Xa=e({serve:()=>no,serverHandler:()=>Qa});function Za(e){try{let t=new URL(e);return H.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function Qa(e=J.env,t=e.VERCEL?`vercel`:`node`){mr();let n,r=()=>n??=Ya({env:e,host:t}).catch(e=>{throw n=void 0,e});return Object.assign(async(t,n)=>{let i=await r(),a=n?e=>n(e):e=>void e.catch(()=>{}),o=e=>({...i.context(e),waitUntil:a,scope:o});return Ga(t,o(i.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await r();await Promise.all([e.sweep(),ft(e.defaultContext,!1,!0),Gt(e.defaultContext)])},close:async()=>{let e=n;n=void 0,await(await e)?.close()}})}function $a(e){let t=wr(`lsof`,[`-nP`,`-iTCP:${e}`,`-sTCP:LISTEN`,`-t`],{encoding:`utf8`}),n=Number(t.stdout?.split(`
9
9
  `)[0]);if(n)return{pid:n,command:wr(`ps`,[`-o`,`command=`,`-p`,String(n)],{encoding:`utf8`}).stdout?.trim().slice(0,120)||`another process`}}function eo(e){let t=$a(e),n=t&&/\bcoder (dash|server serve)\b/.test(t.command);return new v(`server`,t?n?`Coder is already running on port ${e} (pid ${t.pid}): http://localhost:${e}`:`Port ${e} is in use by ${t.command} (pid ${t.pid}).`:`Port ${e} is in use.`,{hint:t?`Stop it with \`kill ${t.pid}\`, or use another port: --port ${e+1}`:`Use another port: --port ${e+1}`})}async function to(e={}){mr();let t=e.env??J.env;if(e.runner&&!yr.includes(e.runner))throw new v(`invalid-option`,`Invalid --runner value: use ${yr.join(`, `)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))throw new v(`invalid-option`,`Invalid port: use 1 through 65535.`);let n=t.PORT&&/^\d+$/.test(t.PORT)?Number(t.PORT):void 0,r=Za(t.PUBLIC_URL),i=e.port??n??r??8787;if(!Number.isInteger(i)||i<1||i>65535)throw new v(`invalid-option`,`Invalid PORT: use 1 through 65535.`);let a=t.PUBLIC_URL?t:{...t,PUBLIC_URL:`http://localhost:${i}`},o=!!(t.DATABASE_URL||t.POSTGRES_URL);if(o&&e.memory)throw new v(`invalid-option`,`A memory server cannot use DATABASE_URL.`,{hint:`Unset DATABASE_URL, or drop --memory.`});let s=(e.host??t.HOST??(o?void 0:`127.0.0.1`))?.replace(/^\[(.*)\]$/,`$1`),c=!o&&!e.memory;if(c&&!H.has(s))throw new v(`invalid-option`,`A local server listens on loopback only.`,{hint:`Reach it through a tunnel or a proxy on this machine; set DATABASE_URL for a deployment, or use --memory for a test server.`});if(e.memory&&t.VERCEL)throw new v(`invalid-option`,`A memory server cannot run on Vercel.`,{hint:`Set DATABASE_URL for a real deployment.`});let l,u,d=c?new Promise((e,t)=>{u=t,l=()=>{Pr().then(e,t)}}):void 0,f=d?.then(()=>void 0).catch(()=>void 0),p=c?{cwd:e.cwd??J.cwd(),port:i,cacheMaintenance:f}:void 0,m=await Ya({cwd:e.cwd,env:a,runner:e.runner,...p?{local:p}:{}}),h=m.defaultContext,g=()=>{m.sweep().catch(()=>{})};g();let _=setInterval(g,36e5);_.unref();let y=setInterval(()=>{ft(h,!1,!0).catch(()=>{}),Gt(h).catch(()=>{})},6e4);y.unref();let b=kr.createServer(ue((e,t)=>Ga(e,h,{clientIp:t}),{limit:de,admit:e=>o||Pe(e.socket.remoteAddress,e.url??`/`)})),x=m.config.publicUrl;r!==void 0&&r!==i&&m.warnings.push(`PUBLIC_URL points at port ${r} but the server listens on ${i}`),await new Promise((e,t)=>{b.once(`error`,t),b.listen(i,s,e)}).catch(async e=>{throw u?.(e),clearInterval(y),clearInterval(_),await m.close(),e.code===`EADDRINUSE`?eo(i):e});let ee=l?setTimeout(l,0):void 0,S=!1,C=async()=>{S||(S=!0,clearInterval(y),clearInterval(_),h.taskWatcher?.close(),h.logWatcher?.close(),await new Promise((e,t)=>b.close(n=>n?t(n):e())),await f,ee&&clearTimeout(ee),await m.close())},w=h.auth?`Wular Auth (${h.auth.issuer})`:void 0,T=`http://localhost:${i}`,E=ve(h),D=E===`local`?T:x,te=m.config.store===`memory`?m.mintedToken??t.ADMIN_TOKEN:void 0;return{address:T,publicUrl:x,warnings:m.warnings,close:C,runner:m.config.runner,store:m.config.store,mode:E,...d?{cacheMigration:d}:{},maxTasks:m.config.maxTasks??m.config.limits?.concurrentTasks??10,...w?{signIn:w}:{},...m.mintedToken?{mintedToken:m.mintedToken}:{},...m.config.store===`postgres`&&t.DATABASE_URL?{database:ct(t.DATABASE_URL)}:{},...H.has(new URL(D).hostname)?{dashboard:`${D}/dash${te?`#token=${encodeURIComponent(te)}`:``}`}:{}}}async function no(e={}){try{return await to(e)}catch(e){if(e instanceof v)throw e;let t=e instanceof Error&&e.cause instanceof Error?`: ${e.cause.message}`:``;throw new v(`server`,`${e instanceof Error?e.message:String(e)}${t}`)}}export{fa as a,la as i,Xa as n,ua as o,Qa as r,no as t};
@@ -1 +1 @@
1
- import{Zt as e}from"./core-DwsAMCnL.js";import{Dn as t,Ln as n,Mn as r}from"./config-D2FxHWwi.js";import{i,t as a}from"./cli-D5hyqGq0.js";import{p as o,s}from"./output-BKeyLbvt.js";import{n as c,o as l,s as u,t as d}from"./args-CxsMr9Un.js";import f from"node:process";const p=i({name:`runner serve`,help:{usage:`coder runner serve --url <public url> [--token <token>] [--runner-url <url>] [--port <n>] [--name <name>] [--workspace] [--server [url]] [--json]`,summary:`Run tasks on this machine with its own claude and codex logins. Expose the port with any tunnel (cloudflared, ngrok, Tailscale Funnel or a public VS Code port) and pass the tunnel's URL; each start registers the current URL, so a changing tunnel URL is fine. Choose a default with coder runner default. Tasks use their named runner, the agent setting, your default, the workspace default, then the server default.`,flags:[[`--url <public url>`,`the HTTPS address the server reaches this runner at`],[`--token <token>`,`one-use pairing token, --url is the Coder server`],[`--runner-url <url>`,`public tunnel address when pairing, or CODER_RUNNER_URL`],[`--port <n>`,`local port the tunnel forwards to (default 4100)`],[`--name <name>`,`shown in the dashboard (default: this machine's hostname)`],[`--workspace`,`run every member's tasks, not only yours (owners and admins)`],a],examples:[[`cloudflared tunnel --url http://localhost:4100`,`expose the port in one terminal`],[`coder runner serve --url https://abc.trycloudflare.com`,`then serve through it`]]},options:{...d,port:n(t().check(r(),e())),url:u,name:u,token:u,"runner-url":u,workspace:c,server:l,yes:c},async run({options:e}){let{serveRunner:t}=await import(`./serve-BQsv2KZs.js`).then(e=>e.n),n=await t({...e,runnerUrl:e[`runner-url`]}),r=()=>void n.close().finally(()=>f.exit(0));return f.once(`SIGINT`,r),f.once(`SIGTERM`,r),n},json:({server:e,close:t,...n})=>({ok:!0,...n}),print:e=>f.stdout.write(`Runner ${o.bold(e.name)} serves ${e.server} at ${o.cyan(e.config.url??``)} (${e.scope}), listening on localhost:${e.port}.\n${s([`Tasks run here with this machine's own claude and codex logins`,`Stop with Ctrl-C; the server marks the runner offline`],o,o.cyan)}\n`)});export{p as commandRunnerServe};
1
+ import{Zt as e}from"./core-DwsAMCnL.js";import{Dn as t,Ln as n,Mn as r}from"./config-D2FxHWwi.js";import{i,t as a}from"./cli-ZUdhZnuW.js";import{p as o,s}from"./output-BKeyLbvt.js";import{n as c,o as l,s as u,t as d}from"./args-CxsMr9Un.js";import f from"node:process";const p=i({name:`runner serve`,help:{usage:`coder runner serve --url <public url> [--token <token>] [--runner-url <url>] [--port <n>] [--name <name>] [--workspace] [--server [url]] [--json]`,summary:`Run tasks on this machine with its own claude and codex logins. Expose the port with any tunnel (cloudflared, ngrok, Tailscale Funnel or a public VS Code port) and pass the tunnel's URL; each start registers the current URL, so a changing tunnel URL is fine. Choose a default with coder runner default. Tasks use their named runner, the agent setting, your default, the workspace default, then the server default.`,flags:[[`--url <public url>`,`the HTTPS address the server reaches this runner at`],[`--token <token>`,`one-use pairing token, --url is the Coder server`],[`--runner-url <url>`,`public tunnel address when pairing, or CODER_RUNNER_URL`],[`--port <n>`,`local port the tunnel forwards to (default 4100)`],[`--name <name>`,`shown in the dashboard (default: this machine's hostname)`],[`--workspace`,`run every member's tasks, not only yours (owners and admins)`],a],examples:[[`cloudflared tunnel --url http://localhost:4100`,`expose the port in one terminal`],[`coder runner serve --url https://abc.trycloudflare.com`,`then serve through it`]]},options:{...d,port:n(t().check(r(),e())),url:u,name:u,token:u,"runner-url":u,workspace:c,server:l,yes:c},async run({options:e}){let{serveRunner:t}=await import(`./serve-wQgyxwdY.js`).then(e=>e.n),n=await t({...e,runnerUrl:e[`runner-url`]}),r=()=>void n.close().finally(()=>f.exit(0));return f.once(`SIGINT`,r),f.once(`SIGTERM`,r),n},json:({server:e,close:t,...n})=>({ok:!0,...n}),print:e=>f.stdout.write(`Runner ${o.bold(e.name)} serves ${e.server} at ${o.cyan(e.config.url??``)} (${e.scope}), listening on localhost:${e.port}.\n${s([`Tasks run here with this machine's own claude and codex logins`,`Stop with Ctrl-C; the server marks the runner offline`],o,o.cyan)}\n`)});export{p as commandRunnerServe};