@wular/coder 0.4.7 → 0.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/README.md +2 -2
  2. package/dist/actions-5TDwmn_z.js +20 -0
  3. package/dist/adapter-B2RXnvqt.js +49845 -0
  4. package/dist/adapter-YCvP9H2n.js +94 -0
  5. package/dist/adapter-sKt1J1Cm.js +1 -0
  6. package/dist/{add-B3zygDO5.js → add-BftLUw05.js} +1 -1
  7. package/dist/add-CXAGrCnC.js +1 -0
  8. package/dist/add-Ck_y_nKX.js +2 -0
  9. package/dist/{add-DpsjB8Mp.js → add-CvBTpxgY.js} +1 -1
  10. package/dist/agent-ChnedLBv.js +8 -0
  11. package/dist/agent-vYm7Geh-.js +1 -0
  12. package/dist/{alias-CZjD1F0F.js → alias-BpgVDY6_.js} +1 -1
  13. package/dist/api-qdpx8FD0.js +1 -0
  14. package/dist/{app-CE5j7IDN.js → app-CJPFaLIV.js} +1 -1
  15. package/dist/approvals-CE8dXZhE.js +2 -0
  16. package/dist/approve-CBuGu3du.js +1 -0
  17. package/dist/{approve-D5Dkw1Lo.js → approve-dWW4qt76.js} +2 -2
  18. package/dist/apps-B60OpAHX.js +242 -0
  19. package/dist/{archive-RBPoB4cr.js → archive-C89Z4kSx.js} +2 -2
  20. package/dist/{archive-Br2eM_A2.js → archive-CmRVm4iS.js} +2 -2
  21. package/dist/archive-sweep-EiiXIqjr.js +1 -0
  22. package/dist/args-CxsMr9Un.js +1 -0
  23. package/dist/{ask-zjX8kQz0.js → ask-Bou8zg-4.js} +2 -2
  24. package/dist/auth-CImjIcG5.js +1 -0
  25. package/dist/auth-CWzSsiSC.js +1 -0
  26. package/dist/build-CmtlB7pX.js +1 -0
  27. package/dist/builtin/coder/agent.json +19 -4
  28. package/dist/chat-Bbzlea60.js +1 -0
  29. package/dist/chat-Djps0Seg.js +13 -0
  30. package/dist/{chat-bridge-18koyS7c.js → chat-bridge-CvspGKBc.js} +1 -1
  31. package/dist/chunk-7WDLOIRP-B_IWkVtZ.js +1 -0
  32. package/dist/cli-ZUdhZnuW.js +9 -0
  33. package/dist/cli.js +1 -1
  34. package/dist/config-CF3_A3NX.js +3 -0
  35. package/dist/config-D2FxHWwi.js +14 -0
  36. package/dist/connection-BCRJHTgp.js +1 -0
  37. package/dist/connection-BtUZA2St.js +1 -0
  38. package/dist/core-DwsAMCnL.js +65 -0
  39. package/dist/create-Z0QxarzN.js +1 -0
  40. package/dist/credentials-Dt2uP3AQ.js +1 -0
  41. package/dist/dash/standalone/server/build-index.json +1 -1
  42. package/dist/dash/standalone/server/manifest.json +2761 -1589
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.b7c6e5f49704993d.js → index.8e150ef2bc6a5f4e.js} +68 -16
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{defaults.36612942475445c3.js → defaults.e6ce0944639198a2.js} +5 -1
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.e10960fe4c66b9d8.js → errors.5954bd9bd05e8230.js} +1 -0
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.58ba9a3d545808d7.js → log-view.871cbff2605b5cfd.js} +3 -2
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.35be1b07171553e7.js → load.4f942c7f68b2e273.js} +10 -5
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.72b248cd95237fb6.js → page.a2a16ead424b2185.js} +9 -6
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/page.90e312759b87cfa2.js +29 -0
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/loading.fce966caba9308e4.js → [org]/account/loading.787d09fb0b2b6b57.js} +3 -3
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/notify.fc4ba1b51ee26296.js → [org]/account/notify.5fc5e4346dcbfc32.js} +3 -3
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/page.6c8e958aeab2678e.js → [org]/account/page.1641da62504df30a.js} +27 -21
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/sign-out.5dac3bf780c74354.js +20 -0
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agent-menu.f1dacbfebc27a656.js +13 -0
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/(list)/agents-grid.0813591f217e9dbb.js → [org]/agents/(list)/agents-grid.5da78e9a741b028a.js} +23 -21
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.722bc3e4ec1f9fad.js +36 -0
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/loading.2815a010098aa676.js +18 -0
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/(list)/page.e0ad2df8b7c9a0af.js → [org]/agents/(list)/page.b01992337eeca2dc.js} +19 -20
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/layout.8aeb0fddffe22ad5.js +120 -0
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/loading.50692149df9abb28.js +5 -0
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/page.1ba2497fa9116713.js → [org]/agents/[slug]/(tabs)/page.e2e23101c05b9548.js} +40 -30
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.31d2c13229ae9222.js +29 -0
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.11c7b50d6119efe6.js +343 -0
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.92ac7aa258e706a4.js +574 -0
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/agent-settings-form.fc530622fa2292a0.js +405 -0
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/loading.bf17bd39f41db826.js +8 -0
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/page.6e95dfe07dfebf4b.js +46 -0
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/tasks/loading.f5c0c1c727da9f57.js → [org]/agents/[slug]/(tabs)/tasks/loading.7b17368ee81275ab.js} +2 -2
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/tasks/page.9324e2d909d55c6f.js → [org]/agents/[slug]/(tabs)/tasks/page.0bd3da9b3227b12f.js} +2 -2
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/loading.5e1f922969ab7016.js → [org]/agents/[slug]/(tabs)/usage/loading.d2cc33cf044a92a3.js} +16 -8
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/page.91c43fbc54e37646.js +209 -0
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/versions-list.e2427d618decaf7a.js → [org]/agents/[slug]/(tabs)/versions-list.23e4131cdf71daa5.js} +7 -7
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/loading.47c4c8f31b4f17cc.js +23 -0
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/edit/page.057807354396ea77.js → [org]/agents/[slug]/edit/page.cbd2bad8fede6fef.js} +20 -16
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-pills.d8e785c45f5410a6.js +100 -0
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-toggle.a6e27ac4171bfdb0.js +42 -0
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/hero.96bdca9762ff3e2e.js +94 -0
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/instructions.2f4229d42e7c99ef.js → [org]/agents/agent/instructions.ca0c09d4849bfc30.js} +4 -4
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/connect-repositories.329ac182c8242a67.js → [org]/agents/editor/connect-repositories.258f6c2c5f1b1b17.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/editor.d28d4afe11d7ff71.js → [org]/agents/editor/editor.20c42102ed262db7.js} +176 -137
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/import-picker.5e76549e7934b718.js → [org]/agents/editor/import-picker.b8093a7ca97656a5.js} +61 -71
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/loading.6012b36c10c68657.js +28 -0
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/new/page.c3396459a9ba5c13.js → [org]/agents/new/page.1ebdb0247922fc14.js} +13 -12
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{layout.53a8a3b0e4a7917f.js → [org]/layout.6d2242d49ae9dd35.js} +107 -133
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a56516bc0ba79187.js +144 -0
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/page.af19494c89ac62c0.js +84 -0
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/page.c720853404d94114.js +11 -0
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.9b96914a4fa4e2a9.js +637 -0
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials-list.dbaa8f3d82445b90.js +522 -0
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials.c4b01484d183549d.js +44 -0
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/engines-list.6c02a7e6d3c965cc.js → [org]/settings/[tab]/engines-list.5c03e83663a6a9b7.js} +13 -15
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/list.db2e212e3c8b5d32.js → [org]/settings/[tab]/list.df5ee5d74bec0f5b.js} +17 -43
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/loading.480b8f915bae18c1.js +6 -0
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/models-list.052f3ccc66833937.js → [org]/settings/[tab]/models-list.2835a48d1edeb6d1.js} +45 -41
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/page.1d53415d55e77fee.js +133 -0
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/runners-list.b5296983ba8007aa.js → [org]/settings/[tab]/runners-list.bf5746f48e3f78f5.js} +82 -133
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/secrets-list.b0dedc1567efc09f.js +137 -0
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/layout.567d27e39d42d719.js +49 -0
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/page.bac05d6e87953d0e.js +11 -0
  100. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/settings-head.d0f5ac9cbf170a77.js → [org]/settings/settings-head.5e2dff2550b3b73e.js} +8 -7
  101. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/tunnel-guide.f6685b045ccccdcd.js → [org]/settings/tunnel-guide.d6fae1c5d62f2c74.js} +5 -3
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/create-link.03989d2f7585a045.js +33 -0
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-dialog.4debc1a8c644df4b.js +32 -0
  104. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome.cbbc8cd1bbbee01b.js +71 -0
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/page.43c969f59a710781.js +45 -0
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/activity.3755ae6065c3fc28.js +318 -0
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/loading.d88d1139ea3ff52a.js → [org]/tasks/[id]/loading.9efbed6531879838.js} +8 -8
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/page.7b92dcd08095b934.js +24 -0
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.62422b873f98ee8e.js +149 -0
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/task-view.1c54f267d127f4e3.js → [org]/tasks/[id]/task-view.ae0e9c9dffe0ff9f.js} +107 -102
  111. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/composer-data.ff108c0ef82a4d7b.js +69 -0
  112. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/composer.f232cc1bf2d7b08a.js → [org]/tasks/composer.fdad306647cbaa59.js} +157 -160
  113. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/status.b90b76ffa62e957a.js → [org]/tasks/list/status.16190fdd5fd7daad.js} +2 -2
  114. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/task.465c2af602cce783.js → [org]/tasks/list/task.af5001e51d2f612b.js} +12 -1
  115. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/tasks-list.2a0e1eb5c396be42.js → [org]/tasks/list/tasks-list.952f37a9486aebe7.js} +119 -115
  116. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/tasks-section.2cbc1550d723661d.js → [org]/tasks/list/tasks-section.1247d4765d0e1bdc.js} +14 -13
  117. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/page.cf74c55e6528c7c9.js +16 -0
  118. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/custom-range.2d55812ec086b540.js +63 -0
  119. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/day-chart.5e716070459d785c.js → [org]/usage/day-chart.08d378cca93d3ab1.js} +4 -4
  120. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/loading.7aed78a276b08a4f.js +15 -0
  121. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/metric.ca0466e33225f184.js → [org]/usage/metric.ada350d2b7449b39.js} +1 -1
  122. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/page.c2b88b495780b12a.js → [org]/usage/page.fed9345ebac3e1b3.js} +20 -19
  123. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/range-bar.b1296c2378128472.js +57 -0
  124. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/stats.4793e81a32ea5e8f.js → [org]/usage/stats.de820599cf126120.js} +2 -2
  125. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/top-agents.b228062d012dc17b.js → [org]/usage/top-agents.e215d44e00192271.js} +21 -15
  126. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.c762b39aafb84a1f.js → layout.b7e3af142b17941b.js} +1 -1
  127. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.3ddaa1a675a04c5a.js → page.226544940a39fd3a.js} +11 -6
  128. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.b337ce209ff621e9.js → drawer.8287e5a02144e4f1.js} +12 -11
  129. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/foreign-link.86f0cc228353da6e.js +28 -0
  130. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{heads.fa2157b3b36647f3.js → heads.20414ddcb2d08bcd.js} +18 -14
  131. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.0c6ac62ff3ccf38a.js +40 -0
  132. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.a2336c95004aed4b.js → page-head.bd54e52ac4a7a89c.js} +16 -8
  133. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.77a2ec038d97b2b8.js → stream.1cc355a530dcc5e3.js} +2 -2
  134. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.10b46a8b8db1791f.js → task-toasts.63f673632770924d.js} +108 -24
  135. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.ea23f57dd753683f.js → theme-choices.5f59814a635caeec.js} +8 -17
  136. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/back-cookie.942c0904e944d8d6.js +12 -0
  137. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/back.5681714d0cf45454.js +42 -0
  138. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{current-link.844899810531977f.js → current-link.727b350a40b9ca13.js} +1 -1
  139. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/org.4d84ad0ac340fbe2.js +29 -0
  140. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.55d3e6c43ca5e1f9.js → side-toggle.249400957d6a7527.js} +9 -9
  141. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{to.0116bedfbe5f1133.js → to.a2c840c09bd4bf4a.js} +2 -0
  142. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.0851f234f300c694.js +83 -0
  143. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/button.983daea9e687fc5d.js +91 -0
  144. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.b0873d38765c9d20.js → card.c08471eaa0bc1cec.js} +41 -2
  145. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.dab7f208cbbe6a33.js → collapse.762eba56417214ca.js} +5 -3
  146. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.ca0efacf2ce15578.js → combo.efb84f0cca771948.js} +13 -20
  147. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.53edc755945b0563.js +27 -0
  148. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/copy.0b23d7dc05757df5.js +31 -0
  149. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/copy.fb3240de6c9479cd.css.pnext-asset.js +0 -0
  150. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{field.7b2a2075ee8c6e29.js → field.75588c33b72824a7.js} +0 -7
  151. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.f19b6d5ebd6a3c2b.js → filter.1983b85dd0679af6.js} +34 -53
  152. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.b53f21acc3e2cfef.css.pnext-asset.js +0 -0
  153. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.1777c0350d5d215e.js → icons.a34176f37808cd66.js} +4 -0
  154. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu-items.a8e580a0c90631ff.js +145 -0
  155. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.25b184f68cba7b46.css.pnext-asset.js +0 -0
  156. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.a41edd5cde1c90cf.js +94 -0
  157. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.9db07d368dcf5981.css.pnext-asset.js +0 -0
  158. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.b5f74ebf59590fa6.js +66 -0
  159. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/notice.f395f231cbb96445.js +13 -0
  160. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.5ac52bb38fb64ae5.js → segmented.a08dc08338d080e9.js} +13 -2
  161. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.f036fdc3fce02b92.js → select.36c6f21ce6aa720f.js} +47 -41
  162. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.419208bb34700af2.css.pnext-asset.js +0 -0
  163. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.d3d29747fe976f88.js → sentinel.17cffebfc3103b9f.js} +1 -1
  164. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.1e3ec9bd6008d811.css.pnext-asset.js +0 -0
  165. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.d00fc01ad9c1b91e.js → tabs.66b2e54963f6901b.js} +3 -2
  166. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.9377d261fe9e91df.js → tail.a8a951c757376590.js} +5 -4
  167. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.19e1ce5224a23acf.css.pnext-asset.js +0 -0
  168. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.b2c59c5fc015d08d.js → toolbar.9621ef221a896a8e.js} +11 -6
  169. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/action.1a6356d5b722cafb.js +34 -0
  170. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.d25e6dcc6704eb60.js +59 -0
  171. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{paged.7e5713a82abf0211.js → paged.18f5872fc5aebe96.js} +1 -0
  172. package/dist/dash/standalone/static/assets/chunks/action-977f2355e308d7d0.js +1 -0
  173. package/dist/dash/standalone/static/assets/chunks/agent-pills-e75e6ac80d515ffc.js +1 -0
  174. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-09f23ed893d441c7.js +1 -0
  175. package/dist/dash/standalone/static/assets/chunks/agent-toggle-b2f2c22e63dedc1f.js +1 -0
  176. package/dist/dash/standalone/static/assets/chunks/agents-grid-bb4f3e4d38b2f459.js +1 -0
  177. package/dist/dash/standalone/static/assets/chunks/back-1d1b062f0e1b29b7.js +1 -0
  178. package/dist/dash/standalone/static/assets/chunks/combo-126d5709a0b3a5bd.js +1 -0
  179. package/dist/dash/standalone/static/assets/chunks/composer-6bf94d1087a6e6a6.js +1 -0
  180. package/dist/dash/standalone/static/assets/chunks/composer-9c1fe67a0de73997.js +1 -0
  181. package/dist/dash/standalone/static/assets/chunks/confirm-1cb4d8df3974f34a.js +1 -0
  182. package/dist/dash/standalone/static/assets/chunks/connect-apps-32c169b6e00711ff.js +1 -0
  183. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-8864a63f83ffd411.js → connect-repositories-995d55b3f166337d.js} +1 -1
  184. package/dist/dash/standalone/static/assets/chunks/connections-list-a102e909edff14d4.js +1 -0
  185. package/dist/dash/standalone/static/assets/chunks/copy-c938369a1bfe75fd.js +1 -0
  186. package/dist/dash/standalone/static/assets/chunks/create-link-a147953f343355ec.js +1 -0
  187. package/dist/dash/standalone/static/assets/chunks/credentials-list-31e0fbc1ef0d003e.js +1 -0
  188. package/dist/dash/standalone/static/assets/chunks/custom-range-4eeb710748887f3a.js +1 -0
  189. package/dist/dash/standalone/static/assets/chunks/defaults-dcc0eccad4e8585b.js +1 -0
  190. package/dist/dash/standalone/static/assets/chunks/editor-79560c0f91cfc2f6.js +7 -0
  191. package/dist/dash/standalone/static/assets/chunks/engines-list-d22f50040e6842ae.js +1 -0
  192. package/dist/dash/standalone/static/assets/chunks/field-657227821326b5b3.js +1 -0
  193. package/dist/dash/standalone/static/assets/chunks/instructions-a08bb02650dedb8d.js +2 -0
  194. package/dist/dash/standalone/static/assets/chunks/instructions-a1f10bc3c2866e3f.js +1 -0
  195. package/dist/dash/standalone/static/assets/chunks/list-a0cc9bdb05fc71d4.js +1 -0
  196. package/dist/dash/standalone/static/assets/chunks/model-options-3a57918eaa4a2a82.js +1 -0
  197. package/dist/dash/standalone/static/assets/chunks/models-list-63ab774de3bf3788.js +1 -0
  198. package/dist/dash/standalone/static/assets/chunks/notice-cd32ca98bbc10844.js +1 -0
  199. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-4ab62d613bee243a.js +1 -0
  200. package/dist/dash/standalone/static/assets/chunks/platform-actions-40824017c7b5b910.js +1 -0
  201. package/dist/dash/standalone/static/assets/chunks/platform-actions-a515643f341df568.js +1 -0
  202. package/dist/dash/standalone/static/assets/chunks/runners-list-a9f4f71695f7b376.js +1 -0
  203. package/dist/dash/standalone/static/assets/chunks/{runtime-37175329f2865f15-1.js → runtime-e8b9eb1e537215ed-1.js} +1 -1
  204. package/dist/dash/standalone/static/assets/chunks/secrets-list-34e09c332363564c.js +1 -0
  205. package/dist/dash/standalone/static/assets/chunks/segmented-24da438244eedc8f.js +1 -0
  206. package/dist/dash/standalone/static/assets/chunks/shared-init-02aaa49ed4606a76.js +2 -0
  207. package/dist/dash/standalone/static/assets/chunks/shared-init-03e620f936463465.js +5 -0
  208. package/dist/dash/standalone/static/assets/chunks/shared-init-6f8c76316a2cd9da.js +1 -0
  209. package/dist/dash/standalone/static/assets/chunks/shared-init-e8b9eb1e537215ed-2.js +1 -0
  210. package/dist/dash/standalone/static/assets/chunks/side-toggle-8563e6056e862225.js +1 -0
  211. package/dist/dash/standalone/static/assets/chunks/tail-ebdefca4d5c23266.js +1 -0
  212. package/dist/dash/standalone/static/assets/chunks/task-6ae2bb4f1b384140.js +1 -0
  213. package/dist/dash/standalone/static/assets/chunks/task-actions-462507b76bda4657.js +1 -0
  214. package/dist/dash/standalone/static/assets/chunks/task-view-341d79730a341007.js +5 -0
  215. package/dist/dash/standalone/static/assets/chunks/tasks-list-6037ecd098332564.js +1 -0
  216. package/dist/dash/standalone/static/assets/chunks/versions-list-31f31eb1923a0ded.js +1 -0
  217. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-37175329f2865f15-0.js → wular-pnext-e8b9eb1e537215ed-0.js} +1 -1
  218. package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +1 -0
  219. package/dist/dash/standalone/static/assets/create-param-id-8fa3e9101430f26a.css +1 -0
  220. package/dist/dash/standalone/static/assets/dash-param-org-67f7811b1343c064.css +1 -0
  221. package/dist/dash/standalone/static/assets/dash-param-org-account-3f646d473e3bd795.css +1 -0
  222. package/dist/dash/standalone/static/assets/dash-param-org-agents-0ddb989cab5b0fbf.css +1 -0
  223. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-504d1a906feabb6f.css +1 -0
  224. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-7cd987a1a42a3b44.css +1 -0
  225. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-fcdddf2dc26453ce.css +1 -0
  226. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-26b84d659dbca7f4.css +1 -0
  227. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-97ff652f9fe5979d.css +1 -0
  228. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-d47377c0f877c5c0.css +1 -0
  229. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-6a09580f11d669b7.css +1 -0
  230. package/dist/dash/standalone/static/assets/dash-param-org-operator-56742192a9aafc19.css +1 -0
  231. package/dist/dash/standalone/static/assets/dash-param-org-settings-a851a659784d94b5.css +1 -0
  232. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-06283106fffbd5c6.css +1 -0
  233. package/dist/dash/standalone/static/assets/dash-param-org-setup-1b708aa5bb2f83ef.css +1 -0
  234. package/dist/dash/standalone/static/assets/dash-param-org-tasks-9cb2bb12389c9a04.css +1 -0
  235. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-a87fa0eaa02e4008.css +1 -0
  236. package/dist/dash/standalone/static/assets/dash-param-org-usage-786c91a7640542e6.css +1 -0
  237. package/dist/dash/standalone/static/assets/global-eee296f070a9bb95.css +1 -0
  238. package/dist/dash/standalone/static/assets/login-9760b85feae40270.css +1 -0
  239. package/dist/dash/standalone/static/assets/pnext-client-17c3ee29b7487596.js +1 -0
  240. package/dist/dash/standalone/static/assets/pnext-client-1eaa8deb5395345f.js +1 -0
  241. package/dist/dash/standalone/static/assets/pnext-client-29e2b964470f6587.js +1 -0
  242. package/dist/dash/standalone/static/assets/pnext-client-2a1e756934e7be1a.js +1 -0
  243. package/dist/dash/standalone/static/assets/pnext-client-31e64d49f6132b26.js +1 -0
  244. package/dist/dash/standalone/static/assets/pnext-client-3d13328ad0b1148b.js +1 -0
  245. package/dist/dash/standalone/static/assets/pnext-client-4ac29d3e9f1a91be.js +1 -0
  246. package/dist/dash/standalone/static/assets/pnext-client-7d479b3375e3c07e.js +1 -0
  247. package/dist/dash/standalone/static/assets/pnext-client-9eac45990b233b55.js +1 -0
  248. package/dist/dash/standalone/static/assets/pnext-client-a8c9c169322e7e3d.js +1 -0
  249. package/dist/dash/standalone/static/assets/pnext-client-b622d087a38b1b77.js +1 -0
  250. package/dist/dash/standalone/static/assets/pnext-client-b7fea94dfda72453.js +1 -0
  251. package/dist/dash/standalone/static/assets/pnext-client-cc8e5e6c95040688.js +1 -0
  252. package/dist/dash/standalone/static/assets/pnext-client-d16e2a42b0a274c0.js +1 -0
  253. package/dist/dash/standalone/static/assets/pnext-client-dbccfef0cbb6b18d.js +1 -0
  254. package/dist/dash/standalone/static/assets/pnext-client-e74706ae238018e5.js +1 -0
  255. package/dist/dash/standalone/static/assets/pnext-client-ebe7c9692619ea00.js +1 -0
  256. package/dist/dash/standalone/static/assets/pnext-client-ef8d348060493085.js +1 -0
  257. package/dist/dash/standalone/static/assets/pnext-client-fcdfa8b2c8824449.js +1 -0
  258. package/dist/dash/standalone/static/assets/pnext-client-ff36e2f8a0522759.js +1 -0
  259. package/dist/{default-B3ValFJp.js → default-DcYwZCnl.js} +1 -1
  260. package/dist/default-EXRzdZUY.js +1 -0
  261. package/dist/{delete-6T7ujDtY.js → delete-Bmn2_TiV.js} +2 -2
  262. package/dist/{delete-k7pxp5B6.js → delete-DS6P_fun.js} +2 -2
  263. package/dist/{disable-BJXxuJ9s.js → disable-CnCxTC3X.js} +1 -1
  264. package/dist/discover-CBP4Uw0N.js +1 -0
  265. package/dist/{discover-CRUU1hdS.js → discover-pKrMDvpW.js} +2 -2
  266. package/dist/dispatch-D3Dqxijf.js +8 -0
  267. package/dist/dist-BTornX7Y.js +101 -0
  268. package/dist/dist-C3wD7GfG.js +4 -0
  269. package/dist/dist-DkATuPBB.js +6 -0
  270. package/dist/dist-node-Bv1kCqyi.js +20 -0
  271. package/dist/docs-3SW1O9iS.js +2 -0
  272. package/dist/{docs-PmFB2aMA.js → docs-sFUXzJbk.js} +1 -1
  273. package/dist/{enable-DZ7rw7iL.js → enable-BWvDv7dP.js} +1 -1
  274. package/dist/env-C_DoQYl5.js +1 -0
  275. package/dist/exec-BsXFIdTl.js +11 -0
  276. package/dist/executor-5j-Ewzzb.js +11 -0
  277. package/dist/flow/builtin/review.d.ts +1 -156
  278. package/dist/flow/builtin/review.js +7 -7
  279. package/dist/flow/index.d.ts +1 -1
  280. package/dist/flow/index.js +1 -1
  281. package/dist/{flow-D8T71fyu.js → flow-CuUq-MDm.js} +1 -1
  282. package/dist/http-Cg_wYcZT.js +1 -0
  283. package/dist/{index-Xe8n_t2Z.d.ts → index-vd37q3fn.d.ts} +103 -1
  284. package/dist/{init-BfXdsU46.js → init-Dgj6V-aS.js} +1 -1
  285. package/dist/integrations-D3OgJk6Y.js +1 -0
  286. package/dist/integrations-DsFX2KCq.js +1 -0
  287. package/dist/lib/broker.js +2 -2
  288. package/dist/list-B6lwbCEp.js +1 -0
  289. package/dist/{list-NtMN55g0.js → list-BDpYPbJF.js} +1 -1
  290. package/dist/{list-F-PN6ieH.js → list-BE3xmX_4.js} +1 -1
  291. package/dist/{list-erdHI-w9.js → list-BVIAyAAE.js} +2 -2
  292. package/dist/{list-DedQA2pn.js → list-Bggy3HZY.js} +2 -2
  293. package/dist/list-CLtqMYPK.js +2 -0
  294. package/dist/{list-yoGxyIlx.js → list-CaFQOnfI.js} +1 -1
  295. package/dist/{list-CO8x2rgz.js → list-DkO78ZEF.js} +1 -1
  296. package/dist/load-CRmQB1LD.js +2 -0
  297. package/dist/local-ccKBhpQc.js +1 -0
  298. package/dist/log-view-DB4nXHXO.js +3 -0
  299. package/dist/{login-CJjcqCg4.js → login-BCdXHQ7z.js} +1 -1
  300. package/dist/login-CpHx_RCq.js +1 -0
  301. package/dist/{logout-B7mHWeWr.js → logout-zSQBDPCK.js} +1 -1
  302. package/dist/maintenance-DuIspk-y.js +1 -0
  303. package/dist/match-Kt3vFTl1.js +1 -0
  304. package/dist/mcp-O8VTfzdL.js +12 -0
  305. package/dist/mcp-YhyTUMIM.js +11 -0
  306. package/dist/{model-Cti-OOdV.js → model-Bzpwl_95.js} +1 -1
  307. package/dist/models-CdvmuaLv.js +1 -0
  308. package/dist/prompt-C--TI1qn.js +8 -0
  309. package/dist/push-vt81gcxD.js +1 -0
  310. package/dist/reconnect-BfghDbl1.js +1 -0
  311. package/dist/refresh-yXJ13FAf.js +1 -0
  312. package/dist/remote-oQs6My_3.js +1 -0
  313. package/dist/remove-5iAM2aTO.js +1 -0
  314. package/dist/remove-BZCA-gdU.js +1 -0
  315. package/dist/remove-BcewhH1U.js +1 -0
  316. package/dist/remove-BwhcR6ig.js +1 -0
  317. package/dist/rename-lyssPQfD.js +1 -0
  318. package/dist/result-Bg557zR6.js +5 -0
  319. package/dist/{result-DtVw6XYk.js → result-jeiRJTzA.js} +7 -7
  320. package/dist/{resume-D7XcEIbu.js → resume-fnx4FUQF.js} +2 -2
  321. package/dist/{review-DZGyNO5h.js → review-CAHDqPq8.js} +3 -3
  322. package/dist/review-CJS59vO-.d.ts +157 -0
  323. package/dist/{rotate-key-pIfcaeCd.js → rotate-key-Dpx_WmuU.js} +1 -1
  324. package/dist/{run-Co36tfya.js → run-CLy9a2MO.js} +1 -1
  325. package/dist/{run-BlXCPJzq.js → run-DU4G8gNw.js} +2 -2
  326. package/dist/{run-B-2NnW4r.js → run-D_pl9GF_.js} +2 -2
  327. package/dist/runner-DME7ohjt.js +1 -0
  328. package/dist/runner-zT5Oyrfr.js +1 -0
  329. package/dist/runners-CNhxPjg8.js +36 -0
  330. package/dist/schema-BSlHRFSP.js +8 -0
  331. package/dist/schema.config.d.ts +12 -0
  332. package/dist/schema.config.js +1 -0
  333. package/dist/schema.d.ts +2 -0
  334. package/dist/schema.js +1 -0
  335. package/dist/sdk-CWerLcF5.d.ts +12371 -0
  336. package/dist/sdk.d.ts +5 -1549
  337. package/dist/sdk.js +1 -1
  338. package/dist/serve-FG2LgXxM.js +9 -0
  339. package/dist/serve-UE1fcf4t.js +1 -0
  340. package/dist/serve-w-9qRCP1.js +2 -0
  341. package/dist/serve-wQgyxwdY.js +1 -0
  342. package/dist/server-Bw_YmgCf.js +1 -0
  343. package/dist/{setup-host-ON6zJGqS.js → setup-host-BsbDs4lJ.js} +1 -1
  344. package/dist/show-Cajmf606.js +1 -0
  345. package/dist/{show-jdaVKG0f.js → show-D0qTuXRU.js} +1 -1
  346. package/dist/slack-C_RlVDz7.js +3 -0
  347. package/dist/{status-BO1jm6NW.js → status-PO1YXbt4.js} +1 -1
  348. package/dist/steer-i6w87g_t.js +4 -0
  349. package/dist/{stop-BS2MB4CQ.js → stop-CJ0PHvKp.js} +1 -1
  350. package/dist/{stop-B-dQ2-Gm.js → stop-CkvoZEAH.js} +2 -2
  351. package/dist/task-DTN_fIGC.js +1 -0
  352. package/dist/task-DXHKWB_J.js +5 -0
  353. package/dist/task-IoBYe7ok.js +1 -0
  354. package/dist/test-BTkKFbnx.js +1 -0
  355. package/dist/tools-B-2oi2wI.js +1 -0
  356. package/dist/types-B42Oh0zF.js +1 -0
  357. package/dist/types-C1tWi5lP.d.ts +1710 -0
  358. package/dist/{unalias-DpkgCs_c.js → unalias-Cqx7i_L0.js} +1 -1
  359. package/dist/{update-ChIiUO1Z.js → update-MNyeVXyy.js} +1 -1
  360. package/dist/{upgrade-Cq24oWFZ.js → upgrade-CGSkY0FY.js} +2 -2
  361. package/dist/{usage-CazoINYM.js → usage-sx-FR0bz.js} +1 -1
  362. package/dist/views-BhsnL0nr.js +5 -0
  363. package/dist/watch-IL2eEgwD.js +9 -0
  364. package/dist/{watch-B3gAEK1N.js → watch-qfr7aSfo.js} +2 -2
  365. package/dist/wire-B5rc5Av6.js +1 -0
  366. package/dist/worker-BBZ36xL0.js +1 -0
  367. package/dist/worker-D2csFtoH.js +9 -0
  368. package/dist/{workflow-BOPHazbM.js → workflow-BKxG9OUk.js} +1 -1
  369. package/dist/zod-BoqHoRCH.js +1 -0
  370. package/dist/zod.d.ts +3 -0
  371. package/dist/zod.js +1 -0
  372. package/docs/agents/coder.md +9 -2
  373. package/docs/agents/index.md +28 -18
  374. package/docs/cli.md +24 -13
  375. package/docs/config.md +1 -1
  376. package/docs/dash.md +3 -3
  377. package/docs/flows.md +3 -3
  378. package/docs/mcp.md +8 -16
  379. package/docs/sdk.md +4 -4
  380. package/docs/self-host.md +29 -18
  381. package/package.json +22 -14
  382. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  383. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  384. package/dist/actions-CmfXOVXQ.js +0 -20
  385. package/dist/adapter-7SEiVsmp.js +0 -1
  386. package/dist/adapter-BLEfUqoQ.js +0 -1
  387. package/dist/adapter-DaiJMOYo.js +0 -1
  388. package/dist/adapter-H4GlcKQz.js +0 -1
  389. package/dist/adapter-PeKziOUg.js +0 -1
  390. package/dist/add-8Z5bNm74.js +0 -1
  391. package/dist/add-DiwLZmjp.js +0 -1
  392. package/dist/add-json-wOUPHwUD.js +0 -1
  393. package/dist/agent-B69nSuTY.js +0 -1
  394. package/dist/agent-D0pQ_ewc.js +0 -3
  395. package/dist/approvals-Gv7x14u3.js +0 -2
  396. package/dist/apps-CaHoLNE7.js +0 -1
  397. package/dist/archive-sweep-jE6TPk2F.js +0 -1
  398. package/dist/args-DEMOfLz2.js +0 -1
  399. package/dist/auth-DSE3SIuI.js +0 -1
  400. package/dist/auth-DsxfkPsx.js +0 -1
  401. package/dist/chat-3Znsevah.js +0 -1
  402. package/dist/chat-cknlIhVh.js +0 -13
  403. package/dist/cli-DtTdpTy3.js +0 -9
  404. package/dist/cli.d.ts +0 -71
  405. package/dist/client-31YzOj-i.js +0 -1
  406. package/dist/config-BAkyRxp-.js +0 -3
  407. package/dist/create-BF6VHUst.js +0 -1
  408. package/dist/credentials-6PHXj8k7.js +0 -1
  409. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/account/sign-out.5d3bca9efecd6f70.js +0 -13
  410. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agent-menu.6d3339a02f02460d.js +0 -12
  411. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/connect-apps.8d218b96f9939819.js +0 -42
  412. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/loading.02dd47fe59680cc8.js +0 -18
  413. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.f2464375e393c96e.js +0 -105
  414. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.b27b95d8ccf0581e.js +0 -5
  415. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.572d3404b984b163.js +0 -10
  416. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.9b30598fa84dd0df.js +0 -170
  417. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/platform-actions.bc640252ecf046c6.js +0 -70
  418. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/agent-settings-form.d3e6dc6bcfcfc928.js +0 -268
  419. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.a55efbdbdd995213.js +0 -8
  420. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.44eabcf6cf9fbfbd.js +0 -35
  421. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.30a31e2464417a08.js +0 -160
  422. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/loading.21eb60e655c125c7.js +0 -29
  423. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/agent-pills.6a0eea1ec99dffd7.js +0 -67
  424. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/hero.9af8c50df6487ca5.js +0 -62
  425. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/loading.02e30b3a7f1ab9f1.js +0 -28
  426. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/page.a4be8e0779589f4e.js +0 -10
  427. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials-list.c25242f7f4ef6399.js +0 -538
  428. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.a62d1642ca580836.js +0 -34
  429. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/loading.f4024074bf71b11b.js +0 -6
  430. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/mcp-list.0ce34ed7d7e756a7.js +0 -249
  431. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.3458e42728e30f54.js +0 -86
  432. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/layout.85946d20d7e48767.js +0 -39
  433. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/page.9d2087e0e33d57f8.js +0 -6
  434. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/activity.4aeb0734da711e10.js +0 -177
  435. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.e5b562dd47e19043.js +0 -24
  436. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/task-actions.ee523c68a38a7975.js +0 -184
  437. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer-data.5f12d8ef1db38026.js +0 -63
  438. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/page.107706655a927e59.js +0 -16
  439. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/custom-range.d85de32fb6ec4fe6.js +0 -64
  440. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/loading.8aabf89dabaf1c3f.js +0 -15
  441. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/range-bar.76e3de97583e6eab.js +0 -60
  442. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/loading-card.bf58af8330a78704.js +0 -64
  443. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.5abdef72e9189fdc.js +0 -31
  444. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.1328a7ede6c27bb9.js +0 -53
  445. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.a4dd9fb9f566689a.js +0 -103
  446. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.a8205c524e63d4a9.js +0 -26
  447. package/dist/dash/standalone/static/assets/chunks/agent-pills-c5d56f60f9e17aea.js +0 -1
  448. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-738f9ac4b9fb67ef.js +0 -1
  449. package/dist/dash/standalone/static/assets/chunks/agents-grid-37e2e7f7a37b7a35.js +0 -1
  450. package/dist/dash/standalone/static/assets/chunks/badge-9984d2fd0e7f995d.js +0 -1
  451. package/dist/dash/standalone/static/assets/chunks/card-818c7a0d580e2e0d.js +0 -1
  452. package/dist/dash/standalone/static/assets/chunks/combo-8aa7545cfda42090.js +0 -1
  453. package/dist/dash/standalone/static/assets/chunks/composer-a969037cf22215c7.js +0 -1
  454. package/dist/dash/standalone/static/assets/chunks/composer-data-6f7608fed13f3dd7.js +0 -1
  455. package/dist/dash/standalone/static/assets/chunks/composer-f433a2e64648633a.js +0 -1
  456. package/dist/dash/standalone/static/assets/chunks/confirm-be929e2de15876a6.js +0 -1
  457. package/dist/dash/standalone/static/assets/chunks/connect-apps-97c10fa6e35ccae6.js +0 -1
  458. package/dist/dash/standalone/static/assets/chunks/credentials-list-08cd5dfe29f42bf2.js +0 -2
  459. package/dist/dash/standalone/static/assets/chunks/custom-range-63f577240e5d5d85.js +0 -1
  460. package/dist/dash/standalone/static/assets/chunks/editor-9752c8ab26ebd328.js +0 -7
  461. package/dist/dash/standalone/static/assets/chunks/engines-list-dab79c4e3e22eefe.js +0 -1
  462. package/dist/dash/standalone/static/assets/chunks/field-43fea54c1c287e30.js +0 -1
  463. package/dist/dash/standalone/static/assets/chunks/filter-02bba5796258deb0.js +0 -1
  464. package/dist/dash/standalone/static/assets/chunks/heads-8f40675f508ebe33.js +0 -1
  465. package/dist/dash/standalone/static/assets/chunks/instructions-0b968d5d0a58c716.js +0 -2
  466. package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +0 -1
  467. package/dist/dash/standalone/static/assets/chunks/list-591905f0aaa57629.js +0 -1
  468. package/dist/dash/standalone/static/assets/chunks/mcp-list-bae4d2186f67849e.js +0 -1
  469. package/dist/dash/standalone/static/assets/chunks/model-options-15c53331a2f28a4f.js +0 -1
  470. package/dist/dash/standalone/static/assets/chunks/models-list-c758db0c40f5173f.js +0 -1
  471. package/dist/dash/standalone/static/assets/chunks/paged-3ddb6077bef42752.js +0 -1
  472. package/dist/dash/standalone/static/assets/chunks/platform-actions-4454493d02a1c172.js +0 -1
  473. package/dist/dash/standalone/static/assets/chunks/runners-list-9d27c76eed33cb05.js +0 -1
  474. package/dist/dash/standalone/static/assets/chunks/segmented-bf5a4c06605249e0.js +0 -1
  475. package/dist/dash/standalone/static/assets/chunks/select-adccc9ac86ac833f.js +0 -1
  476. package/dist/dash/standalone/static/assets/chunks/sentinel-b4c91a38a5d79219.js +0 -1
  477. package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +0 -5
  478. package/dist/dash/standalone/static/assets/chunks/shared-init-37175329f2865f15-2.js +0 -1
  479. package/dist/dash/standalone/static/assets/chunks/shared-init-3a95c0e0cc27e0cb.js +0 -2
  480. package/dist/dash/standalone/static/assets/chunks/shared-init-8f2ac936c95a7f7b.js +0 -1
  481. package/dist/dash/standalone/static/assets/chunks/tail-74153aeac1f0baec.js +0 -1
  482. package/dist/dash/standalone/static/assets/chunks/task-actions-189775b88ef7ada4.js +0 -1
  483. package/dist/dash/standalone/static/assets/chunks/task-ddfddeaf07fb684c.js +0 -1
  484. package/dist/dash/standalone/static/assets/chunks/task-view-0b3d7ea9cc41888b.js +0 -5
  485. package/dist/dash/standalone/static/assets/chunks/tasks-list-1b0195e3fd68714f.js +0 -1
  486. package/dist/dash/standalone/static/assets/chunks/toolbar-035d33d1e7ad11bf.js +0 -1
  487. package/dist/dash/standalone/static/assets/chunks/versions-list-875a9a0ebb3f7d08.js +0 -1
  488. package/dist/dash/standalone/static/assets/connect-382b1729a7ae7808.css +0 -1
  489. package/dist/dash/standalone/static/assets/dash-49ca85b59ac65c20.css +0 -1
  490. package/dist/dash/standalone/static/assets/dash-account-edc56e85dbaaabe0.css +0 -1
  491. package/dist/dash/standalone/static/assets/dash-agents-edba57b67e4005d0.css +0 -1
  492. package/dist/dash/standalone/static/assets/dash-agents-new-fe22253fbada2fbf.css +0 -1
  493. package/dist/dash/standalone/static/assets/dash-agents-param-slug-adf52e9dacb2d825.css +0 -1
  494. package/dist/dash/standalone/static/assets/dash-agents-param-slug-edit-a2937a347689ef29.css +0 -1
  495. package/dist/dash/standalone/static/assets/dash-agents-param-slug-platforms-265ba13db32a460d.css +0 -1
  496. package/dist/dash/standalone/static/assets/dash-agents-param-slug-settings-8afc52eb0372bc4b.css +0 -1
  497. package/dist/dash/standalone/static/assets/dash-agents-param-slug-tasks-6193e646be68dbd2.css +0 -1
  498. package/dist/dash/standalone/static/assets/dash-agents-param-slug-usage-ceadb3a1c911c402.css +0 -1
  499. package/dist/dash/standalone/static/assets/dash-settings-cf1997cd7f72e518.css +0 -1
  500. package/dist/dash/standalone/static/assets/dash-settings-param-tab-b44dac8e79a560e6.css +0 -1
  501. package/dist/dash/standalone/static/assets/dash-tasks-916c7100a8058aa3.css +0 -1
  502. package/dist/dash/standalone/static/assets/dash-tasks-param-id-24265771fd1e3f78.css +0 -1
  503. package/dist/dash/standalone/static/assets/dash-usage-40940b289f85e0b6.css +0 -1
  504. package/dist/dash/standalone/static/assets/global-d2adbf01910d9df5.css +0 -1
  505. package/dist/dash/standalone/static/assets/login-c129b1ce237be260.css +0 -1
  506. package/dist/dash/standalone/static/assets/pnext-client-105d2264e4064f32.js +0 -1
  507. package/dist/dash/standalone/static/assets/pnext-client-140064bc22718639.js +0 -1
  508. package/dist/dash/standalone/static/assets/pnext-client-2825c0ea7bfa1240.js +0 -1
  509. package/dist/dash/standalone/static/assets/pnext-client-39ac7ac446e20cfb.js +0 -1
  510. package/dist/dash/standalone/static/assets/pnext-client-43cbb846cb4c167f.js +0 -1
  511. package/dist/dash/standalone/static/assets/pnext-client-7d88eb36e6e3c301.js +0 -1
  512. package/dist/dash/standalone/static/assets/pnext-client-9172198a969bd1e1.js +0 -1
  513. package/dist/dash/standalone/static/assets/pnext-client-9c9c88e5c2fe31bc.js +0 -1
  514. package/dist/dash/standalone/static/assets/pnext-client-a629391487c4b8e3.js +0 -1
  515. package/dist/dash/standalone/static/assets/pnext-client-aace561f07b06542.js +0 -1
  516. package/dist/dash/standalone/static/assets/pnext-client-b7d6355b1323fff1.js +0 -1
  517. package/dist/dash/standalone/static/assets/pnext-client-c4be2f807668e35c.js +0 -1
  518. package/dist/dash/standalone/static/assets/pnext-client-ce83b85e9562a049.js +0 -1
  519. package/dist/dash/standalone/static/assets/pnext-client-dd2046446844a78b.js +0 -1
  520. package/dist/dash/standalone/static/assets/pnext-client-e62f31aae8ce2c3b.js +0 -1
  521. package/dist/dash/standalone/static/assets/pnext-client-ffab25199333314f.js +0 -1
  522. package/dist/default-DgP-hBmn.js +0 -1
  523. package/dist/discover-CaAtyC0h.js +0 -1
  524. package/dist/dispatch-YW1aqjEg.js +0 -14
  525. package/dist/docs-Byrpar10.js +0 -2
  526. package/dist/env-LsVTi18f.js +0 -1
  527. package/dist/exec-DgI3boHa.js +0 -11
  528. package/dist/executor-HWnIIYUL.js +0 -10
  529. package/dist/github-actions-CvLya8ve.js +0 -24
  530. package/dist/http-DG54kyx4.js +0 -1
  531. package/dist/integrations-B2CavXR1.js +0 -5
  532. package/dist/integrations-DNz6PHFV.js +0 -1
  533. package/dist/lib/broker.d.ts +0 -1
  534. package/dist/list-CJhHYVb2.js +0 -2
  535. package/dist/list-Cr4c8mT6.js +0 -1
  536. package/dist/load-DDZfByUe.js +0 -2
  537. package/dist/local-B0GiaLV0.js +0 -1
  538. package/dist/log-view-DeJstSkw.js +0 -3
  539. package/dist/login-p2VknR9f.js +0 -1
  540. package/dist/maintenance-C02_cNLp.js +0 -1
  541. package/dist/match-DMI54zg4.js +0 -1
  542. package/dist/mcp--MIvjMWZ.js +0 -1
  543. package/dist/mcp-DgMoPoUo.js +0 -1
  544. package/dist/migrate-CSwkAInI.js +0 -2
  545. package/dist/migrate-rwTojdkz.js +0 -1
  546. package/dist/models-DGPrMV51.js +0 -1
  547. package/dist/prompt-K7-bKcTC.js +0 -7
  548. package/dist/push-D3vxfhc_.js +0 -1
  549. package/dist/queue-EvplGOuk.js +0 -117
  550. package/dist/refresh-BFuahSFK.js +0 -1
  551. package/dist/remote-AcWWfKVS.js +0 -1
  552. package/dist/remove-7y1b_gHT.js +0 -1
  553. package/dist/remove-BRj1kPYm.js +0 -1
  554. package/dist/remove-C57QDigT.js +0 -1
  555. package/dist/remove-UVD3W2OE.js +0 -1
  556. package/dist/rename-CCv5pca3.js +0 -1
  557. package/dist/result-BWrYnt0u.js +0 -5
  558. package/dist/rolldown-runtime-DT7IzrpZ.js +0 -1
  559. package/dist/runner-DRgQvMiZ.js +0 -1
  560. package/dist/runner-c-2w6Eoj.js +0 -1
  561. package/dist/schema-DoNO0dPh.js +0 -1
  562. package/dist/serve-CcqX_2qk.js +0 -8
  563. package/dist/serve-Ci0AFWtY.js +0 -2
  564. package/dist/serve-DeX0lpXj.js +0 -12
  565. package/dist/serve-SWjydoBC.js +0 -1
  566. package/dist/serve-xMihn4g-.js +0 -1
  567. package/dist/server-CWbtW4W_.js +0 -1
  568. package/dist/shared-D64pQ0XU.js +0 -1
  569. package/dist/show-U0XPh927.js +0 -1
  570. package/dist/steer-DwSAYYqb.js +0 -4
  571. package/dist/store-B0RLMUR9.js +0 -42
  572. package/dist/store-Cxc2GYyj.js +0 -19
  573. package/dist/task-DEp3GHwH.js +0 -1
  574. package/dist/task-DhZ5vhyY.js +0 -5
  575. package/dist/task-gKnlLOGe.js +0 -1
  576. package/dist/test-TvJAUf4S.js +0 -1
  577. package/dist/tools-BQQfMQB9.js +0 -1
  578. package/dist/types-D0q15RJa.js +0 -1
  579. package/dist/types-DMGBYB_K.d.ts +0 -391
  580. package/dist/usage-Bw7fQeFC.js +0 -1
  581. package/dist/watch-DJATTJw_.js +0 -8
  582. package/dist/wire-DxxfWapP.js +0 -1
  583. package/dist/worker-C3dzIzd3.js +0 -1
  584. package/dist/worker-C4Lo6rLS.js +0 -9
  585. package/migrations/0000_initial.sql +0 -260
  586. package/migrations/meta/0000_snapshot.json +0 -1861
  587. package/migrations/meta/_journal.json +0 -13
  588. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/page.78ecdcf250ebe4bd.css.pnext-asset.js → [org]/account/page.061f6006f2685f5e.css.pnext-asset.js} +0 -0
  589. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/(list)/page.c2085e3ab40a8b66.css.pnext-asset.js → [org]/agents/(list)/page.76589c15dee1732d.css.pnext-asset.js} +0 -0
  590. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/page.31a5f9731d946f4f.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/page.1a97b8d4b955c464.css.pnext-asset.js} +0 -0
  591. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/platforms/page.b036494aace45edf.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/platforms/page.3ffef848a0b0dda3.css.pnext-asset.js} +0 -0
  592. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/settings/agent-settings-form.204e3ec0b23d58c7.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/settings/agent-settings-form.2d19ea3a4d380e0d.css.pnext-asset.js} +0 -0
  593. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/@/app/dash/usage/range-bar.034280ed1ab2616b.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/usage/@/app/dash/[org]/usage/range-bar.e8f6f0c7ee443262.css.pnext-asset.js} +0 -0
  594. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/@/comps/ui/segmented.4db9cac358865634.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/usage/@/comps/ui/segmented.2cb43dc7d1f1588a.css.pnext-asset.js} +0 -0
  595. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/usage/page.6bf93d41ec4a1fab.css.pnext-asset.js → [org]/agents/[slug]/(tabs)/usage/page.80adb3d2ea31d080.css.pnext-asset.js} +0 -0
  596. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/agent-pills.1708253f0232e88e.css.pnext-asset.js → [org]/agents/agent/agent-pills.183f03f1e7e5ac9f.css.pnext-asset.js} +0 -0
  597. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/hero.8dd7556828e78b07.css.pnext-asset.js → [org]/agents/agent/hero.13019680f38b0630.css.pnext-asset.js} +0 -0
  598. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/agent/instructions.532dc545ddb11e88.css.pnext-asset.js → [org]/agents/agent/instructions.446bccc375f30eeb.css.pnext-asset.js} +0 -0
  599. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/@/app/dash/agents/(list)/page.1e19c72828fbd611.css.pnext-asset.js → [org]/agents/editor/@/app/dash/[org]/agents/(list)/page.81c825592da30a32.css.pnext-asset.js} +0 -0
  600. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/editor.52403b9719fb5157.css.pnext-asset.js → [org]/agents/editor/editor.c496247a81ed832c.css.pnext-asset.js} +0 -0
  601. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/editor/names.afb112f2a5a6f0f5.js → [org]/agents/editor/names.1ee5bba8d2b6ac41.js} +0 -0
  602. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{layout.4b31e7e60256f6d1.css.pnext-asset.js → [org]/layout.a4efa8d807fe5416.css.pnext-asset.js} +0 -0
  603. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/credentials-list.0953506d95c86a2f.css.pnext-asset.js → [org]/operator/@/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.944b02c09bbf6c22.css.pnext-asset.js} +0 -0
  604. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/engines-list.c04c712adfc0ca48.css.pnext-asset.js → [org]/operator/@/app/dash/[org]/settings/[tab]/list.83f35dd8a36acdfd.css.pnext-asset.js} +0 -0
  605. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/list.4835150fd34d0c4f.css.pnext-asset.js → [org]/operator/page.9002a449f872a10e.css.pnext-asset.js} +0 -0
  606. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/mcp-list.a2b3bf3c7c5fa42e.css.pnext-asset.js → [org]/settings/[tab]/@/app/dash/[org]/setup/outcome.3ad5f7ec67e5238d.css.pnext-asset.js} +0 -0
  607. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/runners-list.0e2d8a76197cde60.css.pnext-asset.js → [org]/settings/[tab]/connections-list.f742847e4887f072.css.pnext-asset.js} +0 -0
  608. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/task-view.2110bc4a16798cde.css.pnext-asset.js → [org]/settings/[tab]/credentials-list.98e0b34932a6ee4c.css.pnext-asset.js} +0 -0
  609. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/composer.80a979f079b29681.css.pnext-asset.js → [org]/settings/[tab]/engines-list.9927d602ebe9e7fc.css.pnext-asset.js} +0 -0
  610. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/status.d71a946ed749ca30.css.pnext-asset.js → [org]/settings/[tab]/list.e0ce46919b75ef76.css.pnext-asset.js} +0 -0
  611. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/list/tasks-list.291e81e56d54513c.css.pnext-asset.js → [org]/settings/[tab]/runners-list.a835c9a264cf8903.css.pnext-asset.js} +0 -0
  612. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/model-options.bccfaced52fc0c00.js → [org]/settings/model-options.2eacf7f8ac0032df.js} +0 -0
  613. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/@/app/dash/usage/range-bar.53967f3261c8387e.css.pnext-asset.js → [org]/setup/outcome.2a3073f895357275.css.pnext-asset.js} +0 -0
  614. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/@/comps/ui/segmented.2ca6fee7dd2830ad.css.pnext-asset.js → [org]/tasks/[id]/task-view.38b1b7ef3976ba71.css.pnext-asset.js} +0 -0
  615. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/day-chart.c566c1a55d15bf58.css.pnext-asset.js → [org]/tasks/composer.79c015348f861749.css.pnext-asset.js} +0 -0
  616. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/range-bar.5504dd2c591a3056.css.pnext-asset.js → [org]/tasks/list/status.7e63f2b02469ca40.css.pnext-asset.js} +0 -0
  617. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/stats.cd1d20f46f1347bf.css.pnext-asset.js → [org]/tasks/list/tasks-list.2282a7cef8b15bd8.css.pnext-asset.js} +0 -0
  618. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/top-agents.47aecd65c0c8fa2e.css.pnext-asset.js → [org]/usage/@/app/dash/[org]/usage/range-bar.85d30ec5f022f124.css.pnext-asset.js} +0 -0
  619. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/usage.0f646568d57d13e8.css.pnext-asset.js → [org]/usage/@/comps/ui/segmented.41728247cda62f82.css.pnext-asset.js} +0 -0
  620. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.e9ce0eb6697f992d.css.pnext-asset.js → dash/[org]/usage/day-chart.4b3dbef8704de0e0.css.pnext-asset.js} +0 -0
  621. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{login/page.57e5198339e9ca28.css.pnext-asset.js → dash/[org]/usage/range-bar.476c059123ef6c23.css.pnext-asset.js} +0 -0
  622. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/@/comps/ui/toast.a4c3e977997216cf.css.pnext-asset.js → app/dash/[org]/usage/stats.bb7cb568c0174557.css.pnext-asset.js} +0 -0
  623. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/drawer.e8201d78154045bc.css.pnext-asset.js → app/dash/[org]/usage/top-agents.20a1d4451784792b.css.pnext-asset.js} +0 -0
  624. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/page-head.a6e3c4204ca45e94.css.pnext-asset.js → app/dash/[org]/usage/usage.775df2f43187c487.css.pnext-asset.js} +0 -0
  625. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.146f70c7049b5b31.css.pnext-asset.js → app/globals.dccea8b03fa4b6d2.css.pnext-asset.js} +0 -0
  626. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/confirm.fb57a29a70e9df56.css.pnext-asset.js → app/login/page.586a41a7ab9988e0.css.pnext-asset.js} +0 -0
  627. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/filter.e20fbd035f24ed01.css.pnext-asset.js → frame/drawer.0b0220d1edabce29.css.pnext-asset.js} +0 -0
  628. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/menu.6341c87b5bec4256.css.pnext-asset.js → frame/page-head.364ec93a8e7857b3.css.pnext-asset.js} +0 -0
  629. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/select.03a695573b914d6f.css.pnext-asset.js → frame/task-toasts.d13d9f628e530552.css.pnext-asset.js} +0 -0
  630. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.bcff411a9f2355ec.css.pnext-asset.js → button.d7f4433f4e7faa80.css.pnext-asset.js} +0 -0
  631. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.40284b41c03c5dcb.css.pnext-asset.js → card.15f7435f202831c3.css.pnext-asset.js} +0 -0
@@ -1,19 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Dt as r,Gt as i,It as a,Jt as o,Mn as s,Mt as c,Nt as l,Ot as u,St as d,Vt as f,Xt as p,_t as m,b as h,bt as g,d as _,dn as v,en as ee,fn as y,gt as te,h as ne,in as re,jt as ie,mt as ae,nn as b,o as oe,pn as se,q as ce,qt as le,r as ue,rn as de,sn as fe,tn as pe,tt as me,wn as he,xt as ge,yt as _e,zt as ve}from"./dispatch-YW1aqjEg.js";import{t as ye}from"./types-D0q15RJa.js";import{a as be,i as xe,l as Se,n as Ce,o as we,r as Te,s as Ee,t as De}from"./load-DDZfByUe.js";import{c as Oe,d as ke,i as Ae,l as je,t as Me,u as Ne}from"./integrations-B2CavXR1.js";import{i as Pe,t as Fe}from"./discover-CaAtyC0h.js";import{a as Ie,c as Le,l as Re,n as ze,o as Be}from"./actions-CmfXOVXQ.js";import{_ as Ve,g as He,i as Ue,r as We}from"./executor-HWnIIYUL.js";import{n as Ge,r as Ke,t as qe}from"./exec-DgI3boHa.js";import{f as Je,n as Ye,r as Xe,t as Ze}from"./task-DhZ5vhyY.js";import{t as Qe}from"./match-DMI54zg4.js";import{a as $e,i as et,n as tt,o as nt,r as x,t as rt}from"./local-B0GiaLV0.js";import{a as S,c as it,d as C,f as at,i as ot,l as w,m as st,n as ct,p as lt,r as ut,u as dt}from"./http-DG54kyx4.js";import{n as ft}from"./github-actions-CvLya8ve.js";import{t as pt}from"./log-view-DeJstSkw.js";import{n as mt,t as ht}from"./chat-3Znsevah.js";import T from"node:path";import E from"node:process";import{fileURLToPath as gt,pathToFileURL as _t}from"node:url";import*as D from"zod/mini";import O,{accessSync as vt,constants as yt,existsSync as bt,readFileSync as xt,statSync as St}from"node:fs";import{execFile as Ct,spawn as wt}from"node:child_process";import{createCipheriv as Tt,createDecipheriv as Et,createHash as Dt,createHmac as Ot,randomBytes as k,randomUUID as kt}from"node:crypto";import At from"node:os";import{isIP as jt}from"node:net";import{isDeepStrictEqual as Mt,promisify as Nt}from"node:util";import{lookup as Pt}from"node:dns/promises";import{request as Ft}from"node:https";import{brotliDecompressSync as It,constants as Lt,createGzip as Rt,gunzipSync as zt,gzipSync as Bt,inflateSync as Vt}from"node:zlib";import{Chat as Ht,Message as Ut}from"chat";const Wt=e=>`nonce:${ke(e)}`;function Gt(e){let t=e.config.encryptionKey??e.config.adminToken;if(!t)throw Error(`A server secret is required to issue browser transactions.`);return t}function Kt(e,t){return Ot(`sha256`,Gt(e)).update(t).digest(`base64url`)}async function qt(e,t,n,r,i=6e5){let a=(e.now??Date.now)(),o={kind:t,user:n,organization:e.organizationId,target:r,nonce:k(18).toString(`base64url`),exp:a+i},s=nt(o),c=`${s}.${Kt(e,s)}`;return await e.store.put(`delivery`,Wt(c),{at:a},{ttlMs:i}),c}function Jt(e,t){let[n,r,i]=t.split(`.`);if(!(!n||!r||i!==void 0)&&Ne(Kt(e,n),r))try{return $e(n)}catch{return}}function Yt(e,t){return Jt(e,t)?.organization}function Xt(e,t){return Jt(e,t)?.user}async function Zt(e,t,n,r,i){let a=Jt(e,t),o=(e.now??Date.now)();return!a||a.kind!==n||a.user!==r||a.organization!==e.organizationId||a.target!==i||a.exp<o?!1:e.store.take(`delivery`,Wt(t))}async function Qt(e,t,n,r){let i=Jt(e,t),a=(e.now??Date.now)();if(!(!i||i.kind!==n||i.user!==`*`&&i.user!==r||i.organization!==e.organizationId||i.exp<a||!await e.store.take(`delivery`,Wt(t))))return i.target}async function $t(e,t,n,r){let i=Jt(e,t),a=(e.now??Date.now)();if(!(!i||i.kind!==n||i.user!==`*`&&i.user!==r||i.organization!==e.organizationId||i.exp<a||!await e.store.get(`delivery`,Wt(t))))return i.target}const en=(e,t=200)=>je(`<title>Coder</title><p>${Oe(e)}</p>`+(t>=400?`<p><a href="/dash">Back to the dashboard</a> to start again.</p>`:``),t);function tn(e){let t=e.get(`agent`),n=e.get(`def`),r=ut(n);if(!(!t||!n||!r?.integrations))return{state:{agent:t,repo:e.get(`repo`)??void 0,branch:e.get(`branch`)??void 0,def:n,tx:e.get(`tx`)??void 0,owner:e.get(`owner`)||void 0,...[`1`,`true`].includes(e.get(`public`)??``)?{public:!0}:{}},definition:r}}const nn=e=>typeof e==`string`&&/^\/dash(?:[/?#]|$)/.test(e)?e:void 0,rn=(e,t)=>JSON.stringify({integration:e,agent:t.agent,repo:t.repo??null,branch:t.branch??null,def:t.def,owner:t.owner??null,public:t.public??!1});async function an(e,t,n){return(await e.store.list(`app`,{prefix:`${n}:`})).find(e=>e.value.integration===n&&e.value.agent===t.agent)?.value}function on(e,t,n){let r={kind:`installation`,id:n};return{...e,connections:{...e.connections,[t]:r}}}function sn(e,t,n){return async r=>{let i={};for(let a of Object.keys(e.integrations)){if(a===t.integration)continue;let o=await an(e,t,a);if(o){let t=await qt(e,`install`,e.session?.user.id??`anonymous`,o.id);i[a]=`${n}/install/${a}?app=${encodeURIComponent(o.id)}&state=${nt({link:r,tx:t})}`}}return i}}async function cn(e,t,n){let r=await e.store.get(`app`,t.app);return r&&an(e,r,n)}function ln(e){return`${e.appId}:${e.installationId}:${e.chat?.thread.id??e.deliveryId}`}async function un(e,t,n,r){return e.repos.readFile(t,`.coder/${n}.md`,r)}function dn(e){return e.event&&e.source===e.event.integration?ln(e.event):`task:${e.id}`}async function fn(e,t,n,r,i,a,o,s){let c={},l=Ae(e.integrations),[u,d,f]=await Promise.all([o?.().catch(()=>void 0),e.store.get(`note`,ln(r)).catch(()=>void 0),l&&n.settings?.configRepo&&i[l.id]?un(l,n.settings.configRepo,a.id,i[l.id]).catch(()=>void 0):void 0]);if(u?.length&&(c.messages=u),d&&(c.note=d),f?.trim()&&(c.instructions=f.trim()),s)c.user={name:s.name,email:s.email};else if(s===void 0&&e.auth&&r.actor.id){let n=await e.auth.linkedUser(t.id,r.actor.id).catch(()=>void 0);n&&(c.user={name:n.name,email:n.email})}return c}const A=ke;function pn(e,t,n,r=k(32).toString(`base64url`)){let i=`${nt({task:e,organization:t,attempt:n})}.${r}`;return{token:i,hash:A(i)}}function mn(e){try{return $e(e.slice(0,e.indexOf(`.`)))}catch{return{}}}function j(e,t){return t===e.organizationId||!e.scope?e:e.scope(t)}async function hn(e,t){if(!e.appRecord){let n=await e.store.get(`app`,t);return n&&{ctx:e,app:n}}let n=await e.appRecord(t);return n&&{ctx:j(e,n.organizationId),app:n.app}}async function gn(e,t){if(e.boundInstallation?.installation.id===t)return{...j(e,e.boundInstallation.organizationId),boundInstallation:e.boundInstallation};if(!e.installationOrganization)return e;let n=await e.installationOrganization(t);return n===void 0?void 0:j(e,n)}const _n=D.object({env:D.record(D.string(),D.string().check(D.minLength(1)))}),vn=`plain`;function yn(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 bn(e){return yn(e.encryptionKey)}function xn(e){let t=yn(e);return t?Dt(`sha256`).update(t).digest().readInt32BE(0):0}function Sn(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:yn(e,t),version:xn(e)}))}function Cn(e){let t=_n.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function wn(e,t){let n=bn(e);if(!n)return{iv:vn,tag:``,ciphertext:Buffer.from(JSON.stringify(Cn(t))).toString(`base64`)};let r=k(12),i=Tt(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(Cn(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function Tn(e,t){if(t.iv===vn)return Cn(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of Sn(e))try{let e=Et(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),Cn(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 M(e,t){let n=bn(e);if(!n)return`${vn}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=k(12),i=Tt(`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 N(e,t){if(t.startsWith(`${vn}.`))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 Sn(e))try{let e=Et(`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 En(e,t){if(t.startsWith(`${vn}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of Sn(e))try{let e=Et(`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`)}const Dn=`node:22`;function On(e,t,n={}){let r=`coder-${e.id.replace(/[^a-zA-Z0-9_.-]/g,`-`).slice(0,48)}-${Date.now()}`,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??Dn,`coder`,`agent`,`run`,`--task`,e.id],env:t}}var kn=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=this.options.image??Dn,r=await x(`docker`,[`run`,`--rm`,`--network`,`none`,`--entrypoint`,`sh`,n,`-c`,`for binary in node coder claude codex; do command -v "$binary" >/dev/null 2>&1 || { printf "%s\\n" "$binary"; exit 127; }; done`],{PATH:E.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=On(e,{...t,CODER_INBOX_SOCKET:Ye},this.options),a=await x(`docker`,i.args,{PATH:E.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 x(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:E.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 logs(e,t=-1){let n=await x(`docker`,[`logs`,`--timestamps`,e],{PATH:E.env.PATH??``});if(n.code!==0)throw Error(n.stderr.trim()||`docker logs failed`);let r=[...tt(n.stdout),...tt(n.stderr,`err`)].map(({level:e,line:t})=>{let n=t.indexOf(` `),r=t.slice(0,n);return{level:e,line:t.slice(n+1),timestamp:r,at:Date.parse(r)}}).sort((e,t)=>e.timestamp.localeCompare(t.timestamp)).map(({timestamp:e,...t})=>t);return{lines:r.slice(t+1),next:r.length-1}}async stop(e){await x(`docker`,[`rm`,`-f`,e],{PATH:E.env.PATH??``})}async push(e,t){let n=await x(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,Ze],{PATH:E.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}};function An(e){if(!jt(e))return!0;if(jt(e)===6){let t=new URL(`https://[${e}]/`).hostname.slice(1,-1).split(`::`),n=t[0]?t[0].split(`:`):[],r=t[1]?t[1].split(`:`):[],i=[...n,...Array(8-n.length-r.length).fill(`0`),...r].map(e=>parseInt(e,16));if(i.every(e=>e===0)||i.slice(0,7).every(e=>e===0)&&i[7]===1||(i[0]&65024)==64512||(i[0]&65472)==65152||(i[0]&65280)==65280)return!0;let a;if(i.slice(0,5).every(e=>e===0)&&(i[5]===0||i[5]===65535))a=i.slice(6);else if(i.slice(0,4).every(e=>e===0)&&i[4]===65535&&i[5]===0)a=i.slice(6);else if((i[4]===0||i[4]===512)&&i[5]===24318)a=i.slice(6);else if(i[0]===100&&i[1]===65435&&i.slice(2,6).every(e=>e===0))a=i.slice(6);else if(i[0]===8194)a=i.slice(1,3);else if(i[0]===8193&&(i[1]===0||i[1]===3512)||i[0]===100&&i[1]===65435&&i[2]===1)return!0;if(!a)return!1;e=a.flatMap(e=>[e>>8,e&255]).join(`.`)}let t=e.split(`.`).map(Number);return t[0]===0||t[0]===10||t[0]===127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168||t[0]===192&&t[1]===0&&(t[2]===0||t[2]===2)||t[0]===198&&t[1]>=18&&t[1]<=19||t[0]===198&&t[1]===51&&t[2]===100||t[0]===203&&t[1]===0&&t[2]===113||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]>=224}var jn=class{options;kind=`http`;base;fetcher;resolver;constructor(e){if(this.options=e,!e?.url)throw Error(`The http runner requires RUNNER_CONFIG.url`);if(this.base=new URL(`${e.url.replace(/\/+$/,``)}/`),this.base.protocol!==`https:`)throw Error(`The http runner requires an HTTPS URL`);if(this.base.username||this.base.password)throw Error(`The http runner URL cannot contain credentials`);if(!e.secret)throw Error(`RUNNER_CONFIG.secret is required for the http runner`);this.fetcher=e.fetch,this.resolver=e.lookup??Pt}async safe(){let e=this.base.hostname.replace(/^\[|\]$/g,``),t=jt(e)?[{address:e,family:jt(e)}]:await this.resolver(e,{all:!0});if(!t.length)throw Error(`The http runner resolved no address`);if(t.some(e=>An(e.address)))throw Error(`The http runner refuses private and metadata addresses`);return t[0]}send(e,t,n){return this.fetcher?this.fetcher(e,t):new Promise((r,i)=>{let a=(this.options.request??Ft)(e,{method:t.method,headers:t.headers,signal:t.signal??void 0,agent:!1,lookup:(e,t,r)=>{t.all?r(null,[n]):r(null,n.address,n.family)}},e=>{let t=[];e.on(`data`,e=>t.push(Buffer.from(e))),e.on(`error`,i),e.on(`end`,()=>r(new Response(e.statusCode===204?null:Buffer.concat(t),{status:e.statusCode})))});a.on(`error`,i),a.end(t.body)})}async request(e,t=`GET`,n,r){let i=await this.safe(),a=n===void 0?``:JSON.stringify(n),o=String(Date.now()),s=k(16).toString(`base64url`),c=Ot(`sha256`,this.options.secret).update(`${a}.${o}.${s}`).digest(`base64url`),l=await this.send(new URL(e.replace(/^\//,``),this.base),{method:t,redirect:`manual`,headers:{...this.options.headers,"content-type":`application/json`,"x-coder-timestamp":o,"x-coder-nonce":s,"x-coder-signature":c},...a?{body:a}:{},signal:r??AbortSignal.timeout(e===`/start`?3e4:1e4)},i);if(l.status>=300&&l.status<400)throw Error(`The http runner refuses redirects`);if(!l.ok)throw Error(`HTTP runner request failed: ${l.status}`);if(l.status===204)return;let u=await l.text();return u?JSON.parse(u):void 0}health(e){return this.request(`/health`,`GET`,void 0,e)}async start(e,t){let n=await this.request(`/start`,`POST`,{task:e.id,env:t});if(!n.handle)throw Error(`HTTP runner returned no handle`);return n.handle}status(e){return this.request(`/status/${encodeURIComponent(e)}`)}logs(e,t=-1){return this.request(`/logs/${encodeURIComponent(e)}?after=${t}`)}async stop(e){await this.request(`/stop/${encodeURIComponent(e)}`,`POST`,{})}push(e,t){return this.request(`/messages/${encodeURIComponent(e)}`,`POST`,{entries:t})}};const Mn=e=>$e(e),Nn=18e5,Pn=2097152,Fn=Pn/4,In={"eu-north-1":`arn1`,"ap-south-1":`bom1`,"eu-west-3":`cdg1`,"us-east-2":`cle1`,"af-south-1":`cpt1`,"eu-west-1":`dub1`,"eu-central-1":`fra1`,"sa-east-1":`gru1`,"ap-east-1":`hkg1`,"ap-northeast-1":`hnd1`,"us-east-1":`iad1`,"ap-northeast-2":`icn1`,"ap-northeast-3":`kix1`,"eu-west-2":`lhr1`,"us-west-2":`pdx1`,"us-west-1":`sfo1`,"ap-southeast-1":`sin1`,"ap-southeast-2":`syd1`,"ca-central-1":`yul1`};function Ln(e){if(!e)return;let t=(()=>{try{return new URL(e).hostname}catch{return``}})();return Object.entries(In).find(([e])=>t.includes(e))?.[1]}const Rn={ANTHROPIC_API_KEY:{host:`api.anthropic.com`,header:`x-api-key`,prefix:``},OPENAI_API_KEY:{host:`api.openai.com`,header:`authorization`,prefix:`Bearer `}};function zn(e={}){let t=Object.entries(Rn).filter(([t])=>e[t]).map(([t,n])=>[n.host,[{transform:[{headers:{[n.header]:`${n.prefix}${e[t]}`}}]}]]);return t.length?{allow:{...Object.fromEntries(t),"*":[]}}:void 0}async function Bn(){try{return(await Function(`name`,`return import(name)`)(`@vercel/sandbox`)).Sandbox}catch{throw Error(`The vercel-sandbox runner requires @vercel/sandbox in the adapter app.`)}}function Vn(e){return e&&typeof e==`object`&&`response`in e&&e.response instanceof Response?e.response.status:void 0}function Hn(e){if(Vn(e)!==410||!e||typeof e!=`object`||!(`json`in e))return!1;let t=e.json;if(!t||typeof t!=`object`||!(`error`in t))return!1;let n=t.error;return!!n&&typeof n==`object`&&`code`in n&&n.code===`snapshot_not_found`}var P=class extends Error{snapshotId;constructor(e,t,n){super(e,n),this.snapshotId=t}},Un=class{options;kind=`vercel-sandbox`;streams=new Map;constructor(e={}){this.options=e}api(){return this.options.sandbox?Promise.resolve(this.options.sandbox):Bn()}now(){return(this.options.now??Date.now)()}auth(){return{...this.options.token?{token:this.options.token,projectId:this.options.projectId??process.env.VERCEL_PROJECT_ID,teamId:this.options.team??process.env.VERCEL_TEAM_ID}:{}}}base(e){return{...e?{source:{type:`snapshot`,snapshotId:e}}:this.options.image?{image:this.options.image}:{},...this.options.region?{region:this.options.region}:{},...this.auth(),resources:{vcpus:this.options.vcpus??2},persistent:!1}}snapshotKey(e,t){let n=e.event?.repo;if(!n)return;let r=[this.baseKey(),t??null,e.event.appId,e.event.installationId,n.owner,n.name];return`repo:${this.options.region??``}:${ke(JSON.stringify(r))}`}baseKey(){let e=[he(),this.options.image??null,this.options.tools??[]];return`base:${this.options.region??``}:${ke(JSON.stringify(e))}`}async withSandbox(e,t){let n;try{if(n=typeof e==`string`?await(await this.api()).get({...this.auth(),name:e}):e,n.status!==`running`&&n.status!==`pending`)throw new P(`Vercel Sandbox ${n.name} is ${n.status}`);return await t(n)}catch(t){let r=Vn(t);throw r===410||!n&&typeof e==`string`&&r===404?new P(t instanceof Error?t.message:`Vercel Sandbox expired`,void 0,{cause:t}):t}}async finalizeSnapshot(e,t){let n=this.options.snapshots,r=this.now(),{build:i,...a}=t;if(!i)return t;try{t=await this.withSandbox(i.sandbox,async e=>{let n=await e.getCommand(i.command);if(n.exitCode===null&&r-i.startedAt<Nn)return t;if(n.exitCode===0){let i=/^coder-snapshot (\S+)$/m.exec(await n.stdout())?.[1];if(i&&i===t.sha)return await e.stop().catch(()=>{}),{...a,checkedAt:r};let o=await e.snapshot({expiration:2592e6});return{...a,snapshotId:o.snapshotId,...i?{sha:i}:{},checkedAt:r}}return await e.stop().catch(()=>{}),{...a,failedAt:r}})}catch(t){if(t instanceof P){let{failedAt:t,...r}=a,o=await n.get(e);o?.build?.sandbox===i.sandbox&&o.build.command===i.command&&o.build.startedAt===i.startedAt&&await n.put(e,r)}throw t}if(t.build)return t;let o=await n.get(e);return o?.build?.sandbox!==i.sandbox||o.build.command!==i.command||o.build.startedAt!==i.startedAt?o??{}:(await n.put(e,t),t)}async snapshot(e,t,n,r){let i=this.options.snapshots;if(!i)return;let a=this.now(),o=await this.finalizeSnapshot(e,await i.get(e)??{});if(o.build)return o.snapshotId;let s=!o.snapshotId||n&&a-(o.checkedAt??0)>=9e5,c=o.failedAt!==void 0&&a-o.failedAt<36e5;if(s&&!c){let n=await t(o.snapshotId??r).catch(e=>{if(e instanceof P)throw e});if(n){let t={sandbox:n.sandbox,command:n.command,startedAt:a};await i.put(e,{...o,build:t}),(async()=>{await n.wait();let r=await i.get(e);r?.build?.sandbox===t.sandbox&&r.build.command===t.command&&r.build.startedAt===t.startedAt&&await this.finalizeSnapshot(e,r)})().catch(()=>{})}}return o.snapshotId}async detached(e,t,n={}){let r=await(await this.api()).create({...this.base(e),timeout:this.options.timeoutMs??18e5,...n}).catch(t=>{throw e&&Hn(t)?new P(t.message,e,{cause:t}):t});try{let e=await this.withSandbox(r,e=>e.runCommand({...t,cwd:`/vercel/sandbox`,detached:!0}));return{sandbox:r.name,command:e.cmdId,wait:()=>e.wait({signal:AbortSignal.timeout(Nn)})}}catch(e){throw await r.stop().catch(()=>{}),e}}async start(e,t,n){let r=[`npm install -g @anthropic-ai/claude-code @openai/codex bun ${[`@wular/coder@${he()}`,...this.options.tools??[]].join(` `)}`,...et()].join(` && `),i=(t,n)=>({cmd:t?`coder`:`sh`,args:t?[`agent`,`run`,`--task`,e.id]:[`-c`,`sudo -E sh -c "$1" && exec coder agent run --task "$2"`,`coder-task`,r,e.id],env:n}),a=this.baseKey(),o=zn(n);for(let n=0;;n++){let s;try{let n=await this.snapshot(a,()=>this.detached(void 0,{cmd:`sh`,args:[`-c`,r],sudo:!0}),!1);s=this.snapshotKey(e,n);let c=(s?await this.snapshot(s,e=>this.detached(e,i(e,{...t,CODER_PREPARE:`1`})),!0,n):void 0)??n,l=await this.detached(c,i(c,{...t,CODER_INBOX_SOCKET:Ye}),o?{networkPolicy:o}:{});return nt({sandbox:l.sandbox,command:l.command})}catch(e){if(!(e instanceof P))throw e;for(let t of[a,s]){if(!t||!e.snapshotId)continue;let n=await this.options.snapshots?.get(t);n?.snapshotId===e.snapshotId&&await this.options.snapshots.put(t,n.build?{build:n.build}:{})}if(n===2)throw e}}}async status(e){let t=Mn(e),n=await(await this.api()).get({...this.auth(),name:t.sandbox});if(n.status===`pending`)return{state:`running`};if(n.status!==`running`)return{state:`exited`,code:1};let r=await n.getCommand(t.command);return r.exitCode===null?{state:`running`}:{state:`exited`,code:r.exitCode}}async push(e,t){let n=await(await(await this.api()).get({...this.auth(),name:Mn(e).sandbox})).runCommand({cmd:`node`,args:[`-e`,Ze],detached:!1,env:{CODER_INBOX_MESSAGES:JSON.stringify(t)}}),r=await n.stdout();if(n.exitCode!==0)throw Error(`Sandbox inbox delivery failed`);return JSON.parse(r)}async logs(e,t=-1){let n=this.streams.get(e);n||(n=this.readStream(e),this.streams.set(e,n),n.catch(()=>{this.streams.get(e)===n&&this.streams.delete(e)}));let r=await n,i=Date.now()+250;for(;!r.done&&Date.now()<i;)await new Promise(e=>setTimeout(e,Math.min(10,i-Date.now())));if(r.error)throw this.streams.delete(e),r.error;let a=r.lines.slice(Math.max(0,t+1-r.offset)),o=Math.max(t,r.offset+r.lines.length-1);return a.length&&r.dropped&&!r.warned&&(a.unshift({level:`err`,line:`Sandbox log buffer dropped ${r.dropped} bytes; showing the retained tail.`}),r.warned=!0),r.done&&!a.length&&this.streams.delete(e),{lines:a,next:o}}async readStream(e){let t=Mn(e),n=(await(await(await this.api()).get({...this.auth(),name:t.sandbox})).getCommand(t.command)).logs(),r={lines:[],offset:0,dropped:0,warned:!1,done:!1,close:()=>n.close?.()};return(async()=>{let e={stdout:``,stderr:``},t=0,i=e=>{if(Buffer.byteLength(e)<=Fn)return e;let t=Buffer.from(e),n=t.length-Fn;for(;(t[n]&192)==128;)n++;return r.dropped+=n,t.subarray(n).toString()},a=(n,a)=>{let o=(e[n]+a).split(/\r?\n/);e[n]=i(o.pop()??``);for(let e of o.filter(Boolean)){let a=i(e);r.lines.push({level:n===`stdout`?`out`:`err`,line:a}),t+=Buffer.byteLength(a)+32}let s=0;for(;t>Pn/2&&s<r.lines.length;){let e=Buffer.byteLength(r.lines[s++].line);t-=e+32,r.dropped+=e}s&&(r.lines.splice(0,s),r.offset+=s)};for await(let e of n)a(e.stream,e.data);a(`stdout`,`
2
- `),a(`stderr`,`
3
- `)})().catch(e=>{r.error=e}).finally(()=>r.done=!0),r}async stop(e){this.streams.get(e)?.then(e=>e.close(),()=>{}),this.streams.delete(e),await(await(await this.api()).get({...this.auth(),name:Mn(e).sandbox})).stop()}};const Wn=[`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`];function Gn(e){let t=e.kind;return e.local===!1&&(t===`local`||t===`local-docker`)?{}:{[t]:Kn(t,e)}}function Kn(e,t){let n=t.config??{};if(e===`local`)return new rt(t.workDir);if(e===`local-docker`)return new kn(n);if(e===`vercel-sandbox`)return new Un({...t.sandbox,...n});if(e===`github-actions`)return new ft({...n,...t.fetch?{fetch:t.fetch}:{}});if(typeof n.url!=`string`||typeof n.secret!=`string`)throw Error(`HTTP runner requires a URL and secret`);return new jn({url:n.url,secret:n.secret,...t.fetch?{fetch:t.fetch}:{}})}function qn(e,t){return e.scope===`workspace`||!!(t&&e.owner===t)}function Jn(e){return e.local?`local`:`default`}async function Yn(e,t={}){let n=(await e.store.list(`runner`)).filter(({value:n})=>qn(n,t.requester)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`)),r=t.runner??t.agent;if(r===Jn(e))return{runner:e.config.runner};let i=r?n.find(({id:e,value:t})=>e===r||t.name===r):n.find(({value:e})=>e.scope===`personal`&&e.default)??n.find(({value:e})=>e.scope===`workspace`&&e.default);if(r&&!i)throw Error(`Unknown runner "${r}".`);return i?{runner:i.value.kind,runnerId:i.id}:{runner:e.config.runner}}function Xn(e,t,n){let r={...t.config,...N(e.config,t.secret)};return Kn(t.kind,{workDir:e.config.workDir,config:r,fetch:e.fetch,sandbox:{...n?{snapshots:{get:t=>e.store.get(`snapshot`,`runner:${n}:${t}`),put:(t,r)=>e.store.put(`snapshot`,`runner:${n}:${t}`,r)}}:{}}})}async function F(e,t){if(!t.runnerId)return e.runners[t.runner];let n=await e.store.get(`runner`,t.runnerId);if(!n||n.kind!==t.runner||!e.local&&(n.kind===`local`||n.kind===`local-docker`)){e.settings?.runnerInstances?.delete(t.runnerId);return}N(e.config,n.secret);let r=(e.settings??={}).runnerInstances??=new Map,i=JSON.stringify([n.kind,n.config,n.secret]),a=r.get(t.runnerId);return a?.signature!==i&&(a={signature:i,runner:Xn(e,n,t.runnerId)},r.set(t.runnerId,a)),a.runner}function Zn(e,t){if(Object.keys(t).some(t=>!e.fields.some(e=>e.key===t)))throw Error(`Unknown runner field`);for(let n of e.fields)if(!n.optional&&!t[n.key]?.trim())throw Error(`${n.label} is required`);if(e.kind===`http`){if(t.secret.length<32)throw Error(`Secret must contain at least 32 characters`);new jn({url:t.url,secret:t.secret})}if(e.kind===`github-actions`&&!/^[\w.-]+\/[\w.-]+$/.test(t.repo))throw Error(`Repository must be owner/repo`);if(e.kind===`local-docker`&&t.cpus&&!(Number(t.cpus)>0&&Number.isFinite(Number(t.cpus))))throw Error(`CPUs must be positive`)}var I=class extends Error{};async function Qn(e,t){let n=Date.now(),r=new AbortController,i,a=new Promise((e,t)=>{i=setTimeout(()=>{r.abort(),t(new I(`Runner check timed out`))},5e3)});try{return{ok:!0,detail:await Promise.race([a,(async()=>{let n=t?.kind??e.config.runner,i=t?{...t.config,...N(e.config,t.secret)}:e.config.runnerConfig??{};if(n===`local`){if(!e.local)throw new I(`Local runners require a local server`);return`This machine is available`}if(n===`http`){let n=t?Xn(e,t):e.runners.http;if(!(n instanceof jn)||!(await n.health(r.signal)).ok)throw new I(`Runner health check failed`);return`Runner is reachable`}if(n===`local-docker`){if(!e.local)throw new I(`Docker runners require a local server`);return await new Promise((t,n)=>{(e.runnerExec??Ct)(`docker`,[`info`],{timeout:5e3,signal:r.signal},e=>e?n(new I(`Docker is unavailable`)):t())}),`Docker is available`}let a=async t=>{let n=await(e.fetch??fetch)(t,{signal:r.signal,redirect:`manual`,headers:{authorization:`Bearer ${i.token}`,accept:`application/json`,"user-agent":`coder`}});if(!n.ok)throw new I(`Runner check failed with HTTP ${n.status}`);return n};if(n===`github-actions`){let e=String(i.repo).split(`/`).map(encodeURIComponent).join(`/`);return await a(`https://api.github.com/repos/${e}`),await a(`https://api.github.com/repos/${e}/actions/workflows/${encodeURIComponent(String(i.workflow))}`),`Repository and workflow are accessible`}let o=await(await a(`https://api.vercel.com/v2/teams?limit=100`)).json();if(!Array.isArray(o.teams))throw new I(`Invalid team response`);if(i.team&&!o.teams.some(e=>e.id===i.team||e.slug===i.team))throw new I(`Team is not accessible`);return`Teams are accessible`})()]),ms:Date.now()-n}}catch(e){return{ok:!1,detail:e instanceof I?e.message:`Runner check failed`,ms:Date.now()-n}}finally{clearTimeout(i)}}function $n(e){if(typeof e!=`string`||!e)return{ok:!1,detail:`A folder path is required`};let t=e===`~`?At.homedir():e.startsWith(`~/`)?T.join(At.homedir(),e.slice(2)):e;if(!T.isAbsolute(t))return{ok:!1,detail:`The folder path must be absolute`};let n=T.normalize(t);try{return O.statSync(n).isDirectory()?(O.accessSync(n,O.constants.R_OK),{ok:!0,folder:{path:n,name:T.basename(n)}}):{ok:!1,detail:`The path is not a directory`}}catch{return{ok:!1,detail:`The folder does not exist or is not readable`}}}function er(e){let t=new Map,r=[...n(e),...ve(e,{migrate:!1})].sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt));for(let e of r){let n=$n(e.cwd);if(!(!n.ok||t.has(n.folder.path))&&(t.set(n.folder.path,{...n.folder,recent:Date.parse(e.createdAt)}),t.size===8))break}return{current:{path:e,name:T.basename(e)},recent:[...t.values()],picker:!!nr()}}const tr=e=>(process.env.PATH??``).split(T.delimiter).some(t=>t&&O.existsSync(T.join(t,e)));function nr(){let e=`Choose a folder for the task`;if(process.platform===`darwin`)return[`osascript`,[`-e`,`tell application "System Events"`,`-e`,`activate`,`-e`,`POSIX path of (choose folder with prompt "${e}")`,`-e`,`end tell`]];if(process.platform===`win32`)return[`powershell`,[`-NoProfile`,`-Command`,`Add-Type -AssemblyName System.Windows.Forms; $d = New-Object System.Windows.Forms.FolderBrowserDialog; $d.Description = '${e}'; if ($d.ShowDialog() -eq 'OK') { $d.SelectedPath }`]];if(tr(`zenity`))return[`zenity`,[`--file-selection`,`--directory`,`--title=${e}`]];if(tr(`kdialog`))return[`kdialog`,[`--getexistingdirectory`,At.homedir(),`--title`,e]]}async function rr(){let e=nr();if(!e)return{ok:!1,detail:`This machine has no folder dialog; type a path instead`};try{let{stdout:t}=await Nt(Ct)(e[0],e[1],{timeout:6e5}),n=t.trim().replace(/(.)[\\/]+$/,`$1`);return n?$n(n):{ok:!1,detail:``}}catch{return{ok:!1,detail:``}}}function ir(e){let t=/^\w[\w.-]*@([\w.-]+):(?!\/)([^?#]+)$/.exec(e),n=t||!URL.canParse(e)?void 0:new URL(e);if(!t&&(!n||![`https:`,`ssh:`].includes(n.protocol)||n.password||n.search||n.hash))return;let[r,i]=t?[t[1],t[2]]:[n.port?`${n.hostname}_${n.port}`:n.hostname,n.pathname],a=i.replace(/(\.git)?\/?$/,``).split(`/`).filter(Boolean);if(!(!/^[a-z0-9][a-z0-9._-]*$/i.test(r)||a.length<2||!a.every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e))))return[r.toLowerCase(),...a]}async function ar(e){let t=typeof e==`string`?e.trim():``,n=ir(t);if(!n)return{ok:!1,detail:`Use an https or ssh git URL, like https://github.com/owner/repo`};let r=ie(`checkouts`,...n),i=AbortSignal.timeout(6e5),a={...process.env,GIT_TERMINAL_PROMPT:`0`,GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND??`ssh -o BatchMode=yes`},o=e=>Nt(Ct)(`git`,e,{env:a,signal:i,maxBuffer:67108864});try{await Je(r,async()=>{if(O.existsSync(T.join(r,`.git`))){await o([`-C`,r,`remote`,`set-url`,`origin`,t]),await o([`-C`,r,`fetch`,`origin`]);return}let e=await O.promises.mkdtemp(`${r}-clone-`);try{await o([`clone`,`--`,t,e]),await O.promises.rename(e,r)}finally{await O.promises.rm(e,{recursive:!0,force:!0})}})}catch(e){let t=e;if(i.aborted)return{ok:!1,detail:`The clone took longer than 10 minutes`};if(t.code===`ENOENT`&&!t.stderr)return{ok:!1,detail:`Git is not installed on this machine`};let n=String(t.stderr??t.message).split(`
4
- `).map(e=>e.trim()).filter(Boolean),r=(n.find(e=>e.startsWith(`fatal:`))??n.at(-1)??`The clone failed`).replace(/^fatal:\s*/,``);return{ok:!1,detail:r[0].toUpperCase()+r.slice(1)}}return{ok:!0,folder:{path:r,name:n.at(-1),url:t}}}const or=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function L(e,t){return e.get(`agent`,t)}async function sr(e){return(await e.list(`agent`)).map(e=>e.value)}async function cr(e,t,n){let r=n??(await L(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,or(t,r))}async function R(e,t){if(e.listAgentsWithVersions)return(await e.listAgentsWithVersions(t))[0]??{};let n=await L(e,t);return{record:n,version:n&&await cr(e,t,n.currentVersion)}}async function lr(e){if(e.listAgentsWithVersions)return e.listAgentsWithVersions();let t=await sr(e);return Promise.all(t.map(async t=>({record:t,version:await cr(e,t.id,t.currentVersion)})))}async function ur(e,t,n){if(e.publishAgent){let r=Se(t.id,t.definition),i=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??r.name??t.id,...t.description??r.description?{description:t.description??r.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:r,systemPrompt:t.systemPrompt,...i?{files:i}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n})}let r=await R(e,t.id),i=await dr(e,t,n,r);return{record:await L(e,t.id),version:i,unchanged:r.record?.currentVersion===i.version}}async function dr(e,t,n,r){if(!r&&e.publishAgent)return(await ur(e,t,n)).version;let i=Se(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await L(e,t.id),s=r?r.version:o?await cr(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>Mt(e.definition,i)&&e.systemPrompt===t.systemPrompt&&Mt(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return Mt(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,or(t.id,r),u);r++){let n=await e.get(`agentversion`,or(t.id,r));if(n&&l(n)){u=n;break}}let d=await L(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function fr(e,t,n,r=Date.now()){let i=await L(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}const pr=[`read-only`,`workspace-write`,`auto`];function mr(e,t){if(Array.isArray(e))return[...new Set(e)];let n=ye.indexOf(e);return[...new Set(ye.slice(0,n+1).flatMap(e=>t?.tools.presets[e]??[]))]}function hr(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},o=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),s=Object.fromEntries([...o].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],o=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents,s=t?.allowedTools&&n?.allowedTools?mr(t.allowedTools,r[e]).filter(t=>new Set(mr(n.allowedTools,r[e])).has(t)):n?.allowedTools??t?.allowedTools;return[e,{...o?{allowedEvents:o}:{},...s?{allowedTools:s}:{}}]})),c=i.permissions??e.permissions??`read-only`,l=a.permissions,u=l&&pr.indexOf(l)<=pr.indexOf(c)?l:c;return{...i,...a,permissions:u,...o.size?{integrations:s}:{}}}function gr(e,t,n,r=Me){let i=hr(t.definition,void 0,e.settings,r),a=hr(t.definition,i,n,r),[o]=Ce({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:a}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function _r(e,t=``){let n={};for(let r of O.readdirSync(T.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,_r(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=O.readFileSync(T.join(e,i),`utf8`))}return n}async function vr(e,t,n,r){let i=xe()[n];return i?await dr(e,{id:n,source:`builtin`,definition:i.json,systemPrompt:O.readFileSync(T.join(i.dir,`system.md`),`utf8`),files:_r(i.dir),importedFrom:`builtin:${he()}`},t,r)!==r.version:!1}async function yr(e,t,n){let r=n??await Promise.all(Object.keys(xe()).map(t=>R(e,t))),i=!1;for(let n of Object.keys(xe()))await vr(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}const br=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];function xr(e,t,n,r){return{method:e,pattern:t,handler:n,...r?{guard:r}:{}}}function Sr(e,t,n){return t.map(t=>({...t,pattern:e+t.pattern,...n&&!t.guard?{guard:n}:{}}))}function Cr(e,t,n){return[e,`${e}/*`].flatMap(e=>br.map(r=>xr(r,e,t,n)))}function wr(e,t){let[n,r]=[e.split(`/`),t.split(`/`)],i=n.at(-1)===`*`;if(i?r.length<n.length:r.length!==n.length)return;let a={};for(let e=0;e<n.length;e++){let[t,o]=[n[e],r[e]];if(t===`*`&&i){a[`*`]=r.slice(e).join(`/`);break}if(t[0]===`:`){if(!o)return;a[t.slice(1)]=o}else if(t!==o)return}return a}async function Tr(e,t,n,r){for(let i of e){let a=wr(i.pattern,r.pathname);if(!a)continue;for(let e of Object.keys(a))e!==`*`&&(a[e]=decodeURIComponent(a[e]));let o=e.filter(e=>e.pattern===i.pattern),s=o.find(e=>e.method===t.method),c=(s??i).guard;if(c){let e=await c(t,n,a,r);if(e instanceof Response)return e;n=e}if(s)return s.handler(t,n,a,r);let l=it();return l.headers.set(`allow`,[...new Set(o.map(e=>e.method))].join(`, `)),l}}const Er=`coder`;function Dr(e,t){let n=e??`/dash`;try{let e=new URL(n,t);return e.origin===t&&!n.includes(`\\`)&&!/^\/[/\\]/.test(e.pathname)?`${e.pathname}${e.search}${e.hash}`:`/dash`}catch{return`/dash`}}const Or=`The Coder dashboard is not built; run bun run build.`,kr=[`default-src 'self'`,`style-src 'self' 'unsafe-inline'`,`img-src 'self' data:`,`connect-src 'self'`,`object-src 'none'`,`base-uri 'none'`,`frame-ancestors 'none'`,`form-action 'self'`];function Ar(e){let t=T.dirname(gt(e));for(;;){let e=T.join(t,`package.json`);if(bt(e))try{if(JSON.parse(xt(e,`utf8`)).name===`@wular/coder`)return t}catch{}let n=T.dirname(t);if(n===t)break;t=n}throw Error(`Cannot locate the Coder package root.`)}function jr(e=import.meta.url){let t=T.dirname(gt(e)),n=Ar(e),r=gt(new URL(`./dash/standalone/server/entry.js`,import.meta.url));return[T.resolve(r,`../../..`),T.join(n,`dist/dash`),T.join(t,`../dash`)].find(e=>bt(Mr(e)))}const Mr=e=>T.join(e,`standalone/server/manifest.json`);function Nr(e){let t=T.join(e,`standalone/server/entry.js`);if(!bt(t))throw Error(`The Coder dashboard server bundle is missing.`);return t}async function Pr(e){let t=jr(e);if(!t)throw Error(Or);let n=JSON.parse(xt(Mr(t),`utf8`));return{handler:await(await import(_t(Nr(t)).href)).createRequestHandler({root:T.join(t,`standalone`)}),manifest:n}}var Fr=class{hosts=new Map};function Ir(e){let t=jr(e);if(t)try{return St(Mr(t)).mtimeMs}catch{return}}function Lr(e,{hosts:t}){let n=Date.now(),r=t.get(e);if(r&&n-r.checked<1e3)return r.host;let i=Ir(e);if(r&&(r.checked=n,i===void 0||i===r.build))return r.host;let a={build:i,checked:n,host:Pr(e)};return t.set(e,a),a.host}function Rr(e,t){let n=e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e;return!!(wr(`/assets/*`,n)||wr(`/dash/*`,n)||t.routes.some(e=>wr(e.route,n)))}const zr=/<script(?![^>]*\bsrc=)[^>]*>([\s\S]*?)<\/script>/gi,Br=e=>`'sha256-${Dt(`sha256`).update(e).digest(`base64`)}'`;function Vr(e){let t=[...e.matchAll(zr)].map(e=>Br(e[1]));return[...kr,`script-src 'self' ${t.join(` `)}`.trim()].join(`; `)}function Hr(e,t){return t===`gzip`?zt(e).toString(`utf8`):t===`br`?It(e).toString(`utf8`):t===`deflate`?Vt(e).toString(`utf8`):e.toString(`utf8`)}const Ur=e=>(e.headers.get(`accept-encoding`)??``).split(`,`).some(e=>{let[t,...n]=e.split(`;`).map(e=>e.trim()),r=n.find(e=>e.startsWith(`q=`));return t===`gzip`&&(!r||Number(r.slice(2))>0)});function Wr(e){e.set(`content-encoding`,`gzip`),/accept-encoding/i.test(e.get(`vary`)??``)||e.append(`vary`,`accept-encoding`)}function Gr(e){let t=Rt(),n=e=>new Promise(n=>{t.write(e),t.flush(Lt.Z_SYNC_FLUSH,()=>n())}),r=!1;return new ReadableStream({start(e){t.on(`data`,t=>e.enqueue(new Uint8Array(t))),t.on(`end`,()=>e.close()),t.on(`error`,t=>e.error(t))},async pull(){if(r)return;let{done:i,value:a}=await e.read();if(!i)return n(a);r=!0,t.end()},cancel(n){return t.destroy(),e.cancel(n)}})}function Kr(e,t,n,r){n.set(`content-security-policy`,[...kr,`script-src 'self' 'nonce-${r}'`].join(`; `));let i=t.body;return Ur(e)&&(Wr(n),i=Gr(i.getReader())),new Response(i,{status:t.status,statusText:t.statusText,headers:n})}async function qr(e,t,n){let r=new Headers(t.headers);if(r.set(`x-content-type-options`,`nosniff`),!(r.get(`content-type`)??``).includes(`text/html`))return new Response(t.body,{status:t.status,statusText:t.statusText,headers:r});r.set(`cache-control`,`no-store`),r.delete(`content-length`);let i=r.get(`content-encoding`);if(!i&&t.body)return Kr(e,t,r,n);let a=Buffer.from(await t.arrayBuffer()),o=Hr(a,i);r.set(`content-security-policy`,Vr(o));let s=i?new Uint8Array(a):o;return!i&&o.length>1024&&Ur(e)&&(s=new Uint8Array(Bt(o)),Wr(r)),new Response(s,{status:t.status,statusText:t.statusText,headers:r})}async function Jr(e,t=import.meta.url,n=new Fr){let r;try{r=await Lr(t,n)}catch(e){if(n.hosts.delete(t),e instanceof Error&&e.message===Or)return;throw e}if(!Rr(new URL(e.url).pathname,r.manifest))return;let i=k(16).toString(`base64`),a=new Headers(e.headers);return a.set(`content-security-policy`,`script-src 'nonce-${i}'`),qr(e,await r.handler(new Request(e,{headers:a})),i)}const Yr=(e,t,n=!1)=>`coder_admin=${encodeURIComponent(t)}; HttpOnly; SameSite=Strict; Path=/${new URL(e.url).protocol===`https:`?`; Secure`:``}${n?`; Max-Age=0`:``}`;function Xr(e,t){let n=e.headers.get(`x-forwarded-host`)?.split(`,`,1)[0]?.trim();if(!n)return t.origin;let r=e.headers.get(`x-forwarded-proto`)?.split(`,`,1)[0]?.trim()??t.protocol.slice(0,-1);try{return new URL(`${r}://${n}`).origin}catch{return t.origin}}async function Zr(e,t,n,r){let i=await e.formData(),a=i.get(`token`),o=i.get(`return`),s=Dr(typeof o==`string`&&o.startsWith(`/`)?o:null,new URL(e.url).origin);return typeof a==`string`?a?Ri(a,t.config.adminToken)?new Response(null,{status:303,headers:{location:s,"set-cookie":Yr(e,a)}}):lt(`/dash?token=rejected`,303):new Response(null,{status:303,headers:{location:s,"set-cookie":Yr(e,``,!0)}}):lt(`/dash?token=rejected`,303)}async function Qr(e,t,n,r){return lt(!t.auth||t.session?`/dash`:r.searchParams.has(`signed_out`)?`/login?signed_out=1`:`/login`)}async function $r(e,t,n,r){let i=`/api/auth/sign-in?return=${encodeURIComponent(Dr(r,n.origin))}`,a=t.config.publicUrl;return a&&new URL(Xr(e,n)).host!==new URL(a).host?lt(new URL(i,a).href):t.auth.handler(new Request(`${n.origin}${i}`))}async function ei(e,t,n,r){return t.auth&&!r.searchParams.has(`signed_out`)&&!r.searchParams.has(`error`)?$r(e,t,r,r.searchParams.get(`return`)):await Jr(ri(e,t),void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503})}async function ti(e,t,n,r){return await Jr(ri(e,t),void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503})}async function ni(e,t,n,r){return await Jr(ri(e,t),void 0,t.dashboardHosts)??w()}function ri(e,t){let n=new Headers(e.headers);return n.set(`x-coder-mode`,Vi(t)),new Request(e,{headers:n})}async function ii(e,t,n){return await Jr(ri(e,t),void 0,t.dashboardHosts)??w()}function ai(){return(process.env.PATH??``).split(T.delimiter).some(e=>{try{let t=T.join(e,`docker`);return vt(t,yt.X_OK),St(t).isFile()}catch{return!1}})}function oi(e){let t=!!e.local,n=t&&ai();return[{kind:`local`,name:t?`Another machine`:`Your machine`,description:t?`Pair another computer; it runs tasks with its own logins.`:`Run tasks with your own machine and logins.`,connect:`pair`,fields:[],available:!0},{kind:`local-docker`,name:`Docker on the server`,description:`Run each task in a Docker container.`,connect:`fields`,help:`Each task runs in a fresh container on this server, using the Docker installed here. Leave fields empty for the defaults.`,fields:[{key:`image`,label:`Image`,placeholder:`node:22`,hint:`node 20 or newer`,optional:!0},{key:`memory`,label:`Memory limit`,placeholder:`4g`,optional:!0},{key:`cpus`,label:`CPU limit`,placeholder:`2`,optional:!0}],available:n,...n?{}:{reason:t?`Docker is not on PATH.`:`Available on a local server only.`}},{kind:`vercel-sandbox`,name:`Vercel Sandbox`,description:`Run tasks in an isolated sandbox.`,connect:`fields`,help:`Each task gets a fresh Vercel Sandbox. Create an access token at vercel.com/account/tokens with Sandbox access for the team that pays for it.`,fields:[{key:`token`,label:`Access token`,placeholder:`vcp_…`,hint:`with Sandbox access`,secret:!0},{key:`team`,label:`Team`,placeholder:`team_…`,hint:`VERCEL_TEAM_ID if empty`,optional:!0},{key:`projectId`,label:`Project`,placeholder:`prj_…`,hint:`VERCEL_PROJECT_ID if empty`,optional:!0},{key:`region`,label:`Region`,placeholder:`iad1`,hint:`nearest if empty`,optional:!0}],available:!0},{kind:`github-actions`,name:`GitHub Actions`,description:`Run tasks through a repository workflow.`,connect:`fields`,help:`Each task starts a workflow run in a repository you choose. Save coder server workflow as .github/workflows/coder-agent.yml. It runs coder agent run --task; the token needs Actions read and write on that repository.`,fields:[{key:`repo`,label:`Repository`,placeholder:`acme/runners`,hint:`owner/name`},{key:`workflow`,label:`Workflow file`,placeholder:`coder-agent.yml`,hint:`in .github/workflows`},{key:`token`,label:`Token`,placeholder:`github_pat_…`,hint:`Actions read and write`,secret:!0},{key:`ref`,label:`Branch`,placeholder:`main`,hint:`default branch if empty`,optional:!0}],available:!0},{kind:`http`,name:`HTTP runner`,description:`Connect a runner at a public HTTPS address.`,connect:`fields`,help:`A machine already running coder runner serve. Copy the address and secret it printed; pairing from the Another machine or Your machine option does this for you.`,fields:[{key:`url`,label:`Address`,placeholder:`https://runner.example.com`,hint:`its https address`},{key:`secret`,label:`Secret`,placeholder:`printed by coder runner serve`,hint:`32 characters or more`,secret:!0}],available:!0}]}const si=D.string().check(D.minLength(1),D.maxLength(80)),ci=D.enum([`personal`,`workspace`]),li=D.record(D.string(),D.string()),ui=D.strictObject({kind:D.enum([`local`,`local-docker`,`github-actions`,`vercel-sandbox`,`http`]),name:si,scope:ci,config:li}),di=D.strictObject({name:D.optional(si),default:D.optional(D.literal(!0)),config:D.optional(li)});function fi(e,t,n,r=t.default){return{id:e,kind:t.kind,name:t.name,scope:t.scope,default:r,online:t.lastSeen!==void 0&&n-t.lastSeen<3e5,...t.lastSeen===void 0?{}:{lastSeen:t.lastSeen},config:t.config,createdAt:t.createdAt}}function pi(e){let t=e.session?.user.id,n=(e.now??Date.now)(),r=n=>n===`workspace`?B(e):!!t,i=async(n=e.store)=>(await n.list(`runner`)).filter(({value:n})=>qn(n,t)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`));return{user:t,now:n,canCreate:r,rows:i,row:async(t,r,a=e.store)=>{let o=(await i(a)).some(({value:e})=>e.scope===`personal`&&e.default);return fi(t,r,n,r.default&&(r.scope===`personal`||!o))}}}async function mi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=pi(t),l=await s(),u=l.find(({value:e})=>e.scope===`personal`&&e.default)??l.find(({value:e})=>e.default),d={id:Jn(t),kind:t.config.runner,name:t.local?`This machine`:`Default runner`,scope:`workspace`,default:!u,online:!0,config:{},createdAt:0};return S({items:[d,...l.map(({id:e,value:t})=>fi(e,t,a,e===u?.id))],catalog:oi(t)})}async function hi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=pi(t);{let n=ui.safeParse(await e.json().catch(()=>void 0));if(!n.success)return S({error:`Invalid runner`},400);if(!o(n.data.scope))return S({error:`This scope requires a member or workspace admin.`},403);let r=oi(t).find(e=>e.kind===n.data.kind);if(!r.available||r.connect===`pair`)return S({error:r.reason??`Pair this runner with runner serve.`},400);try{Zn(r,n.data.config)}catch(e){return S({error:e.message},400)}let s=yi(n.data.kind,n.data.config,t),l=`rnr_${k(9).toString(`base64url`)}`,u={...n.data,...s,owner:n.data.scope===`personal`?i:void 0,createdBy:i,default:!1,createdAt:a,updatedAt:a};return await t.store.put(`runner`,l,u),S(await c(l,u))}}async function gi(e,t,n,r){let i=n.id,{user:a,now:o,canCreate:s,rows:c,row:l}=pi(t);if(i===Jn(t))return S(await Qn(t));let u=e=>{if(!e||!qn(e,a)||!t.local&&(e.kind===`local`||e.kind===`local-docker`))return S({error:`Unknown runner`},404);if(e.scope===`workspace`&&!B(t))return S({error:`Only a workspace owner or admin can change this runner.`},403)},d=await t.store.get(`runner`,i),f=u(d);if(f)return f;let p=await Qn(t,d);return await t.store.withAppLock(`runners:${t.organizationId}`,async e=>{let n=await e.get(`runner`,i);n&&n.secret===d.secret&&JSON.stringify(n.config)===JSON.stringify(d.config)&&await e.put(`runner`,i,{...n,lastSeen:p.ok?(t.now??Date.now)():void 0,updatedAt:(t.now??Date.now)()})}),S(p)}async function _i(e,t,n,r){let i=n.id,{user:a,now:o,canCreate:s,rows:c,row:l}=pi(t);if(i===Jn(t)){if(B(t)){let n=di.safeParse(await e.json().catch(()=>void 0));if(!n.success||!n.data.default||n.data.name||n.data.config)return S({error:`Only the default can change for the built-in runner.`},400);await t.store.withAppLock(`runners:${t.organizationId}`,async e=>{for(let{id:t,value:n}of await e.list(`runner`))n.scope===`workspace`&&n.default&&await e.put(`runner`,t,{...n,default:!1,updatedAt:o})});let r=(await c()).some(({value:e})=>e.scope===`personal`&&e.default);return S({id:i,kind:t.config.runner,name:t.local?`This machine`:`Default runner`,scope:`workspace`,default:!r,online:!0,config:{},createdAt:0})}return S({error:`The server default cannot be renamed or removed.`},403)}let u=e=>{if(!e||!qn(e,a)||!t.local&&(e.kind===`local`||e.kind===`local-docker`))return S({error:`Unknown runner`},404);if(e.scope===`workspace`&&!B(t))return S({error:`Only a workspace owner or admin can change this runner.`},403)};return t.store.withAppLock(`runners:${t.organizationId}`,async n=>{let r=await n.get(`runner`,i),a=u(r);if(a||!r)return a;{let a=di.safeParse(await e.json().catch(()=>void 0));if(!a.success||!Object.keys(a.data).length)return S({error:`Invalid runner update`},400);let s={};if(a.data.config){let e={...r.config,...N(t.config,r.secret),...a.data.config};try{Zn(oi(t).find(e=>e.kind===r.kind),e)}catch(e){return S({error:e.message},400)}s=yi(r.kind,e,t)}if(a.data.default)for(let e of await n.list(`runner`))e.id!==i&&e.value.scope===r.scope&&e.value.owner===r.owner&&e.value.default&&await n.put(`runner`,e.id,{...e.value,default:!1,updatedAt:o});let c={...r,...a.data.name?{name:a.data.name}:{},...a.data.default?{default:!0}:{},...s,updatedAt:o};return await n.put(`runner`,i,c),S(await l(i,c,n))}})}async function vi(e,t,n,r){let i=n.id,{user:a,now:o,canCreate:s,rows:c,row:l}=pi(t);if(i===Jn(t))return S({error:`The server default cannot be renamed or removed.`},403);let u=e=>{if(!e||!qn(e,a)||!t.local&&(e.kind===`local`||e.kind===`local-docker`))return S({error:`Unknown runner`},404);if(e.scope===`workspace`&&!B(t))return S({error:`Only a workspace owner or admin can change this runner.`},403)};return t.store.withAppLock(`runners:${t.organizationId}`,async e=>{let n=await e.get(`runner`,i),r=u(n);if(r||!n)return r;{let n=(await e.list(`task`)).filter(({value:e})=>e.task.runnerId===i&&Z.includes(e.status)).length;return n?S({error:n===1?`1 task still runs on this runner. Stop it or wait.`:`${n} tasks still run on this runner. Stop them or wait.`},409):(await e.delete(`runner`,i),t.settings?.runnerInstances?.delete(i),S({ok:!0}))}})}function yi(e,t,n){let r=new Set(oi(n).find(t=>t.kind===e).fields.filter(e=>e.secret).map(e=>e.key)),i=Object.entries(t);return{config:Object.fromEntries(i.filter(([e])=>!r.has(e))),secret:M(n.config,Object.fromEntries(i.filter(([e])=>r.has(e))))}}const bi=D.strictObject({name:D.optional(si),scope:ci});async function xi(e,t,n,r){n.id;let{user:i,now:a,canCreate:o,rows:s,row:c}=pi(t),l=bi.safeParse(await e.json().catch(()=>void 0));if(!l.success)return S({error:`Invalid pairing`},400);if(!o(l.data.scope))return S({error:`This scope requires a member or workspace admin.`},403);let u=`${Buffer.from(t.organizationId).toString(`base64url`)}.${k(32).toString(`base64url`)}`,d=a+9e5;await t.store.put(`snapshot`,`runner-pair:${ke(u)}`,{...l.data,owner:l.data.scope===`personal`?i:void 0,createdBy:i,expiresAt:d},{ttlMs:9e5});let f=t.config.publicUrl??r.origin;return S({token:u,expiresAt:d,command:`coder runner serve --url ${f} --token ${u}`})}const Si=D.strictObject({token:D.optional(D.string()),id:D.optional(D.string()),organizationId:D.optional(D.string()),name:D.optional(D.string().check(D.minLength(1),D.maxLength(80))),url:D.string(),secret:D.string().check(D.minLength(32)),offline:D.optional(D.boolean())});async function Ci(e,t,n,r){let i=Si.safeParse(await e.json().catch(()=>void 0));if(!i.success)return S({error:`Invalid runner registration`},400);let a=i.data;try{new jn({url:a.url,secret:a.secret})}catch{return S({error:`A public HTTPS runner URL is required`},400)}let o=a.token?Buffer.from(a.token.split(`.`)[0],`base64url`).toString():a.organizationId;if(!o||o!==t.organizationId&&!t.scope)return S({error:`Invalid runner token`},401);t=j(t,o);let s=(t.now??Date.now)();return t.store.withAppLock(`runners:${t.organizationId}`,async e=>{let n,r;if(a.token){let i=`runner-pair:${ke(a.token)}`,o=await e.get(`snapshot`,i);if(!o||o.expiresAt<=s||!await e.take(`snapshot`,i))return S({error:`Pairing token expired or already used`},401);r=`rnr_${k(9).toString(`base64url`)}`,n={kind:`http`,name:o.name??a.name??`Your machine`,scope:o.scope,owner:o.owner,createdBy:o.createdBy,default:!1,createdAt:s,updatedAt:s,...yi(`http`,{url:a.url,secret:a.secret},t),lastSeen:s}}else{r=a.id??``;let i=await e.get(`runner`,r);if(!i||i.kind!==`http`||!Ne(N(t.config,i.secret).secret??``,a.secret))return S({error:`Invalid runner token`},401);n={...i,config:{...i.config,url:a.url},lastSeen:a.offline?void 0:s,updatedAt:s}}return await e.put(`runner`,r,n),S({...fi(r,n,s),organizationId:o})})}const wi=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function Ti(e,t,n,r){let i=t,a=r,o=[];for(let t of e){let e=Buffer.byteLength(t.line);if(a+e>2097152)break;o.push({seq:i,at:n,level:t.level,line:t.line}),a+=e,i+=1}return{lines:o,seq:i,bytes:a}}async function z(e,t,n=-1,r){return(await e.list(`tasklog`,{prefix:`${t}:`,...n>=0?{after:wi(t,n)}:{},...r?{limit:r}:{}})).map(e=>{let t=pt(e.value.line);return{seq:Number(e.id.slice(e.id.lastIndexOf(`:`)+1)),...e.value,...t?{entry:t}:{}}})}async function Ei(e,t,n=-1,r){if(!t.handle)return z(e.store,t.task.id,n,r);let i=await F(e,t.task);if(!i)return z(e.store,t.task.id,n,r);let[a,o]=await Promise.all([e.store.get(`task`,t.task.id),Nc(e,t).catch(()=>void 0)]);if(!o)return z(e.store,t.task.id,n,r);let s=a&&a.attempts===t.attempts&&a.tokenHash===t.tokenHash&&a.generation===t.generation&&a.handle===t.handle?a:t,c=s.logCursor??-1,l=s.logSeq??0,u=s.logBytes??0,d=[...Object.values(o.tokens),...Object.values(o.credential.env),...Object.values(o.config.mcp??{}).flatMap(e=>[...Object.values(e.env??{}),...Object.values(e.headers??{})])],f=await i.logs(t.handle,c),p=(e.now??Date.now)(),m=e=>d.reduce((e,t)=>t?e.replaceAll(t,`[REDACTED]`):e,e),h=e=>typeof e==`string`?m(e):Array.isArray(e)?e.map(h):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[m(e),h(t)])):e,g=Ti(f.lines.map(({level:e,line:t})=>{let n=pt(t);return{level:e,line:n?JSON.stringify(h(n)):m(t)}}),l,p,u);return await e.queue.appendLogs(e.organizationId,t.task.id,g.lines,{seq:l,cursor:c},{cursor:f.next,seq:g.seq,bytes:g.bytes},p,{attempts:t.attempts,tokenHash:t.tokenHash??null,handle:t.handle,generation:t.generation??0}),z(e.store,t.task.id,n,r)}async function Di(e,t,n,r=!1){let i=V(e);if(!i)return new Response(`Unauthorized`,{status:401});let a=mn(i);return a.task!==n||a.organization!==t.organizationId||!Number.isInteger(a.attempt)?new Response(`Unauthorized`,{status:401}):await t.queue.touch(t.organizationId,n,A(i),a.attempt,(t.now??Date.now)(),r)??new Response(`Unauthorized`,{status:401})}function Oi(e){let t=e.event;return t?t.repo?`${t.repo.owner}/${t.repo.name}`:t.chat?.thread.channelId??t.integration:e.source}async function ki(e,t,n,r){let i=n.id,a=V(e),o=mn(a),s=A(a),c=Number(r.searchParams.get(`after`)??-1);if(!Number.isInteger(c)||c<-1)return S({error:`Invalid cursor`},400);let l=await t.queue.fetchInbox(t.organizationId,i,s,o.attempt,c);return l?S(l):new Response(`Unauthorized`,{status:401})}async function Ai(e,t,n,r){let i=n.id,a=V(e),o=mn(a),s=A(a),c=await e.json().catch(()=>void 0);if(!c||!Number.isInteger(c.seq)||c.seq<-1||!Number.isInteger(c.generation)||c.generation<0||c.answers!==void 0&&(!Array.isArray(c.answers)||c.answers.some(e=>!e||!Number.isInteger(e.seq)||e.seq<0||e.seq>c.seq)))return S({error:`Invalid acknowledgement`},400);let l={tokenHash:s,attempts:o.attempt,generation:c.generation};return await t.queue.ackInbox(t.organizationId,i,c,l)?S({ok:!0}):new Response(`Unauthorized`,{status:401})}async function ji(e,t,n,r){let i=n.id,a=V(e),o=mn(a),s=A(a);return await t.queue.touch(t.organizationId,i,s,o.attempt,(t.now??Date.now)())?S({ok:!0}):new Response(`Unauthorized`,{status:401})}async function Mi(e,t,n,r){let i=n.id;V(e);let a=t.callbackTask;if([`completed`,`failed`,`cancelled`].includes(a.status))return S({ok:!0});let o=await e.json().catch(()=>void 0);if(!o?.status||![`running`,`waiting`,`completed`,`failed`,`cancelled`].includes(o.status))return S({error:`Invalid task result`},400);let s=(t.now??Date.now)();if(o.status===`running`||o.status===`waiting`)return await t.queue.patchTask(t.organizationId,i,{status:o.status,lastSeenAt:s,...o.approval===void 0?o.status===`running`?{approval:void 0}:{}:{approval:o.approval},...o.answer===void 0?{}:{answer:o.answer}},s,{attempts:a.attempts,tokenHash:a.tokenHash,statuses:[`running`,`waiting`]}),S({ok:!0});await Ei(t,a).catch(()=>{}),s=(t.now??Date.now)();let c=typeof o.result==`string`?o.result:JSON.stringify(o.result??``),l={ok:o.status===`completed`,exitCode:o.status===`completed`?0:1,output:c,...typeof o.diff==`string`?{diff:o.diff}:{}};return await t.queue.completeTask(t.organizationId,i,{attempts:a.attempts,tokenHash:a.tokenHash,outcome:{status:o.status,result:l,...o.error?{error:o.error}:{},...o.tokens===void 0?{}:{tokens:o.tokens}},...typeof o.note==`string`?{note:{key:dn(a.task),value:o.note,ttlMs:2592e6}}:{},usage:{...a.task.event?{installationId:`${a.task.event.appId}:${a.task.event.installationId}`}:{},taskId:i,agent:a.task.agent,target:Oi(a.task),...a.task.usage?.engine??a.task.definition.engine?{engine:a.task.usage?.engine??a.task.definition.engine}:{},...a.task.usage?.model??a.task.definition.model?{model:a.task.usage?.model??a.task.definition.model}:{},credential:a.task.credential??`unknown`,runnerElapsedMs:Math.max(0,s-(a.startedAt??s)),...o.tokens===void 0?{}:{tokens:o.tokens},at:s}},s),S({ok:!0})}async function Ni(e,t,n,r){n.id,V(e);let i=t.callbackTask,a=await e.json().catch(()=>({}));return typeof a.authJson!=`string`||!i.task.credential?S({error:`Invalid credential update`},400):S({kept:await Va(t.store,t.config,i.task.credential,a.authJson)})}async function Pi(e,t,n,r){n.id,V(e);let i=t.callbackTask;try{return S({...await Nc(t,i),generation:i.generation??0})}catch(e){return S({error:e instanceof Error?e.message:String(e)},409)}}async function Fi(e,t){if(!t.auth)return t;let n=await t.auth.session(e.headers);if(!(!n?.organizationId||n.organizationDenied))return{...j(t,n.organizationId),session:n}}const Ii=new Set([`owner`,`admin`]);function B(e){return!e.auth||Ii.has(e.session?.role??``)}function Li(e,t){return B(e)?e:S({error:t},403)}function Ri(e,t){return!!(e&&t&&Ne(e,t))}function V(e){let t=e.headers.get(`authorization`);return t?.startsWith(`Bearer `)?t.slice(7):null}const zi=new Set([`localhost`,`127.0.0.1`,`::1`,`[::1]`]);function Bi(e){if(e.headers.has(`x-forwarded-for`)||e.headers.has(`x-forwarded-host`))return!1;let t=e.headers.get(`host`)??new URL(e.url).host;try{return zi.has(new URL(`http://${t}`).hostname)}catch{return!1}}const Vi=e=>e.local?`local`:e.config.store===`postgres`?`cloud`:`memory`,Hi=e=>e.startsWith(`/tasks/`)||e.startsWith(`/logins/`)||e===`/runners/register`,Ui=[`/hooks/`,`/create/`,`/install/`,`/connect/`];function Wi(e,t){let n=e?.replace(/^::ffff:/,``)??``;if(zi.has(n)||n.startsWith(`127.`))return!0;let r=URL.parse(`http://localhost${t}`)?.pathname??``;return Hi(r)||Ui.some(e=>r.startsWith(e))}function Gi(e,t){if(!t.local)return!0;let n=new URL(e.url),r=e.headers.get(`host`)??n.host,i=URL.parse(`http://${r}`)?.port||`80`;if(Bi(e)&&i===String(t.local.port))return!0;let a=t.config.publicUrl?new URL(t.config.publicUrl).host:void 0;return(e.headers.get(`x-forwarded-host`)?.split(`,`,1)[0]?.trim()??r)===a&&!Bi(e)&&(Hi(n.pathname)||Ui.some(e=>n.pathname.startsWith(e)))}function Ki(e,t){let n=e.headers.get(`origin`)??e.headers.get(`referer`);if(!n)return!1;try{return new URL(n).origin===new URL(t??e.url).origin}catch{return!1}}function qi(e){let t=e.headers.get(`cookie`)?.split(`;`).map(e=>e.trim()).find(e=>e.startsWith(`coder_admin=`))?.slice(12);if(!t)return null;try{return decodeURIComponent(t)}catch{return null}}async function Ji(e,t){if(!t.auth){let n=()=>new Response(`Unauthorized`,{status:401,headers:{"www-authenticate":`Bearer`}});if(t.config.store!==`memory`||!Bi(e))return n();let r=qi(e),i=Ri(V(e),t.config.adminToken),a=Ri(r,t.config.adminToken);return i?{...t,authorizedRequest:e}:a?e.method===`GET`||Ki(e)?{...t,authorizedRequest:e}:ot():n()}let n=await t.auth.session(e.headers,e.method!==`GET`);if(n?.stale)return S({error:`Token too old for this action.`},401,{"www-authenticate":`Bearer error="invalid_token", error_description="Token too old for this action"`});if(n?.organizationDenied)return S({error:`You are not a member of that workspace.`},403);let r=n?.role;return!n?.organizationId||!r?S({error:`Sign in first.`,hint:`coder auth login`},401,V(e)?{"www-authenticate":`Bearer error="invalid_token"`}:{}):e.method!==`GET`&&e.headers.has(`cookie`)&&!Ki(e,t.config.publicUrl)?ot():{...j(t,n.organizationId),session:n,authorizedRequest:e}}async function Yi(e,t){if(!t.auth)return t;let n=new Headers(e.headers),r=new URL(e.url).searchParams.get(`organization`);r&&n.set(`x-coder-organization`,r);let i=await t.auth.session(n,!0);if(i?.organizationDenied)return new Response(`You are not a member of that workspace.`,{status:403});let a=i?.role;return!i?.organizationId||!a?st(new URL(e.url)):{...j(t,i.organizationId),session:i}}async function Xi(e,t){if(e.method!==`POST`)return;let n=Si.safeParse(await e.clone().json().catch(()=>void 0));if(!n.success||n.data.token)return;let{id:r,organizationId:i,secret:a}=n.data;if(!r||!i||i!==t.organizationId&&!t.scope)return;let o=j(t,i),s=await o.store.get(`runner`,r);if(s?.kind===`http`&&Ne(N(o.config,s.secret).secret??``,a))return`runner:${i}:${r}`}async function Zi(e,t,n,r){let i=n.id,a=V(e);if(!a)return new Response(`Unauthorized`,{status:401});let o=mn(a);return o.task!==i||typeof o.organization!=`string`||!o.organization||!Number.isInteger(o.attempt)||(t.scope&&(t=j(t,o.organization)),t.organizationId!==o.organization)?new Response(`Unauthorized`,{status:401}):t}async function Qi(e,t,n,r,i=!1){let a=n.id,o=V(e);if(o&&t.taskOrganization&&t.scope){let e=await t.taskOrganization(a,A(o));e&&(t=j(t,e))}let s=await Di(e,t,a,i);return s instanceof Response?s:{...t,callbackTask:s}}function $i(e,t,n,r){return Qi(e,t,n,r,e.method===`POST`)}function ea(e){let{organization:t}=mn(e);return typeof t==`string`?t:void 0}async function ta(e,t,n){let r=V(e);if(!r)return new Response(`Unauthorized`,{status:401});let i=ea(r),a=i&&t.scope&&i!==t.organizationId?j(t,i):t,o=n.id,s=await a.store.get(`login`,o);return!s||!Ne(A(r),s.tokenHash)?new Response(`Unauthorized`,{status:401}):{...a,callbackLogin:s}}async function na(e,t){let n=e.method===`POST`?new URLSearchParams(await e.clone().text()):void 0;return t.searchParams.get(`tx`)??ut(t.searchParams.get(`state`))?.tx??n?.get(`tx`)??void 0}async function ra(e,t,n,r){let i=await na(e,r),a=t.serverOrganizationId??t.organizationId;return i&&Xt(t,i)===`*`&&Yt(t,i)===a?{...j(t,a),operatorApp:!0}:Yi(e,t)}function ia(e,t,n,r){return Yi(e,t)}async function aa(e,t,n,r){let i=r.pathname.split(`/`)[2];if(!(/^[a-z0-9_-]+$/.test(i)?t.integrations[n.integration]:void 0)?.auth.user||!t.auth||!t.config.publicUrl)return w();if(e.method!==`GET`)return t;let a=await Fi(e,t);return a?.session?{...t,linkContext:a}:st(r)}function oa(e,t){return Li(t,`Workspace admin access is required.`)}function sa(e,t){return t.local?t:w()}function ca(e,t){return t.local?S({error:nl},400):t.session?.user.id?t:S({error:`Sign in to use a subscription.`},403)}function la(e){return async(t,n,r,i)=>{let a=n.authorizedRequest===t?n:await Ji(t,n);return a instanceof Response?a:e?e(t,a,r,i):a}}function ua(e,t,n,r){return e.method===(n.engine?`POST`:`GET`)&&(!t.local||n.engine&&!rl(n.engine))?S({error:n.engine?`Engine sign-in is available on a local server only`:`Engine status is available on a local server only`},404):t}async function da(e,t,n,r){return t.config.publicUrl&&t.auth?t:ii(e,t,r)}async function fa(e,t,n,r){if(!t.auth)return Ji(e,t);if(![`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method))return t;let i=await t.auth.session(e.headers);return i?.organizationDenied?S({error:`You are not a member of that workspace.`},403):i?{...t,session:i}:S({error:`Sign in first.`,hint:`coder auth login`},401)}async function pa(e,t,n,r){if(!t.auth)return w();if(e.method!==`POST`)return t;let i=await t.auth.session(e.headers);return i?e.headers.has(`cookie`)&&!Ki(e,t.config.publicUrl)?ot():{...t,session:i}:S({error:`Sign in first.`},401)}function ma(e,t,n,r){return e.method===`POST`?t.auth||t.config.store!==`memory`||!Bi(e)?w():Ki(e)?t:ot():t}async function ha(e,t,n,r){return e.method===`GET`?{...t,session:(await Fi(e,t))?.session}:t}async function ga(e,t,n,r){return[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method)&&t.auth&&(await Fi(e,t))?.session?lt(`/dash`):t}async function _a(e,t,n,r){if(![`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method))return t;let i=await t.auth?.session(e.headers);return i&&!i.organizations.length?t.auth.handler(new Request(r.origin+`/api/auth/sign-in?return=`+encodeURIComponent(r.pathname+r.search))):t.auth&&!i?$r(e,t,r,r.pathname+r.search):t.auth&&!(await Fi(e,t))?.session?st(r):t}function va(e,t,n,r){return e.method===`POST`&&t.local?S({error:nl},400):t}async function ya(e,t,n,r){if(![`GET`,`POST`].includes(e.method))return t;if(!t.auth)return w();if(e.headers.get(`authorization`)?.startsWith(`Bearer `))return S({error:`Link your account from the browser.`},403);let i=await Fi(e,t);return i?.session?{...t,linkContext:i}:e.method===`GET`?st(r):S({error:`Sign in first.`},401)}function ba(e,t,n,r){return![`GET`,`POST`,`PUT`,`PATCH`,`DELETE`].includes(e.method)||t.auth?t:w()}function xa(e,t){return e?`${e}/${t}`:t}function H(e){let t=e.lastIndexOf(`/`);return t<0?{label:e}:{owner:e.slice(0,t),label:e.slice(t+1)}}var Sa=class extends Error{status;constructor(e,t){super(`Credential check failed: ${e}${t?` ${t}`:``}`),this.status=e}};function Ca(e){if(e.OPENAI_API_KEY)return e.OPENAI_API_KEY;if(e.CODEX_AUTH_JSON)try{let t=JSON.parse(e.CODEX_AUTH_JSON);return t.OPENAI_API_KEY??t.tokens?.access_token??t.access_token}catch{throw Error(`CODEX_AUTH_JSON is not valid JSON`)}}async function wa(e,t=fetch){if(e.engine===`custom`)return;let n,r;if(e.engine===`claude`){let t=e.env.ANTHROPIC_API_KEY,i=e.env.CLAUDE_CODE_OAUTH_TOKEN;if(!t&&!i)throw Error(`Claude credentials need ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN`);n=`https://api.anthropic.com/v1/models`,r={"anthropic-version":`2023-06-01`,...t?{"x-api-key":t}:{authorization:`Bearer ${i}`,"anthropic-beta":`oauth-2025-04-20`}}}else{let t=Ca(e.env);if(!t)throw Error(`Codex credentials need OPENAI_API_KEY or CODEX_AUTH_JSON`);n=`https://api.openai.com/v1/models`,r={authorization:`Bearer ${t}`}}let i=await t(n,{method:`GET`,headers:r});if(!i.ok)throw new Sa(i.status,i.statusText)}async function Ta(e,t,n){let r=e.listCredentials?await e.listCredentials({owner:n,engine:t}):await e.list(`credential`),i=e=>{let n=r.filter(n=>n.value.owner===e&&(!t||n.value.engine===t));return n.find(e=>e.value.isDefault)??n[0]};return(n?i(n):void 0)??i(void 0)}async function Ea(e,t){return(e.listCredentials?await e.listCredentials({owner:t}):await e.list(`credential`)).filter(e=>!e.value.owner||e.value.owner===t)}async function Da(e,t){let n=e.session?.user.id,r=await Ea(e.store,n),i=n=>r.filter(e=>e.value.owner===n).sort((e,t)=>Number(!!t.value.isDefault)-Number(!!e.value.isDefault)).map(n=>La(e.config,n.value).env[t]).find(Boolean);return(n?i(n):void 0)??i(void 0)??(e.local?E.env[t]:void 0)}function Oa(e,t){let n=new Set(e.map(e=>H(e.id).label)),r=t;for(let e=2;n.has(r);e++)r=`${t}-${e}`;return r}const ka=(e,t,n)=>e.filter(e=>e.id!==t&&e.value.engine===n),Aa=(e,t)=>({id:e.id,value:{...e.value,isDefault:t}});function ja(e,t,n){return ka(e,t,n).filter(e=>e.value.isDefault).map(e=>Aa(e,!1))}function Ma(e,t,n){let r=ka(e,t,n)[0];return r?[Aa(r,!0)]:[]}async function Na(e,t,n,r=Date.now){let i=n.owner||void 0,a=n.credential.engine,o=n.label?.trim(),s=o||(n.credential.env.CLAUDE_CODE_OAUTH_TOKEN?`claude-token`:`${a}-key`);return await e.withCredential(`credential`,xa(i,s),async(e,c)=>{o||(s=Oa(c,s));let l=xa(i,s),u=c.find(e=>e.id===l)?.value,d=!!(n.makeDefault||u?.isDefault&&u.engine===a||!ka(c,l,a).some(e=>e.value.isDefault));return[{id:l,value:{...wn(t,{env:n.credential.env}),engine:a,...i?{owner:i}:{},...n.account?{account:n.account}:{},isDefault:d,createdAt:u?.createdAt??r()}},...d?ja(c,l,a):[],...u?.isDefault&&u.engine!==a?Ma(c,l,u.engine):[]]}),s}function Pa(e,t){return e.withCredential(`credential`,t,async(e,n)=>e&&[{id:t,value:null},...e.isDefault?Ma(n,t,e.engine):[]])}function Fa(e,t){return e.withCredential(`credential`,t,async(e,n)=>e&&[Aa({id:t,value:e},!0),...ja(n,t,e.engine)])}async function Ia(e,t,n,r,i){let a=await e.get(`login`,t);if(!a)return!1;let o=xa(a.owner,r);return e.withCredential(`credential`,o,async(e,s,c)=>{if(!await c.patchLogin(t,{state:`done`,label:r},{state:[`starting`,`open`,`verifying`],tokenHash:n,owner:a.owner}))return;let l={...i,owner:a.owner,engine:a.engine,isDefault:!0,createdAt:e?.createdAt??i.createdAt};return[{id:o,value:l},...ja(s,o,a.engine)]})}function La(e,t){return{...Tn(e,t),engine:t.engine}}function Ra(e){if(e.CODEX_AUTH_JSON)return`auth.json`;let t=Object.values(e)[0]??``;return t.length>16?`${t.slice(0,7)}…${t.slice(-4)}`:`••••`}function za(e,t,n){let r=La(e,n);return{label:H(t).label,engine:n.engine,scope:n.owner?`personal`:`workspace`,isDefault:!!n.isDefault,createdAt:n.createdAt??0,env:Object.keys(r.env).sort(),masked:Ra(r.env),...n.account?{account:n.account}:{}}}const Ba=e=>{try{return Date.parse(JSON.parse(e??``).last_refresh??``)}catch{return NaN}};function Va(e,t,n,r){return e.withCredential(`credential`,n,async e=>{if(!e)return;let{env:i}=La(t,e);if(!(!i.CODEX_AUTH_JSON||!(Ba(r)>(Ba(i.CODEX_AUTH_JSON)||0))))return[{id:n,value:{...e,...wn(t,{env:{...i,CODEX_AUTH_JSON:r}})}}]})}function Ha(e,t){return En(e,t.iv===`plain`?`plain.${t.ciphertext}`:`${t.iv}.${t.tag}.${t.ciphertext}`)}async function Ua(e,t){if(!t.encryptionKey)throw Error(`SERVER_ENCRYPTION_KEY is required to rotate keys`);let n=xn(t.encryptionKey),r=e=>En(t,e)!==n,i=e=>r(e)?M(t,N(t,e)):e,a=e=>{let t=e.token&&i(e.token),n=e.connections&&Object.fromEntries(Object.entries(e.connections).map(([e,t])=>[e,t.kind===`oauth`&&r(t.token)?{...t,token:i(t.token)}:t]));if(!(t===e.token&&!Object.entries(n??{}).some(([t,n])=>n!==e.connections[t])))return{...e,...t?{token:t}:{},...n?{connections:n}:{}}},o=0;for(let{id:t}of await e.list(`app`))await e.withAppLock(t,async e=>{let n=await e.get(`app`,t);return!n||!r(n.credentials)?!1:(await e.put(`app`,t,{...n,credentials:i(n.credentials)}),!0)})&&o++;for(let{id:t}of await e.list(`installation`))await e.withCredential(`installation`,t,async e=>{let n=e&&a(e);return n&&[{id:t,value:n}]})&&o++;for(let{id:t}of await e.list(`runner`))await e.withCredential(`runner`,t,async e=>{if(!(!e||!r(e.secret)))return[{id:t,value:{...e,secret:i(e.secret)}}]})&&o++;for(let{id:r}of await e.list(`credential`))await e.withCredential(`credential`,r,async e=>{if(!(!e||Ha(t,e)===n))return[{id:r,value:{...e,...wn(t,{env:La(t,e).env})}}]})&&o++;return o+await vc(e,t)}function Wa(e,t){return`${e.config.publicUrl?.replace(/\/$/,``)??``}/dash/settings/credentials?engine=${encodeURIComponent(t)}`}const Ga=D.object({label:D.optional(D.string().check(D.regex(/^[^/\s][^/]*$/))),env:D.record(D.string(),D.string().check(D.minLength(1))),engine:D.enum([`claude`,`codex`,`custom`]),workspace:D.optional(D.boolean()),default:D.optional(D.boolean()),noCheck:D.optional(D.boolean())}),Ka=`Only an owner or admin of this workspace can change workspace credentials.`;function qa(e,t,n){let r=e.session?.user.id,i=t.searchParams.has(`workspace`)||!r;return{workspace:i,id:xa(i?void 0:r,n)}}async function Ja(e,t,n,r){n.label;let i=t.session?.user.id,a=e=>`${e.engine}/${e.scope}/${e.label}`,o=(e,t)=>e.localeCompare(t)||(e<t?-1:+(e>t)),s=(await Ea(t.store,i)).map(e=>za(t.config,e.id,e.value)).sort((e,t)=>o(a(e),a(t)));if(!at(r))return S(s);let c=ct(r),l=r.searchParams.get(`q`)?.trim().toLowerCase(),u=s.filter(e=>!l||[e.label,e.engine,e.account?.email??``,...e.env].some(e=>e.toLowerCase().includes(l))).filter(e=>!c||o(a(e),c)>0);return S(dt(u,C(r),a))}async function Ya(e,t,n,r){n.label;let i=t.session?.user.id,a=await e.json().catch(()=>void 0),o=Ga.safeParse(a);if(!o.success||!Object.keys(o.data.env).length||Object.keys(o.data.env).some(e=>!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)))return S({error:`Invalid credential`},400);let{env:s,engine:c}=o.data,l=!!o.data.workspace||!i;if(l&&!B(t))return S({error:Ka},403);if(s.CODEX_AUTH_JSON)return S({error:`Sign in with Codex on the Credentials page instead.`},400);if(s.CLAUDE_CODE_OAUTH_TOKEN&&(l&&t.auth||t.config.subscriptions?.claude))return S({error:`Sign in with Claude on the Credentials page instead.`},400);let u=l?void 0:i;try{o.data.noCheck||await wa({engine:c,env:s},t.fetch??fetch);let e=await Na(t.store,t.config,{label:o.data.label?.trim()||void 0,...u?{owner:u}:{},credential:{env:s,engine:c},makeDefault:o.data.default},t.now??Date.now);return S({ok:!0,label:e})}catch(e){return S({error:e instanceof Error?e.message:String(e)},e instanceof Sa?e.status:400)}}async function Xa(e,t,n,r){let i=n.label;t.session?.user.id;let{workspace:a,id:o}=qa(t,r,i);return a&&!B(t)?S({error:Ka},403):await Pa(t.store,o)?S({ok:!0}):S({error:`Unknown credential`},404)}async function Za(e,t,n,r){let i=n.label;t.session?.user.id;let{workspace:a,id:o}=qa(t,r,i);return a&&!B(t)?S({error:Ka},403):await Fa(t.store,o)?S({ok:!0}):S({error:`Unknown credential`},404)}async function Qa(e,t,n,r){let i=n.engine;return il(i),S(await sl())}async function $a(e,t,n,r){let i=n.engine;return await al(i),S(await sl())}const eo=(e,t)=>e===`credential`?`credential:${H(t).owner??``}`:e===`runner`?`runners:`:`installation:${t}`;async function to(e,t,n,r){let i=H(n).owner,a=(await e.list(t)).filter(e=>t===`credential`?H(e.id).owner===i:e.id===n),o=await r(a.find(e=>e.id===n)?.value,a,e);for(let n of o??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!o?.length}var no=class{now;appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(eo(e,t),()=>to(this,e,t,n))}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){return this.live(e).get(t)?.value}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,a}completeLogin(e,t,n,r){return Ia(this,e,t,n,r)}async put(e,t,n,r={}){let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?n:Object.assign({},n,{archivedAt:o}),expiresAt:i})}async putMany(e,t){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value)));return}let n=this.bucket(e);for(let e of t)n.set(e.id,{value:e.value})}async list(e,t={}){return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}async delete(e,t){this.bucket(e).delete(t)}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),!0)}async take(e,t){let n=this.live(e),r=n.has(t);return r&&n.delete(t),r}};const ro=new Set([`app`,`installation`,`runner`]),io=new Set([`task`,`tasklog`,`inbox`,`usage`]),ao=new Set([`agent`,`agentversion`]);function oo(e,t){try{return JSON.parse(O.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function so(e,t){O.mkdirSync(T.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{O.writeFileSync(n,t,{mode:384}),O.renameSync(n,e)}finally{O.rmSync(n,{force:!0})}}var co=class{now;derived=new no;writes=Promise.resolve();constructor(e=Date.now){this.now=e}withAppLock(e,t){return this.derived.withAppLock(e,()=>t(this))}withConfigLock(e){return this.derived.withConfigLock(()=>e(this))}withCredential(e,t,n){return this.derived.withAppLock(eo(e,t),()=>to(this,e,t,n))}get appsFile(){return c(`apps.json`)}get deliveriesFile(){return T.join(pe(``),`deliveries.json`)}get notesDir(){return T.join(pe(``),`notes`)}noteFile(e){return T.join(this.notesDir,`${encodeURIComponent(e)}.md`)}serial(e){let t=this.writes.then(e);return this.writes=t.catch(()=>{}),t}apps(){return oo(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?ee():e===`snapshot`?T.join(pe(``),`snapshots.json`):T.join(pe(``),`runner`,`${e}.json`)}deliveries(e=`delivery`){let t=this.now();return Object.fromEntries(Object.entries(oo(this.recordsFile(e),{})).filter(([,e])=>e.expiresAt===void 0||e.expiresAt>t))}entries(e){if(ro.has(e))return Object.entries(this.apps()[e]??{});if(e===`delivery`||e===`snapshot`||io.has(e))return Object.entries(this.deliveries(e)).map(([e,t])=>[e,t.value]);if(e===`note`){let e=[];try{e=O.readdirSync(this.notesDir).filter(e=>e.endsWith(`.md`))}catch{}return e.map(e=>[decodeURIComponent(e.slice(0,-3)),O.readFileSync(T.join(this.notesDir,e),`utf8`)])}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(ao.has(e))return this.derived.get(e,t);if(e===`note`)try{return O.readFileSync(this.noteFile(t),`utf8`)}catch{return}return this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(ao.has(e))return this.derived.put(e,t,n,r);await this.serial(()=>this.write(e,t,n,r.ttlMs))}write(e,t,n,r){if(ro.has(e)){let r=this.apps();r[e]={...r[e],[t]:n},so(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else if(e===`delivery`||e===`snapshot`||io.has(e)){let i=this.deliveries(e);i[t]={value:n,...r===void 0?{}:{expiresAt:this.now()+r}},so(this.recordsFile(e),`${JSON.stringify(i)}\n`)}else e===`note`?so(this.noteFile(t),String(n)):this.refuse(e)}remove(e,t){if(ro.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],so(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}if(e===`delivery`||e===`snapshot`||io.has(e)){let n=this.deliveries(e);return t in n&&(delete n[t],so(this.recordsFile(e),`${JSON.stringify(n)}\n`),!0)}if(e===`note`){let e=this.noteFile(t),n=O.existsSync(e);return O.rmSync(e,{force:!0}),n}return!1}async putMany(e,t){for(let n of t)await this.put(e,n.id,n.value)}async list(e,t={}){return ao.has(e)?this.derived.list(e,t):this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t}))}async delete(e,t){if(ao.has(e))return this.derived.delete(e,t);await this.serial(()=>this.remove(e,t))}async create(e,t,n,r={}){return ao.has(e)?this.derived.create(e,t,n,r):this.serial(()=>!this.entries(e).some(([e])=>e===t)&&(this.write(e,t,n,r.ttlMs),!0))}claimDeliveryLease(e,t,n){return this.serial(()=>{if(this.deliveries()[e])return;let r=this.deliveries(`snapshot`)[`delivery:${e}`]?.value?.failures??0;return this.write(`delivery`,e,{owner:t,failures:r},n),r})}updateDeliveryLease(e,t,n,r={ttlMs:3e4}){return this.serial(()=>{if(this.deliveries()[e]?.value?.owner!==t)return!1;if(!n)this.remove(`delivery`,e),this.remove(`snapshot`,`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};this.write(`delivery`,e,t,r.ttlMs),n.next!==void 0&&this.write(`snapshot`,`delivery:${e}`,t,864e5)}return!0})}async updateDelivery(e,t,n,r={}){return this.serial(()=>this.entries(`delivery`).find(([t])=>t===e)?.[1]?.owner===t&&(n===void 0?this.remove(`delivery`,e):this.write(`delivery`,e,n,r.ttlMs),!0))}async take(e,t){return ao.has(e)?this.derived.take(e,t):this.serial(()=>this.remove(e,t))}};function lo(e){let t=T.resolve(e);for(;!O.existsSync(T.join(t,`.git`));){let e=T.dirname(t);if(e===t)return Promise.resolve(void 0);t=e}return new Promise(t=>Ct(`git`,[`log`,`-1`,`--format=%H`,`--`,`.`],{cwd:e},(e,n)=>t(e?void 0:n.trim()||void 0)))}async function uo(e,t,n,r){let i=await be(t,n),a=await Promise.all(i.filter(e=>!r||e.id===r).map(async t=>{let n=t.usage?{settings:t.usage}:{};if(t.builtin){let{record:r,version:i}=await R(e,t.id);if(!r)return;let a={...r,settings:void 0,...n,local:!0};return await e.put(`agent`,t.id,a),{record:a,version:i}}if(!t.dir)return;let r=await lo(t.dir),i=O.statSync(T.join(t.dir,`agent.json`)),a=T.join(t.dir,`system.md`),o={agent:t.id,version:1,definition:t.definition,systemPrompt:O.existsSync(a)?O.readFileSync(a,`utf8`):``,files:_r(t.dir),...r?{commit:r}:{},importedFrom:`local:${t.dir}`,createdAt:i.mtimeMs},s={id:t.id,name:t.name,...t.definition.description?{description:t.definition.description}:{},source:T.resolve(t.dir)===c(`agents`,t.id)?`home`:`repo`,path:t.dir,currentVersion:1,...n,local:!0,...r?{commit:r}:{},createdAt:i.birthtimeMs||i.mtimeMs,updatedAt:i.mtimeMs};return await e.put(`agentversion`,or(t.id,1),o),await e.put(`agent`,t.id,s),{record:s,version:o}}));if(!r){let t=new Set(i.map(e=>e.id));for(let n of await sr(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return a.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function fo(e,t,n,r){let i=(await be(e,t)).find(e=>e.id===n&&!e.builtin)?.dir??c(`agents`,n),a={...r.files,"agent.json":`${JSON.stringify(r.definition,null,2)}\n`,"system.md":r.systemPrompt};for(let[e,t]of Object.entries(a))O.mkdirSync(T.dirname(T.join(i,e)),{recursive:!0}),O.writeFileSync(T.join(i,e),t)}async function po(e,t,n){let r=(await be(e,t)).find(e=>e.id===n&&!e.builtin);if(!r?.dir)throw Error(`No local agent named "${n}".`);return T.resolve(r.dir)===c(`agents`,n)&&(O.rmSync(r.dir,{recursive:!0}),!0)}var U=class extends Error{status;fix;constructor(e,t=400,n){super(e),this.status=t,this.fix=n}};function mo(e,t){if(t.cwd===void 0)return;if(!e.local)throw new U(`cwd is available on a local server only`);let n=$n(t.cwd);if(!n.ok)throw new U(n.detail);return n.folder.path}const ho=65536,go=/^[a-z0-9][a-z0-9_-]*$/i,_o=new Set([`claude`,`codex`,`custom`]),vo=new Set([`low`,`medium`,`high`]);function yo(e){let t=e.flow??`default`;if(!go.test(t))throw new U(`Invalid flow "${t}"`);if(e.prompt!==void 0&&typeof e.prompt!=`string`)throw new U(`prompt must be text`);if(t==="default"&&!e.prompt?.trim())throw new U(`prompt is required`);if((e.prompt?.length??0)>ho)throw new U(`prompt is longer than 64 KB`);if(e.repo!==void 0&&!/^[\w.-]+\/[\w.-]+$/.test(e.repo))throw new U(`repo must be owner/name`);if(e.pr!==void 0&&(!Number.isInteger(e.pr)||e.pr<1||!e.repo))throw new U(`pr needs a repo and a pull request number`);if(e.engine!==void 0&&!_o.has(e.engine))throw new U(`Unknown engine "${e.engine}"`);if(e.effort!==void 0&&!vo.has(e.effort))throw new U(`Unknown effort "${e.effort}"`);if(e.permissions!==void 0&&!(e.permissions in ce))throw new U(`Unknown permissions "${e.permissions}"`);if(e.mcp!==void 0&&(!Array.isArray(e.mcp)||!e.mcp.every(e=>go.test(e))))throw new U(`mcp must list server names`);if(e.outputSchema!==void 0&&(!e.outputSchema||typeof e.outputSchema!=`object`||Array.isArray(e.outputSchema)))throw new U(`outputSchema must be an object`);if(e.args!==void 0&&(typeof e.args!=`object`||Array.isArray(e.args)))throw new U(`args must be an object`)}async function bo(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await El(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)try{let r=await n.auth.token(wc(e,i),N(e.config,a.credentials));if((await n.repos.list(i,r)).includes(t))return{integration:n,installation:i,app:a,token:r}}catch{}}throw new U(`No install in this workspace reaches ${t}`,404)}async function xo(e,t,n,r){let i=n.repo,{integration:a,installation:o,app:s,token:c}=await bo(e,i),l=await a.repos.get(i,c);return{event:{integration:a.id,type:n.pr?`pull_request`:`task`,appId:s.id,installationId:o.id.slice(s.id.length+1),deliveryId:t,actor:{id:r??``},text:n.prompt??``,...n.pr?{chat:{thread:a.repos.pullRequestThread(i,n.pr)}}:{},repo:n.pr?{...l,ref:`refs/pull/${n.pr}/head`}:l},author:a.author?.(s.name)??s.name}}async function So(e,t,n){yo(n);let r=mo(e,n),i=(e.now??Date.now)(),a=e.session?.user.id,o=n.agent??`coder`;e.local&&await uo(e.store,e.local.cwd,e.integrations);let s=()=>e.store.taskInputs?e.store.taskInputs(o,a,n.engine):R(e.store,o),c=await s();await vr(e.store,i,o,c)&&(c=await s());let{record:l,version:u}=c,d=await Yn(e,{requester:a,runner:n.runner,agent:u?.definition.runner}).catch(e=>{throw new U(e.message)});if(!l||!u)throw new U(`No agent "${o}"`,404);let f=gr(l,u,{...n.engine?{engine:n.engine}:{},...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{},...n.permissions?{permissions:n.permissions}:{}},e.integrations),p=we(f),m=e.store.taskInputs?c.credential:(await Ta(e.store,p.engine,a))?.id,h=p.engine??`claude`;if(!m&&d.runner!==`http`&&!await cl(e,h))throw new U(`No ${h} credential is connected`,409,Wa(e,h));let g=`${i.toString(36)}-${k(4).toString(`hex`)}`,_=n.repo?await xo(e,g,n,a):void 0,v={id:g,source:t,agent:f.id,flow:n.flow??`default`,...d,permissions:p.permissions,..._?{event:_.event,author:_.author}:{},...r&&!_?{cwd:r}:{},...n.prompt?{prompt:n.prompt}:{},...n.args?{args:n.args}:{},...n.mcp?.length?{mcp:n.mcp}:{},definition:f.definition,...m?{credential:m}:{},...a?{requester:a}:{},...f.files?{files:f.files}:{},...f.usage?{usage:f.usage}:{},tools:{},...e.session||n.outputSchema?{context:{...e.session?{user:{name:e.session.user.name,email:e.session.user.email}}:{},...n.outputSchema?{outputSchema:n.outputSchema}:{}}}:{}};return e.local&&d.runner===`local`&&!d.runnerId?Kc(e,v):(await e.queue.enqueue(e.organizationId,v,i,void 0,e.config.maxQueued??1e3),{task:v,status:`queued`,attempts:0,createdAt:i,updatedAt:i})}function Co(e){return e.turns?e.turns:[...e.task.context?.turns??[],{prompt:e.task.prompt??e.task.event?.text??e.task.name??``,result:e.result,error:e.error,finishedAt:e.finishedAt,...[`completed`,`failed`,`cancelled`].includes(e.status)?{logSeq:e.logSeq}:{}}]}async function wo(e,t,n,r,i={}){if(r!==void 0&&(!r||typeof r!=`object`||Array.isArray(r)))throw new U(`outputSchema must be an object`);if(!n.trim())throw new U(`text is required`);if(n.length>ho)throw new U(`text is longer than 64 KB`);let{model:a,effort:o,permissions:s}=i;if(a!==void 0&&(typeof a!=`string`||!a.trim()))throw new U(`model must be text`);if(o!==void 0&&!vo.has(o))throw new U(`Unknown effort "${o}"`);if(s!==void 0&&!(s in ce))throw new U(`Unknown permissions "${s}"`);let c=e=>Object.keys(ce).indexOf(e??`auto`);if(s!==void 0&&c(s)>c(t.task.permissions))throw new U(`permissions can only be lowered on a resumed task (it runs ${t.task.permissions??`auto`})`);if(e.session&&t.task.requester&&t.task.requester!==e.session.user.id)throw new U(`Only the member who asked can continue this task`,403);let l=(e.now??Date.now)(),u=t.task.context?.messages??[],d=String(t.finishedAt??l),f=[...u,{user:`user`,text:t.task.prompt??t.task.event?.text??``,ts:String(t.createdAt)},{user:`agent`,text:t.result?.output??t.error??``,ts:d}].slice(-20),{note:p,...m}=t.task.context??{},h=Co(t);h.at(-1).finishedAt??=l;let g={task:{...t.task,prompt:n,...a||o?{usage:{...t.task.usage,...a?{model:a}:{},...o?{effort:o}:{}}}:{},...s?{permissions:s}:{},context:{...m,...r?{outputSchema:r}:{},messages:f,turns:h}},status:`queued`,attempts:0,generation:(t.generation??0)+1,...t.logSeq===void 0?{}:{logSeq:t.logSeq},...t.logBytes===void 0?{}:{logBytes:t.logBytes},createdAt:t.createdAt,updatedAt:l};if(!await e.queue.continueTask(e.organizationId,t.task.id,g.task,l,{attempts:t.attempts,tokenHash:t.tokenHash??null,generation:t.generation??0}))throw new U(`Task is already active`,409);return g}const To={principalPerMinute:300,ipPerMinute:60,authPerMinute:20,registerPerMinute:10,pairingPerMinute:5,concurrentTasks:10};var Eo=class{buckets=new Map;sweptAt;startedAt;requests=0;rejections=0;constructor(e=Date.now()){this.startedAt=this.sweptAt=e}consume(e,t,n){if(n-this.sweptAt>=6e4){for(let[e,t]of this.buckets)n-t.at>=6e4&&this.buckets.delete(e);this.sweptAt=n}let r=this.buckets.get(e),i=r?Math.min(t,r.tokens+Math.max(0,n-r.at)*t/6e4):t,a=i<1;if(this.buckets.set(e,{tokens:a?i:i-1,at:n}),!a)return;this.rejections++;let o=Math.max(1,Math.ceil((1-i)*60/t));return S({error:`Too many requests. Try again in ${o} seconds.`},429,{"retry-after":String(o)})}};const Do=[[e=>e===`/admin/runners/pair`,`pairing`],[e=>e===`/runners/register`,`register`],[e=>e.startsWith(`/admin/`)||e.startsWith(`/runners/`)],[e=>e.startsWith(`/api/auth`)||e===`/login`||e===`/dash/token`,`auth`]];async function Oo(e,t,n){let r=new URL(e.url).pathname,i=Do.find(([e])=>e(r));if(!i)return(r===`/dash`||r.startsWith(`/dash/`))&&t.auth&&!await t.auth.session(e.headers)?ko(t,void 0,n,`auth`)??{}:{};let a=r.startsWith(`/admin/`)?await Ji(e,t):void 0;return ko(t,r===`/runners/register`?await Xi(e,t):a&&!(a instanceof Response)?a.session?`user:${a.session.user.id}`:`admin`:void 0,n,i[1])??{scope:a}}function ko(e,t,n,r){let i=e.limits??=new Eo((e.now??Date.now)()),a={...To,...e.config.limits},o=(e.now??Date.now)(),s=t??`ip:${n}`,c=i.consume(s,t?a.principalPerMinute:a.ipPerMinute,o);return c||!r?c:r===`pairing`?i.consume(`pair:${s}`,a.pairingPerMinute,o):i.consume(`${r}:ip:${n}`,r===`auth`?a.authPerMinute:a.registerPerMinute,o)}function Ao(e,t,n){let r;return Promise.race([e,new Promise((e,i)=>{r=setTimeout(()=>i(Error(`${n} timed out`)),t),r.unref?.()})]).finally(()=>clearTimeout(r))}async function jo(e,t,n){try{await Ao(e.stop(t),1e4,`runner stop`)}catch(e){console.error(`coder server: runner stop ${n} failed`,e)}}async function Mo(e,t,n,r={}){try{await Ao(Ei(e,t),1e4,`runner logs`)}catch(e){console.error(`coder server: runner logs ${t.task.id} failed`,e)}return e.queue.finish(e.organizationId,t.task.id,{status:`failed`,error:n},(e.now??Date.now)(),{attempts:t.attempts,tokenHash:t.tokenHash??null,generation:t.generation??0,...r})}async function No(e,t,n){if(e.local&&t.handle?.startsWith(`cli:`))return Hc(e,t,n);let r={handle:t.handle??null,lastSeenAt:t.lastSeenAt??null,updatedAt:t.updatedAt};if(!t.handle)return n-(t.lastSeenAt??t.startedAt??t.updatedAt)<(e.config.taskStallMs??3e5)?!1:t.attempts>=(e.config.taskAttempts??2)?Mo(e,t,`runner start was interrupted`,r):e.queue.requeue(e.organizationId,t.task.id,n,{generation:t.generation??0,attempts:t.attempts,tokenHash:t.tokenHash??null,...r});let i=await F(e,t.task);if(t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs)return i&&await jo(i,t.handle,t.task.id),Mo(e,t,`timeout`);if(!i||n-(t.lastSeenAt??t.startedAt??t.updatedAt)<(e.config.taskStallMs??3e5))return!1;let a=await Ao(i.status(t.handle),1e4,`runner status`);return a.state===`exited`&&Mo(e,t,`runner exited${a.code===void 0?``:` with code ${a.code}`}`,{handle:t.handle,lastSeenAt:t.lastSeenAt??null})}async function Po(e,t,n){let r=e.now??Date.now,i=e.config.limits?.concurrentTasks??To.concurrentTasks,a=e.config.store===`postgres`?e.config.maxTasks:Math.min(i,e.config.maxTasks??i);if(t){let t=await e.queue.running(),n=0;for(let i of t)await No(j(e,i.organizationId),i.status,r()).catch(()=>!1)&&n++;if(a!==void 0&&t.length-n>=a)return}let o=[];for(;;){let t=e.local?Lc(e.local.cwd,!1).filter(e=>e.status===`running`||e.status===`waiting`):[],s=t.length?new Set((await e.queue.running()).flatMap(e=>[e.status.task.id,...e.status.handle?.startsWith(`cli:`)?[e.status.handle.slice(4)]:[]])):new Set,c=t.filter(t=>!s.has(t.task.id)&&!s.has(f(t.task.cwd??e.local.cwd,t.task.id)?.flowRunId??``)).length,l=a===void 0?void 0:a-c;if(l!==void 0&&l<=0)break;let u=await e.queue.claim(r(),l,n,i);if(n=!1,!u)break;let d=j(e,u.organizationId),p=u.status;if(await Vc(d,p)){if(n=u.more,!u.more)break;continue}let m=await F(d,p.task);if(!m){await Mo(d,p,`No runner available: ${p.task.runner}`);continue}let h=p,g={generation:p.generation??0,attempts:p.attempts,tokenHash:p.tokenHash??null,statuses:[`running`,`waiting`]},_;try{let e=m.start(p.task,{CODER_SERVER:d.local&&m.kind===`local`?`http://localhost:${d.local.port}`:d.config.publicUrl??``,CODER_TASK_TOKEN:u.token,CODER_INBOX_MODE:m.push?`push`:`poll`},m.kind===`vercel-sandbox`?(await Pc(d,p.task)).env:void 0);if(_=await Ao(e,3e4,`runner start`).catch(t=>{throw e.then(e=>jo(m,e,p.task.id),()=>{}),t}),await d.queue.patchTask(u.organizationId,p.task.id,{handle:_},r(),g)||await jo(m,_,p.task.id),n=u.more,!u.more)break}catch(e){_!==void 0&&await jo(m,_,p.task.id);let t=e instanceof Error?e.message:String(e);if(p.attempts<(d.config.taskAttempts??2)){o.push({...u,status:h});continue}await Mo(d,h,t)}}for(let t of o)await j(e,t.organizationId).queue.requeue(t.organizationId,t.status.task.id,r(),{attempts:t.status.attempts,tokenHash:t.status.tokenHash})}function Fo(e,t=!1,n=!1,r=!1){let i=e.queue.scheduler??={},a=t?i.waiting:void 0;if(a)return a;let o=i.running??Promise.resolve(),s=()=>(i.waiting===c&&delete i.waiting,Po(e,n,r)),c=o.then(s,s);return i.waiting=c,i.running=c.catch(()=>{}),c}function Io(e,t=!1){let n=Fo(e,!0,!1,t).catch(()=>{});e.waitUntil&&e.waitUntil(n)}function Lo(e,t){return qt(e,`link-start`,`*`,JSON.stringify(t),3e5)}const Ro=6e4,zo=864e5,Bo=262144,Vo=[`model`,`engine`,`effort`],Ho=[`Usage:`,"• `/setup model <name>`. Sets the engine model. Also accepts `engine` and `effort`.","• `/setup show`. Shows the current settings."].join(`
5
- `);function Uo(e){return e.type===`command`}function Wo(e){let t=Object.entries(e??{}).filter(([,e])=>e);return t.length?`Current settings:\n${t.map(([e,t])=>`• ${e}: \`${t}\``).join(`
6
- `)}`:`No settings yet. A workspace admin can configure this agent in the dashboard.`}function Go(e){let[t=``,...n]=e.text.trim().split(/\s+/);return Vo.includes(t)&&n.join(` `).trim()!==``}async function Ko(e,t,n){let[r=``,...i]=e.text.trim().split(/\s+/),a=i.join(` `).trim(),o={...t.settings},s;return r?r===`show`?s=Wo(t.settings):Vo.includes(r)?a?(o[r]=a,s=`${r} set to \`${a}\`.`):s=`Give a value: \`/setup ${r} <name>\`.`:s=`Unknown setting \`${r}\`.\n${Ho}`:s=Ho,JSON.stringify(o)!==JSON.stringify(t.settings??{})&&await Tl(n,`installation`,t.id,{settings:o}),s}async function qo(e,t,n){let r=`${t.id}:${n.installationId}`,i=e.boundInstallation?.installation.id===r?e.boundInstallation.installation:await e.store.get(`installation`,r);return i&&!i.deletedAt?i:void 0}async function Jo(e,t,n){let r=await e.auth.linkedUser(t.id,n.actor.id).catch(()=>void 0);return r?.organizations?.includes(e.organizationId)?r:void 0}async function Yo(e,t,n,r,i,a,o=!1){let s=e.config.publicUrl?.replace(/\/$/,``),c=kt(),l=o||await e.store.create(`delivery`,`link:${t.id}:${r.actor.id}`,{at:a,owner:c},{ttlMs:864e5});if(!s||!l)return;let u=e=>`Link your Coder account so I can work for you here: ${e}`;try{if(t.auth.user){await i.post(u(`${s}/connect/${t.id}?installation=${encodeURIComponent(n.id)}`));return}let a=await Lo(e,{platform:t.id,platformUserId:r.actor.id});await i.whisper(u(`${s}/connect?token=${encodeURIComponent(a)}`))}catch(n){throw o||await e.store.updateDelivery(`link:${t.id}:${r.actor.id}`,c,void 0).catch(()=>{}),n}}function Xo(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e in t.definition.integrations))}async function Zo(e,t,n){let r={};n.repo?r[n.integration]={repo:{owner:n.repo.owner,name:n.repo.name}}:n.chat&&(r[n.integration]={thread:n.chat.thread.id});for(let[n,i]of Object.entries(t.connections??{})){if(i.kind!==`installation`)continue;let t=(await e.store.get(`installation`,i.id))?.settings?.configRepo,a=t&&/^([^/]+)\/([^/]+)$/.exec(t);a&&(r[n]={repo:{owner:a[1],name:a[2]}})}return r}function Qo(e,t){return`<!-- coder:setup -->\nCoder is installed, but no engine is connected. [Connect ${t}](${Wa(e,t)}).`}async function $o(e,t,n,r){let i=Q({agent:n,requester:r,event:t}),a=await ts(e,i)??await e.store.get(`snapshot`,`session:${i}`);if(!a||a.requester!==r||!t.actor.id||a.actor!==t.actor.id)return;let s=await e.store.get(`task`,a.id);if(s&&[`queued`,`running`,`waiting`].includes(s.status)&&Q(s.task)===i)return s.task.id;let c=f(e.local.cwd,a.id);if(!c){let t=(await e.store.list(`delivery`,{prefix:`delivery:`})).find(e=>e.value.session?.key===i&&e.value.session.id===a.id)?.value.pending;if(!t?.task||t.taskId!==a.id||Q(t.task)!==i)return;await Kc(e,t.task,t.taskId),c=f(e.local.cwd,a.id)}if(!c||c.agentId!==n)return;let l=o(e.local.cwd,c);return l.status===`running`||l.status===`queued`?l.id:void 0}async function es(e,t,n,r,i,a,o){let s=`delivery:${t.id}:${n.id}:${i.installationId}:${i.chat?.thread.id??``}:${i.deliveryId}`,c=await qo(e,n,i);if(!c||e.local&&await e.store.get(`delivery`,s).then(e=>e&&!e.pending))return{};if(!e.local)return rs(e,t,n,r,i,c,a,o,s);let l=JSON.stringify([i.appId,i.installationId,i.chat?.thread.id]),u=e.store.handoffs??=new Map,d=(u.get(l)??Promise.resolve()).catch(()=>{}).then(async()=>{let l=await rs(e,t,n,r,i,c,a,o,s);return await l.work,l});u.set(l,d);try{return await d}finally{u.get(l)===d&&u.delete(l)}}async function ts(e,t){let n=await e.store.list(`delivery`,{prefix:`delivery:`}),r=await e.store.get(`snapshot`,`session:${t}`);return[...n.map(e=>e.value.session),r&&{...r,key:t}].filter(e=>e?.key===t).sort((e,t)=>(t.version??0)-(e.version??0))[0]}async function ns(e,t,n,r,i,o,s=!1){let c=kt(),l={event:n,...o?{task:o,taskId:o.flow==="default"?a():He()}:{}},u;if(e.local&&!n.repo){let n=await e.store.get(`delivery`,t);if(n&&!n.pending)return{};if(l=n?.pending??l,l.task&&!l.taskId)throw Error(`Local delivery has no task binding`);if(u=n?.session,!u&&s&&l.task){let t=Q(l.task);u={key:t,id:l.taskId,version:((await ts(e,t))?.version??0)+1,requester:l.task.requester,actor:l.task.event.actor.id}}await e.store.put(`delivery`,t,{at:r(),owner:c,pending:l,...u?{session:u}:{}})}else if(!await e.store.create(`delivery`,t,{at:r(),owner:c,pending:l},{ttlMs:Ro}))return{};return{work:(async()=>{let n=Promise.resolve(),a=e.local?void 0:setInterval(()=>{n=n.then(async()=>{await e.store.updateDelivery(t,c,{at:r(),owner:c,pending:l},{ttlMs:Ro})}).catch(()=>{})},Ro/3);try{await i(l),a&&clearInterval(a),await n,await e.store.updateDelivery(t,c,{at:r(),...u?{session:u}:{}},{ttlMs:zo})}catch(r){throw a&&clearInterval(a),await n,(!e.local||!l.task)&&await e.store.updateDelivery(t,c,void 0).catch(()=>{}),r}})()}}async function rs(e,t,n,r,i,a,o,s,c){let u=t=>ns(e,c,i,o,t);if(Uo(i))return e.auth&&Go(i)&&!await Jo(e,t,i)?u(()=>Yo(e,t,a,i,s,o(),!0)):u(()=>Ko(i,a,e.store).then(e=>s.whisper(e)).then(()=>{}));let d=await Tc(e,t,a,r,Dc(i.repo,t.tools.presets.observe)),p=await jc(e,a,i,d),[m,h]=await Promise.all([e.loadAgent(n,a,i,p),e.auth&&i.actor.id?Jo(e,t,i):void 0]);if(!h&&e.auth&&i.actor.id&&t.events[i.type]?.addressed)return u(()=>Yo(e,t,a,i,s,o()));let g=h?.id,_=Qe(i,m);if(!_)return{};let v=i.chat&&_.flow==="default"&&t.events[i.type]?.steers,ee=t=>ns(e,c,i,o,async t=>{let n=t.task,r=await Kc(e,n,t.taskId);if(v){let i=await ts(e,Q(n));i&&i.id===t.taskId&&await e.store.put(`snapshot`,`session:${i.key}`,{...i,id:r.task.id})}},t,!!v);if(e.local&&!i.repo){let t=await e.store.get(`delivery`,c);if(t?.pending?.task){let e=t.pending.task;return Q(e)!==Q({agent:m.id,requester:g,event:i})||e.flow!==_.flow?{}:ee(e)}}let y=e.local&&!i.repo&&v?await $o(e,i,m.id,g):void 0;if(y){let t=await e.store.get(`task`,y),n=f(e.local.cwd,y);return!n||t?.status===`queued`?u(async()=>{t&&await gl(e,y,`steer`,{text:i.text},t.generation??0)}):n.threadId?u(()=>Le(e.local.cwd,n,i.text).then(()=>{})):u(async()=>{l(e.local.cwd,y,i.text)})}let te=we(m),ne=Xo(p,m),[re,ie,ae,b]=await Promise.all([Yn(e,{requester:g,agent:m.definition.runner}),Ta(e.store,te.engine,g),Zo(e,a,i),fn(e,t,a,i,ne,m,t.events[i.type]?.addressed&&t.history!==!1?s.recent:void 0,h??null)]);if(!ie&&re.runner!==`http`&&!await cl(e,te.engine??`claude`))return(!e.local||i.repo)&&v&&(await e.queue.deliver(e.organizationId,{id:`${i.deliveryId}-${m.id}`,source:i.integration,agent:m.id,flow:_.flow,...re,event:i,requester:g,definition:m.definition,tools:{}},o(),{key:c,ttlMs:864e5},!0,void 0,!1)).steered?{}:u(()=>s.post(Qo(e,te.engine??`claude`)).then(()=>{}));let oe=new Set(t.tools.presets.observe),se=_.tools[i.integration]??[];h&&t.auth.canWrite&&se.some(e=>!oe.has(e))&&!await t.auth.canWrite(i,d)&&(_.tools[i.integration]=se.filter(e=>oe.has(e)));let ce=Object.fromEntries(Object.entries(_.tools).filter(([e])=>e in ne).map(([t,n])=>{if(ae[t])return[t,n];if(t!==i.integration)return[t,[]];let r=new Set(e.integrations[t]?.tools.presets.observe??[]);return[t,n.filter(e=>r.has(e))]}).filter(([,e])=>e.length));if(Buffer.byteLength(JSON.stringify(i))>Bo)throw Error(`Event exceeds 256 KB`);if(Buffer.byteLength(JSON.stringify(b))>Bo)throw Error(`Task context exceeds 256 KB`);let le={id:`${i.deliveryId}-${m.id}`,source:i.integration,agent:m.id,flow:_.flow,...re,permissions:_.permissions??te.permissions,event:i,author:t.author?.(n.name)??n.name,definition:m.definition,...ie?{credential:ie.id}:{},...g?{requester:g}:{},...m.files?{files:m.files}:{},...m.usage?{usage:m.usage}:{},tools:ce,...Object.keys(ae).length?{toolScopes:ae}:{},...Object.keys(b).length?{context:b}:{}};return e.local&&!i.repo&&re.runner===`local`&&!re.runnerId?ee(le):e.queue.deliver(e.organizationId,le,o(),{key:c,ttlMs:zo},!!v,e.config.maxQueued??1e3)}var is=e({addressedTo:()=>fs,chatFor:()=>vs,deliver:()=>ms,eventReplies:()=>gs,later:()=>ps,renewInstallation:()=>ys,renewInstallations:()=>bs,threadReplies:()=>hs});async function as(e,t,n,r,i){let a=`${t.id}:${r}`,o=await gn(e,a),s=o?.boundInstallation?.installation.id===a?o.boundInstallation.installation:await o?.store.get(`installation`,a);if(!o||!s||s.deletedAt)throw Error(`${t.integration} installation ${r} is not bound to this server`);return Tc(o,e.integrations[t.integration],s,n,i)}function os(e){if(e._type===`chat:Thread`)return{...e,currentMessage:void 0};let{raw:t,replyTo:n,...r}=e;return{...r,raw:null,id:r.id.startsWith(`ephemeral:`)?``:r.id}}const ss=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),cs=(e,t)=>Object.keys(e.events).find(n=>e.events[n].on===t),ls=`(?![\\w-]|\\.\\w)`,us=e=>e.replace(/[ \t]{2,}/g,` `).trim();function ds(e,t){let n=t.reduce((e,t)=>e.replace(RegExp(`(^|[^\\w-])@${ss(t)}${ls}`,`gi`),`$1`),e);return n===e?void 0:us(n)}function fs(e,t){let n=ds(e,[t]);if(n!==void 0)return n;let r=RegExp(`^\\s*${ss(t)}${ls}[\\s,:;!.?-]*`,`i`);return r.test(e)?us(e.replace(r,``)):void 0}function ps(e,t,n,r){let i=r.catch(e=>console.error(`coder server: dispatch failed for ${t.id} event ${n.deliveryId}`,e));e.waitUntil&&e.waitUntil(i)}async function ms(e,t,n,r,i,a){let o=await gn(e,`${n.id}:${i.installationId}`);if(!o||!n.builtin&&o.organizationId!==e.organizationId)return;let s=await es(o,t,n,r,i,e.now??Date.now,a);return await s.work,s.taskId&&await Fo(o,!0,!1,!0),s.taskId}function hs(e,t,n){return{post:t=>n&&e.adapter.reply?e.reply(n,t):e.post(t),whisper:n=>t?e.postEphemeral(t,n,{fallbackToDM:!1}):Promise.resolve(null),async recent(){let t=[],n=0;for await(let r of e.allMessages)if(t.push({user:r.author.userName||r.author.userId,text:r.text,ts:r.metadata.dateSent.toISOString()}),t.length>10&&t.shift(),++n===1e3)break;return t}}}async function gs(e,t,n){if(!n.chat)return{post:async()=>{},whisper:async()=>{}};let r=await vs(e,t,{id:n.installationId,...n.repo?{repo:n.repo}:{}});return await r.initialize(),hs(r.thread(n.chat.thread.id),n.actor.id||void 0,n.chat.message?.id||void 0)}function _s(e,t,n,r,i,a,o=a.id){let s=r===`message`&&t.agent===`coder`?fs(a.text,De):void 0;if(r===`message`&&t.agent===`coder`&&s===void 0)return;let c=cs(e,s===void 0?r:`mention`);if(!c||a.author.isBot===!0)return;let l=e.event?e.event(c,i,a,t):{};if(!l)return;let u=(l.type??c)===cs(e,`mention`)?s??ds(a.text,[t.name,...n.self?[n.self]:[]])??a.text:a.text;return{integration:e.id,type:c,appId:t.id,installationId:n.id,deliveryId:Dt(`sha256`).update(`${t.id}\n${n.id}\n${i.id}\n${o}`).digest(`base64url`).slice(0,22),actor:{id:a.author.userId,...a.author.userName?{login:a.author.userName}:{}},text:u,chat:{thread:os(i.toJSON()),message:os(a.toJSON())},...n.repo?{repo:n.repo}:{},...l}}async function vs(e,t,n){let r=e.integrations[t.integration];if(!r)throw Error(`Unknown integration "${t.integration}"`);let i=N(e.config,t.credentials),a=await r.adapter({fetch:e.fetch??fetch,appId:t.id.slice(r.id.length+1),name:t.name,credentials:i,...n?{installationId:n.id,...n.self?{self:n.self}:{}}:{},token:(r,a)=>as(e,t,i,r,{...n?.repo?{repo:{owner:n.repo.owner,name:n.repo.name}}:{},...a}),isBound:async n=>{let r=`${t.id}:${n}`,i=await gn(e,r),a=i?.boundInstallation?.installation.id===r?i.boundInstallation.installation:await i?.store.get(`installation`,r);return!!(a&&!a.deletedAt&&(t.builtin||i?.organizationId===e.organizationId))}}),o=mt(e.chatState??new ht,t.id),s=new Ht({userName:t.name,adapters:{[r.id]:a},state:{...o,isSubscribed:async()=>!1},concurrency:`concurrent`,dedupeTtlMs:zo,logger:`error`});if(!n)return s;let c=async(a,o,s,c)=>{let l=_s(r,t,n,a,o,s,c);l&&ps(e,t,l,ms(e,r,t,i,l,hs(o,s.author,s)))};return s.onNewMention((e,t)=>c(`mention`,e,t)),s.onNewMessage(/[\s\S]*/,(e,t)=>c(`message`,e,t)),s.onReaction(async e=>{if(!e.added)return;let t=r.reactionId?.(e);if(!t)return;let n=new Ut({id:e.messageId,threadId:e.threadId,text:e.message?.text??``,formatted:e.message?.formatted??{type:`root`,children:[]},raw:e.raw,author:e.user,metadata:e.message?.metadata??{dateSent:new Date,edited:!1},attachments:[]});await c(`reaction`,e.thread,n,`reaction\n${t}\n${e.user.userId}\n${e.rawEmoji}`)}),s.onSlashCommand(`/setup`,async a=>{let o=cs(r,`command`);if(!o)return;let s=e=>a.channel.postEphemeral(a.user,e,{fallbackToDM:!1}),c={integration:r.id,type:o,appId:t.id,installationId:n.id,deliveryId:Dt(`sha256`).update(`${t.id}\n${n.id}\n${a.channel.id}\n${a.triggerId??a.text}`).digest(`base64url`).slice(0,22),actor:{id:a.user.userId,...a.user.userName?{login:a.user.userName}:{}},text:a.text.trim()};ps(e,t,c,ms(e,r,t,i,c,{post:s,whisper:s}))}),s}async function ys(e,t,n,r=`renew`){let i=e.integrations[t.integration];if(!i?.[r])return;let a=[],o=await vs({...e,waitUntil:t=>{a.push(t),e.waitUntil?.(t)}},t,{id:n});for(await o.initialize(),await i[r](o.getAdapter(i.id));a.length;)await Promise.all(a.splice(0))}async function bs(e,t=`renew`){for(let n of Object.values(e.integrations))if(n[t])for(let{key:r,organizationId:i}of await e.installations?.(n.id)??[]){let n=await j(e,i).store.get(`installation`,r),a=n&&await hn(e,n.app);a&&await ys(a.ctx,a.app,r.slice(a.app.id.length+1),t).catch(()=>{})}}const xs=`.coder/agents`;function Ss(e){return e.repo?`${e.repo.owner}/${e.repo.name}`:void 0}async function Cs(e,t,n,r){let i=await e.repos.readFile(t,`.coder/config.json`,n,r);return i===void 0?void 0:JSON.parse(i).agents}async function ws(e,t,n,r,i={}){for(let t of Object.values(e))if(!(!r.repo&&t.id===r.integration||!t.repos||!i[t.id]))return{contents:t,token:i[t.id]};let[a,o]=n.split(`/`);for(let{value:r}of await t.store.list(`app`)){if(r.agentsRepo!==n)continue;let i=e[r.integration];if(!i?.repos)continue;let s=(await t.store.list(`installation`,{prefix:`${r.id}:`})).find(e=>!e.value.deletedAt)?.value;if(s)try{let e=s.token?{...s,token:N(t.config,s.token)}:s;return{contents:i,token:await i.auth.token(e,N(t.config,r.credentials),{...a&&o?{repo:{owner:a,name:o}}:{},tools:i.tools.presets.observe}),app:r,installation:s}}catch{continue}}}function Ts(e,t){let n=t.cwd??E.cwd(),r=t.now??Date.now,i=new Map;async function a(t,n,r){let i=Ae(e),a=i&&r[i.id];if(!i?.repos||!a)return;let o=Ss(n);if(n.integration===i.id&&o)return Cs(i,o,a,n.repo?.ref);let s=t.settings?.configRepo;if(s)return Cs(i,s,a)}function o(e,t,n,o){let s=`${e.id}@${Ss(n)??t.settings?.configRepo??``}@${n.repo?.ref??``}`,c=r();for(let[e,t]of i)c-t.at>=6e4&&i.delete(e);let l=i.get(s);return l||(l={at:c,usage:a(t,n,o)},i.set(s,l)),l.usage}async function s(n,i,a,s){let c=await R(t.store,n.agent);c.record&&await vr(t.store,r(),n.agent,c)&&(c=await R(t.store,n.agent));let{record:l,version:u}=c;if(!l)return;if(!u)throw Error(`No version ${l.currentVersion} for agent "${l.id}".`);let d=await o(n,i,a,s),f=d&&typeof d==`object`?d[n.agent]:void 0;if(f===!1)throw Error(`Agent "${n.agent}" is disabled in ${Ss(a)??i.settings?.configRepo??n.agentsRepo}.`);return gr(l,u,f&&typeof f==`object`?f:void 0,e)}return async(i,a,o,c)=>{let l=(await be(n,e)).find(e=>e.id===i.agent&&!e.builtin);if(l)return l;let u=await s(i,a,o,c);if(u)return u;if(i.agentsRepo){let n=await ws(e,t,i.agentsRepo,o,c);if(n){await Ds(t.store,n.contents,i.agentsRepo,Ss(o)===i.agentsRepo?o.repo?.ref??`HEAD`:`HEAD`,n.token,r());let e=await s(i,a,o,c);if(e)return e;throw Error(`No agent "${i.agent}" in ${i.agentsRepo}.`)}}if(await vr(t.store,r(),i.agent,{})){let e=await s(i,a,o,c);if(e)return e}throw Error(i.agentsRepo?`No agent named "${i.agent}".`:`No built-in agent "${i.agent}".`)}}async function Es(e,t,n,r,i,a=``,o,s=0){let c={},l=o??await e.repos.listDir(t,a?`${n}/${a}`:n,r,i);for(let o of l){let u=a?`${a}/${o}`:o;if(u===`agent.json`||u===`system.md`)continue;let d=await e.repos.readFile(t,`${n}/${u}`,r,i);if(d!==void 0)c[u]=d;else if(s<20){let a=await e.repos.listDir(t,`${n}/${u}`,r,i);a.length&&!Mt(a,l)&&Object.assign(c,await Es(e,t,n,r,i,u,a,s+1))}}return c}async function Ds(e,t,n,r,i,a,o={}){let s=o.path??`.coder/agents`,c=/^[0-9a-f]{40}$/i.test(r)?r:await t.repos.commit(n,r,i)??r,l={repo:n,ref:o.branch??r,commit:c};r=c;let u=o.slugs??await t.repos.listDir(n,s,i,r);Te(u);let d=[];for(let o of u){let u=`${s}/${o}`,f=await t.repos.readFile(n,`${u}/agent.json`,i,r);if(f===void 0)continue;let p=JSON.parse(f),[m]=Ce({definitions:{[o]:{json:p,builtin:!1}},usage:void 0},{...Me,[t.id]:t});m&&d.push(await dr(e,{id:o,name:m.name,description:m.definition.description,source:`repo`,repo:n,path:u,definition:m.definition,systemPrompt:await t.repos.readFile(n,`${u}/system.md`,i,r)??``,files:await Es(t,n,u,i,r),commit:c,origin:l,importedFrom:`repo:${n}@${l.ref}`},a))}return d}async function Os(e,t){let n=e.config.publicUrl;if(!n||!t.length)return;let r=new Map(t.map(e=>[e.agent,e])),i=await e.store.list(`app`),a=(await Promise.all(i.filter(({value:e})=>r.has(e.agent)).map(async({id:t})=>e.store.withAppLock(t,async i=>{let a=await i.get(`app`,t);if(!a||!r.has(a.agent))return;let o=await cr(i,a.agent)??r.get(a.agent),s=e.integrations[a.integration]?.app.update;if(!s||!o.definition.integrations[a.integration])return;let c=`app-sync:${t}`,l=await i.get(`delivery`,c);if(l&&!l.pending&&l.version>=o.version&&Mt(l.definition,o.definition)||l&&l.version>o.version)return;let u={version:o.version,definition:o.definition,pending:!0};await i.put(`delivery`,c,u);try{let t=await s(a,N(e.config,a.credentials),{publicUrl:n,definition:o.definition,fetch:e.fetch??fetch,saveCredentials:async t=>{await i.put(`app`,a.id,{...a,credentials:M(e.config,t)})}});t&&await i.put(`app`,a.id,{...a,credentials:M(e.config,t)}),await i.put(`delivery`,c,{...u,pending:!1})}catch(e){let t=`Could not sync ${a.integration} app ${a.id}. ${e instanceof Error?e.message:String(e)}`;return await i.put(`delivery`,c,{...u,error:t}),t}})))).filter(Boolean);if(a.length)throw Error(a.join(`
7
- `))}function ks(){return{integration:`source`,type:`import`,appId:``,installationId:``,deliveryId:``,actor:{id:`admin`},text:``}}async function As(e,t,n,r=ks(),i){let a=await ws(e.integrations,{config:e.config,store:e.store},t,r);if(!a)return;let o=await Ds(e.store,a.contents,t,n,a.token,(e.now??Date.now)(),i?{branch:i}:{});return await Os(e,o),o}const js=/^[a-z0-9][a-z0-9_-]*$/i;async function Ms(e,t){let n=Pe(Fe(),`builtin`).map(({name:e})=>({name:e,scope:`builtin`}));if(!t)return S(n);try{let{integration:r,token:i}=await bo(e,t),a=(r.repos?await r.repos.listDir(t,`.coder/flows`,i):[]).map(e=>e.replace(/\.(ts|mjs|js)$/,``)).filter(e=>js.test(e));return S([...a.map(e=>({name:e,scope:`workspace`})),...n.filter(e=>!a.includes(e.name))])}catch(e){return W(e)}}async function Ns(e,t){if(!t)throw new U(`repo is required`);let{integration:n,token:r}=await bo(e,t);return S(await n.repos?.pullRequests(t,r)??[])}async function Ps(e,t){try{return S(Ws(await So(e,`dashboard`,t)),201)}catch(e){return W(e)}}async function Fs(e,t,n,r){try{return Ms(t,r.searchParams.get(`repo`))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Is(e,t,n,r){try{return await Ns(t,r.searchParams.get(`repo`))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Ls(e,t,n,r){let i=n.name;try{return Ps(t,{...await yc(e),flow:i})}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Rs(e,t,n,r){try{{let{post:n,...r}=await yc(e);if(!r.repo||!r.pr)throw new U(`repo and pr are required`);return Ps(t,{...r,flow:`review`,args:{post:n===!0}})}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}function zs(e,t,n){return(e.waitUntil??(e=>void e.catch(()=>{})))(t),Promise.resolve(S({tasks:n},202))}async function Bs(e,t,n,r,i,a){if(`installation`in i){let t=await gn(e,i.installation.installation.id),n=await t?.store.get(`installation`,i.installation.installation.id);return!t||!n||await Tl(t.store,`installation`,n.id,{account:i.installation.installation.account,deletedAt:i.installation.op===`delete`?a:void 0}),S({ok:!0})}if(`changes`in i){let r=i.changes;try{n.branch||await Tl(e.store,`app`,n.id,{branch:r.branch});let i=await As(e,r.repo,r.ref,{...ks(),integration:t.id,appId:n.id},r.branch);return i?S({imported:i.map(e=>e.agent)}):S({error:`No installed app can read ${r.repo}`},400)}catch(e){return S({error:e instanceof Error?e.message:String(e)},400)}}for(let a of i.events)ps(e,n,a,gs(e,n,a).then(i=>ms(e,t,n,r,a,i)));return S({accepted:i.events.length},202)}async function Vs(e,t,n){let r=t.integrations[n],i=await e.text(),a=r.target(e,i);if(a instanceof Response)return a;if(!a)return new Response(`Not addressed to an app`,{status:400});let o=`${r.id}:${a.app}`,s=t.webhookTarget?await t.webhookTarget(o,a.installation?`${o}:${a.installation}`:void 0):void 0,c=t.webhookTarget?s&&{ctx:{...j(t,s.organizationId),...s.bound?{boundInstallation:s.bound}:{}},app:s.app}:await hn(t,o);if(!c)return new Response(`Unknown app`,{status:404});let{ctx:l,app:u}=c,d=N(l.config,u.credentials),f=r.ownEvents?.(e,i,u,d);if(f&&`invalid`in f)return new Response(`Invalid signature`,{status:401});if(f)return Bs(l,r,u,d,f,(l.now??Date.now)());let p=(await vs(l,u,a.installation?{...a,id:a.installation}:void 0)).webhooks[r.id];return p(new Request(e.url,{method:`POST`,headers:e.headers,body:i}),{deduplicate:!1,waitUntil:e=>{let t=e.catch(e=>console.error(`coder server: webhook work failed for ${u.id}`,e));l.waitUntil&&l.waitUntil(t)}})}const Hs=new Set([`completed`,`failed`,`cancelled`]);function W(e){if(e instanceof U)return S({error:e.message,...e.fix?{fix:e.fix}:{}},e.status);throw e}function Us(e){let{id:t,name:n,source:r,agent:i,flow:a,event:o,prompt:s,cwd:c}=e.task;return{task:{id:t,...n?{name:n}:{},source:r,agent:i,flow:a,...c?{cwd:c}:{},...s?{prompt:s}:{},...o?{event:{integration:o.integration,type:o.type,text:o.text}}:{}},status:e.status,...e.status===`queued`?{statusReason:`Waiting for a task slot`}:{},attempts:e.attempts,createdAt:e.createdAt,startedAt:e.startedAt,finishedAt:e.finishedAt}}function Ws(e){let{tokenHash:t,handle:n,...r}=e;return{...r,...e.status===`queued`?{statusReason:`Waiting for a task slot`}:{},turns:Co(e),...e.task.credential?{credential:H(e.task.credential).label}:{}}}async function Gs(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=r.searchParams.has(`limit`)?C(r,500,2e3):void 0,c=z(t.store,i,o,s??500);c?.catch(()=>{});let l=await t.store.get(`task`,i);if(!l||t.local&&l.handle?.startsWith(`cli:`)&&l.task.flow==="default"){let e=l?.task.cwd??t.local?.cwd;if(!e)return S({error:`No task "${i}"`},404);let n=J(e,i,!0);return n?S({...n,...l?.answer?{answer:l.answer}:{},logs:Jc(e,i,-1,s??500)}):S({error:`No task "${i}"`},404)}let u=l.task.runner===`github-actions`&&l.handle?await Ei(t,l,o,s??500).catch(()=>c):await c;return S({...Ws(l),logs:u})}async function Ks(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;if(!n)return S({error:`No task "${i}"`},404);let r=await Y(e,n,i,void 0,t);return r.ok&&t.queue instanceof vl&&t.queue.tombstone(i),r}if(t.local&&a.handle?.startsWith(`cli:`)){let e=(t.now??Date.now)();await t.queue.cancel(t.organizationId,i,e,{attempts:a.attempts,tokenHash:a.tokenHash,generation:a.generation??0});let n=await t.store.get(`task`,i);if(n&&Z.includes(n.status)){await Hc(t,n,e);let r=await t.store.get(`task`,i);if(r&&Z.includes(r.status))return S({error:`Task is still stopping. Try again.`},409)}}else if([`running`,`waiting`].includes(a.status)&&a.handle)try{let e=await F(t,a.task);if(!e)return S({error:`Task runner is unavailable. Try again.`},409);await e.stop(a.handle)}catch{return S({error:`Task is still stopping. Try again.`},409)}return await hl(t,a)?(t.local&&(await t.store.delete(`snapshot`,`local-start:${i}`),await t.store.delete(`snapshot`,`completion:${i}`)),Io(t,!0),S({ok:!0})):S({error:`Task changed while deleting. Try again.`},409)}async function qs(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=r.searchParams.has(`limit`)?C(r,500,2e3):void 0,c=z(t.store,i,o,s??void 0);c?.catch(()=>{});let l=await t.store.get(`task`,i);if(!l||t.local&&l.handle?.startsWith(`cli:`)&&l.task.flow==="default"){let e=l?.task.cwd??t.local?.cwd;return!e||!J(e,i,!1)?S({error:`No task "${i}"`},404):S(Jc(e,i,o,s))}return S(([`running`,`waiting`].includes(l.status)||l.task.runner===`github-actions`)&&l.handle?await Ei(t,l,o,s).catch(()=>z(t.store,i,o,s)):await c)}async function Js(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`steer`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`steer is available only for default-flow tasks`},409);let o=await e.json().catch(()=>void 0);if(Hs.has(a.status)){let{text:e,outputSchema:n,model:r,effort:i,permissions:s}=o??{};try{let o=await wo(t,a,String(e??``),n,{model:r,effort:i,permissions:s});return Io(t,!0),S(Ws(o))}catch(e){return W(e)}}let s=await gl(t,i,`steer`,o,a.generation??0);return s?S(s):S({error:`Task "${i}" is no longer active`},409)}async function Ys(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`ask`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`ask is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);let o=await gl(t,i,`ask`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Xs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`approve`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`approve is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);if(!a.approval)return S({error:`Task "${i}" has no pending approval`},409);let o=await gl(t,i,`approve`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Zs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`cancel`,t):S({error:`No task "${i}"`},404)}let o=await t.queue.cancel(t.organizationId,i,(t.now??Date.now)(),{attempts:a.attempts,tokenHash:a.tokenHash??null,generation:a.generation??0});return o&&a.status!==`queued`&&await bl(t,i),o?S({ok:!0}):S({error:`No running or queued task "${i}"`},404)}async function Qs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`archive`,t):S({error:`No task "${i}"`},404)}let o=(t.now??Date.now)();return await t.queue.patchTask(t.organizationId,i,{archivedAt:o,autoArchived:void 0},o),S({ok:!0})}async function $s(e,t){if(!e.agent||!e.event?.integration)return S({error:`agent and event are required`},400);let n=t.integrations[e.event.integration];if(!n)return S({error:`Unknown integration "${e.event.integration}"`},400);let r=e.event.actor?.id;if(t.auth&&r){let e=await t.auth.linkedUser(n.id,r);if(e&&e.id!==t.session?.user.id)return S({error:`The event's actor is linked to another member`},403)}let i=(await t.store.list(`app`)).map(e=>e.value).find(t=>t.agent===e.agent&&t.integration===n.id);if(!i)return S({error:`No ${n.id} app for agent "${e.agent}" on this server.`},404);let a=(await t.store.list(`installation`)).map(e=>e.value).filter(e=>e.app===i.id&&!e.deletedAt),o=a.find(t=>t.id===`${i.id}:${e.event.installationId}`)??a[0];if(!o)return S({error:`The ${n.id} app for "${e.agent}" is not installed anywhere yet`},404);let s=t.now??Date.now,c={...e.event,appId:i.id,installationId:o.id.slice(i.id.length+1),deliveryId:`admin-${s()}-${kt()}`},l=await es(t,n,i,N(t.config,i.credentials),c,s,await gs(t,i,c));return zs(t,l.work??Promise.resolve(),l.taskId?[l.taskId]:[])}const ec=new Set([`queued`,`running`,`waiting`,`completed`,`failed`,`cancelled`]);async function tc(e,t,n,r){let i=await e.json().catch(()=>void 0);if(!i||typeof i!=`object`)return S({error:`A JSON body is required`},400);try{if(mo(t,i),i.event)return $s(i,t);let e=(i.source===`cli`?void 0:await zc(t,i))??await So(t,i.source===`cli`?`cli`:`dashboard`,i);return S(Ws(e),201)}catch(e){return W(e)}}function nc(e,t,n){let r=new Map(t.map(e=>[e.task.id,e]));for(let t of n)i(e,t,r.has(t.task.id))&&r.set(t.task.id,t);return[...r.values()]}async function rc(e,t,n,r){n.id;let i=r.searchParams.get(`status`);if(i&&i!==`active`&&!ec.has(i))return S({error:`Unknown status "${i}"`},400);let a=r.searchParams.get(`source`);if(a&&![`dashboard`,`cli`,`schedule`,...Object.keys(t.integrations)].includes(a))return S({error:`Unknown source "${a}"`},400);let o=r.searchParams.get(`agent`),s=r.searchParams.get(`q`)?.trim(),c={...o?{agent:o}:{},...a?{source:a}:{},...s?{q:s}:{},archived:r.searchParams.get(`archived`)===`1`},l=i===`active`?{statuses:Z}:i?{status:i}:{},u=e=>r.searchParams.get(`summary`)===`1`?e.map(Us):e.map(Ws);if(t.local){await Rc(t,t.local.cwd);let e=nc(t.local.cwd,Lc(t.local.cwd,c.archived),await t.queue.list(t.organizationId)).filter(e=>ll(e,{...c,...l})).sort(dl),n=C(r,at(r)?void 0:20);if(!at(r))return S(u(e.slice(0,n)));let i=ct(r),a=e.filter(e=>fl(e,i)),o=dt(a.slice(0,n+1),n,ul);return S({...o,items:u(o.items),...r.searchParams.get(`counts`)===`1`?{counts:{all:e.length,active:e.filter(e=>Z.includes(e.status)).length,waiting:e.filter(e=>e.status===`waiting`).length}}:{}})}if(await t.queue.archiveStopped(t.organizationId,(t.now??Date.now)()),!at(r)){let e=C(r,20),n=await t.queue.list(t.organizationId,{...c,...l,limit:e,summary:r.searchParams.get(`summary`)===`1`});return S(u(n))}let d=C(r),f=ct(r),p=r.searchParams.get(`counts`)===`1`&&!i&&!f&&t.queue.listWithCounts?await t.queue.listWithCounts(t.organizationId,{...c,limit:d+1,summary:r.searchParams.get(`summary`)===`1`}):void 0,[m,h]=await Promise.all([p?p.items:t.queue.list(t.organizationId,{...c,...l,summary:r.searchParams.get(`summary`)===`1`,...f?{before:f}:{},limit:d+1}),p?p.counts:r.searchParams.get(`counts`)===`1`?t.queue.counts(t.organizationId,{...c,...l}):void 0]),g=dt(m,d,ul);return S({...g,items:u(g.items),...h?{counts:h}:{}})}var G=class extends Error{};const ic=async e=>await e.get(`config`,`workspace`)??{};async function ac(e,t){let{sealed:n,...r}=await ic(e);if(!n)return r;let i=N(t,n);return{...r,mcp:Object.fromEntries(Object.entries(r.mcp??{}).map(([e,t])=>[e,{...t,...i[e]}]))}}function oc(){let e=ae();if(!O.existsSync(e))return{};try{return JSON.parse(O.readFileSync(e,`utf8`))}catch(t){throw new G(`Invalid JSON in ${e}: ${t.message}`)}}function sc(e){return e.mcp?{...e,mcp:Object.fromEntries(Object.entries(e.mcp).map(([e,t])=>[e,_c(t)]))}:e}async function cc(e){if(e.local)return sc(oc());let{sealed:t,...n}=await ic(e.store);return n}async function lc(e,t){return uc(e,e=>fc(e,t))}async function uc(e,t){let n=e.settings??={},r=(n.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e.local?t(e):e.store.withConfigLock(n=>t({...e,store:n})));n.configUpdate=r;try{return await r}finally{n.configUpdate===r&&delete n.configUpdate}}function dc(e){let t=te(e);if(t.length)throw new G(t.join(`; `))}async function fc(e,t){dc(t);let n=e.local?oc():await ac(e.store,e.config),r={},i={},a=Object.fromEntries(Object.entries(t.mcp??{}).map(([e,t])=>{let a=r=>t[r]&&Object.fromEntries(Object.entries(t[r]).map(([t,i])=>[t,i===gc?n.mcp?.[e]?.[r]?.[t]??``:i])),o=a(`env`),s=a(`headers`);return(o||s)&&(i[e]={...o?{env:o}:{},...s?{headers:s}:{}}),r[e]={...t,...i[e]},[e,_c(t)]}));if(e.local)return _e({...t,...t.mcp?{mcp:r}:{}}),cc(e);let o={...t,...t.mcp?{mcp:a}:{},...Object.keys(i).length?{sealed:M(e.config,i)}:{}};return await e.store.put(`config`,`workspace`,o),cc(e)}async function pc(e,t){return uc(e,async e=>{let n=structuredClone(e.local?oc():await ac(e.store,e.config));return t(n),fc(e,n)})}function mc(e,t){return uc(e,async e=>fc(e,hc(e.local?oc():await ac(e.store,e.config),t)))}function hc(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t;let n=e&&typeof e==`object`&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):{};for(let[e,r]of Object.entries(t))r===null?delete n[e]:Object.defineProperty(n,e,{value:hc(Object.hasOwn(n,e)?n[e]:void 0,r),writable:!0,enumerable:!0,configurable:!0});return n}const gc=`********`;function _c(e){let t=e=>e&&Object.fromEntries(Object.keys(e).map(e=>[e,gc]));return{...e,...e.env?{env:t(e.env)}:{},...e.headers?{headers:t(e.headers)}:{}}}async function vc(e,t){return e.withConfigLock(async e=>{let n=await ic(e);return!n.sealed||En(t,n.sealed)===xn(t.encryptionKey)?0:(await e.put(`config`,`workspace`,{...n,sealed:M(t,N(t,n.sealed))}),1)})}async function yc(e){let t=await e.json().catch(()=>void 0);if(!t||typeof t!=`object`)throw new G(`A JSON body is required`);return t}async function bc(e,t){try{return S(await pc(e,t))}catch(e){if(e instanceof G)return S({error:e.message},400);throw e}}async function xc(e,t,n,r){try{{let e=await cc(t);return S({config:e,effective:t.local?sc(me(t.local.cwd)):m(e)})}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Sc(e,t,n,r){try{{let n=await e.json().catch(()=>{throw new G(`A JSON body is required`)});return S(await mc(t,n))}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Cc(e,t,n,r){try{return S(await lc(t,await yc(e)))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}function wc(e,t){return t.token?{...t,token:N(e.config,t.token)}:t}function Tc(e,t,n,r,i){return t.auth.token(wc(e,n),r,i,async t=>{let r=await e.store.get(`installation`,n.id);if(r){let i=M(e.config,t);await e.store.put(`installation`,n.id,{...r,token:i}),n.token=i}})}async function Ec(e,t,n,r){if(!t.auth.user||!e.auth)return;let i=await e.auth.linkedUser(t.id,n.actor.id);if(!i?.token||!i.organizations?.includes(e.organizationId))return;let a=await t.auth.user.access(N(e.config,i.token),r,{fetch:e.fetch??fetch,now:(e.now??Date.now)()});return a.refreshed&&await e.auth.link(i,t.id,n.actor.id,{token:M(e.config,a.refreshed)}),a.accessToken}function Dc(e,t){return{...e?{repo:{owner:e.owner,name:e.name}}:{},tools:t}}async function Oc(e,t,n,r,i,a,o){return(o===`requester`?await Ec(e,t,r,i).catch(()=>void 0):void 0)??Tc(e,t,n,i,a)}const kc=e=>{let t=e&&/^([^/]+)\/([^/]+)$/.exec(e);return t?{owner:t[1],name:t[2]}:void 0};async function Ac(e,t,n,r){if(n.kind===`oauth`)return N(e.config,n.token);let i=await e.store.get(`installation`,n.id);if(!i||i.deletedAt)return;let a=await e.store.get(`app`,i.app),o=e.integrations[t];if(!a||!o)return;let s=r?r.toolScopes?.[t]?.repo:kc(i.settings?.configRepo);if(s)return o.auth.token(wc(e,i),N(e.config,a.credentials),Dc(s,r?r.tools[t]??[]:o.tools.presets.observe))}async function jc(e,t,n,r,i){let a={[n.integration]:r};return await Promise.all(Object.entries(t.connections??{}).map(async([t,r])=>{if(t!==n.integration)try{let n=await Ac(e,t,r,i);n&&(a[t]=n)}catch{}})),a}async function Mc(e,t){let n=t.event,r=e.integrations[n.integration];if(!r)throw Error(`Unknown integration "${n.integration}"`);let[i,a]=await Promise.all([e.store.get(`app`,n.appId),e.store.get(`installation`,`${n.appId}:${n.installationId}`)]);if(!i)throw Error(`Unknown app "${n.appId}"`);if(!a||a.deletedAt)throw Error(`Installation is gone`);let o=t.flow===`review`&&t.args?.post===!0,s=await Oc(e,r,a,n,N(e.config,i.credentials),Dc(t.toolScopes?.[n.integration]?.repo??n.repo,t.tools[n.integration]??(o?r.tools.presets.comment:[])),Ee(t.definition.integrations[n.integration],n.type)?.actAs),c=await jc(e,a,n,s,t),l=Object.fromEntries(Object.entries(c).filter(([e])=>e in t.tools));return l[n.integration]=s,l}async function Nc(e,t){let n=t.task,[r,i,a]=await Promise.all([n.event?Mc(e,t.task):{},e.local?{}:ac(e.store,e.config),Pc(e,n)]);if(n.runner!==`vercel-sandbox`)return{task:n,tokens:r,credential:a,config:i};let o=Object.fromEntries(Object.entries(a.env).map(([e,t])=>[e,e in Rn?`brokered`:t]));return{task:n,tokens:r,credential:{...a,env:o},config:i}}async function Pc(e,t){let n=t.credential?await e.store.get(`credential`,t.credential):(await Ta(e.store,t.usage?.engine??t.definition.engine,t.requester))?.value;if(n)return La(e.config,n);if(!t.runnerId&&!e.local)throw Error(`no-credential`);return{engine:t.usage?.engine??t.definition.engine??`claude`,env:{}}}var Fc=e({LOCAL_LOGINS:()=>nl,engineSignIn:()=>il,engineSignOut:()=>al,engineStatus:()=>sl,inspectLocalTask:()=>Hc,isLoginEngine:()=>rl,localLog:()=>Jc,localTask:()=>J,localTaskAction:()=>Y,localTasks:()=>Lc,localUsage:()=>Yc,machineSignedIn:()=>cl,pushLocalInbox:()=>qc,recoverLocalTasks:()=>Wc,runLocalTask:()=>Kc,startLocalTask:()=>zc,startQueuedLocalTask:()=>Vc,stopLocalTasks:()=>Gc,sweepLocalQueue:()=>Rc,syncLocalUsage:()=>Qc});const Ic=e=>!e.name?.startsWith(qe),K=e=>e?Date.parse(e):void 0;function q(e,n,r=!1){let i=K(n.createdAt)??0,a=t(T.join(b(e,n.id),`answers.json`)),o=n.status===`running`?h(b(e,n.id)).find(e=>!e.response):void 0,s=r&&!y.includes(n.status)?oe(e,n.id):null,c=r?le(e,n.id).filter(e=>!y.includes(n.status)||(K(e.at)??0)<(K(n.resumedAt)??i)).map(e=>{let t=e.error&&typeof e.error==`object`?e.error.message:void 0;return{prompt:e.prompt??n.prompt??``,result:{ok:e.status===0,output:e.finalMessage??t??``},...t?{error:t}:{},finishedAt:K(e.at)}}):[];r&&(y.includes(n.status)||!c.length||(c.at(-1)?.finishedAt??0)<(K(n.resumedAt)??i))&&c.push({prompt:n.currentPrompt??n.prompt??``,...s?{result:{ok:s.status===0,output:s.finalMessage??s.error?.message??``}}:{},...n.error?{error:n.error}:{},...y.includes(n.status)?{}:{finishedAt:K(n.completedAt)}});let l=n.flowRunId?Ve(n.flowRunId)?.name:void 0;return{task:{id:n.id,source:n.source??`cli`,agent:n.agentId??`coder`,flow:l??`default`,...n.name?{name:n.name}:l?{name:l===`review`?`Review`:l}:{},runner:`local`,...n.cwd?{cwd:n.cwd}:{},...n.permissions?{permissions:n.permissions}:{},...n.prompt?{prompt:n.currentPrompt??n.prompt}:{},definition:{integrations:{}},...n.engine?{usage:{engine:n.engine,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}}}:{},tools:{}},status:o?`waiting`:n.status,attempts:1,...o?{approval:o}:{},...a?{answer:a}:{},...s?{result:{ok:s.status===0,exitCode:null,output:s.finalMessage??s.error?.message??``},...s.tokens?{tokens:s.tokens}:{}}:{},...n.error?{error:n.error}:{},...n.fallbacks?.length?{fallbacks:n.fallbacks}:{},...n.archivedAt?{archivedAt:K(n.archivedAt)}:{},...n.autoArchived?{autoArchived:!0}:{},createdAt:i,startedAt:K(n.resumedAt)??i,...n.completedAt&&!y.includes(n.status)?{finishedAt:K(n.completedAt)}:{},updatedAt:K(n.updatedAt)??i,local:!0,...r?{turns:c}:{}}}function Lc(e,t){let n=Be(e);return(t?ve(e,{migrate:!1}):n).filter(Ic).map(n=>{let r=q(e,n);return t?{...r,archivedAt:r.archivedAt??r.updatedAt}:r})}async function Rc(e,t){let n=(e.now??Date.now)(),a=(await e.queue.list(e.organizationId,{archived:!1,statuses:[...se]})).filter(e=>r(e.finishedAt??e.updatedAt,n)&&i(t,e)).map(e=>e.task.id);a.length&&await e.queue.archiveStopped(e.organizationId,n,a)}async function zc(e,t,n){if(!e.local||t.repo||(t.flow??`default`)!=="default"||t.runner&&t.runner!==`local`)return;let r=mo(e,t)??e.local.cwd;await uo(e.store,r,e.integrations);let{version:i}=await R(e.store,t.agent??`coder`),o=await Yn(e,{requester:e.session?.user.id,runner:t.runner,agent:i?.definition.runner}).catch(e=>{throw new U(e.message)});if(!(o.runner!==`local`||o.runnerId)){if(yo(t),!n)return Bc(e,{id:a(),source:`dashboard`,agent:t.agent??`coder`,flow:`default`,runner:`local`,cwd:r,prompt:t.prompt,definition:{integrations:{}},tools:{}},{input:t,cwd:r});try{let e=t.agent&&t.agent!==`coder`?await Ge(r,t.agent,t.mcp?.join(`,`)):void 0,i=[],a=await ue({taskId:n,prompt:t.prompt??``,outputSchema:t.outputSchema,cwd:r,engine:t.engine??e?.engine,model:t.model??(t.engine?void 0:e?.model),effort:t.effort??(t.engine?void 0:e?.effort),permissions:t.permissions??e?.permissions,system:e?.system,mcp:e?e.mcp:t.mcp?.join(`,`),nativeMcp:e?.nativeMcp,...e?{agentId:t.agent}:{},source:`dashboard`,onFallback:e=>i.push(e)},{waitForStartup:!1});return q(r,i.length?v(r,a.taskId,{fallbacks:i}):a.task)}catch(e){throw e instanceof d?new U(e.message,409):e}}}async function Bc(e,t,n){let r=(e.now??Date.now)();await e.store.put(`snapshot`,`local-start:${t.id}`,n),await e.queue.enqueue(e.organizationId,t,r,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!0,!0);let i=await e.store.get(`task`,t.id);return i?.status===`queued`?i:J(n.cwd,t.id)??i}async function Vc(e,t){if(!e.local||t.task.runner!==`local`||t.task.runnerId||t.task.event?.repo)return!1;let n=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!n)return!1;try{let r=t.task.id,i=t.task.flow==="default"?f(n.cwd,t.task.id):void 0;if(i&&!n.resume)r=i.id;else if(n.resume){let e=f(n.cwd,t.task.id);if(!e)throw Error(`Local task is missing`);await Le(n.cwd,e,t.task.prompt??``,{outputSchema:t.task.context?.outputSchema,...n.overrides})}else n.input?await zc(e,{...n.input,prompt:t.task.prompt,outputSchema:t.task.context?.outputSchema??n.input.outputSchema},t.task.id):r=(await Kc(e,t.task,t.task.id,!0)).task.id;await e.store.put(`snapshot`,`local-start:${t.task.id}`,{...n,startedId:r});let a={attempts:t.attempts,tokenHash:t.tokenHash,generation:t.generation??0,statuses:[`running`,`waiting`]};if(!await e.queue.patchTask(e.organizationId,t.task.id,{handle:`cli:${r}`},(e.now??Date.now)(),a)){let e=f(n.cwd,r);return e&&await Re(n.cwd,e),!0}if(t.task.flow==="default"){let i={task:t.task,cwd:n.cwd,fence:a};await e.store.put(`snapshot`,`completion:${r}`,i),Uc(e,r,i);let o=bl(e,t.task.id);e.waitUntil&&e.waitUntil(o)}}catch(n){await e.queue.finish(e.organizationId,t.task.id,{status:`failed`,error:n instanceof Error?n.message:String(n)},(e.now??Date.now)(),{attempts:t.attempts,tokenHash:t.tokenHash})}return!0}async function Hc(e,t,n){if(t.status!==`running`&&t.status!==`waiting`)return!1;let r=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!r)return!1;let i={attempts:t.attempts,tokenHash:t.tokenHash,generation:t.generation??0,statuses:[`running`,`waiting`]};if(t.task.flow!=="default"){let r=Ve(t.task.id);if(r?.status===`running`&&(t.cancelRequestedAt!==void 0||t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs)){let n=e.store.localFlows?.get(t.task.id);n?(await n.stop(),await n.work.catch(()=>{})):r.pid!==process.pid&&await Ue(t.task.id),r=Ve(t.task.id)}return!r||r.status===`running`?!1:e.queue.finish(e.organizationId,t.task.id,{status:t.cancelRequestedAt===void 0?r.status===`completed`?`completed`:`failed`:`cancelled`,error:r.error},n,i)}let a=J(r.cwd,r.startedId??t.task.id);if(!a)return!1;if([`queued`,`running`,`waiting`].includes(a.status))if(t.cancelRequestedAt!==void 0||t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs){let e=f(r.cwd,r.startedId??t.task.id);e&&await Re(r.cwd,e),a=J(r.cwd,t.task.id)}else return!1;let o=a.status;return o!==`completed`&&o!==`failed`&&o!==`cancelled`?!1:e.queue.finish(e.organizationId,t.task.id,{status:o,result:a.result,error:a.error},n,i)}function Uc(e,t,n){let r=e.store.completionWatches??=new Map;if(r.has(t))return;let i={stopped:!1,work:Promise.resolve()};r.set(t,i),i.work=(async()=>{let r=`completion:${t}:${n.fence?.generation??0}`,a=await e.store.get(`delivery`,r);if(a&&!a.owner)return;if(a?.pid)try{process.kill(a.pid,0);return}catch(e){if(e.code!==`ESRCH`)return}let s=kt(),c={owner:s,pid:process.pid,pending:!0,posted:a?.posted??!1};if(a?.owner){if(!await e.store.updateDelivery(r,a.owner,c))return}else if(!await e.store.create(`delivery`,r,c))return;try{for(let a=0;a<5;a++)try{let a=null;for(;;){if(i.stopped)return;if(n.fence){let t=await e.store.get(`task`,n.task.id);if(!t||(t.generation??0)!==n.fence.generation||t.attempts!==n.fence.attempts||t.tokenHash!==n.fence.tokenHash||t.status===`queued`)return}let r=f(n.cwd,t);if(!r)return;let s=o(n.cwd,r);if(!y.includes(s.status)){let e=T.join(b(n.cwd,t),`result.json`),r=Math.max(K(s.completedAt)??0,K(s.resumedAt)??K(s.createdAt)??0);if(O.existsSync(e)&&O.statSync(e).mtimeMs>=r&&(a=oe(n.cwd,t)),a)break;if(s.error||s.status===`cancelled`){a={status:1,threadId:s.threadId??null,error:{message:s.error??`Task cancelled`}};break}}await new Promise(e=>setTimeout(e,100))}let l=await e.store.get(`task`,n.task.id);if(n.fence&&l&&(l.generation??0)===n.fence.generation&&l.attempts===n.fence.attempts&&l.tokenHash===n.fence.tokenHash&&await Hc(e,l,(e.now??Date.now)())&&Io(e,!0),!await e.store.updateDelivery(r,s,c))return;if(!c.posted&&n.task.source===n.task.event?.integration){let t=await e.store.get(`app`,n.task.event.appId);if(!t)throw Error(`Local completion has no app`);let{eventReplies:i}=await Promise.resolve().then(()=>is),o=await i(e,t,n.task.event);if(!await e.store.updateDelivery(r,s,c)||(await o.post((a.finalMessage??a.error?.message??``).trim()),c={...c,posted:!0},!await e.store.updateDelivery(r,s,c)))return}let u=T.join(b(n.cwd,t),`agent-note`),d=O.existsSync(u)?O.readFileSync(u,`utf8`).trim():(n.task.context?.note??``).trim();if(!await e.store.updateDelivery(r,s,c))return;d!==(n.task.context?.note??``).trim()&&(d?await e.store.put(`note`,dn(n.task),d):await e.store.delete(`note`,dn(n.task))),await e.store.updateDelivery(r,s,{posted:c.posted,at:Date.now()})&&(await e.store.get(`snapshot`,`completion:${t}`))?.fence?.generation===n.fence?.generation&&await e.store.delete(`snapshot`,`completion:${t}`);return}catch(e){if(a===4)throw e;console.error(`coder server: local completion ${t} attempt ${a+1} failed, retrying`,e);let n=Date.now()+5e3*2**a;for(;!i.stopped&&Date.now()<n;)await new Promise(e=>setTimeout(e,Math.min(100,n-Date.now())))}}finally{await e.store.updateDelivery(r,s,{...c,pid:void 0})}})().catch(e=>{console.error(`coder server: local completion ${t} failed`,e)}).finally(()=>{r.delete(t)})}async function Wc(e){if(e.local)for(let{id:t,value:n}of await e.store.list(`snapshot`,{prefix:`completion:`}))f(n.cwd,t.slice(11))&&Uc(e,t.slice(11),n)}async function Gc(e){await Promise.all([...e.store.localFlows?.values()??[]].map(async e=>{await e.stop(),await e.work.catch(()=>{})}));let t=e.store.completionWatches;if(t){for(let e of t.values())e.stopped=!0;await Promise.all([...t.values()].map(e=>e.work))}}async function Kc(e,t,r,i=!1){if(t.event?.repo){let n=(e.now??Date.now)(),i=r??t.id;return await e.store.get(`task`,i)||await e.queue.enqueue(e.organizationId,{...t,id:i},n,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!1,!0),await e.store.get(`task`,i)}if(!i){let n=mo(e,t)??e.local.cwd;return Bc(e,{...t,id:r??a(),cwd:n},{cwd:n})}let o=t.event?await Mc(e,t):{},s=t.event&&o[t.event.integration],c=mo(e,t)??e.local.cwd,l=await e.store.get(`task`,r??t.id),u={task:t,cwd:c,...l?{fence:{generation:l.generation??0,attempts:l.attempts,tokenHash:l.tokenHash,statuses:[`running`,`waiting`]}}:{}},d=t.flow!=="default"&&r?Ve(r):void 0;if(d){let i=n(c).find(e=>e.flowRunId===r),a=(e.now??Date.now)();return i?q(c,i):{task:t,status:d.status===`running`?`running`:d.status===`completed`?`completed`:`failed`,attempts:1,createdAt:a,updatedAt:a,local:!0}}if(t.flow==="default"){r??=a();let n=`completion:${r}`,i=await e.store.get(`snapshot`,n);if(i&&Q(i.task)!==Q(t))throw Error(`Local completion belongs to another session`);i||await e.store.create(`snapshot`,n,u);let o=T.join(b(c,r),`agent-note`);O.existsSync(o)||(O.mkdirSync(T.dirname(o),{recursive:!0}),O.writeFileSync(o,t.context?.note??``,{mode:384}))}let p=t.flow==="default"&&r?f(c,r):void 0;if(p)return p.status===`queued`&&!p.pid&&_(c,p.id),Uc(e,p.id,u),q(c,p);let m,h=new Promise(e=>m=e),g;g=Ke({cwd:c,agent:t.agent,flow:t.flow,task:t,taskId:r,toolEnvironment:{tokens:o},post:t.flow!=="default"&&t.source===t.event?.integration,...t.flow==="default"?{noteFile:T.join(b(c,r),`agent-note`)}:{},...s?{postToken:s}:{},source:t.source,onStart:n=>{(e.store.localFlows??=new Map).set(t.id,{stop:async()=>{n.requestStop(),await We(n.runId,n.runningIds())},work:g}),m(t.id)},onTask:n=>{t.flow==="default"&&Uc(e,n,u),m(n)}}).then(async n=>{t.flow!=="default"&&n.note!==void 0&&(n.note?await e.store.put(`note`,dn(t),n.note):await e.store.delete(`note`,dn(t)))}).finally(async()=>{if(e.store.localFlows?.delete(t.id),t.flow!=="default"){let n=await e.store.get(`task`,t.id);n&&n.attempts===u.fence?.attempts&&n.tokenHash===u.fence?.tokenHash&&(n.generation??0)===u.fence?.generation&&await Hc(e,n,(e.now??Date.now)()),Io(e,!0)}}),g.catch(()=>{});let v=await Promise.race([h,g.then(()=>void 0)]),ee=v?f(c,v):void 0,y=(e.now??Date.now)();return ee&&q(c,ee)||{task:t,status:t.flow!=="default"&&Ve(t.id)?.status===`running`?`running`:`completed`,attempts:1,createdAt:y,updatedAt:y,local:!0}}async function qc(e,t,n){let r=t.handle.slice(4),i=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!i)throw Error(`Local task launch is missing`);let a={generation:t.generation??0,seq:-1,answers:[]};for(let o of n){let n=await e.store.get(`task`,t.task.id);if(!n||n.attempts!==t.attempts||n.tokenHash!==t.tokenHash||(n.generation??0)!==o.generation||![`running`,`waiting`].includes(n.status))break;let s=f(i.cwd,r);if(!s)throw Error(`Local task is missing`);let c=o.kind===`cancel`?await Re(i.cwd,s):await Xe(i.cwd,{...s,name:void 0},o);o.kind===`ask`&&a.answers.push({seq:o.seq,value:c}),a.seq=o.seq}return a}function Jc(e,t,n=-1,r){let i=``;try{i=O.readFileSync(T.join(b(e,t),`log.jsonl`),`utf8`)}catch{}let a=i.split(`
8
- `).flatMap((e,t)=>{if(!e||t<=n)return[];let r=pt(e);if(!r)return[{seq:t,at:0,level:`out`,line:e}];let i=r.kind===`error`?`err`:[`status`,`info`,`steer`].includes(r.kind??``)?`sys`:`out`;return[{seq:t,at:K(r.at)??0,level:i,line:r.message??``,entry:r}]});return r===void 0?a:a.slice(0,r)}function J(e,t,n=!0){let r=f(e,t);return r&&Ic(r)?q(e,o(e,r),n):void 0}async function Y(e,n,r,i,a){let c=f(n,r);if(!c||!Ic(c))return Response.json({error:`No task "${r}"`},{status:404});let l=o(n,c),d=y.includes(l.status),p=e.method===`POST`?await e.json().catch(()=>({})):{},m=(e,t=409)=>Response.json({error:e},{status:t});if(e.method===`DELETE`&&!i){if(d&&await Re(n,l),Ie(n,l),a){let e=a.store.completionWatches?.get(r);e&&(e.stopped=!0,await e.work),await a.store.delete(`task`,r),await a.store.delete(`snapshot`,`local-start:${r}`),await a.store.delete(`snapshot`,`completion:${r}`),Io(a,!0)}return Response.json({ok:!0})}if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(i===`cancel`)return d?(await Re(n,l),Response.json({ok:!0})):m(`No running or queued task "${r}"`,404);if(i===`archive`)return u(n,l),a&&await a.queue.patchTask(a.organizationId,r,{archivedAt:(a.now??Date.now)(),autoArchived:void 0},(a.now??Date.now)()),Response.json({ok:!0});if(i===`steer`){let e=String(p.text??``);if(!e.trim())return m(`text is required`,400);let t=d?void 0:p.outputSchema,i=Object.fromEntries([`model`,`effort`,`permissions`].flatMap(e=>typeof p[e]==`string`&&p[e]?[[e,p[e]]]:[]));if(t!==void 0&&(!t||typeof t!=`object`||Array.isArray(t)))return m(`outputSchema must be an object`,400);try{if(!d&&a){let o=a.store.completionWatches?.get(r);o&&await o.work;let s=(a.now??Date.now)(),c=await a.store.get(`task`,r);c&&[`running`,`waiting`].includes(c.status)&&(await Hc(a,c,s),c=await a.store.get(`task`,r));let u={prompt:e,context:{...c?.task.context,...t?{outputSchema:t}:{}}};if(await a.store.put(`snapshot`,`local-start:${r}`,{cwd:n,resume:!0,...Object.keys(i).length?{overrides:i}:{}}),c){if(!await a.queue.continueTask(a.organizationId,r,u,s,{attempts:c.attempts,generation:c.generation??0}))return m(`Task is already active`)}else await a.queue.enqueue(a.organizationId,{...q(n,l).task,...u},s,void 0,a.config.maxQueued??1e3);await Fo(a,!1,!0,!0);let d=await a.store.get(`task`,r);return Response.json(d?.status===`queued`?{...d,statusReason:`Waiting for a task slot`}:J(n,r))}let o=await Le(n,l,e,{...typeof t==`object`&&t?{outputSchema:t}:{},...i});return Response.json(d?o:J(n,r))}catch(e){return m(e.message)}}if(i===`ask`){let e=String(p.question??p.text??``);if(!e.trim())return m(`question is required`,400);let i=await ze(n,l,e),a=i.finalMessage??i.error?.message??``,o=T.join(b(n,r),`answers.json`);return s(o,[...t(o)??[],a]),Response.json({ok:!0,answer:a})}if(i===`approve`){let e=h(b(n,r)).filter(e=>!e.response),t=String(p.approvalId??p.id??e[0]?.id??``);return e.some(e=>e.id===t)?(ne(b(n,r),t,p.decision===`deny`||p.decision===`decline`?`decline`:`accept`),Response.json({ok:!0})):m(`Task "${r}" has no pending approval`)}return new Response(`Not found`,{status:404})}function Yc(e,t=new Set,r=!0){let i=Xc(t);return[...n(e),...r?ve(e,{migrate:!1}):[]].filter(Ic).flatMap(t=>{let n=le(e,t.id);return Zc(t,n,!n.length&&!y.includes(t.status)?oe(e,t.id):null,i)})}function Xc(e){let t=new Map;for(let n of e){let e=n.lastIndexOf(`:`),r=n.slice(4,e),i=t.get(r)??[];i.push(Number(n.slice(e+1))),t.set(r,i)}return t}function Zc(e,t,n,r){let i=t.length?t:n?[{...n,at:e.completedAt??e.updatedAt??e.createdAt}]:[],a=r.get(e.id)??[];r.set(e.id,a);let o=K(e.createdAt)??0;return i.flatMap(t=>{let n=K(t.at);if(n===void 0||!Number.isFinite(n))return[];let r=K(e.resumedAt),i=r!==void 0&&r>=o&&r<=n?r:o,s=a.some(e=>e===n||e>o&&e<=n);return o=n,s?[]:(a.push(n),[[`cli:${e.id}:${n}`,{taskId:e.id,agent:e.agentId??`coder`,target:e.source??`cli`,...e.engine?{engine:e.engine}:{},...t.model??e.model?{model:t.model??e.model}:{},credential:`local`,runnerElapsedMs:Math.max(0,n-i),...t.tokens?{tokens:t.tokens}:{},at:n}]])})}function Qc(e){let t=e.local;return t.usageSync??=tl(e).finally(()=>t.usageSync=void 0)}async function $c(e){try{return JSON.parse(await O.promises.readFile(e,`utf8`))}catch{return null}}async function el(e){return(await Promise.all([`job.json`,`results.jsonl`,`result.json`].map(async t=>{let n=await O.promises.stat(T.join(e,t)).catch(()=>void 0);return n?`${n.mtimeMs}:${n.ctimeMs}:${n.size}`:``}))).join(`|`)}async function tl(e){let t=e.local;await t.cacheMaintenance;let n=de(),r=await $c(n),i=await e.store.list(`usage`,{prefix:`cli:`}),a=new Set(i.map(e=>e.id)),o=0,s=async()=>{++o%4==0&&await new Promise(e=>setImmediate(e))};if(t.archiveScan===void 0)for(let[t,n]of Object.entries(r?.rows??{}))a.has(t)||(await e.store.put(`usage`,t,n),a.add(t)),await s();let c=Xc(a),l=(await O.promises.stat(p(t.cwd)).catch(()=>void 0))?.mtimeMs??0,u={},d=new Set,f=!1;for await(let{id:n,dir:i,archived:a}of fe(t.cwd)){if(await s(),d.has(n))continue;let t=a?await el(i):void 0;if(a&&r?.counted?.[n]===t){u[n]=t,d.add(n);continue}let o=await $c(T.join(i,`job.json`));if(o){if(o.agent&&(o.engine=o.agent),d.add(n),Ic(o)){let t=(await O.promises.readFile(T.join(i,`results.jsonl`),`utf8`).catch(()=>``)).split(/\r?\n/).flatMap(e=>{try{return e?[JSON.parse(e)]:[]}catch{return[]}}),n=!t.length&&!y.includes(o.status)?await $c(T.join(i,`result.json`)):null;for(let[r,i]of Zc(o,t,n,c))await e.store.put(`usage`,r,i),f=!0,await s()}a&&(u[n]=t)}}if(f||r?.archive!==l||JSON.stringify(r?.counted)!==JSON.stringify(u)){let t=await e.store.list(`usage`,{prefix:`cli:`});await O.promises.mkdir(T.dirname(n),{recursive:!0});let r=re(n);try{await O.promises.writeFile(r,`${JSON.stringify({archive:l,counted:u,rows:Object.fromEntries(t.map(e=>[e.id,e.value]))})}\n`),await O.promises.rename(r,n)}finally{await O.promises.rm(r,{force:!0})}}t.archiveScan=l}const nl=`A local server stores no credentials. Tasks use this machine's own claude and codex sign-in.`,X={claude:{file:`claude`,args:[`auth`,`status`,`--json`],command:`claude auth login`,login:[`auth`,`login`],logout:[`auth`,`logout`],ok:e=>JSON.parse(e).loggedIn===!0},codex:{file:`codex`,args:[`login`,`status`],command:`codex login`,login:[`login`],logout:[`logout`],ok:()=>!0}},rl=e=>e in X;function il(e){let t=X[e];wt(t.file,t.login,{detached:!0,stdio:`ignore`}).on(`error`,()=>{}).unref()}function al(e){let t=X[e];return new Promise(e=>Ct(t.file,t.logout,{timeout:15e3},()=>e()))}function ol(e){return new Promise(t=>Ct(e.file,e.args,{timeout:15e3},(n,r)=>{try{t(!n&&e.ok(r))}catch{t(!1)}}))}async function sl(){let[e,t]=await Promise.all([ol(X.claude),ol(X.codex)]);return{claude:{signedIn:e,command:X.claude.command},codex:{signedIn:t,command:X.codex.command}}}async function cl(e,t){return!!e.local&&(t===`custom`||(await sl())[t]?.signedIn===!0)}const Z=[`queued`,`running`,`waiting`];function ll(e,t){let n=t.status?[t.status]:t.statuses;if(n&&!n.includes(e.status)||t.agent&&e.task.agent!==t.agent||t.source&&e.task.source!==t.source||t.archived!==void 0&&t.archived!==(e.archivedAt!==void 0))return!1;let r=t.q?.trim().toLowerCase();return!r||[e.task.prompt??e.task.event?.text,e.task.agent,e.task.id].some(e=>e?.toLowerCase().includes(r))}const ul=e=>({rank:ge(e.status),createdAt:e.createdAt,id:e.task.id}),dl=(e,t)=>g(ul(e),ul(t)),fl=(e,t)=>!t||g(ul(e),t)>0;function Q(e){let t=e.event;return JSON.stringify([t?.appId,t?.installationId,t?.chat?.thread.id,e.agent,e.requester,t?.actor.id])}function pl(e,t){return e.flow==="default"&&!!e.event?.actor.id&&Q(e)===Q(t)}const ml=6e5;async function hl(e,t){let n=t.task.id,r=t.generation??0,i={generation:r,attempts:t.attempts,tokenHash:t.tokenHash??null,handle:t.handle??null};if(e.queue instanceof vl)return e.queue.deleteTask(e.organizationId,n,i);let[{DrizzleStore:a},{task:o,taskTombstone:s},{and:c,eq:l,isNull:u,sql:d},{rows:f}]=await Promise.all([import(`./store-B0RLMUR9.js`),import(`./schema-DoNO0dPh.js`).then(e=>e.u),import(`drizzle-orm`),import(`./shared-D64pQ0XU.js`).then(e=>e.g)]);if(!(e.store instanceof a))throw Error(`Task store does not support fenced deletion`);let p=(e.now??Date.now)(),[m]=await f(e.store.db,d`with gone as (
9
- delete from ${o}
10
- where ${c(l(o.organizationId,e.organizationId),l(o.publicId,n),l(o.generation,r),l(o.attempts,i.attempts),i.tokenHash===null?u(o.tokenHash):l(o.tokenHash,i.tokenHash),i.handle===null?u(o.handle):l(o.handle,i.handle))}
11
- returning organization_id, public_id
12
- ), marked as (
13
- insert into ${s} (organization_id, public_id, deleted_at)
14
- select organization_id, public_id, ${new Date(p).toISOString()}::timestamptz from gone
15
- ), pruned as (
16
- delete from ${s}
17
- where deleted_at < ${new Date(p-ml).toISOString()}::timestamptz
18
- )
19
- select count(*)::int as deleted from gone`);return!!m?.deleted}async function gl(e,t,n,r,i){let a=await e.queue.appendInbox(e.organizationId,t,n,r,(e.now??Date.now)(),i);return a&&await bl(e,t),a}const _l=new Set([`completed`,`failed`,`cancelled`]);var vl=class{store;lock=Promise.resolve();tombstones=new Map;constructor(e){this.store=e}serial(e){let t=this.lock.then(e,e);return this.lock=t.catch(()=>{}),t}async read(e){return this.store.get(`task`,e)}async enqueue(e,t,n,r,i){return this.serial(()=>this.insert(t,n,r,i))}async insert(e,t,n,r){let i=n&&await this.store.get(`delivery`,n.key);if(i&&!i.pending)return!1;e=i?.pending?.task??e;let a=await this.read(e.id);if(!a&&r!==void 0&&(await this.store.list(`task`)).filter(e=>e.value.status===`queued`).length>=r)throw Error(`Organization task queue is full`);return n&&!i&&await this.store.put(`delivery`,n.key,{at:t,pending:{task:e}}),a||await this.store.put(`task`,e.id,{task:e,status:`queued`,attempts:0,createdAt:t,updatedAt:t}),n&&await this.store.put(`delivery`,n.key,{at:t},{ttlMs:n.ttlMs}),!0}async nextSeq(e){let t=await this.store.list(`inbox`,{prefix:`${e}:`}),n=(await this.store.list(`delivery`)).flatMap(t=>t.value.pending?.inbox?.id.startsWith(`${e}:`)?[t.value.pending.inbox.entry.seq]:[]);return Math.max((await this.read(e))?.inboxSeq??-1,...t.map(e=>e.value.seq),...n)+1}deliver(e,t,n,r,i,a,o=!0){return this.serial(async()=>{let s=await this.store.get(`delivery`,r.key);if(s&&!s.pending)return{};if(s?.pending?.inbox){let{taskId:e,id:i,entry:a}=s.pending.inbox,o=await this.read(e);if(o&&Z.includes(o.status)&&(o.generation??0)===a.generation&&pl(o.task,t))return await this.store.put(`task`,e,{...o,inboxSeq:Math.max(o.inboxSeq??-1,a.seq),updatedAt:n}),await this.store.put(`inbox`,i,a),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0};await this.store.delete(`delivery`,r.key),s=void 0}let c=i&&!s?.pending?.task?(await this.list(e,{statuses:Z,agent:t.agent,source:t.source})).find(e=>pl(e.task,t)):void 0;if(!c)return o&&await this.insert(t,n,r,a)?{taskId:t.id}:{};let l=await this.nextSeq(c.task.id),u={seq:l,generation:c.generation??0,at:n,kind:`steer`,value:{text:t.event.text}},d=`${c.task.id}:${String(l).padStart(8,`0`)}`;return await this.store.put(`delivery`,r.key,{at:n,pending:{inbox:{taskId:c.task.id,id:d,entry:u}}}),await this.store.put(`task`,c.task.id,{...c,inboxSeq:l,updatedAt:n}),await this.store.put(`inbox`,d,u),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0}})}claim(e,t){return this.serial(async()=>{let n=(await this.store.list(`task`)).map(e=>e.value);if(t!==void 0&&n.filter(e=>[`running`,`waiting`].includes(e.status)).length>=t)return;let r=n.filter(e=>e.status===`queued`).sort((e,t)=>e.createdAt-t.createdAt),i=r[0];if(!i)return;let a=pn(i.task.id,`default`,i.attempts+1),o={...i,tokenHash:a.hash,lastSeenAt:e,status:`running`,attempts:i.attempts+1,startedAt:e,updatedAt:e};return await this.store.put(`task`,o.task.id,o),{organizationId:`default`,status:o,token:a.token,more:r.length>1&&(t===void 0||n.filter(e=>[`running`,`waiting`].includes(e.status)).length+1<t)}})}allowed(e,t){return(t.generation===void 0||(e.generation??0)===t.generation)&&(t.attempts===void 0||e.attempts===t.attempts)&&(t.tokenHash===void 0||(e.tokenHash??null)===t.tokenHash)&&(t.handle===void 0||(e.handle??null)===t.handle)&&(t.lastSeenAt===void 0||(e.lastSeenAt??null)===t.lastSeenAt)&&(t.updatedAt===void 0||e.updatedAt===t.updatedAt)&&(!t.statuses||t.statuses.includes(e.status))}touch(e,t,n,r,i,a=!1){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{tokenHash:n,attempts:r})||!a&&_l.has(e.status)||e.status===`queued`)return;if(_l.has(e.status))return e;let o={...e,lastSeenAt:i,updatedAt:i};return await this.store.put(`task`,t,o),o})}async archiveStopped(e,t,n){let i=e=>e!==void 0&&_l.has(e.status)&&e.archivedAt===void 0&&(!n||n.includes(e.task.id))&&r(e.finishedAt??e.updatedAt,t);for(let{value:e}of await this.store.list(`task`))i(e)&&await this.serial(async()=>{let n=await this.read(e.task.id);i(n)&&await this.store.put(`task`,n.task.id,{...n,archivedAt:t,autoArchived:!0})})}patchTask(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,i))return!1;let{answer:a,...o}=n;return await this.store.put(`task`,t,{...e,...o,...a===void 0?{}:{answer:[...e.answer??[],a]},updatedAt:r}),!0})}deleteTask(e,t,n){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,n)?!1:(await this.store.delete(`task`,t),this.tombstone(t),!0)})}continueTask(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!e||!_l.has(e.status)||!this.allowed(e,i))return!1;let{note:a,...o}=n.context??{},s=await this.store.get(`note`,dn(e.task));return n.context={...o,...s?{note:s}:{}},await this.store.put(`task`,t,{task:{...e.task,...n},status:`queued`,attempts:0,logSeq:e.logSeq,logBytes:e.logBytes,generation:(e.generation??0)+1,inboxSeq:e.inboxSeq,createdAt:e.createdAt,updatedAt:r},{unarchive:!0}),!0})}completeTask(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]}))return!1;if(await this.store.put(`usage`,`${t}:${e.generation??0}`,n.usage),n.note){let{key:e,value:t,ttlMs:r}=n.note;t?await this.store.put(`note`,e,t,{ttlMs:r}):await this.store.delete(`note`,e)}for(let n of await this.store.list(`inbox`,{prefix:`${t}:`}))n.value.generation===(e.generation??0)&&await this.store.delete(`inbox`,n.id);return await this.store.put(`task`,t,{...e,...n.outcome,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0})}requeue(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...r,statuses:[`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,status:`queued`,handle:void 0,tokenHash:void 0,lastSeenAt:void 0,updatedAt:n}),!0)})}finish(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...i,statuses:[`queued`,`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,...n,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0)})}cancel(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);if(!e||_l.has(e.status)||!this.allowed(e,r))return!1;let i=e.status===`queued`?void 0:{seq:await this.nextSeq(t),generation:e.generation??0,kind:`cancel`,value:null,at:n};return i&&await this.store.put(`inbox`,`${t}:${String(i.seq).padStart(8,`0`)}`,i),await this.store.put(`task`,t,{...e,...e.status===`queued`?{status:`cancelled`,finishedAt:n}:{},cancelRequestedAt:n,...i?{inboxSeq:i.seq}:{},updatedAt:n}),!0})}async cancelRequested(e,t){return(await this.read(t))?.cancelRequestedAt!==void 0}async list(e,t={}){let{before:n}=t;return(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(e,t)).filter(e=>fl(e,n)).sort(dl).slice(0,t.limit)}tombstone(e){this.tombstones.set(e,Date.now())}async changes(e,t){let n=e[0]?.organizationId;if(!n)return{rows:[],deleted:[]};for(let[e,t]of this.tombstones)t<Date.now()-6e5&&this.tombstones.delete(e);return{rows:(await this.store.list(`task`)).map(e=>({organizationId:n,status:e.value})),deleted:[...this.tombstones].filter(([,e])=>e>t).map(([e,t])=>({organizationId:n,id:e,at:t}))}}async counts(e,t={}){let n=(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(e,t));return{all:n.length,active:n.filter(e=>Z.includes(e.status)).length,waiting:n.filter(e=>e.status===`waiting`).length}}async runningCount(){return(await this.store.list(`task`)).filter(e=>[`running`,`waiting`].includes(e.value.status)).length}async running(){return(await this.store.list(`task`)).map(e=>e.value).filter(e=>[`running`,`waiting`].includes(e.status)).map(e=>({organizationId:`default`,status:e}))}appendLogs(e,t,n,r,i,a,o){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,o)||(e.logSeq??0)!==r.seq||(e.logCursor??-1)!==r.cursor?!1:(await this.store.putMany(`tasklog`,n.map(({seq:e,...n})=>({id:`${t}:${String(e).padStart(6,`0`)}`,value:n}))),await this.store.put(`task`,t,{...e,logCursor:i.cursor,logSeq:i.seq,logBytes:i.bytes,updatedAt:a}),!0)})}readInbox(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);return!e||!Z.includes(e.status)||(e.generation??0)!==n?[]:(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(e=>e.generation===n&&e.seq>r).slice(0,100)})}fetchInbox(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!(!e||!this.allowed(e,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})))return(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(t=>t.generation===(e.generation??0)&&t.seq>i).sort((e,t)=>e.seq-t.seq)})}ackInbox(e,t,n,r){return this.serial(async()=>{if(r.generation!==void 0&&r.generation!==n.generation)return!1;let e=await this.read(t);if(!e||!this.allowed(e,{...r,generation:n.generation,statuses:void 0})||n.seq>(e.inboxSeq??-1))return!1;let i=e.inboxAck?.generation===n.generation?e.inboxAck.seq:-1;if(_l.has(e.status))return n.seq<=i;if(![`running`,`waiting`].includes(e.status))return!1;let a=(await this.store.list(`inbox`,{prefix:`${t}:`})).filter(e=>e.value.generation===n.generation&&e.value.seq<=n.seq),o=(n.answers??[]).filter(e=>e.seq>i&&a.some(t=>t.value.kind===`ask`&&t.value.seq===e.seq)).map(e=>e.value),s=a.some(e=>e.value.kind===`cancel`),c=e.approval?.id,l=c&&a.some(e=>e.value.kind===`approve`&&e.value.value?.approvalId===c);await this.store.put(`task`,t,{...e,inboxAck:{generation:n.generation,seq:Math.max(i,n.seq)},...o.length?{answer:[...e.answer??[],...o]}:{},...l?{status:`running`,approval:void 0}:{},...s?{status:`cancelled`,finishedAt:Date.now()}:{},updatedAt:Date.now()});for(let e of a)await this.store.delete(`inbox`,e.id);return!0})}async pendingInbox(){let e=await this.store.list(`inbox`);return(await this.running()).filter(({status:t})=>e.some(e=>e.id.startsWith(`${t.task.id}:`)&&e.value.generation===(t.generation??0)))}appendInbox(e,t,n,r,i,a){return this.serial(async()=>{let e=await this.read(t);if(!e||!Z.includes(e.status)||(e.generation??0)!==a)return;let o=await this.nextSeq(t),s={seq:o,generation:a,at:i,kind:n,value:r};return await this.store.put(`inbox`,`${t}:${String(o).padStart(8,`0`)}`,s),await this.store.put(`task`,t,{...e,inboxSeq:o,updatedAt:i}),s})}};const yl=3e4;function bl(e,t){let n=e.queue.inboxDelivery??=new Map,r=JSON.stringify([e.organizationId,t]),i=n.get(r);if(i||n.set(r,i={}),i.work)return i.again=!0,i.work;let a=i,o=async()=>{let n,r=kt(),i=0,o=0,s,c=async()=>{for(;;){a.again=!1;let s=await e.store.get(`task`,t);if(!s?.handle||![`running`,`waiting`].includes(s.status))return;let c=await F(e,s.task),l=!!(e.local&&s.handle.startsWith(`cli:`));if(!l&&!c?.push)return;o=s.generation??0;let u={generation:o,attempts:s.attempts,tokenHash:s.tokenHash??null,handle:s.handle},d=`inbox:${JSON.stringify([t,u])}`;if(n!==d){n&&await e.store.updateDeliveryLease(n,r),n=void 0;let t=await e.store.claimDeliveryLease(d,r,yl);if(t===void 0)return;n=d,i=t}else if(!await e.store.updateDeliveryLease(n,r,{owner:r,failures:i},{ttlMs:yl}))return;let f=(await e.queue.readInbox(e.organizationId,t,s.generation??0,-1)).slice(0,100);if(!f.length){if(a.again)continue;return}let p=l?await qc(e,s,f):await c.push(s.handle,f);if(p.generation!==(s.generation??0)||!f.some(e=>e.seq===p.seq))throw Error(`Invalid inbox acknowledgement`);if(!await e.queue.ackInbox(e.organizationId,t,p,u)||(i=0,f.length<100&&!a.again))return}};try{await c()}catch{if(n){let t=Math.min(3e4,1e3*2**Math.min(i,5)),a={owner:r,failures:i+1,next:(e.now??Date.now)()+t};await e.store.updateDeliveryLease(n,r,a,{ttlMs:t}),n=void 0}}finally{n&&(await e.store.updateDeliveryLease(n,r),s=o)}return s};return a.work=(async()=>{for(;;){let n=await o();if(n===void 0||!(await e.queue.readInbox(e.organizationId,t,n,-1)).length&&!a.again)break}n.delete(r)})().finally(()=>{n.get(r)===a&&n.delete(r)}),a.work}async function xl(e){let t=await e.queue.pendingInbox();await Promise.allSettled(t.map(({organizationId:t,status:n})=>bl(j(e,t),n.task.id)))}function Sl(e){let t=xl(e).catch(()=>{});e.waitUntil&&e.waitUntil(t)}const $=`default`;async function Cl(e){if(!e.databaseUrl)throw Error(`DATABASE_URL is required for the Postgres store`);let{connect:t}=await import(`./client-31YzOj-i.js`).then(e=>e.n);return t(e.databaseUrl,e.databasePool)}async function wl(e,t={}){if(e.store!==`postgres`){let e=t.local?new co:new no;return{store:()=>e,queue:new vl(e),chatState:new ht(t.local?T.join(pe(``),`chat.json`):void 0),defaultOrganizationId:$,webhookTarget:async(t,n)=>{let r=await e.get(`app`,t),i=n?await e.get(`installation`,n):void 0;return r&&{organizationId:$,app:r,...i&&i.app===t&&!i.deletedAt?{bound:{organizationId:$,installation:i}}:{}}},appRecord:async t=>{let n=await e.get(`app`,t);return n&&{organizationId:$,app:n}},installationOrganization:async t=>await e.get(`installation`,t)?$:void 0,installations:async t=>(await e.list(`installation`,{prefix:`${t}:`})).filter(e=>!e.value.deletedAt).map(e=>({key:e.id,organizationId:$})),taskOrganization:async(t,n)=>(await e.get(`task`,t))?.tokenHash===n?$:void 0,sweep:async()=>{},close:async()=>{}}}let n=await Cl(e),[{DrizzleStore:r},{DrizzleQueue:i},{UNSCOPED_ORGANIZATION:a},{PgChatState:o}]=await Promise.all([import(`./store-B0RLMUR9.js`),import(`./queue-EvplGOuk.js`),import(`./shared-D64pQ0XU.js`).then(e=>e.g),import(`./chat-cknlIhVh.js`)]);return{store:t=>new r(n.db,t,Date.now,e),queue:new i(n.db),chatState:new o(n.db),defaultOrganizationId:a,webhookTarget:(e,t)=>r.webhookTarget(n.db,e,t),appRecord:e=>r.appRecord(n.db,e),installationOrganization:e=>r.installationOrganization(n.db,e),installations:e=>r.installations(n.db,e),taskOrganization:(e,t)=>r.taskOrganization(n.db,e,t),connection:n,sweep:e=>new r(n.db,a).sweep(e),close:()=>n.close()}}async function Tl(e,t,n,r){if(e.updateMetadata)return e.updateMetadata(t,n,r);let i=await e.get(t,n);return i?(await e.put(t,n,{...i,...r}),!0):!1}async function El(e,t){let n=[...new Set(t)];return e.getApps?e.getApps(n):(await Promise.all(n.map(async t=>({id:t,value:await e.get(`app`,t)})))).filter(e=>!!e.value)}export{Oo as $,qt as $n,vi as $t,Xs as A,er as An,ca as At,Vs as B,En as Bn,Wi as Bt,Sc as C,vr as Cn,_a as Ct,pc as D,or as Dn,ia as Dt,cc as E,gr as En,Zi as Et,nc as F,Ln as Fn,ha as Ft,xs as G,rn as Gn,Pi as Gt,Is as H,pn as Hn,ya as Ht,Gs as I,N as In,Li as It,Os as J,en as Jn,Mi as Jt,Ds as K,on as Kn,ki as Kt,Ks as L,wn as Ln,Ki as Lt,Ys as M,Wn as Mn,da as Mt,Zs as N,Gn as Nn,aa as Nt,Hs as O,$n as On,Gi as Ot,rc as P,F as Pn,pa as Pt,Eo as Q,$t as Qn,hi as Qt,Js as R,M as Rn,Vi as Rt,bc as S,ur as Sn,va as St,Cc as T,fr as Tn,ua as Tt,Rs as U,nn as Un,Ai as Ut,Fs as V,j as Vn,Qi as Vt,Ls as W,sn as Wn,ji as Wt,Fo as X,Qt as Xn,z as Xt,is as Y,tn as Yn,Ei as Yt,Io as Z,Zt as Zn,gi as Zt,Gc as _,xr as _n,la as _t,Z as a,ni as an,Ya as at,G as b,L as bn,$i as bt,xl as c,ti as cn,Za as ct,sl as d,ei as dn,H as dt,mi as en,Yt as er,po as et,Jc as f,Er as fn,Ua as ft,Wc as g,Cr as gn,fa as gt,Fc as h,Sr as hn,zi as ht,Tl as i,Fr as in,Ia as it,Qs as j,rr as jn,ta as jt,tc as k,ar as kn,sa as kt,Sl as l,ii as ln,Xa as lt,Lc as m,Tr as mn,$a as mt,Cl as n,Ci as nn,fo as nt,vl as o,Zr as on,Da as ot,J as p,Dr as pn,Qa as pt,Ts as q,cn as qn,Ni as qt,El as r,_i as rn,to as rt,ml as s,Qr as sn,xa as st,wl as t,xi as tn,uo as tt,Q as u,Jr as un,Ja as ut,Rc as v,R as vn,oa as vt,xc as w,yr as wn,ma as wt,yc as x,cr as xn,ra as xt,Qc as y,lr as yn,ba as yt,qs as z,xn as zn,ga as zt};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Jt as r,Kt as i,Ot as a,Pt as o,Rt as s,St as c,Tt as l,Vt as u,a as d,b as f,fn as p,h as m,i as h,m as g,nn as _,p as v,pn as y,qt as b,r as x,s as S,t as C,tt as w,un as T,zt as E}from"./dispatch-YW1aqjEg.js";import{n as D}from"./remote-AcWWfKVS.js";import{a as O,c as k,i as A,l as j,n as M,r as N,u as P}from"./actions-CmfXOVXQ.js";import F from"node:path";import I from"node:process";var L=e({tasks:()=>$});function R(e){return{cwd:e.cwd?F.resolve(e.cwd):I.cwd(),...e.server===void 0?{}:{api:D(e)}}}function z(e,t){let n=o(e,t);if(n)return n;throw new c(`invalid-option`,t?`No task found for "${t}".`:`No tasks found for this workspace.`,{hint:t?[`List tasks: coder task list`,`Start one: coder run "<text>"`]:[`Start one: coder run "<text>"`]})}async function B(e,t){if(t)return e.tasks.get(t);let[n]=await e.tasks.list({limit:1});if(!n)throw new c(`server`,`No server tasks found.`);return n}function V(e){throw new c(`invalid-option`,`Missing task id.`,{hint:e})}async function H(e,t={}){if(t.outputSchema!==void 0&&(!t.outputSchema||typeof t.outputSchema!=`object`||Array.isArray(t.outputSchema)))throw new c(`invalid-option`,`outputSchema must be an object.`);let{cwd:n,api:r}=R(t);if(r){let n=await r.tasks.create({source:`cli`,prompt:e,...t.cwd?{cwd:t.cwd}:{},...t.outputSchema?{outputSchema:t.outputSchema}:{},...t.repo?{repo:t.repo}:{},...t.agent?{agent:t.agent}:{},...t.engine?{engine:t.engine}:{},...t.model?{model:t.model}:{},...t.effort?{effort:t.effort}:{},...t.permissions?{permissions:t.permissions}:{},...t.runner?{runner:t.runner}:{},...t.mcp?{mcp:t.mcp.split(`,`).map(e=>e.trim())}:{}});return t.wait?r.tasks.wait(n.task.id,{onLog:t.onLog}):n}let i=t.agent?await(await import(`./exec-DgI3boHa.js`).then(e=>e.i)).agentTaskOptions(n,t.agent,t.mcp):void 0,a={prompt:e,outputSchema:t.outputSchema,cwd:n,engine:t.engine??i?.engine,model:t.model??(t.engine?void 0:i?.model),effort:t.effort??(t.engine?void 0:i?.effort),permissions:t.permissions??i?.permissions,name:t.name,system:t.system??i?.system,wait:t.wait,simulateApproval:t.simulateApproval,addDirs:t.addDirs,...t.agent?{agentId:t.agent}:{},mcp:i?.mcp??t.mcp,nativeMcp:i?.nativeMcp,...t.onFallback?{onFallback:t.onFallback}:{},...t.onNote?{onNote:t.onNote}:{}},o=await x(a);if(!t.wait){let e=o.taskId;return{taskId:e,status:o.task.status,startupCheck:o.startupCheck,commands:{result:`coder task result ${e} --wait`,steer:`coder task steer ${e} "<follow-up>"`,stop:`coder task stop ${e}`,list:`coder task list`}}}for(;;){let r=o.taskId;t.onWaiting?.(r);let{task:i,result:s}=await g(n,r),l=s?.error?.message??``;if(i.status===`failed`&&h(i.permissions??`auto`,l))throw new c(`read-only-unavailable`,l);if(i.status===`failed`&&d(l)){let r=w(n).chain,s=r[r.indexOf(o.engine)+1];if(!s)throw new c(`chain-exhausted`,l,{payload:C(o.engine,l,i.permissions??`auto`,t.system,e)});t.onFallback?.({engine:o.engine,detail:l,next:s}),o=await x({...a,engine:s,model:void 0,effort:void 0,name:void 0,simulateApproval:void 0});continue}return{taskId:r,status:i.status,finalMessage:s?.finalMessage,...l?{error:l}:{},tokens:s?.tokens??null,model:s?.model??i.model??null}}}async function U(e,t={}){let{cwd:n,api:r}=R(t);if(r){let n=await B(r,e);return t.wait?r.tasks.wait(n.task.id):n}let a=z(n,e);if(t.wait){p.includes(a.status)&&t.onWaiting?.(a.id);let e=await v(n,a);if(a=e.task,e.reason===`approval`)throw new c(`approval-pending`,`Approval needed for task ${a.id}: ${e.approval.summary}`,{taskId:a.id,approval:e.approval})}let{steps:o,result:u}=S(n,a.id,{tail:t.tail}),d=f(_(n,a.id)).filter(e=>!e.response),m=p.includes(a.status),h=m?s(n,a):a.updatedAt,g=l(h);return{taskId:a.id,status:m&&d.length?`waiting-approval`:a.status,task:a,result:u,steps:o,turns:b(n,a.id),pendingApprovals:d.map(e=>({id:e.id,summary:e.summary,cwd:e.cwd??null})),...m?{idleMs:g,lastActivityAt:h??null,stalled:d.length===0&&g>6e5,lastLog:i(n,a.id,1)[0],liveTokens:i(n,a.id,200).reverse().find(e=>e.kind===`usage`&&String(e.at??``)>=(a.resumedAt??``))?.tokens??null}:{}}}async function W(e={}){let{cwd:t,api:n}=R(e);if(n){let t=await n.tasks.list({status:e.running?`running`:void 0,limit:e.limit===`all`?200:e.limit,archived:e.archived});return e.stopped?t.filter(e=>y.includes(e.status)):t}let{tasks:r,clipped:i}=A(t,{...e,dir:e.dir??e.cwd}),a=r.map(e=>{let n=p.includes(e.status)?f(_(t,e.id)).filter(e=>!e.response).length:0;return{taskId:e.id,status:n?`waiting-approval`:e.status,pendingApprovals:n,engine:e.engine??null,model:e.model??null,effort:e.effort??null,name:e.name??null,cwd:e.cwd??null,prompt:String(e.prompt??``).replace(/\s+/g,` `).trim().slice(0,80),updatedAt:e.updatedAt,archived:e.archived??!1,flowRunId:e.flowRunId??null,idleMs:p.includes(e.status)?l(s(t,e)):null}}),o=!a.length&&!e.archived?E(t,{migrate:!1}).length:0;return Object.assign(a,{clipped:i,archived:o})}async function*G(e,t){let n=-1;for(;;){let r=await e.tasks.get(t);for(let r of await e.tasks.logs(t,n))n=r.seq,yield r;if(y.includes(r.status))return;await new Promise(e=>setTimeout(e,1e3))}}async function K(e,n={}){let{cwd:i,api:a}=R(n);if(a){let t=await B(a,e);return{task:t,events:G(a,t.task.id),final:()=>a.tasks.get(t.task.id)}}let o=z(i,e);return{task:o,events:P(i,o.id,{tail:n.tail}),async final(){let e=r(i,u(i,o.id)??o),n=t(F.join(_(i,o.id),`result.json`));return{taskId:o.id,status:e.status,result:n,task:e}}}}async function q(e,n,r={}){let{cwd:i,api:a}=R(r);if(a){let t=await a.tasks.steer(e,n,{...r.model?{model:r.model}:{},...r.effort?{effort:r.effort}:{},...r.permissions?{permissions:r.permissions}:{}});return r.wait?a.tasks.wait(e):t}let o=await k(i,z(i,e),n,{model:r.model,effort:r.effort,permissions:r.permissions});if(!r.wait||o.steered===`queued`)return o;let s=u(i,o.taskId),c=s?await T(i,s):null,l=t(F.join(_(i,o.taskId),`result.json`));return{...o,status:c?.status??null,finalMessage:l?.finalMessage??null}}async function J(e,t,n={}){let{cwd:r,api:i}=R(n);if(i)return i.tasks.ask(e,t);let a=z(r,e);n.onAsking?.(a.id);let o=await M(r,a,t,{model:n.model,effort:n.effort});return{taskId:a.id,answer:o.finalMessage||null,...o.error?{error:o.error.message}:{},ok:o.status===0}}async function Y(e,t={}){let{cwd:n,api:r}=R(t);if(r)return(e?[await r.tasks.get(e)]:await r.tasks.list({limit:200})).flatMap(e=>e.approval?[{taskId:e.task.id,...e.approval}]:[]);if(!e)return N(n);let i=z(n,e);return f(_(n,i.id)).map(e=>({taskId:i.id,id:e.id,summary:e.summary,cwd:e.cwd??null,createdAt:e.createdAt,answered:e.response?.decision??null}))}async function X(e,t,n={}){let{cwd:r,api:i}=R(n),a=n.deny?`decline`:`accept`;if(i){if(!e||!t)throw new c(`invalid-option`,`Server approvals need a task id and approval id.`,{hint:`Usage: coder task approve <task-id> <approval-id> --server <url>`});return i.tasks.approve(e,t,a)}if(e&&!t&&e.startsWith(`apr-`)&&(t=e,e=N(r).find(e=>e.id===t)?.taskId,!e))throw new c(`invalid-option`,`No pending approval "${t}".`,{hint:`List them: coder task approvals`});if(!e||!t)throw new c(`invalid-option`,`Missing approval id.`,{hint:[`List them: coder task approvals`,`Usage: coder task approve [task-id] <approval-id> [--deny]`]});let o=z(r,e);return m(_(r,o.id),t,a),{taskId:o.id,approvalId:t,decision:a}}async function Z(e,t={}){let{cwd:n,api:r}=R(t);if(r)return r.tasks.cancel(e??V([]));let i=z(n,e),{interrupt:a}=await j(n,i);return{taskId:i.id,status:`cancelled`,interrupt:a}}async function Q(e,t={}){let{cwd:r,api:i}=R(t);if(i){let n=t.allStopped?(await i.tasks.list({limit:200})).filter(e=>y.includes(e.status)).map(e=>e.task.id):[e??V([])];return await Promise.all(n.map(e=>i.tasks.archive(e))),{archived:n,count:n.length}}if(t.allStopped){let e=n(r).filter(e=>y.includes(e.status));for(let t of e)a(r,t);return{archived:e.map(e=>e.id),count:e.length}}e||V([`Archive one: coder task archive <task-id>`,`Archive all stopped: coder task archive --all-stopped`]);let o=z(r,e);return a(r,o),{taskId:o.id,archived:!0}}async function ee(e,t={}){let{cwd:n,api:r}=R(t);if(r){let n=t.allArchived?(await r.tasks.list({limit:200,archived:!0})).map(e=>e.task.id):[e??V([])];return await Promise.all(n.map(e=>r.tasks.delete(e))),{deleted:n,count:n.length}}if(t.allArchived){let e=E(n).filter(e=>O(n,e)).map(e=>e.id);return{deleted:e,count:e.length}}e||V([`Delete one: coder task delete <task-id>`,`Delete all archived: coder task delete --all-archived`]);let i=z(n,e);if(i.status===`running`)throw new c(`invalid-option`,`Task ${i.id} is still running.`,{hint:`Stop it first: coder task stop ${i.id}`});return O(n,i),{taskId:i.id,deleted:!0}}async function*te(e,t={}){yield*(await K(e,t)).events}const $={run:H,result:U,list:W,watch:K,stream:te,steer:q,ask:J,approvals:Y,approve:X,stop:Z,archive:Q,delete:ee};export{$ as n,L as t};
@@ -1,5 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,I as n,J as r,Kt as i,Mn as a,Nt as o,R as s,Vt as c,h as l,jt as u,nn as d,z as f}from"./dispatch-YW1aqjEg.js";import{t as p}from"./integrations-B2CavXR1.js";import{c as m,l as h,n as g}from"./actions-CmfXOVXQ.js";import{i as _}from"./mcp-DgMoPoUo.js";import{r as v}from"./exec-DgI3boHa.js";import y from"node:path";import b from"node:process";import{execFile as x}from"node:child_process";import{createHash as S,randomUUID as C}from"node:crypto";import w from"node:os";import T from"node:net";import E from"node:fs/promises";import{promisify as D}from"node:util";import O from"node:http";var k=e({INBOX_COMMAND:()=>Q,INBOX_SOCKET:()=>Y,applyTaskMessage:()=>K,checkout:()=>P,checkoutCache:()=>F,inboxSocket:()=>X,prepareRepo:()=>U,receiveInbox:()=>$,releaseCheckout:()=>L,requestInboxControl:()=>G,runTask:()=>q,sendInbox:()=>Z,startInboxControl:()=>W,taskServer:()=>j,withCheckoutLock:()=>I});const A=D(x);function j(){let e=b.env.CODER_SERVER?.replace(/\/+$/,``),t=b.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function M(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function N(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function P(e,t,n,r){let i=e.event?.repo;if(!i)return t;let a=y.join(t,`repo`);if(!N(i.ref)||!N(i.defaultBranch))throw Error(`Invalid repository ref`);let o=new URL(i.cloneUrl),s=p[e.event.integration]?.repos?.cloneHosts??[];if(o.protocol!==`https:`||!s.includes(o.hostname))throw Error(`Repository clone host does not match the integration`);await E.mkdir(t,{recursive:!0});let c=await E.mkdtemp(y.join(t,`.git-credential-`)),l=y.join(c,`token`),u=y.join(c,`askpass.sh`);n&&(await E.writeFile(l,n,{mode:384}),await E.writeFile(u,`#!/bin/sh
2
- case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
3
- `,{mode:448}));let d=n?{env:{...b.env,GIT_ASKPASS:u,CODER_GIT_TOKEN_FILE:l,GIT_TERMINAL_PROMPT:`0`}}:void 0;try{let e={...d,maxBuffer:67108864};if(r)return await I(r,async()=>{if(!await E.stat(y.join(r,`.git`)).catch(()=>void 0)){let t=await E.mkdtemp(`${r}-clone-`);try{await A(`git`,[`clone`,`--depth`,`50`,i.cloneUrl,t],e),await E.rename(t,r)}finally{await E.rm(t,{recursive:!0,force:!0})}}await A(`git`,[`-C`,r,`worktree`,`prune`,`--expire`,`now`],e),await A(`git`,[`-C`,r,`remote`,`set-url`,`origin`,i.cloneUrl],e),await A(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,i.defaultBranch],e),await A(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,i.ref],e),await A(`git`,[`-C`,r,`worktree`,`add`,`--detach`,a,`FETCH_HEAD`],e)}),a;await E.stat(y.join(a,`.git`)).then(()=>!0).catch(()=>!1)||await A(`git`,[`clone`,`--depth`,`50`,i.cloneUrl,a],e),await A(`git`,[`-C`,a,`fetch`,`--depth`,`50`,`origin`,i.ref],e),await A(`git`,[`-C`,a,`checkout`,`--detach`,`FETCH_HEAD`],e),await A(`git`,[`-C`,a,`fetch`,`--depth`,`50`,`origin`,i.defaultBranch],e)}finally{await E.rm(c,{recursive:!0,force:!0})}return a}function F(e){let t=e.event?.repo;if(t){if(![t.owner,t.name].every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e)))throw Error(`Invalid repository name`);return u(`checkouts`,new URL(t.cloneUrl).hostname,t.owner,t.name)}}async function I(e,t){await E.mkdir(y.dirname(e),{recursive:!0});let n=`${e}.lock`,r=await E.mkdtemp(`${n}-`),i=`${b.pid}-${C()}`,a=Date.now()+3e5,o=!1;try{for(await E.mkdir(y.join(r,i));;)try{await E.rename(r,n),o=!0;break}catch(e){if(![`EEXIST`,`ENOTEMPTY`].includes(e.code??``))throw e;for(let e of await E.readdir(n).catch(()=>[])){let t=Number(e.split(`-`)[0]);if(!(!Number.isInteger(t)||t<=0))try{b.kill(t,0)}catch(t){t.code===`ESRCH`&&await E.rmdir(y.join(n,e)).catch(()=>{})}}if(await E.rmdir(n).catch(()=>{}),Date.now()>=a)throw Error(`Repository cache lock timed out`);await new Promise(e=>setTimeout(e,100))}return await t()}finally{o?(await E.rmdir(y.join(n,i)),await E.rmdir(n).catch(()=>{})):await E.rm(r,{recursive:!0,force:!0})}}async function L(e){if(!(await E.stat(y.join(e,`.git`)).catch(()=>void 0))?.isFile())return;let t=await A(`git`,[`-C`,e,`rev-parse`,`--git-common-dir`]).catch(async t=>{if(await E.stat(y.join(e,`.git`)).catch(()=>void 0))throw t});if(!t)return;let{stdout:n}=t,r=y.resolve(e,n.trim());await I(y.dirname(r),async()=>{await E.stat(y.join(e,`.git`)).catch(()=>void 0)&&await A(`git`,[`--git-dir`,r,`worktree`,`remove`,`--force`,e])})}const R=1048576;async function z(e){let t={maxBuffer:67108864};await A(`git`,[`-C`,e,`add`,`--intent-to-add`,`--all`],t);let{stdout:n}=await A(`git`,[`-C`,e,`diff`,`HEAD`],t);return Buffer.byteLength(n)>R?`${Buffer.from(n).subarray(0,R).toString()}\n[diff truncated]`:n}async function B(e,t){delete b.env.CODER_SERVER,delete b.env.CODER_TASK_TOKEN,delete b.env.APP_TOKEN;for(let t of Object.keys(e.tokens))delete b.env[_(t)];let{CODEX_AUTH_JSON:n,...i}=e.credential.env;if(Object.assign(b.env,i),b.env[r]=JSON.stringify(e.config??{}),!n)return;let a=await E.mkdtemp(y.join(t,`.codex-`));return await E.writeFile(y.join(a,`auth.json`),n,{mode:384}),b.env.CODEX_HOME=a,a}async function V(e,t,n,r){if(!r)return;let i=await E.readFile(y.join(r,`auth.json`),`utf8`).catch(()=>``);i&&i!==n.credential.env.CODEX_AUTH_JSON&&await M(e.server,e.token,t,`/credential`,{method:`POST`,body:JSON.stringify({authJson:i})}).catch(()=>{}),await E.rm(r,{recursive:!0,force:!0})}const H=[[`bun.lock`,`bun`,[`install`,`--frozen-lockfile`]],[`bun.lockb`,`bun`,[`install`,`--frozen-lockfile`]],[`pnpm-lock.yaml`,`npx`,[`-y`,`pnpm`,`install`,`--frozen-lockfile`]],[`yarn.lock`,`npx`,[`-y`,`yarn`,`install`,`--frozen-lockfile`]],[`package-lock.json`,`npm`,[`ci`]]];async function U(e,t){let n=j(),r=await M(n.server,n.token,e),i=r.task.event;if(!i?.repo)throw Error(`The task has no repository`);let a=await P({...r.task,event:{...i,repo:{...i.repo,ref:i.repo.defaultBranch}}},t,r.tokens[i.integration]);for(let[e,t,n]of H)if(await E.stat(y.join(a,e)).catch(()=>void 0)){await A(t,n,{cwd:a,maxBuffer:67108864}).catch(()=>{});break}let o=(await A(`git`,[`-C`,a,`rev-parse`,`HEAD`])).stdout.trim();return console.log(`coder-snapshot ${o}`),{sha:o}}function W(e,t,n){let r=new Set,i=f(y.join(e,`inbox-control`),{apply(e){let i=e.entry;if(e.task!==t||!Number.isInteger(i?.seq)||i.seq<0||!Number.isInteger(i.generation)||i.generation<0||![`steer`,`ask`,`approve`].includes(i.kind))throw Error(`Invalid engine inbox command`);let a=n(i);return r.add(a),a.finally(()=>r.delete(a)).catch(()=>{}),a}});return{close:async()=>{i(),await Promise.allSettled([...r])}}}function G(e,t,r){let i=s({task:t,generation:r.generation,seq:r.seq});return n(`apply`,{task:t,entry:r},{dir:y.join(e,`inbox-control`),id:i,keepReply:!0,timeoutMs:3e4})}async function K(e,t,n){let r={task:t.name?.slice(6)??t.id,generation:n.generation,seq:n.seq},i=y.join(d(e,t.id),`inbox-control`,`${s(r)}.transcript.jsonl`),a=await E.readFile(i,`utf8`).catch(e=>{if(e.code===`ENOENT`)return``;throw e});for(let e of a.split(`
4
- `)){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}if(s(t.command)===s(r)&&Object.hasOwn(t,`result`))return t.result}let c=n.value;if(n.kind===`steer`){let i=String(c?.text??n.value??``);t.threadId?await m(e,t,i,{command:r}):o(e,t.id,i)}else if(n.kind===`ask`){let i=await g(e,t,String(c?.question??n.value??``),{command:r});return i.finalMessage??i.error?.message??``}else n.kind===`approve`&&l(d(e,t.id),String(c?.approvalId??c?.id??``),c?.decision===`deny`||c?.decision===`decline`?`decline`:`accept`);await E.mkdir(y.dirname(i),{recursive:!0}),await E.appendFile(i,JSON.stringify({command:r,result:null})+`
5
- `)}async function q(e,t){let n=j(),i=await M(n.server,n.token,e),a=i.task.event,o=a&&i.tokens[a.integration],s=b.env.CODER_INBOX_MODE===`poll`;delete b.env.CODER_INBOX_MODE;let c=b.env.CODER_CHECKOUT_CACHE;delete b.env.CODER_CHECKOUT_CACHE;let l=await B(i,t),u;try{return u=await P(i.task,t,o,c),await J(e,t,n,i,u,o,s)}finally{try{u&&await L(u)}finally{await V(n,e,i,l),delete b.env[r]}}}async function J(e,n,r,o,s,l,u){let f=o.task.event,p=new AbortController,m,g=!1,_=await $({root:n,generation:o.generation,apply:async t=>{let n=m&&c(s,m);if(!n)throw Error(`The task is not ready`);if(t.kind===`cancel`){await h(s,n),g=!0;return}return G(d(s,n.id),e,t)}}),x=_.ack().seq>=0?_.ack():void 0,S,C=()=>{if(S)return S;if(!x)return Promise.resolve();let t=x;return S=M(r.server,r.token,e,`/ack`,{method:`POST`,body:JSON.stringify(t),signal:p.signal}).then(()=>{x&&x.seq<=t.seq&&(x=void 0)}).catch(e=>{throw(e.status===401||e.status===403)&&(x=void 0),e}).finally(()=>{S=void 0}),S},w=async()=>{let t=await M(r.server,r.token,e,`/messages?after=${_.ack().seq}`,{signal:p.signal});try{t.length&&await _.apply(t)}finally{t.length&&_.ack().seq>=0&&(x=_.ack()),await C().catch(()=>{})}},T=setInterval(()=>{C().catch(()=>{})},1e3),D=t(y.join(n,`.runner-task.json`));D?.generation!==o.generation&&await E.writeFile(y.join(n,`.runner-note`),o.task.context?.note??``,{mode:384});let O,k,A=new Map,j=()=>{for(let[e,t]of A){let n=i(s,e,1/0);for(let e of n.slice(t))b.stdout.write(`${JSON.stringify(e)}\n`);A.set(e,n.length)}},N,P;try{let t=await v({cwd:s,...D?.generation===o.generation?{resumeTaskId:D.id}:{},noteFile:y.join(n,`.runner-note`),agent:o.task.agent,flow:o.task.flow,task:o.task,toolEnvironment:{tokens:o.tokens},post:o.task.source===f?.integration,...l?{postToken:l}:{},async onTask(t){m=t,A.has(t)||A.set(t,0),j(),k??=setInterval(j,1e3),a(y.join(n,`.runner-task.json`),{generation:o.generation,id:t}),await C().catch(()=>{}),await w().catch(()=>{}),clearInterval(O),O=setInterval(()=>{M(r.server,r.token,e,`/heartbeat`,{method:`POST`,signal:p.signal}).catch(()=>{})},3e4),clearInterval(N),u&&(N=setInterval(()=>{P||=w().catch(()=>{}).finally(()=>{P=void 0})},4e3))},onApproval(t){return M(r.server,r.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`waiting`,approval:t})})}});for(j();x;)await C().catch(()=>{}),x&&await new Promise(e=>setTimeout(e,1e3));return await M(r.server,r.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:g?`cancelled`:t.ok?`completed`:`failed`,result:t.reply??t.result,tokens:t.tokens,...t.note===void 0?{}:{note:t.note},...s===n?{}:{diff:await z(s).catch(()=>void 0)}})}),t}catch(t){let n=t;throw j(),await M(r.server,r.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`failed`,error:n.message??String(t)})}),t}finally{clearInterval(k),j(),clearInterval(T),clearInterval(O),clearInterval(N),p.abort(),await Promise.allSettled([P,S]),await _.close()}}const Y=`/tmp/coder-inbox.sock`,X=e=>y.join(w.tmpdir(),`coder-${S(`sha256`).update(e).digest(`hex`).slice(0,24)}.sock`);function Z(e,t){return new Promise((n,r)=>{let i=O.request({socketPath:e,path:`/messages`,method:`POST`,headers:{"content-type":`application/json`}},e=>{let t=``;e.on(`data`,e=>{t+=e}),e.on(`end`,()=>{if(e.statusCode!==200)return r(Error(`Task inbox answered ${e.statusCode}`));try{n(JSON.parse(t))}catch(e){r(e)}}),e.on(`error`,r)});i.setTimeout(1e4,()=>i.destroy(Error(`Task inbox timed out`))),i.on(`error`,r),i.end(JSON.stringify({entries:t}))})}const Q=`const http=require('node:http');const req=http.request({socketPath:process.env.CODER_INBOX_SOCKET||'/tmp/coder-inbox.sock',path:'/messages',method:'POST',headers:{'content-type':'application/json'}},res=>{res.pipe(process.stdout);res.on('end',()=>{if(res.statusCode!==200)process.exitCode=1})});req.on('error',()=>{process.exitCode=1});req.setTimeout(10000,()=>req.destroy());req.end(JSON.stringify({entries:JSON.parse(process.env.CODER_INBOX_MESSAGES)}));`;async function $(e){let n=y.join(e.root,`.runner-inbox.json`),r=t(n),i=r?.generation===e.generation?r:{generation:e.generation,seq:-1,answers:[]},o=Promise.resolve(),s=t=>{let r=async()=>{if(!Array.isArray(t)||t.some(t=>!Number.isInteger(t.seq)||t.seq<0||t.generation!==e.generation||![`steer`,`ask`,`approve`,`cancel`].includes(t.kind)))throw Error(`Invalid task messages`);for(let r of[...t].sort((e,t)=>e.seq-t.seq)){if(r.seq<=i.seq)continue;let t=await e.apply(r),o={generation:e.generation,seq:r.seq,answers:[...i.answers??[],...r.kind===`ask`?[{seq:r.seq,value:t}]:[]]};a(n,o),i=o}return i},s=o.then(r,r);return o=s.then(()=>{},()=>{}),s},c=e.socketPath??b.env.CODER_INBOX_SOCKET??X(e.root);if(await E.lstat(c).then(()=>!0,()=>!1)){if(!await new Promise((e,t)=>{let n=T.connect(c);n.once(`connect`,()=>{n.destroy(),e(!1)}),n.once(`error`,n=>n.code===`ECONNREFUSED`?e(!0):t(n))}))throw Error(`The task inbox is already running`);await E.unlink(c)}let l=O.createServer(async(e,t)=>{if(e.method!==`POST`||e.url!==`/messages`){t.writeHead(404).end();return}let n=``;try{for await(let t of e)if(n+=t,Buffer.byteLength(n)>1048576)throw Error(`Messages too large`);let r=await s(JSON.parse(n).entries);t.writeHead(200,{"content-type":`application/json`}).end(JSON.stringify(r))}catch{t.writeHead(409).end()}});return await E.mkdir(e.root,{recursive:!0}),await new Promise((e,t)=>{l.once(`error`,t),l.listen(c,e)}),await E.chmod(c,384),{apply:s,ack:()=>i,close:async()=>{await o,await new Promise(e=>l.close(()=>e()))}}}export{X as a,q as c,k as d,I as f,F as i,Z as l,Y as n,U as o,K as r,L as s,Q as t,j as u};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-DtTdpTy3.js";const t=[[`--wait`,`run in the foreground and block until the answer is ready`],[`--engine <codex|claude|custom>`,`engine to use; custom runs your configured custom models (default: first in the chain)`],[`--model <alias|slug>`,`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`],[`--effort <low|medium|high>`,`reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto (default: auto)`],[`--mcp <names|all|json>`,'attach MCP servers from `mcp` in .coder/config.json by name (or all), or an inline JSON array [{"name","command","args","env","tools"}]; none by default, all adds your engine\'s own MCP servers'],[`--add-dir <dir>`,`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`]],n=e(`task`,{"archive-sweep":async()=>(await import(`./archive-sweep-jE6TPk2F.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-C3dzIzd3.js`)).commandWorker,run:async()=>(await import(`./run-BlXCPJzq.js`)).commandTask,list:async()=>(await import(`./list-DedQA2pn.js`)).commandTasks,ls:async()=>(await import(`./list-DedQA2pn.js`)).commandTasks,watch:async()=>(await import(`./watch-DJATTJw_.js`)).commandWatch,stream:async()=>(await import(`./watch-DJATTJw_.js`)).commandWatch,result:async()=>(await import(`./result-DtVw6XYk.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-DwSAYYqb.js`)).commandSteer,ask:async()=>(await import(`./ask-zjX8kQz0.js`)).commandAsk,stop:async()=>(await import(`./stop-BS2MB4CQ.js`)).commandStop,archive:async()=>(await import(`./archive-Br2eM_A2.js`)).commandArchive,delete:async()=>(await import(`./delete-6T7ujDtY.js`)).commandDelete,approvals:async()=>(await import(`./approvals-Gv7x14u3.js`)).commandApprovals,approve:async()=>(await import(`./approve-D5Dkw1Lo.js`)).commandApprove},{menu:[{sub:`run`,usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`,alias:`run`},{sub:`list`,usage:`list`,blurb:`list recent tasks (by default running + just stopped)`,alias:`list`},{sub:`result`,usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`,alias:`result`},{sub:`watch`,usage:`watch [task-id]`,blurb:`stream a task's live transcript`},{sub:`steer`,usage:`steer <task-id> "<follow-up>"`,blurb:`continue a task's thread`},{sub:`ask`,usage:`ask <task-id> "<question>"`,blurb:`ask about a task without interrupting it`},{sub:`stop`,usage:`stop <task-id>`,blurb:`interrupt a running task`},{sub:`archive`,usage:`archive <task-id>`,blurb:`archive a session (or --all-stopped)`},{sub:`delete`,usage:`delete <task-id>`,blurb:`delete a session (or --all-archived)`},{sub:`approvals`,usage:`approvals [task-id]`,blurb:`pending approvals (all tasks, or one)`},{sub:`approve`,usage:`approve <id>`,blurb:`answer an escalated permission`}].map(e=>({usage:e.usage,blurb:e.blurb,...e.alias?{note:`(coder ${e.alias})`}:{}}))},{aliases:{stream:`watch`,ls:`list`},hint:`Run a task: coder run "<text>"`});export{t as TASK_FLAGS,n as commandTaskGroup};
@@ -1 +0,0 @@
1
- import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-DtTdpTy3.js";import{runnerOptions as r}from"./remove-UVD3W2OE.js";import i from"node:process";const a=t({name:`runner test`,globalFlags:{cwd:!1},args:1,help:{usage:`coder runner test <id> [--server [url]] [--json]`,summary:`Check the runner connection.`,flags:[n]},options:r,async run({options:t,args:[n]}){if(!n)throw new e(`invalid-option`,`Missing runner id.`);let{testRunner:r}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);return r(n,t)},print:e=>i.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)});export{a as commandRunnerTest};
@@ -1 +0,0 @@
1
- import{i as e}from"./cli-DtTdpTy3.js";import{n as t}from"./mcp-server-DGzme0YX.js";import n from"node:process";const r=e({name:`agent tools`,options:{},args:1,async run({args:e}){let{INTEGRATIONS:r}=await import(`./integrations-B2CavXR1.js`).then(e=>e.r),{agentTools:i}=await import(`./mcp-DgMoPoUo.js`).then(e=>e.t),a=e[0]??``,o=i(a);if(!o)throw Error(`Unknown tool set "${a}"; known: ${[...Object.keys(r).filter(e=>r[e].tools.serve),`note`].join(`, `)}`);let s=n.env.APP_TOKEN??``;if(!s&&a!==`note`)throw Error(`APP_TOKEN is not set`);let c=n.env.CODER_AGENT_SCOPE?JSON.parse(n.env.CODER_AGENT_SCOPE):void 0;await t(`coder-${a}`,o,{token:s,fetch,tools:(n.env.CODER_AGENT_TOOLS??``).split(`,`).filter(Boolean),...c?{scope:c}:{}})}});export{r as commandTools};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";var t=e({PRESETS:()=>n});const n=[`observe`,`comment`,`write`];export{t as n,n as t};