@wular/coder 0.4.7 → 0.4.8

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 (608) 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-BDBCRqKN.js +1 -0
  7. package/dist/{add-DpsjB8Mp.js → add-DcR15CL7.js} +1 -1
  8. package/dist/add-Df1Ezy3y.js +2 -0
  9. package/dist/{add-B3zygDO5.js → add-yIlNqPSu.js} +1 -1
  10. package/dist/agent-B2Ikhp7u.js +1 -0
  11. package/dist/agent-C1HI4JlI.js +3 -0
  12. package/dist/{alias-CZjD1F0F.js → alias-DghaKDbh.js} +1 -1
  13. package/dist/api-qdpx8FD0.js +1 -0
  14. package/dist/{app-CE5j7IDN.js → app-snjvOKJA.js} +1 -1
  15. package/dist/approvals-BziBKWgU.js +2 -0
  16. package/dist/approve-DAuvq9Eq.js +1 -0
  17. package/dist/{approve-D5Dkw1Lo.js → approve-DKrTnZfk.js} +2 -2
  18. package/dist/apps-aj_JtpAm.js +242 -0
  19. package/dist/{archive-RBPoB4cr.js → archive-BhfGdyuC.js} +2 -2
  20. package/dist/{archive-Br2eM_A2.js → archive-DxWYJ7Zi.js} +2 -2
  21. package/dist/archive-sweep-CqTQUafj.js +1 -0
  22. package/dist/args-CxsMr9Un.js +1 -0
  23. package/dist/{ask-zjX8kQz0.js → ask-B_si1yM4.js} +2 -2
  24. package/dist/auth-B3RiDPMI.js +1 -0
  25. package/dist/auth-Cx4ePjWG.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-DLolwsuq.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-D5hyqGq0.js +9 -0
  33. package/dist/cli.js +1 -1
  34. package/dist/config-BdeKsCPh.js +3 -0
  35. package/dist/config-D2FxHWwi.js +14 -0
  36. package/dist/connection-CQPndo-u.js +1 -0
  37. package/dist/connection-wq0CJZKh.js +1 -0
  38. package/dist/core-DwsAMCnL.js +65 -0
  39. package/dist/create-8_XbAnHs.js +1 -0
  40. package/dist/credentials-BOAy2_-6.js +1 -0
  41. package/dist/dash/standalone/server/build-index.json +1 -1
  42. package/dist/dash/standalone/server/manifest.json +2467 -1446
  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.a4ec4bce860e3e71.js} +6 -3
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/page.4c818ef18a084013.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.f8373428f20c270b.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.b0946ff7951ecc11.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.55eef4b0e71415d9.js} +22 -15
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{account/sign-out.5d3bca9efecd6f70.js → [org]/account/sign-out.1ee9b7f1343376e9.js} +4 -4
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/agent-menu.79e38c6e4139b9de.js +12 -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.3a3c550ff68aeb11.js} +23 -21
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.7a4cfa5c917e5db9.js +35 -0
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/loading.fd26a5414b0a06db.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.b2bed855b68a77b2.js} +19 -20
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/(tabs)/layout.f2464375e393c96e.js → [org]/agents/[slug]/(tabs)/layout.95b8bf3c438955c2.js} +51 -34
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/loading.39c596735b108f80.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.1401a08ea4e27c01.js} +33 -24
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/loading.2d6e75e5923f73f2.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.848ccc3a609385a9.js +348 -0
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-actions.4b14873a20ebd56c.js +591 -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.dd8f3cbc00876ebd.js +408 -0
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/loading.80f597fd04fc4a97.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.35d01036ce840ff9.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.ff54c7100f781fbc.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.e5a405c518c1d8e6.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.55aa8df7712e6820.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.67c3489c62b661da.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.0c20e2100b321316.js} +7 -7
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{agents/[slug]/edit/loading.21eb60e655c125c7.js → [org]/agents/[slug]/edit/loading.2fa9e225a5c42496.js} +8 -8
  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.7132b3ef68d33cc4.js} +20 -16
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-pills.19e913c8cb22db21.js +101 -0
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/agent-toggle.ec6d07ccd1f9796e.js +35 -0
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/hero.9de48723967d8546.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.6558ffd02a59ad53.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.9e1a0945f6880076.js} +162 -120
  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.e54af9841da11373.js} +41 -46
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/loading.38715a27e2d25ebd.js +30 -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.6c8e9ef5d72b7ef1.js} +13 -12
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{layout.53a8a3b0e4a7917f.js → [org]/layout.c67ccee8b4770821.js} +89 -85
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.3365f9248dfe735d.js +147 -0
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/page.c60ebc5afe4dcdae.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.544315916300ed07.js +643 -0
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{settings/[tab]/credentials-list.c25242f7f4ef6399.js → [org]/settings/[tab]/credentials-list.41ce6eb622300bb3.js} +158 -156
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials.c1a312e6ec58db83.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.75dc69caed34ff8f.js} +8 -10
  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.6d6180438e2bd0c8.js} +12 -40
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/loading.9d7c30db2ecccda3.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.04eb5a47bca3bd09.js} +37 -32
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/page.dd00f57d398be882.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.e644287ae91ea8c3.js} +65 -109
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/secrets-list.35fa72bf3f00d1af.js +136 -0
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/layout.3a17085fb262e4ab.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.a14b9796a8af62dc.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.1fd664df1fd0e3c1.js} +5 -3
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/create-link.3acdd50e1cc0c729.js +34 -0
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-dialog.d730e0bfbe0cf2f8.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.079600422889e725.js +44 -0
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/activity.ed49ee2686d1ee41.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.0d973b51fee68801.js} +8 -8
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/page.05dd344bada1d4d8.js +24 -0
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{tasks/[id]/task-actions.ee523c68a38a7975.js → [org]/tasks/[id]/task-actions.ece7ec732352ce70.js} +44 -79
  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.8a5908c42647923f.js} +91 -80
  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.c7ec618e215d63ce.js} +99 -64
  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.0976f1812d6d15f5.js} +114 -110
  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.fd72404364042b87.js} +14 -13
  117. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/page.293492d13a9dca2e.js +16 -0
  118. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/custom-range.d85de32fb6ec4fe6.js → [org]/usage/custom-range.471edcb853889c2e.js} +7 -7
  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.d40438efa74b0596.js} +4 -4
  120. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/loading.5b28c7d8f3a473a3.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.69adbf6cde427292.js} +20 -19
  123. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{usage/range-bar.76e3de97583e6eab.js → [org]/usage/range-bar.884e58b044238e98.js} +11 -11
  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.b00f571862b5b608.js} +21 -15
  126. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.c762b39aafb84a1f.js → layout.ab6f86cc5b8b2dab.js} +1 -1
  127. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.3ddaa1a675a04c5a.js → page.088b41424cd6cf3c.js} +6 -3
  128. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.b337ce209ff621e9.js → drawer.0e2e3636f33049f5.js} +5 -3
  129. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/foreign-link.fe46528a6a66c0f4.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.bf58af8330a78704.js → loading-card.df3717186948c93f.js} +3 -3
  132. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.a2336c95004aed4b.js → page-head.e5d2185c1cdac740.js} +9 -8
  133. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.77a2ec038d97b2b8.js → stream.2fea238dc4f4f9a4.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.4282affa47415a36.js} +107 -23
  135. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.ea23f57dd753683f.js → theme-choices.ef190ef1cd197199.js} +1 -1
  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.af528135d7e33d6d.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.813dc34bd23a336f.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.bafcb4b273b1c4d0.js} +1 -1
  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.3d9163a51e6f6d6e.js +43 -0
  143. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.15f7435f202831c3.css.pnext-asset.js +0 -0
  144. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.b0873d38765c9d20.js → card.6227f43fc0ae4bd1.js} +36 -2
  145. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.ca0efacf2ce15578.js → combo.0572dd5730c94112.js} +1 -1
  146. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.d18497f656702a16.css.pnext-asset.js +0 -0
  147. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.fe133a074c2743af.js +26 -0
  148. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/copy.991f1efa061e71d6.css.pnext-asset.js +0 -0
  149. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/copy.9be99c94423eb1ca.js +33 -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.4f703a4ce7d2a519.js} +3 -3
  152. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.1777c0350d5d215e.js → icons.868385119bf2de28.js} +3 -0
  153. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.a4dd9fb9f566689a.js → menu.0f064f75822888be.js} +29 -9
  154. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.1d42c8d0493e2221.css.pnext-asset.js +0 -0
  155. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.92432959e3a3e2c0.js +67 -0
  156. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.9db07d368dcf5981.css.pnext-asset.js +0 -0
  157. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/notice.f395f231cbb96445.js +13 -0
  158. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/select.32a95ad31c0436ad.css.pnext-asset.js +0 -0
  159. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.f036fdc3fce02b92.js → select.7f481669998074f8.js} +27 -17
  160. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.d3d29747fe976f88.js → sentinel.17cffebfc3103b9f.js} +1 -1
  161. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.1e3ec9bd6008d811.css.pnext-asset.js +0 -0
  162. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.d00fc01ad9c1b91e.js → tabs.66b2e54963f6901b.js} +3 -2
  163. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.9377d261fe9e91df.js → tail.30913c92f5ca6102.js} +1 -1
  164. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.b2c59c5fc015d08d.js → toolbar.801bbd3163d3fbb0.js} +3 -3
  165. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/action.568346602027ac74.js +34 -0
  166. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.d25e6dcc6704eb60.js +59 -0
  167. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{paged.7e5713a82abf0211.js → paged.18f5872fc5aebe96.js} +1 -0
  168. package/dist/dash/standalone/static/assets/chunks/action-df9907c7a10bf826.js +1 -0
  169. package/dist/dash/standalone/static/assets/chunks/agent-pills-106a518bef96408e.js +1 -0
  170. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-d1aa82950d30d829.js +1 -0
  171. package/dist/dash/standalone/static/assets/chunks/agent-toggle-44667051d8be2040.js +1 -0
  172. package/dist/dash/standalone/static/assets/chunks/agents-grid-69fabb48962a282a.js +1 -0
  173. package/dist/dash/standalone/static/assets/chunks/back-e02e04679467c05b.js +1 -0
  174. package/dist/dash/standalone/static/assets/chunks/badge-b302b4d707908367.js +1 -0
  175. package/dist/dash/standalone/static/assets/chunks/card-31a2cdcfeda5254f.js +1 -0
  176. package/dist/dash/standalone/static/assets/chunks/{combo-8aa7545cfda42090.js → combo-fd495e7fa91b69ed.js} +1 -1
  177. package/dist/dash/standalone/static/assets/chunks/composer-10f0a825a16e1fc7.js +1 -0
  178. package/dist/dash/standalone/static/assets/chunks/composer-8c1198d45f700738.js +1 -0
  179. package/dist/dash/standalone/static/assets/chunks/confirm-7b6112578a1c4877.js +1 -0
  180. package/dist/dash/standalone/static/assets/chunks/connect-apps-bd95a6cbdc89a438.js +1 -0
  181. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-8864a63f83ffd411.js → connect-repositories-569c181ff81509f4.js} +1 -1
  182. package/dist/dash/standalone/static/assets/chunks/connections-list-5bbf7321d9bfd08f.js +1 -0
  183. package/dist/dash/standalone/static/assets/chunks/copy-f057128db8aefd1b.js +1 -0
  184. package/dist/dash/standalone/static/assets/chunks/create-link-6f6e6b87e46f67c8.js +1 -0
  185. package/dist/dash/standalone/static/assets/chunks/credentials-list-8fc72c0331289ac6.js +2 -0
  186. package/dist/dash/standalone/static/assets/chunks/custom-range-d06cd17fcc05183d.js +1 -0
  187. package/dist/dash/standalone/static/assets/chunks/defaults-dcc0eccad4e8585b.js +1 -0
  188. package/dist/dash/standalone/static/assets/chunks/editor-b5a9659f85edea17.js +7 -0
  189. package/dist/dash/standalone/static/assets/chunks/engines-list-c10ca5e7410b790f.js +1 -0
  190. package/dist/dash/standalone/static/assets/chunks/field-f40df6a5289dfe05.js +1 -0
  191. package/dist/dash/standalone/static/assets/chunks/{filter-02bba5796258deb0.js → filter-966a9aae3b0b6d77.js} +1 -1
  192. package/dist/dash/standalone/static/assets/chunks/{instructions-0b968d5d0a58c716.js → instructions-c9e1097c4e1b352a.js} +1 -1
  193. package/dist/dash/standalone/static/assets/chunks/instructions-e969d4439f6676c9.js +1 -0
  194. package/dist/dash/standalone/static/assets/chunks/list-5db1dd782965a5fc.js +1 -0
  195. package/dist/dash/standalone/static/assets/chunks/model-options-3a57918eaa4a2a82.js +1 -0
  196. package/dist/dash/standalone/static/assets/chunks/models-list-b6237067c9a39f97.js +1 -0
  197. package/dist/dash/standalone/static/assets/chunks/notice-84358e912a9f01cc.js +1 -0
  198. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-c4f75d37645035b8.js +1 -0
  199. package/dist/dash/standalone/static/assets/chunks/paged-c44eccacea100110.js +1 -0
  200. package/dist/dash/standalone/static/assets/chunks/platform-actions-6004e96f54953935.js +1 -0
  201. package/dist/dash/standalone/static/assets/chunks/platform-actions-d8dd016336a3d768.js +1 -0
  202. package/dist/dash/standalone/static/assets/chunks/runners-list-0b288b2b79de8968.js +1 -0
  203. package/dist/dash/standalone/static/assets/chunks/secrets-list-64650cb827e93322.js +1 -0
  204. package/dist/dash/standalone/static/assets/chunks/{segmented-bf5a4c06605249e0.js → segmented-5423dcc766dc7abc.js} +1 -1
  205. package/dist/dash/standalone/static/assets/chunks/select-53722330d2e3f1c6.js +1 -0
  206. package/dist/dash/standalone/static/assets/chunks/shared-init-35a0e9007eeca198.js +2 -0
  207. package/dist/dash/standalone/static/assets/chunks/shared-init-a7f2e71a718bc285.js +5 -0
  208. package/dist/dash/standalone/static/assets/chunks/shared-init-b8184e0e554d5aa4.js +1 -0
  209. package/dist/dash/standalone/static/assets/chunks/shared-init-e0aa7cbf9ac680b5.js +1 -0
  210. package/dist/dash/standalone/static/assets/chunks/side-toggle-34ee3bbe5ac64a60.js +1 -0
  211. package/dist/dash/standalone/static/assets/chunks/{tail-74153aeac1f0baec.js → tail-7dece33a58f72850.js} +1 -1
  212. package/dist/dash/standalone/static/assets/chunks/task-6ae2bb4f1b384140.js +1 -0
  213. package/dist/dash/standalone/static/assets/chunks/task-actions-b36dc5fcd9b2b2c5.js +1 -0
  214. package/dist/dash/standalone/static/assets/chunks/task-view-1696d47594c6dbfa.js +5 -0
  215. package/dist/dash/standalone/static/assets/chunks/tasks-list-7c70210e7121b95a.js +1 -0
  216. package/dist/dash/standalone/static/assets/chunks/versions-list-26475f0d05e2d434.js +1 -0
  217. package/dist/dash/standalone/static/assets/connect-b73a327c12fa5c63.css +1 -0
  218. package/dist/dash/standalone/static/assets/create-param-id-d679f8832eafd7e8.css +1 -0
  219. package/dist/dash/standalone/static/assets/{dash-settings-cf1997cd7f72e518.css → dash-param-org-14abc8f62d04dc4c.css} +1 -1
  220. package/dist/dash/standalone/static/assets/dash-param-org-account-aba6d7e7f99c97cb.css +1 -0
  221. package/dist/dash/standalone/static/assets/dash-param-org-agents-570ddee6de22492e.css +1 -0
  222. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-9fa9b19084b3cd2f.css +1 -0
  223. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-0e7e591f05cbddf5.css +1 -0
  224. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-f16fb90321952887.css +1 -0
  225. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cf30b084239d643.css +1 -0
  226. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-1c84b31df8c64b88.css +1 -0
  227. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-7da323ffa5be29aa.css +1 -0
  228. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-4900a42b805e90cb.css +1 -0
  229. package/dist/dash/standalone/static/assets/dash-param-org-operator-2f4e497a01a78f29.css +1 -0
  230. package/dist/dash/standalone/static/assets/dash-param-org-settings-0ea983332482dbc6.css +1 -0
  231. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-e1c1f81610bb925f.css +1 -0
  232. package/dist/dash/standalone/static/assets/dash-param-org-setup-6824fce3862dbb43.css +1 -0
  233. package/dist/dash/standalone/static/assets/dash-param-org-tasks-f914c28afa705d66.css +1 -0
  234. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-65c8bb06f94ff868.css +1 -0
  235. package/dist/dash/standalone/static/assets/dash-param-org-usage-5dbb2aa369c46eed.css +1 -0
  236. package/dist/dash/standalone/static/assets/global-eecd2b20d5e4b08d.css +1 -0
  237. package/dist/dash/standalone/static/assets/login-ca4c0cd7d65b3269.css +1 -0
  238. package/dist/dash/standalone/static/assets/pnext-client-0bcd0cbf2549bdf2.js +1 -0
  239. package/dist/dash/standalone/static/assets/pnext-client-22414b6c8a870c92.js +1 -0
  240. package/dist/dash/standalone/static/assets/pnext-client-2a02ab5209cae1ea.js +1 -0
  241. package/dist/dash/standalone/static/assets/pnext-client-46d843cfdabf3e71.js +1 -0
  242. package/dist/dash/standalone/static/assets/pnext-client-5a50a2a4da7e870e.js +1 -0
  243. package/dist/dash/standalone/static/assets/pnext-client-5b6ea850cead1482.js +1 -0
  244. package/dist/dash/standalone/static/assets/pnext-client-5b94497ba23568a8.js +1 -0
  245. package/dist/dash/standalone/static/assets/pnext-client-6686f1714e481293.js +1 -0
  246. package/dist/dash/standalone/static/assets/pnext-client-67155accb837a12a.js +1 -0
  247. package/dist/dash/standalone/static/assets/pnext-client-7db5d810ee904f4b.js +1 -0
  248. package/dist/dash/standalone/static/assets/pnext-client-8d779b89650f4b7a.js +1 -0
  249. package/dist/dash/standalone/static/assets/pnext-client-9d7a7a634c9be6ac.js +1 -0
  250. package/dist/dash/standalone/static/assets/pnext-client-9edebc462604c881.js +1 -0
  251. package/dist/dash/standalone/static/assets/pnext-client-aa5a424e38b430a5.js +1 -0
  252. package/dist/dash/standalone/static/assets/pnext-client-b983cd476c808b15.js +1 -0
  253. package/dist/dash/standalone/static/assets/pnext-client-bdf1cb75a3de35ea.js +1 -0
  254. package/dist/dash/standalone/static/assets/pnext-client-c5177dd613b27b84.js +1 -0
  255. package/dist/dash/standalone/static/assets/{pnext-client-ffab25199333314f.js → pnext-client-d998d7077d159f68.js} +1 -1
  256. package/dist/dash/standalone/static/assets/pnext-client-f01c6d0c6beb582b.js +1 -0
  257. package/dist/dash/standalone/static/assets/pnext-client-fd4c0f3ecbcc461c.js +1 -0
  258. package/dist/{default-B3ValFJp.js → default-CNhVH61w.js} +1 -1
  259. package/dist/default-dQC33jLt.js +1 -0
  260. package/dist/{delete-6T7ujDtY.js → delete-BDOtztW_.js} +2 -2
  261. package/dist/{delete-k7pxp5B6.js → delete-Dbo9goyQ.js} +2 -2
  262. package/dist/{disable-BJXxuJ9s.js → disable-VvU6oDku.js} +1 -1
  263. package/dist/discover-CBP4Uw0N.js +1 -0
  264. package/dist/{discover-CRUU1hdS.js → discover-hpHsnxqU.js} +2 -2
  265. package/dist/dispatch-D3Dqxijf.js +8 -0
  266. package/dist/dist-BTornX7Y.js +101 -0
  267. package/dist/dist-C3wD7GfG.js +4 -0
  268. package/dist/dist-DkATuPBB.js +6 -0
  269. package/dist/dist-node-Bv1kCqyi.js +20 -0
  270. package/dist/docs-3SW1O9iS.js +2 -0
  271. package/dist/{docs-PmFB2aMA.js → docs-CYMICGEv.js} +1 -1
  272. package/dist/{enable-DZ7rw7iL.js → enable-BmvNVDHO.js} +1 -1
  273. package/dist/env-C_DoQYl5.js +1 -0
  274. package/dist/exec-BsXFIdTl.js +11 -0
  275. package/dist/executor-5j-Ewzzb.js +11 -0
  276. package/dist/flow/builtin/review.d.ts +1 -156
  277. package/dist/flow/builtin/review.js +7 -7
  278. package/dist/flow/index.d.ts +1 -1
  279. package/dist/flow/index.js +1 -1
  280. package/dist/{flow-D8T71fyu.js → flow-4Rr-2NUz.js} +1 -1
  281. package/dist/http-BYMXT_p6.js +1 -0
  282. package/dist/{index-Xe8n_t2Z.d.ts → index-CVjkwYeS.d.ts} +103 -1
  283. package/dist/{init-BfXdsU46.js → init-kZdO2PF5.js} +1 -1
  284. package/dist/integrations-35T26qmP.js +1 -0
  285. package/dist/integrations-D3OgJk6Y.js +1 -0
  286. package/dist/lib/broker.js +2 -2
  287. package/dist/{list-DedQA2pn.js → list-CLqNS8_q.js} +2 -2
  288. package/dist/{list-F-PN6ieH.js → list-CbN2giPy.js} +1 -1
  289. package/dist/list-ChFFjT_a.js +2 -0
  290. package/dist/{list-CO8x2rgz.js → list-D0NK3Iqu.js} +1 -1
  291. package/dist/{list-yoGxyIlx.js → list-D2eSpGoo.js} +1 -1
  292. package/dist/list-D3LCULQt.js +1 -0
  293. package/dist/{list-erdHI-w9.js → list-P2Ztf1bQ.js} +2 -2
  294. package/dist/{list-NtMN55g0.js → list-uS9iEE0F.js} +1 -1
  295. package/dist/load-CRmQB1LD.js +2 -0
  296. package/dist/local-XNsjb-UM.js +1 -0
  297. package/dist/log-view-DB4nXHXO.js +3 -0
  298. package/dist/{login-CJjcqCg4.js → login-BoOBMH4y.js} +1 -1
  299. package/dist/login-CCA0uLsW.js +1 -0
  300. package/dist/{logout-B7mHWeWr.js → logout-Cv0cm9F8.js} +1 -1
  301. package/dist/maintenance-B_79IJ_E.js +1 -0
  302. package/dist/match-Kt3vFTl1.js +1 -0
  303. package/dist/mcp-C13n4A3y.js +12 -0
  304. package/dist/mcp-YhyTUMIM.js +11 -0
  305. package/dist/{model-Cti-OOdV.js → model-0sxp5GdI.js} +1 -1
  306. package/dist/models-CdvmuaLv.js +1 -0
  307. package/dist/prompt-C--TI1qn.js +8 -0
  308. package/dist/push-IpLeKMp-.js +1 -0
  309. package/dist/reconnect-CR3RaXX0.js +1 -0
  310. package/dist/refresh-D0YjtXBD.js +1 -0
  311. package/dist/remote-oQs6My_3.js +1 -0
  312. package/dist/remove-B01SXfEq.js +1 -0
  313. package/dist/remove-C9eahMDh.js +1 -0
  314. package/dist/remove-D1UOd48O.js +1 -0
  315. package/dist/remove-D65xtbw5.js +1 -0
  316. package/dist/rename-Qwr_XDxD.js +1 -0
  317. package/dist/result-70jciKDJ.js +5 -0
  318. package/dist/{result-DtVw6XYk.js → result-DXL9N9Ip.js} +7 -7
  319. package/dist/{resume-D7XcEIbu.js → resume-xqhwHn3l.js} +2 -2
  320. package/dist/review-D-U_2KyT.d.ts +157 -0
  321. package/dist/{review-DZGyNO5h.js → review-vlPAshsb.js} +3 -3
  322. package/dist/{rotate-key-pIfcaeCd.js → rotate-key-CfeZ6Rg7.js} +1 -1
  323. package/dist/{run-BlXCPJzq.js → run-CoTg7SkY.js} +2 -2
  324. package/dist/{run-B-2NnW4r.js → run-CvdayZfK.js} +2 -2
  325. package/dist/{run-Co36tfya.js → run-VOuS-hHe.js} +1 -1
  326. package/dist/runner-D0TLZrrO.js +1 -0
  327. package/dist/runner-DME7ohjt.js +1 -0
  328. package/dist/runners-UNKPlmYE.js +36 -0
  329. package/dist/schema-BSlHRFSP.js +8 -0
  330. package/dist/schema.config.d.ts +12 -0
  331. package/dist/schema.config.js +1 -0
  332. package/dist/schema.d.ts +2 -0
  333. package/dist/schema.js +1 -0
  334. package/dist/sdk-4Vjo5Q6R.d.ts +12371 -0
  335. package/dist/sdk.d.ts +5 -1549
  336. package/dist/sdk.js +1 -1
  337. package/dist/serve-BQsv2KZs.js +1 -0
  338. package/dist/serve-BoTW4P2G.js +2 -0
  339. package/dist/serve-ByWMT5Gm.js +1 -0
  340. package/dist/serve-HNXk3HMY.js +9 -0
  341. package/dist/server-B1x8gx33.js +1 -0
  342. package/dist/{setup-host-ON6zJGqS.js → setup-host-DExG-bWZ.js} +1 -1
  343. package/dist/show-BeacgzZ0.js +1 -0
  344. package/dist/{show-jdaVKG0f.js → show-D3OC0c35.js} +1 -1
  345. package/dist/slack-C_RlVDz7.js +3 -0
  346. package/dist/{status-BO1jm6NW.js → status-ZN0HYtLa.js} +1 -1
  347. package/dist/steer-DwSC8AO4.js +4 -0
  348. package/dist/{stop-BS2MB4CQ.js → stop-CEEiI1RA.js} +1 -1
  349. package/dist/{stop-B-dQ2-Gm.js → stop-DTzpTbg1.js} +2 -2
  350. package/dist/task-4gw9OZun.js +1 -0
  351. package/dist/task-CB-j4EO8.js +5 -0
  352. package/dist/task-IoBYe7ok.js +1 -0
  353. package/dist/test-BnGF24Hg.js +1 -0
  354. package/dist/tools-ar-D3jOh.js +1 -0
  355. package/dist/types-B42Oh0zF.js +1 -0
  356. package/dist/types-BktBEKW5.d.ts +1710 -0
  357. package/dist/{unalias-DpkgCs_c.js → unalias-9AwJnbpE.js} +1 -1
  358. package/dist/{update-ChIiUO1Z.js → update-DoJEPBvm.js} +1 -1
  359. package/dist/{upgrade-Cq24oWFZ.js → upgrade-DRPBwDYe.js} +2 -2
  360. package/dist/{usage-CazoINYM.js → usage-CItBLFFE.js} +1 -1
  361. package/dist/views-BhsnL0nr.js +5 -0
  362. package/dist/watch-BMuVZorc.js +9 -0
  363. package/dist/{watch-B3gAEK1N.js → watch-Bl_pCGfq.js} +2 -2
  364. package/dist/wire-B5rc5Av6.js +1 -0
  365. package/dist/worker-BFGETvid.js +1 -0
  366. package/dist/worker-BiJ7jiOr.js +9 -0
  367. package/dist/{workflow-BOPHazbM.js → workflow-CcC-xbfp.js} +1 -1
  368. package/dist/zod-BoqHoRCH.js +1 -0
  369. package/dist/zod.d.ts +3 -0
  370. package/dist/zod.js +1 -0
  371. package/docs/agents/coder.md +9 -2
  372. package/docs/agents/index.md +28 -18
  373. package/docs/cli.md +24 -13
  374. package/docs/config.md +1 -1
  375. package/docs/dash.md +3 -3
  376. package/docs/flows.md +3 -3
  377. package/docs/mcp.md +8 -16
  378. package/docs/sdk.md +4 -4
  379. package/docs/self-host.md +29 -18
  380. package/package.json +22 -14
  381. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  382. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  383. package/dist/actions-CmfXOVXQ.js +0 -20
  384. package/dist/adapter-7SEiVsmp.js +0 -1
  385. package/dist/adapter-BLEfUqoQ.js +0 -1
  386. package/dist/adapter-DaiJMOYo.js +0 -1
  387. package/dist/adapter-H4GlcKQz.js +0 -1
  388. package/dist/adapter-PeKziOUg.js +0 -1
  389. package/dist/add-8Z5bNm74.js +0 -1
  390. package/dist/add-DiwLZmjp.js +0 -1
  391. package/dist/add-json-wOUPHwUD.js +0 -1
  392. package/dist/agent-B69nSuTY.js +0 -1
  393. package/dist/agent-D0pQ_ewc.js +0 -3
  394. package/dist/approvals-Gv7x14u3.js +0 -2
  395. package/dist/apps-CaHoLNE7.js +0 -1
  396. package/dist/archive-sweep-jE6TPk2F.js +0 -1
  397. package/dist/args-DEMOfLz2.js +0 -1
  398. package/dist/auth-DSE3SIuI.js +0 -1
  399. package/dist/auth-DsxfkPsx.js +0 -1
  400. package/dist/chat-3Znsevah.js +0 -1
  401. package/dist/chat-cknlIhVh.js +0 -13
  402. package/dist/cli-DtTdpTy3.js +0 -9
  403. package/dist/cli.d.ts +0 -71
  404. package/dist/client-31YzOj-i.js +0 -1
  405. package/dist/config-BAkyRxp-.js +0 -3
  406. package/dist/create-BF6VHUst.js +0 -1
  407. package/dist/credentials-6PHXj8k7.js +0 -1
  408. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/agent-menu.6d3339a02f02460d.js +0 -12
  409. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/connect-apps.8d218b96f9939819.js +0 -42
  410. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/loading.02dd47fe59680cc8.js +0 -18
  411. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/loading.b27b95d8ccf0581e.js +0 -5
  412. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/loading.572d3404b984b163.js +0 -10
  413. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.9b30598fa84dd0df.js +0 -170
  414. 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
  415. 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
  416. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/loading.a55efbdbdd995213.js +0 -8
  417. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.44eabcf6cf9fbfbd.js +0 -35
  418. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/usage/page.30a31e2464417a08.js +0 -160
  419. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/agent-pills.6a0eea1ec99dffd7.js +0 -67
  420. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/agent/hero.9af8c50df6487ca5.js +0 -62
  421. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/loading.02e30b3a7f1ab9f1.js +0 -28
  422. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/page.a4be8e0779589f4e.js +0 -10
  423. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.a62d1642ca580836.js +0 -34
  424. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/loading.f4024074bf71b11b.js +0 -6
  425. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/mcp-list.0ce34ed7d7e756a7.js +0 -249
  426. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.3458e42728e30f54.js +0 -86
  427. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/layout.85946d20d7e48767.js +0 -39
  428. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/page.9d2087e0e33d57f8.js +0 -6
  429. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/activity.4aeb0734da711e10.js +0 -177
  430. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.e5b562dd47e19043.js +0 -24
  431. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/composer-data.5f12d8ef1db38026.js +0 -63
  432. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/page.107706655a927e59.js +0 -16
  433. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/usage/loading.8aabf89dabaf1c3f.js +0 -15
  434. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/badge.5abdef72e9189fdc.js +0 -31
  435. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/confirm.1328a7ede6c27bb9.js +0 -53
  436. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/client.a8205c524e63d4a9.js +0 -26
  437. package/dist/dash/standalone/static/assets/chunks/agent-pills-c5d56f60f9e17aea.js +0 -1
  438. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-738f9ac4b9fb67ef.js +0 -1
  439. package/dist/dash/standalone/static/assets/chunks/agents-grid-37e2e7f7a37b7a35.js +0 -1
  440. package/dist/dash/standalone/static/assets/chunks/badge-9984d2fd0e7f995d.js +0 -1
  441. package/dist/dash/standalone/static/assets/chunks/card-818c7a0d580e2e0d.js +0 -1
  442. package/dist/dash/standalone/static/assets/chunks/composer-a969037cf22215c7.js +0 -1
  443. package/dist/dash/standalone/static/assets/chunks/composer-data-6f7608fed13f3dd7.js +0 -1
  444. package/dist/dash/standalone/static/assets/chunks/composer-f433a2e64648633a.js +0 -1
  445. package/dist/dash/standalone/static/assets/chunks/confirm-be929e2de15876a6.js +0 -1
  446. package/dist/dash/standalone/static/assets/chunks/connect-apps-97c10fa6e35ccae6.js +0 -1
  447. package/dist/dash/standalone/static/assets/chunks/credentials-list-08cd5dfe29f42bf2.js +0 -2
  448. package/dist/dash/standalone/static/assets/chunks/custom-range-63f577240e5d5d85.js +0 -1
  449. package/dist/dash/standalone/static/assets/chunks/editor-9752c8ab26ebd328.js +0 -7
  450. package/dist/dash/standalone/static/assets/chunks/engines-list-dab79c4e3e22eefe.js +0 -1
  451. package/dist/dash/standalone/static/assets/chunks/field-43fea54c1c287e30.js +0 -1
  452. package/dist/dash/standalone/static/assets/chunks/heads-8f40675f508ebe33.js +0 -1
  453. package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +0 -1
  454. package/dist/dash/standalone/static/assets/chunks/list-591905f0aaa57629.js +0 -1
  455. package/dist/dash/standalone/static/assets/chunks/mcp-list-bae4d2186f67849e.js +0 -1
  456. package/dist/dash/standalone/static/assets/chunks/model-options-15c53331a2f28a4f.js +0 -1
  457. package/dist/dash/standalone/static/assets/chunks/models-list-c758db0c40f5173f.js +0 -1
  458. package/dist/dash/standalone/static/assets/chunks/paged-3ddb6077bef42752.js +0 -1
  459. package/dist/dash/standalone/static/assets/chunks/platform-actions-4454493d02a1c172.js +0 -1
  460. package/dist/dash/standalone/static/assets/chunks/runners-list-9d27c76eed33cb05.js +0 -1
  461. package/dist/dash/standalone/static/assets/chunks/select-adccc9ac86ac833f.js +0 -1
  462. package/dist/dash/standalone/static/assets/chunks/sentinel-b4c91a38a5d79219.js +0 -1
  463. package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +0 -5
  464. package/dist/dash/standalone/static/assets/chunks/shared-init-3a95c0e0cc27e0cb.js +0 -2
  465. package/dist/dash/standalone/static/assets/chunks/shared-init-8f2ac936c95a7f7b.js +0 -1
  466. package/dist/dash/standalone/static/assets/chunks/task-actions-189775b88ef7ada4.js +0 -1
  467. package/dist/dash/standalone/static/assets/chunks/task-ddfddeaf07fb684c.js +0 -1
  468. package/dist/dash/standalone/static/assets/chunks/task-view-0b3d7ea9cc41888b.js +0 -5
  469. package/dist/dash/standalone/static/assets/chunks/tasks-list-1b0195e3fd68714f.js +0 -1
  470. package/dist/dash/standalone/static/assets/chunks/toolbar-035d33d1e7ad11bf.js +0 -1
  471. package/dist/dash/standalone/static/assets/chunks/versions-list-875a9a0ebb3f7d08.js +0 -1
  472. package/dist/dash/standalone/static/assets/connect-382b1729a7ae7808.css +0 -1
  473. package/dist/dash/standalone/static/assets/dash-49ca85b59ac65c20.css +0 -1
  474. package/dist/dash/standalone/static/assets/dash-account-edc56e85dbaaabe0.css +0 -1
  475. package/dist/dash/standalone/static/assets/dash-agents-edba57b67e4005d0.css +0 -1
  476. package/dist/dash/standalone/static/assets/dash-agents-new-fe22253fbada2fbf.css +0 -1
  477. package/dist/dash/standalone/static/assets/dash-agents-param-slug-adf52e9dacb2d825.css +0 -1
  478. package/dist/dash/standalone/static/assets/dash-agents-param-slug-edit-a2937a347689ef29.css +0 -1
  479. package/dist/dash/standalone/static/assets/dash-agents-param-slug-platforms-265ba13db32a460d.css +0 -1
  480. package/dist/dash/standalone/static/assets/dash-agents-param-slug-settings-8afc52eb0372bc4b.css +0 -1
  481. package/dist/dash/standalone/static/assets/dash-agents-param-slug-tasks-6193e646be68dbd2.css +0 -1
  482. package/dist/dash/standalone/static/assets/dash-agents-param-slug-usage-ceadb3a1c911c402.css +0 -1
  483. package/dist/dash/standalone/static/assets/dash-settings-param-tab-b44dac8e79a560e6.css +0 -1
  484. package/dist/dash/standalone/static/assets/dash-tasks-916c7100a8058aa3.css +0 -1
  485. package/dist/dash/standalone/static/assets/dash-tasks-param-id-24265771fd1e3f78.css +0 -1
  486. package/dist/dash/standalone/static/assets/dash-usage-40940b289f85e0b6.css +0 -1
  487. package/dist/dash/standalone/static/assets/global-d2adbf01910d9df5.css +0 -1
  488. package/dist/dash/standalone/static/assets/login-c129b1ce237be260.css +0 -1
  489. package/dist/dash/standalone/static/assets/pnext-client-105d2264e4064f32.js +0 -1
  490. package/dist/dash/standalone/static/assets/pnext-client-140064bc22718639.js +0 -1
  491. package/dist/dash/standalone/static/assets/pnext-client-2825c0ea7bfa1240.js +0 -1
  492. package/dist/dash/standalone/static/assets/pnext-client-39ac7ac446e20cfb.js +0 -1
  493. package/dist/dash/standalone/static/assets/pnext-client-43cbb846cb4c167f.js +0 -1
  494. package/dist/dash/standalone/static/assets/pnext-client-7d88eb36e6e3c301.js +0 -1
  495. package/dist/dash/standalone/static/assets/pnext-client-9172198a969bd1e1.js +0 -1
  496. package/dist/dash/standalone/static/assets/pnext-client-9c9c88e5c2fe31bc.js +0 -1
  497. package/dist/dash/standalone/static/assets/pnext-client-a629391487c4b8e3.js +0 -1
  498. package/dist/dash/standalone/static/assets/pnext-client-aace561f07b06542.js +0 -1
  499. package/dist/dash/standalone/static/assets/pnext-client-b7d6355b1323fff1.js +0 -1
  500. package/dist/dash/standalone/static/assets/pnext-client-c4be2f807668e35c.js +0 -1
  501. package/dist/dash/standalone/static/assets/pnext-client-ce83b85e9562a049.js +0 -1
  502. package/dist/dash/standalone/static/assets/pnext-client-dd2046446844a78b.js +0 -1
  503. package/dist/dash/standalone/static/assets/pnext-client-e62f31aae8ce2c3b.js +0 -1
  504. package/dist/default-DgP-hBmn.js +0 -1
  505. package/dist/discover-CaAtyC0h.js +0 -1
  506. package/dist/dispatch-YW1aqjEg.js +0 -14
  507. package/dist/docs-Byrpar10.js +0 -2
  508. package/dist/env-LsVTi18f.js +0 -1
  509. package/dist/exec-DgI3boHa.js +0 -11
  510. package/dist/executor-HWnIIYUL.js +0 -10
  511. package/dist/github-actions-CvLya8ve.js +0 -24
  512. package/dist/http-DG54kyx4.js +0 -1
  513. package/dist/integrations-B2CavXR1.js +0 -5
  514. package/dist/integrations-DNz6PHFV.js +0 -1
  515. package/dist/lib/broker.d.ts +0 -1
  516. package/dist/list-CJhHYVb2.js +0 -2
  517. package/dist/list-Cr4c8mT6.js +0 -1
  518. package/dist/load-DDZfByUe.js +0 -2
  519. package/dist/local-B0GiaLV0.js +0 -1
  520. package/dist/log-view-DeJstSkw.js +0 -3
  521. package/dist/login-p2VknR9f.js +0 -1
  522. package/dist/maintenance-C02_cNLp.js +0 -1
  523. package/dist/match-DMI54zg4.js +0 -1
  524. package/dist/mcp--MIvjMWZ.js +0 -1
  525. package/dist/mcp-DgMoPoUo.js +0 -1
  526. package/dist/migrate-CSwkAInI.js +0 -2
  527. package/dist/migrate-rwTojdkz.js +0 -1
  528. package/dist/models-DGPrMV51.js +0 -1
  529. package/dist/prompt-K7-bKcTC.js +0 -7
  530. package/dist/push-D3vxfhc_.js +0 -1
  531. package/dist/queue-EvplGOuk.js +0 -117
  532. package/dist/refresh-BFuahSFK.js +0 -1
  533. package/dist/remote-AcWWfKVS.js +0 -1
  534. package/dist/remove-7y1b_gHT.js +0 -1
  535. package/dist/remove-BRj1kPYm.js +0 -1
  536. package/dist/remove-C57QDigT.js +0 -1
  537. package/dist/remove-UVD3W2OE.js +0 -1
  538. package/dist/rename-CCv5pca3.js +0 -1
  539. package/dist/result-BWrYnt0u.js +0 -5
  540. package/dist/rolldown-runtime-DT7IzrpZ.js +0 -1
  541. package/dist/runner-DRgQvMiZ.js +0 -1
  542. package/dist/runner-c-2w6Eoj.js +0 -1
  543. package/dist/schema-DoNO0dPh.js +0 -1
  544. package/dist/serve-CcqX_2qk.js +0 -8
  545. package/dist/serve-Ci0AFWtY.js +0 -2
  546. package/dist/serve-DeX0lpXj.js +0 -12
  547. package/dist/serve-SWjydoBC.js +0 -1
  548. package/dist/serve-xMihn4g-.js +0 -1
  549. package/dist/server-CWbtW4W_.js +0 -1
  550. package/dist/shared-D64pQ0XU.js +0 -1
  551. package/dist/show-U0XPh927.js +0 -1
  552. package/dist/steer-DwSAYYqb.js +0 -4
  553. package/dist/store-B0RLMUR9.js +0 -42
  554. package/dist/store-Cxc2GYyj.js +0 -19
  555. package/dist/task-DEp3GHwH.js +0 -1
  556. package/dist/task-DhZ5vhyY.js +0 -5
  557. package/dist/task-gKnlLOGe.js +0 -1
  558. package/dist/test-TvJAUf4S.js +0 -1
  559. package/dist/tools-BQQfMQB9.js +0 -1
  560. package/dist/types-D0q15RJa.js +0 -1
  561. package/dist/types-DMGBYB_K.d.ts +0 -391
  562. package/dist/usage-Bw7fQeFC.js +0 -1
  563. package/dist/watch-DJATTJw_.js +0 -8
  564. package/dist/wire-DxxfWapP.js +0 -1
  565. package/dist/worker-C3dzIzd3.js +0 -1
  566. package/dist/worker-C4Lo6rLS.js +0 -9
  567. package/migrations/0000_initial.sql +0 -260
  568. package/migrations/meta/0000_snapshot.json +0 -1861
  569. package/migrations/meta/_journal.json +0 -13
  570. /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
  571. /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
  572. /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
  573. /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
  574. /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
  575. /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
  576. /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
  577. /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
  578. /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
  579. /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
  580. /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
  581. /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
  582. /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.d2e3bc878dcb47da.css.pnext-asset.js} +0 -0
  583. /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
  584. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/{layout.4b31e7e60256f6d1.css.pnext-asset.js → [org]/layout.3827c440c6421a06.css.pnext-asset.js} +0 -0
  585. /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
  586. /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
  587. /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
  588. /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
  589. /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
  590. /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.1236d6680ec02696.css.pnext-asset.js} +0 -0
  591. /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
  592. /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
  593. /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
  594. /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
  595. /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
  596. /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
  597. /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.360b393e5938c60b.css.pnext-asset.js} +0 -0
  598. /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
  599. /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
  600. /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
  601. /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
  602. /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
  603. /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/range-bar.1da88d087e3b5302.css.pnext-asset.js} +0 -0
  604. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.146f70c7049b5b31.css.pnext-asset.js → app/dash/[org]/usage/stats.bb7cb568c0174557.css.pnext-asset.js} +0 -0
  605. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/confirm.fb57a29a70e9df56.css.pnext-asset.js → app/dash/[org]/usage/top-agents.20a1d4451784792b.css.pnext-asset.js} +0 -0
  606. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/menu.6341c87b5bec4256.css.pnext-asset.js → app/dash/[org]/usage/usage.775df2f43187c487.css.pnext-asset.js} +0 -0
  607. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/select.03a695573b914d6f.css.pnext-asset.js → app/globals.76731787d2a1aa3b.css.pnext-asset.js} +0 -0
  608. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/sentinel.bcff411a9f2355ec.css.pnext-asset.js → frame/page-head.364ec93a8e7857b3.css.pnext-asset.js} +0 -0
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{St as t}from"./dispatch-YW1aqjEg.js";import{c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,p as u,u as ee}from"./prompt-K7-bKcTC.js";import{a as d}from"./load-DDZfByUe.js";import{t as f}from"./integrations-B2CavXR1.js";import p from"node:path";import m from"node:process";import h from"node:fs";import{execFile as g}from"node:child_process";import{createHash as _}from"node:crypto";import v from"node:fs/promises";import{promisify as y}from"node:util";import te from"node:http";import*as b from"openid-client";const x={"**/":`(?:.*/)?`,"/**":`/.*`,"**":`.*`,"*":`[^/]*`,"?":`[^/]`};function S(e){return e.split(/\r?\n/).flatMap(e=>{let t=e.trimEnd();if(!t||t.startsWith(`#`))return[];let n=t.startsWith(`!`);n&&(t=t.slice(1));let r=t.endsWith(`/`);r&&(t=t.slice(0,-1));let i=t.replace(/^\//,``).replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*\/|\/\*\*$|\*\*|\*|\?/g,e=>x[e]),a=t.includes(`/`);return[{pattern:RegExp(a?`^${i}$`:`^(?:.*/)?${i}$`),negate:n,directory:r}]})}const C=(e,t,n)=>e.reduce((e,r)=>(!r.directory||n)&&r.pattern.test(t)?!r.negate:e,!1);async function w(e,t,n=``){let r=[];for(let i of await v.readdir(p.join(e,n),{withFileTypes:!0})){let a=n?`${n}/${i.name}`:i.name;i.isDirectory()&&!C(t,a,!0)?r.push(...await w(e,t,a)):i.isFile()&&!C(t,a,!1)&&r.push(a)}return r}async function T(e){return(await y(g)(`git`,[`-C`,e,`ls-files`,`--cached`,`--others`,`--exclude-standard`,`-z`,`--`,`.`],{maxBuffer:67108864}).catch(()=>void 0))?.stdout.split(`\0`).filter(Boolean)}async function E(e){let t=await T(e)??await w(e,S(await v.readFile(p.join(e,`.gitignore`),`utf8`).catch(()=>``))),n={};for(let r of t){if(r===`agent.json`||r===`system.md`)continue;let t=p.join(e,r);(await v.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await v.readFile(t,`utf8`))}return n}var D=e({deviceSignIn:()=>P,hasBrowser:()=>ne,logoutSession:()=>z,loopbackSignIn:()=>N,refreshSignIn:()=>F,revokeSignIn:()=>I,selectLoginOrganization:()=>L,sessions:()=>B,signIn:()=>R});const O=`openid profile email offline_access organizations:read`,k=e=>`${e}/.well-known/oauth-cli-client.json`;async function A(e,n){let r=new URL(e).origin,i=await fetch(`${r}/.well-known/oauth-protected-resource`).catch(n=>{throw new t(`login-failed`,`No Coder server answers at ${e}: ${n.message}`)}),a=await i.json().catch(()=>({})),o=Array.isArray(a.authorization_servers)?a.authorization_servers[0]:void 0;if(!i.ok||a.resource!==r||typeof o!=`string`)throw new t(`login-failed`,`${e} does not offer sign-in.`,{hint:`Sign-in needs a Postgres-backed server; see coder docs self-host`});if(n!==void 0&&o!==n)throw new t(`login-failed`,`The server's sign-in issuer has changed. Sign in again before using this session.`);return{config:await b.discovery(new URL(o),k(e),void 0,b.None(),new URL(o).protocol===`http:`?{execute:[b.allowInsecureRequests]}:void 0).catch(e=>{throw new t(`login-failed`,`Wular Auth at ${o} did not answer: ${e.message}`)}),resource:r}}function j(e,n,r){let i=n.claims(),a=n.refresh_token??r?.refreshToken;if(!a)throw new t(`login-failed`,`Wular Auth returned no refresh token.`);return{token:n.access_token,refreshToken:a,expiresAt:Date.now()+(n.expires_in??600)*1e3,issuer:e.serverMetadata().issuer,user:i?{name:typeof i.name==`string`?i.name:``,email:typeof i.email==`string`?i.email:``}:r?.user??{name:``,email:``}}}const M=e=>new t(`login-failed`,e instanceof b.ResponseBodyError||e instanceof b.AuthorizationResponseError?e.error===`access_denied`?`Sign-in was denied in the browser.`:e.error_description??e.error:e instanceof Error?e.message:String(e));async function N(e,n){let{config:r,resource:i}=await A(e),a=b.randomPKCECodeVerifier(),o=b.randomState(),s=te.createServer();await new Promise(e=>s.listen(0,`127.0.0.1`,e));let{port:c}=s.address(),l=`http://127.0.0.1:${c}/callback`;try{let e=new Promise((e,n)=>{let r=setTimeout(()=>n(new t(`login-failed`,`Sign-in timed out.`)),3e5);s.on(`request`,(t,n)=>{let i=new URL(t.url??`/`,l);if(i.pathname!==`/callback`||i.searchParams.get(`state`)!==o){n.writeHead(404).end();return}n.writeHead(200,{"content-type":`text/plain; charset=utf-8`}).end(i.searchParams.has(`error`)?`Sign-in failed. You can close this tab and return to the terminal.`:`Signed in. You can close this tab and return to the terminal.`),clearTimeout(r),e(i)})});return n(b.buildAuthorizationUrl(r,{redirect_uri:l,scope:O,resource:i,code_challenge:await b.calculatePKCECodeChallenge(a),code_challenge_method:`S256`,state:o}).href),j(r,await b.authorizationCodeGrant(r,await e,{pkceCodeVerifier:a,expectedState:o},{resource:i}).catch(e=>{throw M(e)}))}finally{s.close(),s.closeAllConnections()}}async function P(e,t){let{config:n,resource:r}=await A(e);try{let e=await b.initiateDeviceAuthorization(n,{scope:O,resource:r});return t(e.user_code,e.verification_uri_complete??e.verification_uri),j(n,await b.pollDeviceAuthorizationGrant(n,e,{resource:r}))}catch(e){throw M(e)}}async function F(e,n){let{config:r,resource:i}=await A(e,n.issuer);try{return j(r,await b.refreshTokenGrant(r,n.refreshToken,{resource:i}),n)}catch(e){if(e instanceof b.ResponseBodyError&&(e.error===`invalid_grant`||e.error===`invalid_client`))return;throw new t(`server`,`Wular Auth did not refresh the session: ${e instanceof Error?e.message:String(e)}`)}}async function I(e,t){let{config:n}=await A(e,t.issuer);n.serverMetadata().revocation_endpoint&&await b.tokenRevocation(n,t.refreshToken,{token_type_hint:`refresh_token`})}async function L(e,n,r){if(!e.length)throw new t(`login-failed`,`This account belongs to no workspace.`);if(n){let r=e.find(e=>e.slug===n);if(!r)throw new t(`login-failed`,`You are not a member of workspace "${n}".`);return r}if(e.length<=1)return e[0];if(!r)throw new t(`login-failed`,`Choose a workspace for this server.`,{hint:`Pass --workspace <slug>.`});let i=await r(e);return e.find(e=>e.slug===i)}const ne=()=>!m.env.SSH_CONNECTION&&(m.platform!==`linux`||!!(m.env.DISPLAY||m.env.WAYLAND_DISPLAY));async function R(e,n={}){let r=n.device?await P(e,n.onCode??(()=>{})):await N(e,n.open??s),i=await fetch(`${e}/me`,{headers:{authorization:`Bearer ${r.token}`}}).catch(n=>{throw new t(`login-failed`,`No Coder server answers at ${e}: ${n.message}`)}),a=await i.json().catch(()=>({}));if(!i.ok)throw new t(`login-failed`,`Signed in, but the server refused the token.`);let o=await L(a.organizations??[],n.organization,n.chooseOrganization);return{...r,...o?{organization:o}:{},at:Date.now()}}async function z(e){let n=r(),i=n[e];if(!i)throw new t(`login-failed`,`Not signed in to ${e}.`);return await I(e,i).catch(()=>void 0),delete n[e],l(n),{ok:!0,server:e}}const B={async login(e={}){let t=G(e),n=await R(t,e);return e.save!==!1&&l({...r(),[t]:n}),{...n,server:t}},logout:(e={})=>z(G(e)),status:()=>Object.fromEntries(Object.entries(r()).map(([e,t])=>[e,{user:t.user,organization:t.organization,at:t.at}]))};function V(e,t){let n=t,r;return{expiresAt:()=>n.expiresAt,async renew(){return r||=H(e,n).finally(()=>{r=void 0}),n=await r,n.token}}}async function H(e,t){let n=_(`sha256`).update(e).digest(`hex`),r=`${i()}.${n}.lock`;for(h.mkdirSync(p.dirname(r),{recursive:!0});;)try{let e=h.openSync(r,`wx`,384);try{h.writeFileSync(e,String(process.pid))}catch(e){throw h.unlinkSync(r),e}finally{h.closeSync(e)}break}catch(e){if(e.code!==`EEXIST`)throw e;try{let e=Number(h.readFileSync(r,`utf8`));e?process.kill(e,0):Date.now()-h.statSync(r).mtimeMs>3e4&&h.unlinkSync(r)}catch(e){if(e.code===`ESRCH`)try{h.unlinkSync(r)}catch{}}await new Promise(e=>setTimeout(e,25))}try{return await U(e,t)}finally{h.unlinkSync(r)}}async function U(e,n){let i=e=>e&&e.refreshToken!==n.refreshToken?e:void 0,a=i(r()[e]);if(a&&a.expiresAt>n.expiresAt)return a;let o=await F(e,n),s=r();if(o){let t={...n,...o};return l({...s,[e]:t}),t}let c=i(s[e]);if(c)return c;throw delete s[e],l(s),new t(`login-failed`,`Signed out of ${e}.`,{hint:`Sign in again: coder auth login`})}var W=e({addCredential:()=>Q,coderClient:()=>q,connect:()=>K,loginCredential:()=>$,pushAgents:()=>J,serverFor:()=>G});function G(e={}){let r=u(e.server);if(!n(r)){if(!e.yes)throw new t(`invalid-option`,`First use of Coder server ${new URL(r).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});c(r)}return r}function K(e={}){let t=G(e);return q(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function q(e,{token:n,missingHint:r,organization:i}={}){let s=u(e),c=ee(s),l=c?.token,d=m.env.ADMIN_TOKEN,f=n??l??d;if(f&&f===d&&!a(s))throw new t(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!f)throw new t(`login-failed`,`Not signed in to ${s}.`,{...r?{hint:r}:{}});return new o(s,{token:f},{organization:i??c?.organization?.slug,renewal:c&&f===l?V(s,c):void 0})}async function J(e,n,r){let i=(await d(n,f)).filter(e=>!e.builtin),a=r?i.filter(e=>e.id===r):i;if(r&&!a.length)throw new t(`invalid-option`,`No workspace agent named "${r}".`);let o=[];for(let t of a)o.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await v.readFile(p.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await E(t.dir),name:t.name,description:t.definition.description}));return o}const Y=/^[A-Za-z_][A-Za-z0-9_]*$/,X=[`claude`,`codex`,`custom`],Z=(e,n)=>new t(`invalid-option`,e,n?{hint:n}:{}),re=()=>new Promise(e=>setTimeout(e,1e3));async function ie(){let e=``;for await(let t of m.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function Q(e,t){let n=Array.isArray(t.env)?t.env:Object.keys(t.env);for(let e of n)if(!Y.test(e))throw Z(`Invalid environment variable name ${JSON.stringify(e)}.`);if(!t.engine)throw Z(`Missing required --engine.`,`Use claude, codex, or custom`);let r=X.find(e=>e===t.engine);if(!r)throw Z(`Invalid --engine value.`,`Use claude, codex, or custom`);if(!n.length)throw Z(`At least one --env NAME is required.`);if(t.value!==void 0&&n.length!==1)throw Z(`--value requires exactly one --env NAME.`);let i=Array.isArray(t.env)?Object.fromEntries(await Promise.all(n.map(async e=>{let n=t.value===`-`?await ie():t.value??m.env[e];if(!n)throw Z(`Environment variable ${e} is not set.`);return[e,n]}))):t.env;return K(t).credentials.add({...e?{label:e}:{},env:i,engine:r,workspace:t.workspace,noCheck:t.noCheck,default:t.default})}async function $(e,t={}){if(e!==`claude`&&e!==`codex`)throw Z(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=K(t).credentials,r=await n.login(e);t.onStart?.(()=>n.cancelLogin(r.id));let i=async e=>{for(;!e(r.state);)await re(),r=await n.loginStatus(r.id)};return await i(e=>e!==`starting`),t.onOpen?.(r),e===`claude`&&r.state===`open`&&t.code&&await n.loginCode(r.id,await t.code()),await i(e=>e===`done`||e===`failed`),r}export{W as a,D as c,J as i,K as n,G as o,$ as r,B as s,Q as t};
@@ -1 +0,0 @@
1
- import{ot as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-DtTdpTy3.js";import{n,t as r}from"./args-DEMOfLz2.js";import i from"node:process";const a=t({name:`mcp remove`,helpName:`mcp rm`,help:{usage:`coder mcp rm <name> [--user] [--cwd <dir>]`,summary:"Remove `mcp.<name>` from the repo config (or the user config with --user).",flags:[[`--user`,`edit ~/.coder config`]]},options:{...r,user:n},args:1,run:({options:t,args:[n],cwd:r})=>e(r,n,t),print:({name:e,file:t})=>i.stdout.write(`Removed MCP server "${e}" from ${t}.\n`)});export{a as commandMcpRemove};
@@ -1 +0,0 @@
1
- import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-DtTdpTy3.js";import{p as r}from"./output-BKeyLbvt.js";import{n as i,o as a}from"./args-DEMOfLz2.js";import o from"node:process";const s={json:i,server:a,workspace:i,yes:i},c=()=>new e(`invalid-option`,`Missing credential label.`),l=t({name:`credentials remove`,globalFlags:{cwd:!1},help:{usage:`coder credentials remove <label> [--workspace] [--server [url]] [--json]`,flags:[[`--workspace`,`the workspace credential of that label`],n]},options:s,args:1,async run({options:e,args:[t]}){let{connect:n}=await import(`./remote-AcWWfKVS.js`).then(e=>e.a);if(!t)throw c();return n(e).credentials.remove(t,e)},print:(e,{args:[t]})=>o.stdout.write(`Removed ${r.bold(t)}.\n`)});export{l as commandCredentialsRemove,s as credentialOptions,c as missingLabel};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{i as t}from"./cli-DtTdpTy3.js";import{p as n}from"./output-BKeyLbvt.js";import{i as r}from"./models-DGPrMV51.js";import{n as i}from"./add-DpsjB8Mp.js";import a from"node:process";var o=e({commandModelRemove:()=>s,printModelChange:()=>c});const s=t({name:`model remove`,help:{usage:`coder model remove <name>`,summary:`Remove a configured custom model.`,flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]]},options:i,args:1,run:({options:e,args:[t],cwd:n})=>r(n,t,e),print:e=>c(`removed`,e.removed,e.file)});function c(e,t,r){a.stdout.write(`${e} ${n.cyan(t)} ${n.dim(`(${r})`)}\n`)}export{o as n,c as t};
@@ -1 +0,0 @@
1
- import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-DtTdpTy3.js";import{p as r}from"./output-BKeyLbvt.js";import{n as i,o as a}from"./args-DEMOfLz2.js";import o from"node:process";const s={json:i,server:a,yes:i},c=t({name:`runner remove`,globalFlags:{cwd:!1},help:{usage:`coder runner remove <id> [--server [url]] [--json]`,flags:[n]},options:s,args:1,async run({options:t,args:[n]}){let{removeRunner:r}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);if(!n)throw new e(`invalid-option`,`Missing runner id.`);return r(n,t)},print:(e,{args:[t]})=>o.stdout.write(`Removed ${r.bold(t)}.\n`)});export{c as commandRunnerRemove,s as runnerOptions};
@@ -1 +0,0 @@
1
- import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-DtTdpTy3.js";import{p as r}from"./output-BKeyLbvt.js";import{runnerOptions as i}from"./remove-UVD3W2OE.js";import a from"node:process";const o=t({name:`runner rename`,globalFlags:{cwd:!1},help:{usage:`coder runner rename <id> <name> [--server [url]] [--json]`,flags:[n]},options:i,args:2,async run({options:t,args:[n,r]}){let{updateRunner:i}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);if(!n||!r)throw new e(`invalid-option`,`Usage: coder runner rename <id> <name>`);return i(n,{name:r},t)},print:(e,{args:[t]})=>a.stdout.write(`Renamed ${t} to ${r.bold(e.name)}.\n`)});export{o as commandRunnerRename};
@@ -1,5 +0,0 @@
1
- import{St as e,pn as t}from"./dispatch-YW1aqjEg.js";import{i as n}from"./cli-DtTdpTy3.js";import{c as r,m as i,p as a,s as o}from"./output-BKeyLbvt.js";import{l as s,t as c}from"./args-DEMOfLz2.js";import{gateLine as l,gateRunningLine as u,paintPlain as d,printLedger as f,resultJson as p,stepSymbol as m,taskLabel as h,taskLine as g}from"./watch-B3gAEK1N.js";import _ from"node:process";const v=n({name:`flow result`,help:{usage:`coder flow result [run-id] [--tail <n|all>] [--json]`,summary:`Show a flow run's status and result, with its tasks, gates, and token ledger.
2
- --tail <n> caps the step rows (0 for the result alone). Defaults to the most
3
- recent run. To watch a run live, prefer \`coder flow watch\`.`,flags:[[`--tail <n|all>`,`show the last n step rows (default: all; 0 hides them)`]],examples:[[`coder flow result --tail 0`,`the most recent run's result, no step rows`]]},options:{...c,tail:s},args:1,async run({options:t,args:[n]}){let{runResult:r}=await import(`./executor-HWnIIYUL.js`).then(e=>e.b),i=r(n);if(!i&&!t.json)throw new e(`flow-failed`,n?`No flow run "${n}".`:`No flow runs yet.`,{hint:`Run one: coder flow run <name>`});return i},json:e=>e&&p(e),print:(e,{options:t})=>b(e,t.tail)});function y(e,t=!1){let n=a;if(t)return e.map(d);let r=(t,n)=>{for(let r=t+1;r<e.length;r+=1){let t=e[r].depth;if(t<n)return!1;if(t===n)return!0}return!1};return e.map((e,t)=>{let i=``;for(let n=0;n<e.depth;n+=1)i+=r(t,n)?`│ `:` `;return i+=e.log?`│ `:r(t,e.depth)?`├─`:`└─`,`${n.dim(i)} ${e.body}`})}function b(e,n=`all`){let s=a,c=!_.stdout.isTTY;_.stdout.write(`${s.bold(`Flow`)} ${s.cyan(e.name)} ${s.dim(`(${e.runId})`)}. ${s.bold(i(e.status))}\n`);let d=e.steps,p=d.filter(e=>t.includes(e.status)).length,v=e.status===`running`?`${p}/${d.length} tasks`:`${e.taskCount} tasks`;if(_.stdout.write(`${s.dim(`started ${e.startedAt}${e.endedAt?` · ended ${e.endedAt}`:``} · ${v}`)}\n`),n!==0){let t=new Map,r=new Map,i=new Map,a=[];for(let n of e.events)if(n.kind===`task-start`){let e={name:h(n.name,n.prompt),engine:n.engine,depth:n.depth??0};t.set(n.taskId,e),r.set(n.taskId,e)}else if(n.kind===`task-end`){r.delete(n.taskId);let e=t.get(n.taskId);a.push({depth:e?.depth??0,body:g(m(n.status,c),e?.name??null,n.taskId,n.tokens,e?.engine)})}else if(n.kind===`gate-start`)i.set(n.gateId,{cmd:n.cmd,depth:n.depth??0});else if(n.kind===`gate`)n.gateId&&i.delete(n.gateId),a.push({depth:n.depth??0,body:l(n,c)});else if(n.kind===`log`)for(let e of n.message.split(`
4
- `))a.push({depth:n.depth??0,body:s.light(e),log:!0});else n.kind===`flow-start`&&a.push({depth:n.depth-1,body:s.bold(`flow ${n.name}`)});for(let[e,t]of r)a.push({depth:t.depth??0,body:g(m(`running`,c),t.name,e,null,t.engine)+(c?``:` ${s.light(`running`)}`)});for(let e of i.values())a.push({depth:e.depth,body:u(e.cmd,m(`running`,c))+(c?``:` ${s.light(`running`)}`)});if(!a.length)for(let e of n===`all`?d:d.slice(-n))a.push({depth:0,body:g(m(e.status,c),e.name,e.taskId??`-`,e.tokens)});let o=y(a,c),f=n===`all`?o:o.slice(-n);f.length&&_.stdout.write(`\n${f.join(`
5
- `)}\n`)}e.endedAt&&e.result!==void 0&&_.stdout.write(`\n${s.bold(`Result:`)}\n${r(e.result)}\n`),e.error&&_.stdout.write(`\n${s.red(`error:`)} ${e.error}\n`),f(e.ledger);let b=e.status===`running`?[`Follow live: coder flow watch ${e.runId}`,`Stop it: coder flow stop ${e.runId}`]:e.status===`stopped`||e.status===`failed`?[`Resume: coder flow resume ${e.runId}`]:[];b.length&&_.stdout.write(`\n${o(b,s)}\n`)}export{v as commandResult};
@@ -1 +0,0 @@
1
- import"node:module";var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};export{t};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-DtTdpTy3.js";const t=e(`runner`,{add:async()=>(await import(`./add-8Z5bNm74.js`)).commandRunnerAdd,default:async()=>(await import(`./default-DgP-hBmn.js`)).commandRunnerDefault,test:async()=>(await import(`./test-TvJAUf4S.js`)).commandRunnerTest,serve:async()=>(await import(`./serve-SWjydoBC.js`)).commandRunnerServe,list:async()=>(await import(`./list-yoGxyIlx.js`)).commandRunnerList,rename:async()=>(await import(`./rename-CCv5pca3.js`)).commandRunnerRename,remove:async()=>(await import(`./remove-UVD3W2OE.js`)).commandRunnerRemove},{menu:[{usage:`add <kind>`,blurb:`connect a runner`},{usage:`default <id>`,blurb:`set the default in its scope`},{usage:`test <id>`,blurb:`check a runner connection`},{usage:`serve --url <public url>`,blurb:`run your server's tasks on this machine`},{usage:`list`,blurb:`list your runners and the workspace's`},{usage:`rename <id> <name>`,blurb:`rename a runner`},{usage:`remove <id>`,blurb:`remove a runner`}],description:[`Run your Coder server's tasks on your own machine, reached through any tunnel.`],exampleCommand:`runner serve`});export{t as commandRunner};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{St as t}from"./dispatch-YW1aqjEg.js";import{n}from"./remote-AcWWfKVS.js";var r=e({addRunner:()=>a,addRunnerFields:()=>u,listRunners:()=>i,pairRunner:()=>o,removeRunner:()=>l,testRunner:()=>c,updateRunner:()=>s});const i=(e={})=>n(e).runners.list(),a=(e,t={})=>n(t).runners.add(e),o=(e,t={})=>n(t).runners.pair(e),s=(e,t,r={})=>n(r).runners.update(e,t),c=(e,t={})=>n(t).runners.test(e),l=(e,t={})=>n(t).runners.remove(e);async function u(e,r){let i=n(r),{catalog:a}=await i.runners.list(),o=a.find(t=>t.kind===e);if(!o)throw new t(`invalid-option`,`Unknown runner kind.`);if(!o.available)throw new t(`invalid-option`,o.reason??`Runner unavailable.`);let s={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),i=e.slice(n+1),a=o.fields.find(e=>e.key===r);if(!a)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(a.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(i)||!process.env[i.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);s[r]=process.env[i.slice(4)]}else s[r]=i}let c=r.scope??((await i.me()).user?`personal`:`workspace`);if(c!==`personal`&&c!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return o.connect===`pair`?i.runners.pair({name:r.name,scope:c}):i.runners.add({kind:o.kind,name:r.name??o.name,scope:c,config:s})}export{r as a,l as i,i as n,c as o,o as r,s,a as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{sql as t}from"drizzle-orm";import{bigint as n,bigserial as r,boolean as i,index as a,integer as o,jsonb as s,pgSchema as c,primaryKey as l,text as u,timestamp as d,unique as f}from"drizzle-orm/pg-core";var p=e({agent:()=>b,agentVersion:()=>x,chatItem:()=>N,chatState:()=>M,coder:()=>m,engineCredential:()=>T,integrationApp:()=>C,integrationAppInstallation:()=>w,platformLink:()=>y,runner:()=>E,secret:()=>S,tables:()=>P,task:()=>D,taskInbox:()=>O,taskLog:()=>k,taskTombstone:()=>A,usage:()=>j});const m=c(`coder`),h=m.table,g=()=>d({withTimezone:!0}),_={createdAt:g().notNull().defaultNow(),updatedAt:g().notNull().defaultNow()},v={id:r({mode:`number`}).primaryKey(),organizationId:u().notNull()},y=h(`platform_link`,{id:r({mode:`number`}).primaryKey(),platform:u().notNull(),platformUserId:u().notNull(),userId:u().notNull(),name:u().notNull(),email:u().notNull(),organizations:s().$type(),token:u(),createdAt:g().notNull().defaultNow()},e=>[f().on(e.platform,e.platformUserId),a().on(e.userId)]),b=h(`agent`,{...v,slug:u().notNull(),name:u().notNull(),description:u(),source:u().$type().notNull(),repo:u(),path:u(),currentVersion:o().notNull(),settings:s().$type(),..._},e=>[f().on(e.organizationId,e.slug)]),x=h(`agent_version`,{id:r({mode:`number`}).primaryKey(),agentId:n({mode:`number`}).notNull().references(()=>b.id),version:o().notNull(),definition:s().$type().notNull(),systemPrompt:u().notNull(),files:s().$type(),commit:u(),importedFrom:u().notNull(),createdAt:g().notNull().defaultNow()},e=>[f().on(e.agentId,e.version)]),S=h(`secret`,{...v,kind:u().$type().notNull(),iv:u().notNull(),tag:u().notNull(),ciphertext:u().notNull(),keyVersion:o().notNull(),..._},e=>[a().on(e.organizationId,e.kind)]),C=h(`integration_app`,{...v,key:u().notNull(),integration:u().notNull(),platformAppId:u().notNull(),agent:u().notNull(),name:u().notNull(),agentsRepo:u(),branch:u(),credentialsSecretId:n({mode:`number`}).notNull().references(()=>S.id),..._},e=>[f().on(e.organizationId,e.key),f().on(e.integration,e.platformAppId)]),w=h(`integration_app_installation`,{...v,key:u().notNull(),appId:n({mode:`number`}).notNull().references(()=>C.id),platformInstallId:u().notNull(),account:s().$type().notNull(),tokenSecretId:n({mode:`number`}).references(()=>S.id),installer:u(),connections:s().$type(),settings:s().$type(),..._,deletedAt:g()},e=>[f().on(e.key),a().on(e.organizationId,e.appId)]),T=h(`engine_credential`,{...v,secretId:n({mode:`number`}).notNull().references(()=>S.id).unique(),owner:u(),engine:u().$type().notNull(),label:u().notNull(),isDefault:i().notNull().default(!1),account:s().$type(),..._},e=>[f().on(e.organizationId,e.owner,e.label).nullsNotDistinct()]),E=h(`runner`,{...v,publicId:u().notNull(),owner:u(),name:u().notNull(),kind:u().$type().notNull(),scope:u().$type().notNull(),config:s().$type().notNull(),createdBy:u(),isDefault:i().notNull().default(!1),lastSeen:d({withTimezone:!0}),secretId:n({mode:`number`}).notNull().references(()=>S.id),..._},e=>[f().on(e.organizationId,e.publicId)]),D=h(`task`,{...v,publicId:u().notNull(),source:u().$type().notNull(),status:u().$type().notNull(),agent:u().notNull(),flow:u().notNull(),runner:u().notNull(),permissions:u().$type(),appId:n({mode:`number`}).references(()=>C.id),installationId:n({mode:`number`}).references(()=>w.id),event:s().$type(),prompt:u(),args:s().$type(),mcp:s().$type(),author:u(),definition:s().$type().notNull(),credential:u(),requester:u(),runnerId:u(),usage:s().$type(),tools:s().$type().notNull(),toolScopes:s().$type(),context:s().$type(),files:s().$type(),result:s().$type(),error:u(),tokens:s(),handle:u(),tokenHash:u(),lastSeenAt:g(),logCursor:o(),logSeq:o(),logBytes:o(),archivedAt:g(),approval:s(),answer:s(),attempts:o().notNull().default(0),inboxSeq:o().notNull().default(-1),inboxAck:o().notNull().default(-1),generation:o().notNull().default(0),lockedAt:g(),startedAt:g(),finishedAt:g(),cancelRequestedAt:g(),..._},e=>[f().on(e.organizationId,e.publicId),a().on(e.publicId),a().on(e.organizationId,e.createdAt.desc(),e.publicId.desc()),a().on(e.organizationId,e.updatedAt),a().on(e.organizationId).where(t`${e.status} = 'queued'`),a().on(e.status,e.createdAt)]),O=h(`task_inbox`,{...v,taskId:n({mode:`number`}).notNull().references(()=>D.id,{onDelete:`cascade`}),seq:o().notNull(),generation:o().notNull().default(0),kind:u().$type().notNull(),value:s(),at:g().notNull()},e=>[f().on(e.taskId,e.seq),a().on(e.taskId,e.generation,e.seq)]),k=h(`task_log`,{...v,taskId:n({mode:`number`}).notNull().references(()=>D.id,{onDelete:`cascade`}),seq:o().notNull(),at:g().notNull(),level:u().$type().notNull(),line:u().notNull()},e=>[f().on(e.taskId,e.seq)]),A=h(`task_tombstone`,{organizationId:u().notNull(),publicId:u().notNull(),deletedAt:g().notNull()},e=>[a().on(e.organizationId,e.deletedAt)]),j=h(`usage`,{...v,taskId:n({mode:`number`}).notNull().references(()=>D.id,{onDelete:`cascade`}).unique(),installationId:n({mode:`number`}).references(()=>w.id),agent:u().notNull(),target:u().notNull(),engine:u(),model:u(),credential:u().notNull(),runnerMs:o().notNull(),tokens:s(),at:g().notNull(),..._},e=>[a().on(e.organizationId,e.at)]),M=h(`chat_state`,{key:u().primaryKey(),value:s().notNull(),expiresAt:g()},e=>[a().on(e.expiresAt).where(t`${e.expiresAt} is not null`)]),N=h(`chat_item`,{key:u().notNull(),seq:n({mode:`number`}).generatedAlwaysAsIdentity(),value:s().notNull(),expiresAt:g()},e=>[l({columns:[e.key,e.seq]}),a().on(e.expiresAt).where(t`${e.expiresAt} is not null`)]),P={platformLink:y,agent:b,agentVersion:x,secret:S,integrationApp:C,integrationAppInstallation:w,engineCredential:T,runner:E,task:D,taskInbox:O,taskLog:k,taskTombstone:A,usage:j,chatState:M,chatItem:N};export{j as _,T as a,y as c,S as d,P as f,A as g,k as h,M as i,E as l,O as m,x as n,C as o,D as p,N as r,w as s,b as t,p as u};
@@ -1,8 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{$ as t,G as n,H as r,K as i,Mt as a,Q as o,St as s,U as c,Vt as l,_t as u,ct as d,et as f,jt as p,kn as m,nn as h,ut as g}from"./dispatch-YW1aqjEg.js";import{i as _,n as v,r as y,u as b}from"./load-DDZfByUe.js";import{c as x,d as S,l as C,n as w}from"./integrations-B2CavXR1.js";import{c as ee}from"./models-DGPrMV51.js";import{o as T}from"./local-B0GiaLV0.js";import{a as E,d as D,f as O,l as k,n as te,o as ne,p as A,r as j,s as re,t as ie,u as ae}from"./http-DG54kyx4.js";import{$ as oe,$n as M,$t as se,A as ce,An as le,At as N,B as ue,Bt as de,C as fe,Cn as pe,Ct as me,D as he,Dn as ge,Dt as P,E as _e,En as ve,Et as ye,F as be,Fn as xe,Ft as Se,G as Ce,Gn as we,Gt as Te,H as Ee,Hn as De,Ht as Oe,I as ke,In as F,It as Ae,J as je,Jn as I,Jt as Me,K as Ne,Kn as Pe,Kt as Fe,L as Ie,Ln as Le,M as Re,Mn as ze,Mt as Be,N as Ve,Nn as He,Nt as Ue,O as L,On as We,Ot as Ge,P as Ke,Pn as qe,Pt as Je,Q as Ye,Qn as R,Qt as Xe,R as Ze,Rn as z,Rt as Qe,S as B,Sn as $e,St as et,T as tt,Tn as nt,Tt as rt,U as it,Un as at,Ut as ot,V as st,Vn as ct,Vt as lt,W as ut,Wn as dt,Wt as ft,X as pt,Xn as mt,Xt as ht,Yn as V,Yt as gt,Z as _t,Zn as vt,Zt as yt,_ as bt,_n as H,_t as xt,an as St,at as Ct,b as U,bn as W,bt as wt,c as Tt,cn as Et,ct as Dt,d as Ot,dn as kt,en as At,er as jt,et as Mt,f as Nt,g as Pt,gn as Ft,gt as It,hn as G,ht as Lt,i as Rt,in as zt,j as Bt,jn as Vt,jt as Ht,k as Ut,kn as Wt,kt as Gt,l as Kt,ln as qt,lt as Jt,m as Yt,mn as Xt,mt as Zt,nn as Qt,nt as $t,o as en,on as tn,ot as nn,p as rn,pt as an,q as on,qn as sn,qt as cn,r as ln,rn as un,sn as dn,t as fn,tn as pn,tt as mn,un as hn,ut as gn,v as _n,vn,vt as yn,w as bn,wn as xn,wt as Sn,x as K,xn as Cn,xt as wn,y as Tn,yn as En,yt as Dn,z as On,zt as kn}from"./store-Cxc2GYyj.js";import{n as An,r as jn}from"./env-LsVTi18f.js";import{r as Mn,t as Nn}from"./migrate-rwTojdkz.js";import{n as Pn,r as Fn}from"./usage-Bw7fQeFC.js";import q from"node:path";import J from"node:process";import*as Y from"zod/mini";import In from"node:fs";import{createHash as Ln,randomBytes as Rn,randomUUID as zn}from"node:crypto";import X from"node:fs/promises";import{isDeepStrictEqual as Bn}from"node:util";import Vn from"node:http";import{sql as Hn}from"drizzle-orm";async function Un(e){try{return await X.readdir(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function Wn(e){try{return await X.lstat(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function Gn(e,t){if(e===t||!await Wn(e))return 0;let n=await Un(e),r=n.filter(e=>e.isDirectory()).length;if(!await Wn(t))return await m(e,t),r;for(let r of n)await m(q.join(e,r.name),q.join(t,r.name));return await X.rmdir(e),r}async function Kn(e){let t=q.dirname(e),n=q.basename(e);for(let e of await Un(t)){let r=e.name.startsWith(n)?e.name.slice(n.length):``;if(!e.isFile()||!(r===`.tmp`||/^\.\d+(?:\.[a-f0-9-]{36})?\.tmp$/.test(r)))continue;let i=Number(e.name.slice(n.length+1).split(`.`)[0]);if(Number.isInteger(i)&&i>0)try{process.kill(i,0);continue}catch(e){if(e.code!==`ESRCH`)continue}await X.unlink(q.join(t,e.name)).catch(e=>{if(e.code!==`ENOENT`)throw e})}}async function qn(e,t){if(await Kn(e),e===t||!await Wn(e))return 0;if(!await Wn(t))return await m(e,t),1;let n=JSON.parse(await X.readFile(e,`utf8`)),r=JSON.parse(await X.readFile(t,`utf8`)),i={...n,...r,...n.rows||r.rows?{rows:{...n.rows,...r.rows}}:{}},a=`${t}.${process.pid}.${zn()}.tmp`;try{await X.writeFile(a,`${JSON.stringify(i)}\n`,{mode:384,flag:`wx`}),await X.rename(a,t),await X.unlink(e)}finally{await X.rm(a,{force:!0})}return 1}async function Jn(){let e=p(),t=a(`state`),n=p(`archive`),r=p(`flows-archived`),i=p(`usage.json`),o=p(`runner`,`usage.json`),s={from:a(`checkouts`),to:p(`checkouts`)},c={from:a(`update-check.json`),to:p(`update-check.json`)},l={cache:e,tasks:0,flows:0,files:0},u=(await Un(t)).filter(e=>e.isDirectory()).map(e=>({archive:a(`state`,e.name,`archive`),flows:a(`state`,e.name,`flows-archived`),usage:a(`state`,e.name,`usage.json`),runnerUsage:a(`state`,e.name,`runner`,`usage.json`)}));await Kn(i),await Kn(o);for(let e of u)l.tasks+=await Gn(e.archive,n),l.flows+=await Gn(e.flows,r),l.files+=await qn(e.usage,i),l.files+=await qn(e.runnerUsage,o);return await Gn(s.from,s.to),l.files+=await qn(c.from,c.to),l}async function Yn(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function Xn(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await Zn(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,E({ok:r},r?200:503,{"cache-control":`no-store`})}async function Zn(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Qn(e){let t=(e.now??Date.now)();if(e.queue.metrics&&!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await Yn(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...Yt(e.local.cwd,!1),...Yt(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await Yn(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}async function $n(e,t,n,r){if(!t.auth)return E({mode:Qe(t),organization:{id:t.organizationId},server:er(t)});let i=t.session;return E({mode:Qe(t),user:i.user,organization:i.organizations.find(e=>e.id===i.organizationId)??null,organizations:i.organizations,manageMembersUrl:`${t.auth.issuer}/auth/onboarding`,server:er(t)})}function er(e){return{name:e.config.name??`Coder`,store:e.config.store,...e.config.publicUrl?{url:e.config.publicUrl}:{},subscriptions:{claude:!!e.config.subscriptions?.claude,codex:!!e.config.subscriptions?.codex}}}async function tr(e,t,n,r){let i=e.headers.get(`content-type`)??``,a=i.includes(`application/json`)?await e.json().catch(()=>void 0):await e.formData().then(e=>Object.fromEntries(e.entries()),()=>void 0);if(!a||typeof a!=`object`)return E({error:`Send the workspace as a form or JSON body.`},400);let o=typeof a.organization==`string`?a.organization:``,s=o?await t.auth.setOrganization(e.headers,o):void 0;if(!s)return E({error:`You are not a member of that workspace.`},403);let{cookies:c,...l}=s,u=i.includes(`application/json`)?E({organization:l}):A(`/dash`,303);for(let e of c)u.headers.append(`set-cookie`,e);return u}async function nr(e,t,n,r){let i=t.session.user.id;n.id;let a=(await e.json().catch(()=>({}))).engine??``;if(!sr.has(a)||!t.config.subscriptions?.[a])return E({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return E({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=`login-${Rn(12).toString(`base64url`)}`,c=De(s,t.organizationId,0),l={owner:i,engine:a,state:`starting`,tokenHash:c.hash,runner:o.kind,createdAt:cr(t),expiresAt:cr(t)+or};await lr(t,s,l);let u;try{let e=await o.start({id:s},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:c.token,CODER_LOGIN:a}),n=await t.store.patchLogin(s,{handle:e},{tokenHash:l.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),E({error:`This sign-in is gone. Start again.`},409);u=n}catch(e){return await t.store.delete(`login`,s),E({error:e instanceof Error?e.message:String(e)},502)}return E(ur(s,u),201)}async function rr(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await dr(t,i):void 0;return a?E(ur(i,a)):E({error:`This sign-in is gone. Start again.`},404)}async function ir(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await dr(t,i):void 0;if(!a)return E({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:z(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?E({error:`This sign-in is not waiting for a code.`},409):E({ok:!0})}async function ar(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await dr(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),E({ok:!0})):E({error:`This sign-in is gone. Start again.`},404)}const or=6e5,sr=new Set([`claude`,`codex`]),cr=e=>(e.now??Date.now)();function lr(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-cr(e))})}function ur(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{},...t.label?{label:t.label}:{}}}async function dr(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}async function fr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=Date.now()+25e3;for(;!a.input&&Date.now()<o&&!e.signal.aborted;){await new Promise(e=>setTimeout(e,250));let e=await t.store.get(`login`,i);if(!e)return new Response(`Unauthorized`,{status:401});a=e}if(!a.input)return E({});let s=await t.store.patchLogin(i,{input:null},{input:a.input,tokenHash:a.tokenHash});return E(s?{code:F(t.config,a.input)}:{})}async function pr(e,t,n,r){n.id;let i=t.callbackLogin;return E({engine:i.engine})}async function mr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return E({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s),E({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return E({error:`Invalid sign-in result`},400);let n=`${a.engine}-subscription`,r=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,n,{...Le(t.config,{env:c}),engine:a.engine,createdAt:(t.now??Date.now)(),...r?.email||r?.plan?{account:{...typeof r.email==`string`?{email:r.email}:{},...typeof r.plan==`string`?{plan:r.plan}:{}}}:{}})?E({ok:!0}):E({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return(a.state===`starting`?await t.store.patchLogin(i,{...l,state:`open`},{state:`starting`,tokenHash:a.tokenHash})??await t.store.patchLogin(i,l,{...s,state:[`open`,`verifying`]}):await t.store.patchLogin(i,l,s))?E({ok:!0}):E({error:`This sign-in changed. Try again.`},409)}async function hr(e,t,n,r){let i=n.id,a=t.operatorApp??!1;if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[i];if(!s)return I(`Unknown integration "${i}"; run coder agent integrations list to see them`,404);let c=t.config.publicUrl;if(!c)return I(`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,400);t.fetch,t.now?.();let l=V(r.searchParams);if(!l)return I(`Setup link is missing or malformed; start again from the agent's Platforms tab`,400);if(!l.definition.integrations[i])return I(`This agent declares no ${i} integration in its agent.json`,400);if(l.state.public&&!a)return I(`Only the server operator creates public apps`,403);let u=we(i,l.state),d=l.state.tx?await R(t,l.state.tx,`create`,o)===u?l.state.tx:void 0:await M(t,`create`,o,u);if(!d)return I(`This app creation link is invalid, expired, or already used`,403);let f={...l.state,tx:d};return s.app.createPage({publicUrl:c,state:f,definition:l.definition,encodedState:T(f)})}async function gr(e,t,n,r){let i=n.id,a=t.operatorApp??!1;if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[i];if(!s)return I(`Unknown integration "${i}"; run coder agent integrations list to see them`,404);let c=t.config.publicUrl;if(!c)return I(`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,400);let l=t.fetch??fetch,u=t.now?.()??Date.now(),d=j(r.searchParams.get(`state`)),f=V(r.searchParams)??(d&&V(new URLSearchParams(Object.entries(d).filter(([,e])=>e!==void 0))))??void 0;if(!f)return I(`Setup state was lost between the platform and this server; start again`,400);if(!f.state.tx||!await vt(t,f.state.tx,`create`,o,we(i,f.state)))return I(`This app creation link is invalid, expired, or already used`,403);let p=await s.app.createCallback(e,{publicUrl:c,...f,fetch:l}).catch(e=>I(`Creating the ${i} app failed: ${e instanceof Error?e.message:e}`,400));if(p instanceof Response)return p;let m={id:`${i}:${p.platformAppId}`,integration:i,agent:f.state.agent,name:p.name,...f.state.repo?{agentsRepo:f.state.repo}:{},...f.state.repo?{branch:f.state.branch??`main`}:{},...a?{builtin:!0}:{},credentials:z(t.config,p.credentials),createdAt:u};if(await t.store.put(`app`,m.id,m),a)return I(`Created ${p.name}. Every workspace on this server can now connect it from its dashboard.`);let h=await M(t,`install`,o,m.id),g=`/dash/agents/${encodeURIComponent(m.agent)}/platforms`;return A(`${c}/install/${i}?app=${encodeURIComponent(m.id)}&state=${T({tx:h,back:g})}`)}async function _r(e,t,n,r){let i=n.id,a=t.operatorApp??!1;if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[i];if(!s)return I(`Unknown integration "${i}"; run coder agent integrations list to see them`,404);let c=t.config.publicUrl;if(!c)return I(`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,400);let l=t.fetch??fetch,u=t.now?.()??Date.now(),d=new URLSearchParams(await e.clone().text()),f=j(r.searchParams.get(`state`)),p=V(r.searchParams)??(f&&V(new URLSearchParams(Object.entries(f).filter(([,e])=>e!==void 0))))??(d&&V(d));if(!p)return I(`Setup state was lost between the platform and this server; start again`,400);if(!p.state.tx||!await vt(t,p.state.tx,`create`,o,we(i,p.state)))return I(`This app creation link is invalid, expired, or already used`,403);let m=await s.app.createCallback(e,{publicUrl:c,...p,fetch:l}).catch(e=>I(`Creating the ${i} app failed: ${e instanceof Error?e.message:e}`,400));if(m instanceof Response)return m;let h={id:`${i}:${m.platformAppId}`,integration:i,agent:p.state.agent,name:m.name,...p.state.repo?{agentsRepo:p.state.repo}:{},...p.state.repo?{branch:p.state.branch??`main`}:{},...a?{builtin:!0}:{},credentials:z(t.config,m.credentials),createdAt:u};if(await t.store.put(`app`,h.id,h),a)return I(`Created ${m.name}. Every workspace on this server can now connect it from its dashboard.`);let g=await M(t,`install`,o,h.id),_=`/dash/agents/${encodeURIComponent(h.agent)}/platforms`;return A(`${c}/install/${i}?app=${encodeURIComponent(h.id)}&state=${T({tx:g,back:_})}`)}async function vr(e,t,n,r){let i=n.id,a=t.operatorApp??!1;if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[i];if(!s)return I(`Unknown integration "${i}"; run coder agent integrations list to see them`,404);let c=t.config.publicUrl;if(!c)return I(`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,400);t.fetch,t.now?.();let l=j(r.searchParams.get(`state`)),u=r.searchParams.get(`app`),d=l?.tx?await R(t,l.tx,`install`,o):void 0;if(!d||u&&u!==d)return I(`This installation link is invalid, expired, or already used`,403);let f=await t.store.get(`app`,u??d);if(!f)return I(`This app is not known to this server; create it first`,400);let p=F(t.config,f.credentials);return A(s.app.installUrl(f,p,{publicUrl:c,state:r.searchParams.get(`state`)??T({})}))}async function yr(e,t,n,r){let i=n.id,a=t.operatorApp??!1;if(!/^[a-z0-9_-]+$/.test(r.pathname.split(`/`)[2]))return;let o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[i];if(!s)return I(`Unknown integration "${i}"; run coder agent integrations list to see them`,404);let c=t.config.publicUrl;if(!c)return I(`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,400);let l=t.fetch??fetch,u=t.now?.()??Date.now(),d=j(r.searchParams.get(`state`)),f=r.searchParams.get(`app`),p=d?.tx?await R(t,d.tx,`install`,o):void 0;if(!p||f&&f!==p||!await vt(t,d.tx,`install`,o,p))return I(`This installation link is invalid, expired, or already used`,403);let m=await t.store.get(`app`,f??p),h=d?.link?await t.store.get(`installation`,d.link):void 0,g=m??(h&&await sn(t,h,i));if(!g)return d&&!d.link?I(`Connected.`):I(`This install does not match any app on this server; create the app first`,400);let _=F(t.config,g.credentials),v=await s.app.installCallback(e,{app:g,credentials:_,publicUrl:c,fetch:l,connect:dt(t,g,c)}).catch(e=>I(e instanceof Error?e.message:String(e),400));if(v instanceof Response)return v;let y=`${g.id}:${v.platformInstallId}`,b=t.session;v.user&&b&&t.auth&&await t.auth.link(b.user,i,v.user.id,{organizations:b.organizations.map(e=>e.id),...v.user.token?{token:z(t.config,v.user.token)}:{}});let x=await t.store.get(`installation`,y),S={...x,id:y,app:g.id,integration:i,account:v.account??x?.account??h?.account??{login:`unknown`},...v.token?{token:z(t.config,v.token)}:{},...v.installer?{installer:v.installer}:{},createdAt:x?.createdAt??u};delete S.deletedAt;let C=h&&!h.deletedAt?h:void 0;C&&(S=Pe(S,C.integration,C.id));try{await t.store.put(`installation`,y,S)}catch{return I(`This ${i} installation is already connected to another workspace; disconnect it there first`,409)}if(C&&await t.store.put(`installation`,C.id,Pe(C,i,y)),s.renew){let e=await(await import(`./store-Cxc2GYyj.js`).then(e=>e.Y)).renewInstallation({...t,fetch:l},g,v.platformInstallId).then(()=>void 0,e=>e instanceof Error?e.message:String(e));if(e)return I(`Connected, but ${i} did not start sending events yet. ${e}. Coder tries again within the hour.`,502)}let w=at(d?.back);return w?A(`${c.replace(/\/$/,``)}${w}`):v.response}const Z=(e,t=200)=>C(`<title>Coder</title><p>${x(e)}</p>`,t);function br(e,t,n){return n&&t.organizations.some(e=>e.id===n)?{...ct(e,n),session:t}:void 0}async function xr(e,t){let n=await e.store.get(`installation`,t);return n&&!n.deletedAt?e.store.get(`app`,n.app):void 0}async function Sr(e,t,n,r){let i=t.linkContext,a=i.session,o=e=>{let t=jt(i,e);return t&&a.organizations.some(e=>e.id===t)?{...ct(i,t),session:a}:i},s=r.searchParams.get(`token`)??``,c=o(s);if(await R(c,s,`link`,a.user.id))return await hn(e,void 0,t.dashboardHosts)??new Response(`UI is not built`,{status:503});let l=await mt(c,s,`link-start`,a.user.id);if(!l)return new Response(`This link is invalid or has expired.`,{status:400});let u=await M(c,`link`,a.user.id,l,3e5);return A(`/connect?token=${encodeURIComponent(u)}`)}async function Cr(e,t,n,r){let i=t.linkContext,a=i.session,o=e=>{let t=jt(i,e);return t&&a.organizations.some(e=>e.id===t)?{...ct(i,t),session:a}:i},s=await e.json().catch(()=>({})),c=typeof s.token==`string`?await mt(o(s.token),s.token,`link`,a.user.id):void 0;if(!c)return E({error:`This link is invalid or has expired.`},400);let l=JSON.parse(c);return await t.auth.link(a.user,l.platform,l.platformUserId,{organizations:a.organizations.map(e=>e.id)})===`taken`?E({error:`That platform account is connected to someone else.`},409):E({ok:!0,...l})}async function wr(e,t,n,r){let i=t.integrations[n.integration].auth.user,a=t.config.publicUrl,o=t.linkContext.session,s=r.searchParams.get(`installation`)??``,c=br(t,o,s?await t.installationOrganization?.(s):void 0);if(!c)return Z(`Only members of the workspace this agent works for can link here.`,403);let l=await xr(c,s);if(!l)return Z(`This installation is no longer connected.`,404);let u=await M(c,`link-oauth`,o.user.id,s);return A(i.authorizeUrl(F(t.config,l.credentials),{publicUrl:a,state:u}))}async function Tr(e,t,n,r){let i=t.integrations[n.integration],a=i.auth.user,o=t.config.publicUrl,s=t.linkContext.session,c=r.searchParams.get(`state`)??``,l=br(t,s,jt(t,c)),u=l&&await mt(l,c,`link-oauth`,s.user.id),d=l&&u?await xr(l,u):void 0;if(!l||!d)return Z(`This link is invalid or has expired.`,400);let f=await a.exchange(e,F(t.config,d.credentials),{publicUrl:o,fetch:t.fetch??fetch}).catch(e=>e instanceof Error?e:Error(String(e)));return f instanceof Error?Z(f.message,400):await t.auth.link(s.user,i.id,f.id,{organizations:s.organizations.map(e=>e.id),...f.token?{token:z(t.config,f.token)}:{}})===`taken`?Z(`That ${i.id} account is connected to someone else.`,409):Z(`Linked ${f.login??f.id} on ${i.id} to your Coder account. Mention the agent again to start.`)}const Er=Y.object({installation:Y.string().check(Y.minLength(1)),integration:Y.string().check(Y.minLength(1)),token:Y.string().check(Y.minLength(1)),account:Y.optional(Y.string())});async function Dr(e,t){let n;try{n=await e.json()}catch{return new Response(`Invalid JSON`,{status:400})}let r=Er.safeParse(n);if(!r.success)return new Response(`Invalid connection`,{status:400});let{installation:i,integration:a,token:o,account:s}=r.data,c=await t.store.get(`installation`,i);if(!c||c.deletedAt)return new Response(`Unknown installation`,{status:404});let l={kind:`oauth`,token:z(t.config,o),...s?{account:s}:{}};return await Rt(t.store,`installation`,i,{connections:{...c.connections,[a]:l}}),E({ok:!0})}async function Or(e,t,n,r){let i=await t.store.get(`app`,n);if(!i)return E({error:`Unknown app`},404);let a=t.config.publicUrl;if(!a)return E({error:`PUBLIC_URL is not set on this server`},400);let o=await M(t,`install`,t.session?.user.id??`anonymous`,i.id),s=T({tx:o,...r?{back:r}:{}});return E({url:`${a.replace(/\/$/,``)}/install/${i.integration}?app=${encodeURIComponent(i.id)}&state=${s}`})}async function kr(e,t,n,r){let i=r.searchParams.get(`agent`),a=t.serverOrganizationId,[o,s]=await Promise.all([t.store.list(`app`),a!==void 0&&a!==t.organizationId&&t.scope?t.scope(a).store.list(`app`).then(e=>e.map(({id:e,value:t})=>({id:e,value:{...t,builtin:!0}}))):[]]),c=[...o,...s];return E(c.filter(({value:e})=>!i||e.agent===i).map(({id:e,value:t})=>{let{credentials:n,...r}=t;return{id:e,value:r}}))}async function Ar(e,t,n,r){let i=r.searchParams.get(`agent`),[a,o]=await Promise.all([t.store.list(`installation`),i?t.store.list(`app`):[]]),s=new Set(o.filter(({value:e})=>e.agent===i).map(({id:e})=>e));return E(a.filter(({value:e})=>!i||s.has(e.app)).map(({id:e,value:t})=>{let{token:n,connections:r,...i}=t;return{id:e,value:i}}))}function jr(e){return E(Object.values(e.integrations).map(e=>({id:e.id,name:e.name,brand:e.brand,description:e.description,installLabel:e.installLabel??`Connect ${e.id}`,organizationApps:e.organizationApps===!0,events:Object.fromEntries(Object.entries(e.events).map(([e,{description:t,noisy:n,addressed:r}])=>[e,{description:t,...n?{noisy:n}:{},...r?{addressed:r}:{}}])),presets:e.tools.presets,repositories:!!e.repos})))}async function Mr(e){let t=new Map;for(let{value:n}of await e.store.list(`installation`)){let r=e.integrations[n.integration];if(n.deletedAt||!r?.repos)continue;let i=await e.store.get(`app`,n.app);if(i)try{let a=await r.auth.token(n.token?{...n,token:F(e.config,n.token)}:n,F(e.config,i.credentials));for(let e of await r.repos.list(n,a))t.has(e)||t.set(e,{repo:e,integration:r.id})}catch{}}return E([...t.values()].sort((e,t)=>e.repo.localeCompare(t.repo)))}async function Nr(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await ln(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=i.token?{...i,token:F(e.config,i.token)}:i,o=await n.auth.token(r,F(e.config,a.credentials));if((await n.repos.list(r,o)).includes(t))return{contents:n,token:o,app:a,installation:i}}catch{}}}async function Pr(e,t,n){let r=await Nr(e,t);if(!r)return E({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,Ce,r.token,n).catch(()=>[]),a=await Promise.all(i.map(async i=>{let a=await r.contents.repos.readFile(t,`${Ce}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(a===void 0)return;let o={};try{o=JSON.parse(a)}catch{}let s=await W(e.store,i),c=s?.source===`repo`&&s.repo===t,l=c?await Cn(e.store,i):void 0;return{id:i,name:typeof o.name==`string`?o.name:i,...typeof o.description==`string`?{description:o.description}:{},...c?{version:s.currentVersion,...l?.source?{commit:l.source.commit}:{}}:{},...s&&!c?{taken:!0}:{}}}));return E({repo:t,agents:a.filter(Boolean)})}async function Fr(e,t,n,r){let i=r.searchParams.get(`repo`);return i?Pr(t,i,r.searchParams.get(`ref`)||`HEAD`):E({error:`repo is required`},400)}async function Ir(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return E({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await Nr(t,i.repo);if(!e)return E({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await W(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return E({error:`Agent id "${e}" is already taken`},409)}let o=await Ne(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await je(t,o),E({imported:o.map(e=>e.agent)})}catch(e){return E({error:e instanceof Error?e.message:String(e)},400)}}async function Lr(e,t,n,r){if(t.source!==`repo`||!t.repo)return;let i=(await(r??e.store.list(`app`))).find(({value:e})=>e.agent===t.id&&e.agentsRepo===t.repo)?.value;return((i&&e.integrations[i.integration])??Object.values(e.integrations).find(e=>e.repos))?.repos?.url(t.repo,t.path,i?.branch??n?.commit)}async function Rr(e,t,n){let r=await vn(e.store,t);return await pe(e.store,n,t,r)?vn(e.store,t):r}async function Q(e,t){let n=(e.now??Date.now)(),r=e.local?await mn(e.store,e.local.cwd,e.integrations,t).catch(()=>void 0):void 0;return{now:n,local:r,loadCurrent:()=>r?Promise.resolve(r.find(({record:e})=>e.id===t)??{}):Rr(e,t,n)}}async function zr(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i);if(!o&&t.store.listAgentSummaries&&(await xn(t.store,a),O(r)))return E(await Wr(t,r));let c=o??(t.store.listAgentSummaries?await t.store.listAgentSummaries():await En(t.store));if(!o&&!t.store.listAgentSummaries&&await xn(t.store,a,c)&&(c=await En(t.store)),O(r))return E(await Wr(t,r,c));let l;return E(await Promise.all(c.map(async({record:e,version:n})=>{e.source===`repo`&&e.repo&&(l??=t.store.list(`app`));let r=await Lr(t,e,n,l);return{...e,definition:n?.definition,...r?{sourceUrl:r}:{}}})))}async function Br(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=D(r,10,50),l=te(r),[u,d]=await Promise.all([o?s().then(e=>e.record):W(t.store,i),o?Promise.resolve(o.flatMap(({version:e})=>e?[{value:e}]:[])):t.store.listVersions?.(i,c+1,l)]);return u?E(await Gr(t,u,c,l??u.currentVersion+1,d)):E({error:`No agent named "${i}"`},404)}async function Vr(e,t,n,r){let i=n.slug,a=n.version?Number(n.version):void 0;if(n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:o,local:s,loadCurrent:c}=await Q(t,i),l=s?s.find(({version:e})=>e?.version===a)?.version:await Cn(t.store,i,a);return l?E(l):E({error:`No version ${a} for agent "${i}"`},404)}async function Hr(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=r.searchParams.get(`versions`)!==`0`,l=r.searchParams.get(`content`)!==`0`,[{record:u,version:d},f]=await Promise.all([!l&&!o&&t.store.listAgentSummaries&&!_()[i]?t.store.listAgentSummaries({slug:i}).then(e=>e[0]??{}):s(),c?o?o.flatMap(({version:e})=>e?[{value:e}]:[]):t.store.listVersions?t.store.listVersions(i):t.store.list(`agentversion`,{prefix:`${i}:`}):[]]);if(!u)return E({error:`No agent named "${i}"`},404);let p=f.map(({value:e})=>{let{systemPrompt:t,files:n,...r}=e;return r}),m=await Lr(t,u,d);return E({...u,...d?{definition:d.definition,...l&&`systemPrompt`in d?{systemPrompt:d.systemPrompt,...d.files?{files:d.files}:{}}:{}}:{},...m?{sourceUrl:m}:{},...c?{versions:p}:{}})}const Ur={builtin:`builtin`,dashboard:`upload`,repository:`repo`};async function Wr(e,t,n){let r=D(t,24,100),i=te(t),a=t.searchParams.get(`q`)?.trim().toLowerCase(),o=Ur[t.searchParams.get(`type`)??``],s=t.searchParams.get(`platform`),c=t.searchParams.get(`connect`)===`1`,l=e.serverOrganizationId,u=e.store.list(`app`),[d,f,p,m]=await Promise.all([u,e.store.list(`installation`),c&&l!==void 0&&l!==e.organizationId&&e.scope?e.scope(l).store.list(`app`):[],n?n.filter(({record:e})=>(!i||e.id>i)&&(!o||e.source===o)&&(!a||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(a)))):e.store.listAgentSummaries({after:i,source:o,q:a,platform:s??void 0,limit:r+1})]),h=new Set(f.filter(({value:e})=>!e.deletedAt).map(({value:e})=>e.app)),g=(e,t)=>{let n=d.filter(({value:n})=>n.agent===e&&n.integration===t);return n.length?n.some(({value:e})=>h.has(e.id))?`installed`:`created`:`none`},_=[];for(let{record:e,version:t}of m){let n=Object.keys(t?.definition?.integrations??{}).sort();if(!(s&&!n.includes(s))&&(_.push({record:e,version:t,ids:n}),_.length>r))break}let v=ae(_,r,e=>e.record.id);return{...v,...c?{connectable:[...d,...p.map(e=>({...e,value:{...e.value,builtin:!0}}))].filter(({value:e})=>e.builtin&&!h.has(e.id)).map(({value:e})=>({id:e.id,integration:e.integration}))}:{},items:await Promise.all(v.items.map(async({record:t,version:n,ids:r})=>{let i=await Lr(e,t,n,u);return{...t,definition:n?.definition,...i?{sourceUrl:i}:{},platforms:r.map(e=>({id:e,state:g(t.id,e)}))}}))}}async function Gr(e,t,n,r,i){let a=r-n-2,o=(i??await e.store.list(`agentversion`,{prefix:`${t.id}:`,...a>0?{after:ge(t.id,a)}:{},limit:n+1})).map(({value:e})=>{let{systemPrompt:t,files:n,definition:r,...i}=e;return i}).filter(e=>e.version<r).reverse();return ae(o,n,e=>e.version)}function Kr(e){if(!e||Array.isArray(e)||typeof e!=`object`)return!1;let t=Object.entries(e);if(t.length>100)return!1;let n=0;for(let[e,r]of t){if(typeof r!=`string`||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)||e.split(`/`).includes(`..`)||e===`agent.json`||e===`system.md`)return!1;n+=Buffer.byteLength(e)+Buffer.byteLength(r)}return n<=262144}async function qr(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);try{let e=b({[i]:c})[i];if(!e||typeof e!=`object`)throw Error(`settings must be an object`);let{record:n,version:r}=await s();if(!n||!r)throw Error(`No agent named "${i}".`);return ve({...n,settings:void 0},r,e,t.integrations),t.local?(await he(t,t=>{t.agents={...t.agents,[i]:e}}),await mn(t.store,t.local.cwd,t.integrations),E(await W(t.store,i))):E(await nt(t.store,i,e,(t.now??Date.now)()))}catch(e){return E({error:e instanceof Error?e.message:String(e)},400)}}async function Jr(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),{record:c}=await s();if(!c)return E({error:`No agent named "${i}"`},404);if(c.source===`builtin`)return E({error:`Built-in agents cannot be deleted.`},400);if(t.local&&!await Mt(t.local.cwd,t.integrations,i))return E({error:`Delete .coder/agents/${i} in the repo`},409);for(let{id:e}of await t.store.list(`agentversion`,{prefix:`${i}:`}))await t.store.delete(`agentversion`,e);return await t.store.delete(`agent`,i),E({ok:!0})}async function Yr(e,t,n,r){let i=n.slug;if(n.version&&Number(n.version),n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return k();let{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);if(!c||typeof c.systemPrompt!=`string`||c.files!==void 0&&!Kr(c.files)||c.name!==void 0&&typeof c.name!=`string`||c.description!==void 0&&typeof c.description!=`string`)return E({error:`definition and systemPrompt are required; files must contain strings`},400);try{y([i]);let[e]=v({definitions:{[i]:{json:c.definition,builtin:!1}},usage:void 0},t.integrations);if(!e)throw Error(`No agent named "${i}".`);let n=t.local?await W(t.store,i):void 0,r=t.local&&n?await Cn(t.store,i):void 0,a=c.files;t.local&&(await $t(t.local.cwd,t.integrations,i,{definition:{...c.definition,...c.name===void 0?{}:{name:c.name},...c.description===void 0?{}:{description:c.description}},systemPrompt:c.systemPrompt,...a?{files:a}:{}}),await mn(t.store,t.local.cwd,t.integrations));let o=t.local?void 0:await $e(t.store,{id:i,name:c.name??e.name,description:c.description??e.definition.description,source:`upload`,definition:e.definition,systemPrompt:c.systemPrompt,files:a,importedFrom:`upload`},(t.now??Date.now)()),s=o?.version??await Cn(t.store,i),l=o?.unchanged??Bn(r&&{...r,createdAt:0},{...s,createdAt:0});await je(t,[s]);let u=o?.record??await W(t.store,i);return E({...u,definition:s.definition,version:s.version,unchanged:l})}catch(e){return E({error:e instanceof Error?e.message:String(e)},400)}}async function Xr(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1;r.searchParams.has(`limit`)&&D(r,500,2e3);let s=await t.store.get(`task`,i);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!rn(n,i,!1))return E({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return ii(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=rn(n,i);if(t)return{status:t,lines:Nt(n,i,e,500),pendingResult:Zr(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o),l=t.statementTimeout??((e,t)=>t());return ii(e,t,i,Number.isFinite(c)?c:o,e=>l(ni,async()=>{let n=await t.store.get(`task`,i);if(!n)return;let r=n.task.runner===`github-actions`&&n.handle,a=r&&L.has(n.status)?(await(await qe(t,n.task))?.status(n.handle).catch(()=>void 0))?.state===`running`:!1;return{status:n,lines:([`running`,`waiting`].includes(n.status)||r)&&n.handle?await gt(t,n,e,500).catch(()=>ht(t.store,i,e,500)):await ht(t.store,i,e,500),pendingLogs:a}}))}function Zr(e,t,n=!1){if(!L.has(t.status)||t.error||t.status===`cancelled`)return!1;let r=l(e,t.task.id),i=Math.max(t.finishedAt??0,Date.parse(r?.resumedAt??r?.createdAt??``)||0);return n||(In.statSync(q.join(h(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<i}const Qr=1e3,$=3e4;function $r(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new ti,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-29e4),a):a,p=u>0&&(!d||u<f)?`event: reset
2
- data: {}
3
-
4
- `:``,m=new TextEncoder,h=()=>{},g=new ReadableStream({start(n){n.enqueue(m.encode(`retry: ${Qr}\nid: ${f}${s}\n\n${p}`)),h=o.watch(t,i,f,e=>n.enqueue(m.encode(e)),()=>n.close());let r=()=>{h();try{n.close()}catch{}};e.signal.aborted?r():e.signal.addEventListener(`abort`,r)},cancel(){h()}});return new Response(g,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}function ei(e,t){let{task:n,approval:r,archivedAt:i,createdAt:a,startedAt:o,finishedAt:s}=e;return{id:n.id,agent:n.agent,status:e.status,approval:r??null,archivedAt:e.autoArchived&&!t?void 0:i,createdAt:a,startedAt:o,finishedAt:s,...t?{result:e.result??null,error:e.error??null,answer:e.answer??null}:{}}}var ti=class{options;watches=new Set;timer;reading=!1;closed=!1;last=Date.now();scans=new Map;left=new Map;archived=new Map;reads=0;generation=zn().slice(0,8);constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a=Date.now();this.watches.size||(this.last=a);let o={ctx:e,ids:new Set(t),sent:new Map,gone:new Set,from:n,fresh:!0,tag:this.tag(e),beat:a,marked:a,until:a+(this.options.lifeMs??29e4),send:r,close:i};return this.watches.add(o),this.timer||(this.timer=setInterval(()=>this.tick(),this.options.pollMs??1e3),this.timer.unref?.()),this.tick(),()=>this.drop(o)}tag(e){return`-${Ln(`sha256`).update(e.organizationId).digest(`hex`).slice(0,8)}${e.queue instanceof en?`.${this.generation}`:``}`}close(){this.closed=!0;for(let e of[...this.watches]){this.drop(e);try{e.close()}catch{}}}drop(e){this.watches.delete(e)&&(this.watches.size||(clearInterval(this.timer),this.timer=void 0))}tick(){let e=Date.now();for(let t of[...this.watches])if(e>=t.until){this.drop(t);try{t.close()}catch{}}else e-t.beat>=(this.options.heartbeatMs??2e4)&&(t.beat=e,this.send(t,`: ping
5
-
6
- `));this.reading||!this.watches.size||(this.reading=!0,this.read(e).finally(()=>this.reading=!1))}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){let t=[...this.watches],n=new Map;for(let e of t){let t=n.get(e.ctx.organizationId)??{ctx:e.ctx,ids:new Set};for(let n of e.ids)t.ids.add(n);n.set(e.ctx.organizationId,t)}let r=Math.min(this.last,...t.flatMap(e=>e.fresh?[e.from]:[]));this.reads++;let i=await this.changes(n,r-$,e).catch(()=>void 0);if(i){this.last=e;for(let n of t){if(!this.watches.has(n))continue;let t=[];try{t=this.news(n,i,e)}catch{}!t.length&&e-n.marked>=(this.options.heartbeatMs??2e4)&&t.push(`id: ${e}${n.tag}\n\n`),t.length&&(n.marked=e,this.send(n,t.join(``)))}}}async changes(e,t,n){let r=await[...e.values()][0].ctx.queue.changes([...e].map(([e,t])=>({organizationId:e,ids:[...t.ids]})),t),i=new Map;for(let{organizationId:e,status:t}of r.rows){let n=i.get(e)??new Map;i.set(e,n.set(t.task.id,t))}let a=new Map;for(let{organizationId:e,id:t,at:n}of r.deleted){let r=a.get(e)??new Map;a.set(e,r.set(t,n))}for(let[t,{ctx:r}]of e){if(!r.local)continue;let e=[...i.get(t)?.values()??[]],a=this.scans.get(r.local.cwd);if(!a||n-a.at>=4e3||e.some(e=>e.updatedAt>a.at)){let e=!a||n-a.archivedAt>=15e3;await _n(r,r.local.cwd);let t=e?Yt(r.local.cwd,!0):a.archived,i=Yt(r.local.cwd,!1),o=new Set(i.map(e=>e.task.id)),s=[...i,...t.filter(e=>!o.has(e.task.id))],c=new Set(s.map(e=>e.task.id)),u=this.left.get(r.local.cwd)??new Map;for(let e of a?.rows??[])c.has(e.task.id)||u.set(e.task.id,a.at);for(let[e,t]of u)(t<n-6e5||c.has(e))&&u.delete(e);let d=this.archived.get(r.local.cwd)??new Set;for(let e of d)c.has(e)?d.delete(e):l(r.local.cwd,e)||(u.set(e,a?.at??n),d.delete(e));this.left.set(r.local.cwd,u),this.scans.set(r.local.cwd,a={at:n,rows:s,archived:t,archivedAt:e?n:a.archivedAt})}i.set(t,new Map(be(r.local.cwd,a.rows,e).map(e=>[e.task.id,e])))}return{rows:i,deleted:a}}news(e,{rows:t,deleted:n},r){let{ctx:i}=e,a=t.get(i.organizationId)??new Map,o=[],s=(t,n)=>{let i=JSON.stringify(n);e.sent.get(t)!==i&&(e.sent.set(t,i),o.push(`id: ${r}${e.tag}\nevent: task\ndata: ${i}\n\n`))},c=e=>({id:e,deleted:!0}),l=t=>{let n=i.local&&rn(i.local.cwd,t,e.ids.has(t));if(s(t,n?ei(n,e.ids.has(t)):c(t)),e.gone.add(t),n&&i.local){let e=this.archived.get(i.local.cwd)??new Set;this.archived.set(i.local.cwd,e.add(t))}};for(let[t,n]of a){let a=e.ids.has(t);e.gone.delete(t);let o=ei(a&&i.local&&n.local&&L.has(n.status)?rn(i.local.cwd,t)??n:n,a);if(i.local&&n.local&&e.sent.get(t)!==JSON.stringify(o)&&r-(n.finishedAt??0)<$&&Zr(i.local.cwd,n)){e.sent.has(t)||e.sent.set(t,``);continue}a||i.local&&!e.fresh||n.updatedAt>e.from-$?s(t,o):e.fresh&&e.sent.set(t,JSON.stringify(o))}for(let t of e.ids)a.has(t)||l(t);for(let[t,r]of n.get(i.organizationId)??[])r>e.from-$&&s(t,c(t));if(i.local){for(let t of e.sent.keys())!a.has(t)&&!e.ids.has(t)&&!e.gone.has(t)&&l(t);for(let[t,n]of this.left.get(i.local.cwd)??[])n>e.from-$&&!a.has(t)&&e.sent.get(t)!==JSON.stringify(c(t))&&l(t)}return e.fresh=!1,e.from=r,o}};const ni=1e4;var ri=class{options;feeds=new Map;closed=!1;reads=0;constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a=this.feeds.get(e),o=a?.reading!==void 0&&Date.now()-a.reading>=(this.options.stallMs??1e4);if(!a||o){let t={key:e,read:n,watches:new Set,head:1/0};if(a){clearTimeout(a.timer);for(let e of a.watches)t.watches.add(Object.assign(e,{feed:t}));a.watches.clear()}this.feeds.set(e,a=t)}let s={cursor:t,feed:a,timers:[],send:r,close:i};s.timers=[setTimeout(()=>this.end(s),this.options.lifeMs??5e4),setInterval(()=>this.send(s,`: ping
7
-
8
- `),this.options.heartbeatMs??2e4)];for(let e of s.timers)e.unref?.();return a.watches.add(s),a.reading===void 0&&t<a.head&&(clearTimeout(a.timer),this.read(a)),()=>this.drop(s)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;for(let t of e.timers)clearTimeout(t);!t.watches.delete(e)||t.watches.size||(clearTimeout(t.timer),this.feeds.get(t.key)===t&&this.feeds.delete(t.key))}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){if(e.timer=void 0,this.feeds.get(e.key)!==e||!e.watches.size)return;let t=[...e.watches],n=Math.min(...t.map(e=>e.cursor));e.reading=Date.now(),this.reads++;let r=await e.read(n).catch(()=>null);if(e.reading=void 0,this.feeds.get(e.key)!==e)return;let i=t.filter(t=>e.watches.has(t)),a=i.length<e.watches.size?0:this.options.pollMs??1e3;if(r===void 0)for(let e of i)this.end(e);else if(r){let{status:t,lines:o,pendingLogs:s,pendingResult:c}=r,l=o.length===500,u=L.has(t.status)&&!l&&!s&&!c,d=o.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]);e.head=Math.max(n,o.at(-1)?.seq??n),l&&(a=0);for(let e of i){let t=d.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);e.cursor=Math.max(e.cursor,o.at(-1)?.seq??-1),u?this.end(e,`${t}event: end\ndata: {}\n\n`):t&&this.send(e,t)}}this.feeds.get(e.key)===e&&(e.timer=setTimeout(()=>void this.read(e),a),e.timer.unref?.())}};function ii(e,t,n,r,i){let a=t.logWatcher??new ri,o=new TextEncoder,s=()=>{},c=new ReadableStream({start(c){c.enqueue(o.encode(`retry: ${Qr}\n\n`)),s=a.watch(`${t.organizationId}:${n}`,r,i,e=>c.enqueue(o.encode(e)),()=>c.close());let l=()=>{s();try{c.close()}catch{}};e.signal.aborted?l():e.signal.addEventListener(`abort`,l)},cancel(){s()}});return new Response(c,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}var ai=class{options;entries=new Map;pending=new Map;constructor(e={ttlMs:6e5,max:100}){this.options=e}get size(){return this.entries.size}get inFlight(){return this.pending.size}has(e){return this.entries.has(e)}keys(){return this.entries.keys()}async get(e,t){let n=this.options.now??Date.now,r=n(),i=this.entries.get(e);if(i&&r-i.at<this.options.ttlMs)return i.value;for(let[t,n]of this.entries)t!==e&&r-n.at>=this.options.ttlMs&&this.entries.delete(t);let a=this.pending.get(e);return a||(a=Promise.resolve().then(t).then(t=>{if(t===void 0)return i?.value;if(this.options.accept&&!this.options.accept(t))return i?.value??t;this.entries.set(e,{value:t,at:n()});let r=this.entries.keys().next().value;return this.entries.size>this.options.max&&r!==void 0&&this.entries.delete(r),t}).catch(()=>i?.value).finally(()=>this.pending.delete(e)),this.pending.set(e,a)),a}};const oi=/^[a-z0-9][a-z0-9-]*$/,si=new Set([`openrouter.ai`,`ai-gateway.vercel.sh`,`api.groq.com`,`api.together.xyz`]);function ci(e){return{builtin:{codex:i,claude:c},models:e.models??{}}}async function li(e,t){let{baseUrl:n,envKey:r,key:i}=await K(e);if(!n||!/^https?:\/\//.test(n)||!URL.canParse(n))return E({error:`An http or https base URL is required`},400);let a=!i&&r&&await ui(t,n,r)?await nn(t,r):void 0,o=i||a,s=t.settings??={},c=s.probes??=new ai({ttlMs:6e5,max:100,now:t.now,accept:e=>e.reachable}),l=`${new URL(n).host}|${r??``}|${S(String(o??``))}`;return E(await c.get(l,()=>ee({baseUrl:n},{key:o,fetch:t.fetch})))}async function ui(e,t,n){let r=new URL(t).host;if(si.has(r))return!0;let i=(await _e(e)).models??{};return Object.values(i).some(e=>`baseUrl`in e&&e.envKey===n&&new URL(e.baseUrl).host===r)}async function di(e,t,n,r){return E(ci(await _e(t)))}async function fi(e,n,r,i){let{name:a=``,...o}=await K(e);return!oi.test(a)||t(a)?E({error:`Invalid model name "${a}"`},400):B(n,e=>{if(e.models?.[a])throw new U(`"${a}" already exists`);e.models={...e.models,[a]:o}})}async function pi(e,t,n,r){let i=n.name;return B(t,e=>{if(!e.models?.[i])throw new U(`No model "${i}"`);g(e,i)})}async function mi(e,t,a,o){let s=a.name,{spec:l}=await K(e);return B(t,e=>{if(!oi.test(s))throw new U(`Invalid alias name "${s}"`);let t=e.models?.[s];if(t&&f(t))throw new U(`"${s}" is a custom model name`);let a=d(l,u(e));if(!a?.model||a.engine===`custom`)throw new U(`"${l}" does not name a codex or claude model`);let o=a.engine===`claude`?c:i,p=l.split(`:`).some(e=>n.has(e)||r.has(e));e.models={...e.models,[s]:{provider:a.engine,model:o[a.model]??a.model,...p&&a.effort?{effort:a.effort}:{}}}})}async function hi(e,t,n,r){let i=n.name;return B(t,e=>{let t=e.models??={},n=t[i];n&&(f(n)||o(n))?n.disabled=!0:t[i]={disabled:!0}})}async function gi(e,t,n,r){let i=n.name;return B(t,e=>{let t=e.models??={},n=t[i];n&&(f(n)||o(n))?delete n.disabled:delete t[i]})}const _i=/^[a-z0-9][a-z0-9_-]*$/i;async function vi(e,t,n,r){return E((await _e(t)).mcp??{})}async function yi(e,t,n,r){let{name:i=``,...a}=await K(e);return _i.test(i)?B(t,e=>{e.mcp={...e.mcp,[i]:a}}):E({error:`Invalid server name "${i}"`},400)}async function bi(e,t,n,r){let i=n.name;return B(t,e=>{if(!e.mcp?.[i])throw new U(`No MCP server "${i}"`);delete e.mcp[i]})}const xi={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},Si=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function Ci(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=Si([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function wi(e){let t=e.remotes?.find(e=>e.type===`streamable-http`||e.type===`sse`);if(t)return{type:t.type===`sse`?`sse`:`http`,url:t.url,env:[],headers:Si(t.headers)};let n=e.packages?.find(e=>xi[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=xi[n.registryType],a=[],o=Ci(n.runtimeArguments,`runtime`,a),s=Ci(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:Si(n.environmentVariables),headers:[]}}async function Ti(e,t,n){let r=n.searchParams.get(`q`)?.trim()??``,i=t.settings??={},a=await(i.registry??=new ai({ttlMs:6e5,max:100,now:t.now})).get(r,()=>Ei(t,r));return a?E(a):E({error:`The MCP registry did not answer. Try again.`},502)}async function Ei(e,t){let n=new URLSearchParams({version:`latest`,limit:`30`});t&&n.set(`search`,t);try{let t=await(e.fetch??fetch)(`https://registry.modelcontextprotocol.io/v0.1/servers?${n}`,{headers:{accept:`application/json`},signal:AbortSignal.timeout(2e4)});if(!t.ok)return;let{servers:r=[]}=await t.json();return r.flatMap(({server:e})=>{let t=wi(e);return t?[{name:e.name,title:e.title??e.name.split(`/`).pop()??e.name,description:e.description??``,...t}]:[]})}catch{return}}const Di=`/api/auth/callback`,Oi=`/.well-known/oauth-client.json`,ki=`/.well-known/oauth-cli-client.json`,Ai=`openid profile email offline_access organizations:read`;function ji(e,t){return{client_id:`${e}${Oi}`,client_name:`Coder at ${new URL(e).host}`,redirect_uris:[`${e}${Di}`],post_logout_redirect_uris:[`${e}/?signed_out=1`],grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],token_endpoint_auth_method:`private_key_jwt`,token_endpoint_auth_signing_alg:`ES256`,jwks:t,scope:Ai}}function Mi(e){return{client_id:`${e}${ki}`,client_name:`Coder CLI for ${new URL(e).host}`,redirect_uris:[`http://127.0.0.1/callback`],grant_types:[`authorization_code`,`refresh_token`,`urn:ietf:params:oauth:grant-type:device_code`],response_types:[`code`],token_endpoint_auth_method:`none`,scope:Ai}}function Ni(e,t){return{resource:new URL(e).origin,authorization_servers:[t],bearer_methods_supported:[`header`],scopes_supported:Ai.split(` `)}}function Pi(e){let t=E(e);return t.headers.set(`cache-control`,`public, max-age=3600`),t}function Fi(e,t,n,r){return t.config.publicUrl&&t.auth?Pi(ji(t.config.publicUrl,t.auth.jwks)):void 0}function Ii(e,t,n,r){return t.config.publicUrl&&t.auth?Pi(Mi(t.config.publicUrl)):void 0}function Li(e,t,n,r){return t.config.publicUrl&&t.auth?Pi(Ni(t.config.publicUrl,t.auth.issuer)):void 0}const Ri=[H(`GET`,Oi,Fi,Be),H(`GET`,ki,Ii,Be),H(`GET`,`/.well-known/oauth-protected-resource`,Li,Be),H(`GET`,`/health`,(e,t)=>Xn(t)),H(`GET`,`/`,dn,Se),H(`GET`,`/login`,kt,kn),...Ft(`/login`,Et,kn).filter(e=>e.method!==`GET`),H(`POST`,`/dash/token`,tn,Sn),...Ft(`/dash`,St,me)],zi=[H(`GET`,`/api/auth/capabilities`,(e,t)=>E({wular:t.auth?.issuer??null})),...Ft(`/api/auth`,(e,t)=>t.auth.handler(e),Dn),H(`GET`,`/me`,$n,It),H(`POST`,`/me/organization`,tr,Je)],Bi=[...G(`/tasks`,[H(`GET`,`/:id/messages`,Fe,ye),H(`POST`,`/:id/ack`,ot,ye),H(`POST`,`/:id/heartbeat`,ft,ye),H(`POST`,`/:id/result`,Me,wt),H(`POST`,`/:id/credential`,cn,wt),H(`GET`,`/:id`,Te,lt)]),...G(`/logins`,[H(`GET`,`/:id/input`,fr,Ht),H(`GET`,`/:id`,pr,Ht),H(`POST`,`/:id`,mr,Ht)]),...G(`/runners`,[H(`POST`,`/register`,Qt)])],Vi=[...G(`/create`,[H(`GET`,`/:id`,hr,wn),H(`POST`,`/:id`,hr,wn),H(`GET`,`/:id/callback`,gr,wn),H(`POST`,`/:id/callback`,_r,wn)]),...G(`/install`,[H(`GET`,`/:id`,vr,P),H(`POST`,`/:id`,vr,P),H(`GET`,`/:id/callback`,yr,P),H(`POST`,`/:id/callback`,yr,P)])],Hi=G(`/connect`,[H(`GET`,``,Sr,Oe),H(`POST`,``,Cr,Oe),H(`GET`,`/:integration`,wr,Ue),H(`GET`,`/:integration/callback`,Tr,Ue)]),Ui=[...G(`/hooks`,[H(`POST`,`/*`,(e,t,n)=>ue(e,t,n[`*`]),(e,t,n)=>t.integrations[n[`*`]]?t:k())]),...Vi,...Hi],Wi=[H(`GET`,`/metrics`,async(e,t)=>E(await Qn(t),200,{"cache-control":`no-store`}),yn),H(`GET`,`/usage`,Pn),H(`GET`,`/usage/totals`,Fn)],Gi=G(``,[H(`GET`,`/folders`,(e,t)=>E(le(t.local.cwd))),H(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return E(We(n?.path))}),H(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return E(await Wt(n?.url))}),H(`POST`,`/folders/pick`,async(e,t)=>E(await Vt()))],Gt),Ki=G(``,[H(`GET`,`/engines/status`,async(e,t)=>E(await Ot())),H(`POST`,`/engines/:engine/login`,an),H(`POST`,`/engines/:engine/logout`,Zt)],rt),qi=[H(`POST`,`/apps/:id/install`,(e,t,n,r)=>Or(e,t,n.id,r.searchParams.get(`back`))),H(`GET`,`/apps`,kr),H(`GET`,`/installations`,Ar),H(`POST`,`/connections`,(e,t)=>Dr(e,t)),H(`GET`,`/integrations`,(e,t)=>jr(t)),H(`GET`,`/repositories`,(e,t)=>Mr(t))],Ji=[H(`GET`,`/agents/import`,Fr),H(`POST`,`/agents/import`,Ir),H(`GET`,`/agents`,zr),H(`PATCH`,`/agents/:slug/settings`,qr),H(`GET`,`/agents/:slug/versions`,Br),H(`GET`,`/agents/:slug/versions/:version`,Vr),H(`GET`,`/agents/:slug`,Hr),H(`DELETE`,`/agents/:slug`,Jr,(e,t)=>Ae(t,`Only an owner or admin can delete an agent.`)),H(`PUT`,`/agents/:slug`,Yr)],Yi=[H(`GET`,`/credentials`,gn),H(`POST`,`/credentials`,Ct,et),H(`POST`,`/credentials/:label/default`,Dt),H(`DELETE`,`/credentials/:label`,Jt),H(`POST`,`/logins`,nr,N),H(`GET`,`/logins/:id`,rr,N),H(`POST`,`/logins/:id`,ir,N),H(`DELETE`,`/logins/:id`,ar,N)],Xi=[H(`GET`,`/runners`,At),H(`POST`,`/runners`,Xe),H(`POST`,`/runners/pair`,pn),H(`POST`,`/runners/:id/test`,yt),H(`PATCH`,`/runners/:id`,un),H(`DELETE`,`/runners/:id`,se)],Zi=[H(`GET`,`/tasks`,Ke),H(`POST`,`/tasks`,Ut),H(`GET`,`/tasks/:id`,ke),H(`DELETE`,`/tasks/:id`,Ie),H(`GET`,`/tasks/:id/logs`,On),H(`GET`,`/tasks/:id/stream`,Xr),H(`POST`,`/tasks/:id/steer`,Ze),H(`POST`,`/tasks/:id/ask`,Re),H(`POST`,`/tasks/:id/approve`,ce),H(`POST`,`/tasks/:id/cancel`,Ve),H(`POST`,`/tasks/:id/archive`,Bt),H(`GET`,`/events`,$r)],Qi=[H(`GET`,`/config`,bn),H(`PATCH`,`/config`,fe),H(`PUT`,`/config`,tt)],$i=[H(`POST`,`/models/probe`,(e,t)=>li(e,t)),H(`GET`,`/models`,di),H(`POST`,`/models`,fi),H(`DELETE`,`/models/:name`,pi),H(`POST`,`/models/:name/alias`,mi),H(`POST`,`/models/:name/disable`,hi),H(`POST`,`/models/:name/enable`,gi)],ea=[H(`GET`,`/mcp`,vi),H(`POST`,`/mcp`,yi),H(`DELETE`,`/mcp/:name`,bi),H(`GET`,`/mcp-registry`,(e,t,n,r)=>Ti(e,t,r))],ta=[H(`GET`,`/flows`,st),H(`GET`,`/pulls`,Ee),H(`POST`,`/flows/:name/run`,ut),H(`POST`,`/review`,it)],na=G(`/admin`,[...Wi,...Gi,...Ki,...qi,...Ji,...Yi,...Xi,...Zi,...Qi,...$i,...ea,...ta]).map(e=>({...e,guard:xt(e.guard)})),ra=[...Bi,...na,...zi,...Ui,...Ri];async function ia(e,t,n){if(!Ge(e,t))return k();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await Xt(ra,e,t,r)??qt(e,t,r))}const aa=`x-coder-request-scope`;function oa(e,{sessions:t,cookies:n}){let r=e.auth;return r?{...e,auth:{...r,session(e,i){let a=JSON.stringify([...[`cookie`,`authorization`,`x-coder-organization`].map(t=>e.get(t)),!!i]),o=t.get(a);return o||(o=r.session(e,i,n),t.set(a,o)),o}}}:e}function sa(e,t,n){let r=t.requestScopes??=new Map,i=e.headers.get(aa),a=n&&i?r.get(i):void 0;if(a)return{req:e,ctx:oa(t,a),end(){}};let o=new Headers(e.headers);if(o.delete(aa),!t.auth)return{req:i?new Request(e,{headers:o}):e,ctx:t,end(){}};let s=zn(),c={sessions:new Map,cookies:[]};return r.set(s,c),o.set(aa,s),{req:new Request(e,{headers:o}),ctx:oa(t,c),cookies:c.cookies,end:()=>r.delete(s)}}async function ca(e,t,n={}){t.limits??=new Ye((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new ti,t.logWatcher??=new ri,t.dashboardHosts??=new zt;let r=()=>la(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function la(e,t,n){let r=await ne(e,ie(new URL(e.url).pathname));if(r instanceof Response)return r;let i=sa(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await oe(i.req,i.ctx,r),s=ua(o instanceof Response?o:await ia(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,u=c[1]===`admin`&&c[2]===`tasks`;return e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&Kt(t),e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&c[3]===`heartbeat`)&&!(u&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||u||c[1]===`admin`&&c[2]===`review`||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&_t(t,u&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?da(s,i.end):s}finally{a||i.end()}}function ua(e,t=[]){if(!t.length)return e;let n=new Headers(e.headers);for(let e of t)n.append(`set-cookie`,e);return new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}function da(e,t){let n=e.body.getReader(),r=new ReadableStream({async pull(e){try{let{done:r,value:i}=await n.read();r?(t(),e.close()):e.enqueue(i)}catch(n){t(),e.error(n)}},cancel(e){return t(),n.cancel(e)}});return new Response(r,e)}async function fa(e={}){let t=e.env??J.env,n=An(t,e.host??`node`),r=e.runner??n.runner;if((e.host===`vercel`||t.VERCEL)&&(r===`local`||r===`local-docker`))throw new s(`invalid-option`,`The ${r} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(n.store===`memory`&&r!==`local`&&r!==`local-docker`)throw new s(`invalid-option`,`The ${r} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!n.publicUrl)throw new s(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let i=[];if(n.store===`memory`&&!e.local&&i.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!t.SERVER_ENCRYPTION_KEY&&!e.local&&i.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),n.store===`postgres`&&!n.encryptionKey)throw new s(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let a=w(n.integrations),o=n.store===`memory`&&!n.adminToken?Rn(18).toString(`base64url`):void 0;n.store===`postgres`&&n.adminToken&&i.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let c={...n,...n.store===`postgres`?{adminToken:void 0}:{},...o?{adminToken:o}:{},...e.runner?{runner:e.runner}:{}},l=await fn(c,{local:!!e.local});if(l.connection)try{let e=await Mn(l.connection.db);if(!e.applied)throw new s(`server`,`The database is not set up yet.`,{hint:`Create the tables: coder server migrate`});e.pending&&i.push(`database is ${e.pending} migration${e.pending===1?``:`s`} behind; run coder server migrate`)}catch(e){throw await l.close(),e}try{c.store===`memory`&&await xn(l.store(l.defaultOrganizationId),Date.now());let n=l.connection&&c.auth?await(await import(`./auth-DSE3SIuI.js`)).createAuth(l.connection.db,c):void 0,r=e.cwd??J.cwd(),u=l.store(l.defaultOrganizationId),d=He({kind:c.runner,workDir:c.workDir,config:c.runnerConfig,local:!(e.host===`vercel`||t.VERCEL),sandbox:{region:xe(c.databaseUrl),snapshots:{get:e=>u.get(`snapshot`,e),put:(e,t)=>u.put(`snapshot`,e,t)}}});if(!d[c.runner])throw await l.close(),new s(`invalid-option`,`Runner ${c.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let f=new zt,p=new Ye,m=new Map,h=new Map,g=new ti,_=new ri,v=t=>{let i=m.get(t);if(i)return i;let o=l.store(t),s={limits:p,...l.connection?{databaseHealth:async()=>{await l.connection.db.execute(Hn`select 1`)},statementTimeout:l.connection.statementTimeout}:{},config:c,settings:{},organizationId:t,integrations:a,runners:d,store:o,queue:l.queue,requestScopes:h,taskWatcher:g,logWatcher:_,dashboardHosts:f,dbProfile:l.connection?.profile,chatState:l.chatState,loadAgent:on(a,{cwd:r,config:c,store:o}),...n?{auth:n}:{},scope:v,webhookTarget:(e,t)=>l.webhookTarget(e,t),appRecord:e=>l.appRecord(e),installationOrganization:e=>l.installationOrganization(e),installations:e=>l.installations(e),serverOrganizationId:l.defaultOrganizationId,taskOrganization:(e,t)=>l.taskOrganization(e,t),...e.local?{local:e.local}:{}};return m.set(t,s),s};globalThis.__coder={handle:e=>ca(e,v(l.defaultOrganizationId),{inProcess:!0})};let y=v(l.defaultOrganizationId),b;return e.local&&(await Pt(y),b=setImmediate(()=>{Tn(y).catch(()=>void 0)})),{config:c,context:v,defaultContext:y,warnings:i,...o?{mintedToken:o}:{},sweep:l.sweep,close:async()=>{g.close(),_.close(),b&&clearImmediate(b),await y.local?.usageSync?.catch(()=>void 0),await bt(y),await l.close()}}}catch(e){throw await l.close(),e}}var pa=e({serve:()=>_a,serverHandler:()=>ha});function ma(e){try{let t=new URL(e);return Lt.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function ha(e=J.env,t=e.VERCEL?`vercel`:`node`){jn();let n,r=()=>n??=fa({env:e,host:t}).catch(e=>{throw n=void 0,e});return Object.assign(async(t,n)=>{let i=await r(),a=n?e=>n(e):e=>void e.catch(()=>{}),o=e=>({...i.context(e),waitUntil:a,scope:o});return ca(t,o(i.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await r();await Promise.all([e.sweep(),import(`./store-Cxc2GYyj.js`).then(e=>e.Y).then(t=>t.renewInstallations(e.defaultContext)),pt(e.defaultContext,!1,!0),Tt(e.defaultContext)])},close:async()=>{let e=n;n=void 0,await(await e)?.close()}})}async function ga(e={}){jn();let t=e.env??J.env;if(e.runner&&!ze.includes(e.runner))throw new s(`invalid-option`,`Invalid --runner value: use ${ze.join(`, `)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))throw new s(`invalid-option`,`Invalid port: use 1 through 65535.`);let n=t.PORT&&/^\d+$/.test(t.PORT)?Number(t.PORT):void 0,r=ma(t.PUBLIC_URL),i=e.port??n??r??8787;if(!Number.isInteger(i)||i<1||i>65535)throw new s(`invalid-option`,`Invalid PORT: use 1 through 65535.`);let a=t.PUBLIC_URL?t:{...t,PUBLIC_URL:`http://localhost:${i}`},o=!!(t.DATABASE_URL||t.POSTGRES_URL);if(o&&e.memory)throw new s(`invalid-option`,`A memory server cannot use DATABASE_URL.`,{hint:`Unset DATABASE_URL, or drop --memory.`});let c=(e.host??t.HOST??(o?void 0:`127.0.0.1`))?.replace(/^\[(.*)\]$/,`$1`),l=!o&&!e.memory;if(l&&!Lt.has(c))throw new s(`invalid-option`,`A local server listens on loopback only.`,{hint:`Reach it through a tunnel or a proxy on this machine; set DATABASE_URL for a deployment, or use --memory for a test server.`});if(e.memory&&t.VERCEL)throw new s(`invalid-option`,`A memory server cannot run on Vercel.`,{hint:`Set DATABASE_URL for a real deployment.`});let u,d,f=l?new Promise((e,t)=>{d=t,u=()=>{Jn().then(e,t)}}):void 0,p=f?.then(()=>void 0).catch(()=>void 0),m=l?{cwd:e.cwd??J.cwd(),port:i,cacheMaintenance:p}:void 0,h=await fa({cwd:e.cwd,env:a,runner:e.runner,...m?{local:m}:{}}),g=h.defaultContext,_=()=>{h.sweep().catch(()=>{}),import(`./store-Cxc2GYyj.js`).then(e=>e.Y).then(e=>e.renewInstallations(g)).catch(()=>{})};_();let v=setInterval(_,36e5);v.unref();let y=setInterval(()=>{pt(g,!1,!0).catch(()=>{}),Tt(g).catch(()=>{}),t.PUBLIC_URL||import(`./store-Cxc2GYyj.js`).then(e=>e.Y).then(e=>e.renewInstallations(g,`sync`)).catch(()=>{})},6e4);y.unref();let b=Vn.createServer(re((e,t)=>ca(e,g,{clientIp:t}),{limit:ie,admit:e=>o||de(e.socket.remoteAddress,e.url??`/`)})),x=h.config.publicUrl;r!==void 0&&r!==i&&h.warnings.push(`PUBLIC_URL points at port ${r} but the server listens on ${i}`),await new Promise((e,t)=>{b.once(`error`,t),b.listen(i,c,e)}).catch(async e=>{throw d?.(e),clearInterval(y),clearInterval(v),await h.close(),e});let S=u?setTimeout(u,0):void 0,C=!1,w=async()=>{C||(C=!0,clearInterval(y),clearInterval(v),g.taskWatcher?.close(),g.logWatcher?.close(),await new Promise((e,t)=>b.close(n=>n?t(n):e())),await p,S&&clearTimeout(S),await h.close())},ee=g.auth?`Wular Auth (${g.auth.issuer})`:void 0,T=`http://localhost:${i}`,E=Qe(g),D=E===`local`?T:x,O=h.config.store===`memory`?h.mintedToken??t.ADMIN_TOKEN:void 0;return{address:T,publicUrl:x,warnings:h.warnings,close:w,runner:h.config.runner,store:h.config.store,mode:E,...f?{cacheMigration:f}:{},maxTasks:h.config.maxTasks??h.config.limits?.concurrentTasks??10,...ee?{signIn:ee}:{},...h.mintedToken?{mintedToken:h.mintedToken}:{},...h.config.store===`postgres`&&t.DATABASE_URL?{database:Nn(t.DATABASE_URL)}:{},...Lt.has(new URL(D).hostname)?{dashboard:`${D}/dash${O?`#token=${encodeURIComponent(O)}`:``}`}:{}}}async function _a(e={}){try{return await ga(e)}catch(e){if(e instanceof s)throw e;let t=e instanceof Error&&e.cause instanceof Error?`: ${e.cause.message}`:``;throw new s(`server`,`${e instanceof Error?e.message:String(e)}${t}`)}}export{Ai as a,Di as i,pa as n,Oi as o,ha as r,_a as t};
@@ -1,2 +0,0 @@
1
- import{St as e,Zt as t}from"./dispatch-YW1aqjEg.js";import{i as n}from"./prompt-K7-bKcTC.js";import{i as r}from"./cli-DtTdpTy3.js";import{p as i,s as a}from"./output-BKeyLbvt.js";import{n as o,s,t as c}from"./args-DEMOfLz2.js";import l from"node:process";import*as u from"zod/mini";function d(e){let r=i,o=[...e.publicUrl===e.address?[]:[[`public`,e.publicUrl]],[`store`,e.database??(e.mode===`local`?t():e.store)],[`runner`,e.runner],...e.signIn?[[`sign-in`,e.signIn]]:[],...e.mintedToken?[[`token`,e.mintedToken]]:[]],s=Math.max(...o.map(([e])=>e.length))+2;l.stdout.write(`${r.bold({local:`Coder local server`,memory:`Coder test server`,cloud:`Coder server`}[e.mode])} ${r.dim(`listening on ${e.address}`)}\n`);for(let[e,t]of o)l.stdout.write(` ${r.light(e.padEnd(s))}${t}\n`);e.warnings.length&&l.stdout.write(`
2
- `);for(let t of e.warnings)l.stdout.write(` ${r.yellow(`!`)} ${t}\n`);if(e.cacheMigration?.then(e=>{(e.tasks||e.flows||e.files)&&l.stdout.write(`\n moved ${e.tasks.toLocaleString(`en-US`)} archived tasks to ${e.cache}\n`)}).catch(e=>l.stderr.write(`\n Cache migration failed: ${e instanceof Error?e.message:String(e)}\n`)),e.mode===`memory`&&l.stdout.write(`\n${a([`the CLI reaches this server with its token in ADMIN_TOKEN: coder task list --server ${e.publicUrl}`],r)}\n`),e.dashboard){let t=l.stdout.isTTY&&n(e.dashboard);l.stdout.write(t?`\nOpening the dashboard in your browser. If it doesn't open, go to:\n ${e.dashboard}\n`:`\n ${r.light(`dashboard`)} ${e.dashboard}\n`)}}const f=r({name:`server serve`,help:{usage:`coder server serve [--port <n>] [--host <address>] [--memory] [--runner <name>] [--json] [--cwd <dir>]`,summary:`Run the Coder server on Bun: the address platforms deliver events to, the dashboard, and the worker that runs tasks. With DATABASE_URL it is a full server with sign-in and workspaces. Without one it is the dashboard for this machine's CLI: its config, agents, tasks and engine logins, on loopback only. --memory makes a throwaway test server that keeps everything in memory. Configured through the environment; every variable is in coder docs self-host. It never migrates the database itself: coder server migrate does.`,flags:[[`--port <n>`,`listen port (default: PORT, else the port in a localhost PUBLIC_URL, else 8787)`],[`--host <address>`,`listen address (default: HOST, else 127.0.0.1 without a database, else every interface)`],[`--memory`,`a throwaway test server: everything in memory, no sign-in, admin token only`],[`--runner <name>`,`local, local-docker, vercel-sandbox, github-actions, or http`]],env:[[`PUBLIC_URL`,`the address platforms and browsers reach the server at (default http://localhost:<port>)`],[`PORT`,`listen port, as hosts set it (default 8787)`],[`HOST`,`listen address, as --host`],[`DATABASE_URL`,`Postgres, set up by coder server migrate; turns on sign-in and workspaces`],[`AUTH_WULAR_URL`,`the Wular Auth issuer people sign in with (default https://auth.wular.ai)`],[`SERVER_ENCRYPTION_KEY`,`encrypts stored secrets and derives the sign-in keys; required with DATABASE_URL (openssl rand -base64 32)`],[`RUNNER`,`where tasks run: local (default), local-docker, vercel-sandbox, github-actions, http`],[`MAX_TASKS, TASK_TIMEOUT, TASK_STALL, TASK_ATTEMPTS`,`runner capacity and lifecycle limits`],[`ADMIN_TOKEN`,`local and memory servers: the dashboard and CLI key; minted and shown when unset`],[`CODER_CACHE_HOME`,`archived tasks, flows and usage (default OS cache directory/wular-coder)`],[`WORK_DIR`,`where tasks check out repositories`],[`SERVER_NAME`,`what the dashboard calls this server (default Coder)`]],examples:[[`PUBLIC_URL=https://abc.ngrok.app coder server serve`,`receive GitHub and Slack events through a tunnel; the tunnel serves only their webhooks and callbacks`],[`PUBLIC_URL=https://agents.example.com DATABASE_URL=postgres://... coder server serve`,`on your own host, backed by Postgres`]]},options:{...c,port:u.optional(u.coerce.number().check(u.int(),u.positive())),host:s,runner:s,memory:o},async run({options:t,cwd:n}){let{rerunUnderBun:r}=await import(`./env-LsVTi18f.js`).then(e=>e.t);if(await r(),t.memory&&!l.env.ADMIN_TOKEN&&!l.stdout.isTTY)throw new e(`invalid-option`,`Memory server needs an admin token: set ADMIN_TOKEN, or run in a terminal to get a printed one.`);let{serve:i}=await import(`./serve-CcqX_2qk.js`).then(e=>e.n),a=await i({cwd:n,port:t.port,...t.host?{host:t.host}:{},...t.runner?{runner:t.runner}:{},...t.memory?{memory:!0}:{}}),o=()=>void a.close().finally(()=>l.exit(0));return l.once(`SIGINT`,o),l.once(`SIGTERM`,o),a},json:e=>({ok:!0,address:e.address,publicUrl:e.publicUrl,runner:e.runner,store:e.store,mode:e.mode,maxTasks:e.maxTasks,...e.signIn?{signIn:e.signIn}:{},...e.mintedToken?{adminToken:e.mintedToken}:{},warnings:e.warnings}),print:d});export{f as commandServerServe};
@@ -1,12 +0,0 @@
1
- import{An as e,Et as t,Mn as n,Vt as r,W as i,_ as a,an as o,nn as s,tt as c,v as l,wn as u,y as d}from"./dispatch-YW1aqjEg.js";import{i as f}from"./cli-DtTdpTy3.js";import{s as p}from"./args-DEMOfLz2.js";import{n as m}from"./mcp-server-DGzme0YX.js";import h from"node:path";import g from"node:fs";import{spawn as _}from"node:child_process";import{randomUUID as v}from"node:crypto";function y(e){return h.join(e,`sidecar.json`)}function b(t){return e(y(t))??{sessionId:null,declineStreak:0}}async function x(e){let t=h.join(e,`sidecar.lock`),n=Date.now()+12e4;for(;;)try{return g.mkdirSync(t),()=>{try{g.rmdirSync(t)}catch{}}}catch{try{if(Date.now()-g.statSync(t).mtimeMs>9e4){g.rmdirSync(t);continue}}catch{continue}if(Date.now()>n)throw Error(`sidecar lock wait timed out`);await new Promise(e=>setTimeout(e,250))}}function S(e,t,n,r){return[`-p`,r,`--output-format`,`json`,`--model`,`sonnet`,`--effort`,`low`,`--strict-mcp-config`,`--no-chrome`,`--mcp-config`,`{"mcpServers":{}}`,`--settings`,`{"disableClaudeAiConnectors":true}`,n?`--resume`:`--session-id`,t,...i,`--add-dir`,e]}function C(e,t,n,r,i){let a=S(t,n,r,i);return new Promise((t,n)=>{let r=_(`claude`,a,{cwd:e,stdio:[`ignore`,`pipe`,`pipe`]}),i=``,o=``,s=setTimeout(()=>{r.kill(`SIGKILL`),n(Error(`sidecar call timed out`))},12e4);r.stdout.on(`data`,e=>i+=e),r.stderr.on(`data`,e=>o+=e),r.on(`error`,e=>{clearTimeout(s),n(e)}),r.on(`close`,e=>{if(clearTimeout(s),e!==0){n(Error(`sidecar claude exited ${e}: ${o.trim().slice(0,200)}`));return}try{let e=JSON.parse(i);if(e.is_error){n(Error(`sidecar turn errored: ${String(e.result??``).slice(0,200)}`));return}t(String(e.result??``))}catch{n(Error(`sidecar returned unparseable output`))}})})}function w(e){let t=e.match(/\{[^{}]*"decision"[^{}]*\}/);if(!t)return null;try{let e=JSON.parse(t[0]);if(e.decision===`accept`||e.decision===`decline`||e.decision===`escalate`)return{decision:e.decision,reason:String(e.reason??``)}}catch{}return null}async function T(e,t,r){let i=null;try{i=await x(t);let a=b(t);if(a.declineStreak>=3)return{decision:`escalate`,reason:`sidecar decline streak; needs human review`};if(!a.sessionId){let i=v();await C(e,t,i,!1,`You are the approval reviewer for a "coder" background coding task. The task runs inside an OS sandbox; you review only actions that escape it.
2
-
3
- Rules:
4
- - git stays read-only: decline any git write (commit/push/checkout/reset/...).
5
- - Decline anything destructive or system-level (sudo, rm -rf outside workspace, killing processes, changing system config, piping downloads to shells).
6
- - Temp locations (/tmp, \$TMPDIR, os temp dirs) and paths this task created are workspace scratch. They can be deleted after checking the progress log.
7
- - Accept actions clearly needed for the task goal (package installs in the workspace, running tests/builds/linters, reading system info, network to well-known package registries).
8
- - Escalate when genuinely uncertain, when the action is irreversible beyond the workspace, or when it touches credentials/secrets.
9
-
10
- You may Read/Grep workspace files and the task progress log to inform a decision. Do this only when the action line alone is not enough. Most decisions should not need it.
11
-
12
- Reply with ONLY one line of JSON: {"decision":"accept"|"decline"|"escalate","reason":"<short>"}. Acknowledge now with {"decision":"escalate","reason":"ready"}.${r.taskGoal?`\n\nTask goal: ${r.taskGoal.replace(/\s+/g,` `).slice(0,500)}`:``}${`\nTask progress log: ${h.join(t,`log.jsonl`)}`}`),a.sessionId=i,n(y(t),a)}let o=w(await C(e,t,a.sessionId,!0,`action: ${r.summary.slice(0,500)}`));return o?.decision===`decline`?a.declineStreak+=1:o?.decision===`accept`&&(a.declineStreak=0),n(y(t),a),o??{decision:`escalate`,reason:`sidecar verdict unparseable`}}catch(e){return{decision:`escalate`,reason:`sidecar unavailable: ${e instanceof Error?e.message:String(e)}`}}finally{i?.()}}const E=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]);async function D(e,n,i){let u=String(i.tool_name??``),f=i.input??i.tool_input??{},p=o(e),m=s(e,n),h=c(e),g=r=>t(e,n,r),_,v;if(u===`Bash`){let e=String(f.command??``);v=`run command: ${e||`(unknown command)`}`,_=a(e,{allowedNetworkHosts:h.approvals.allowedNetworkHosts})}else if(E.has(u)){let e=String(f.file_path??f.notebook_path??``);v=`${u}: ${e||`(unknown path)`}`,_=l(e?[e]:[],p)}else v=`${u||`(unknown tool)`}: ${JSON.stringify(f).slice(0,200)}`,_={decision:`escalate`,reason:`tool needs approval: ${u}`};g({kind:`approval-decision`,method:u,decision:_.decision,reason:_.reason,summary:v});let y=_.decision,b=_.reason;if(y===`escalate`){let t=await T(e,m,{taskGoal:r(e,n)?.prompt??null,summary:v});g({kind:`sidecar-decision`,decision:t.decision,reason:t.reason,summary:v}),t.decision===`escalate`?(y=await d(m,{method:`claude/${u}`,summary:v,params:{tool_name:u,input:f}},{timeoutMs:h.approvals.escalationTimeoutMs,onEvent:g}),b=`escalated for human review`):(y=t.decision,b=t.reason)}return y===`accept`?{behavior:`allow`,updatedInput:f}:{behavior:`deny`,message:`Denied by coder policy: ${b}`}}const O={approval_prompt:{description:`Coder approval policy for claude permission prompts.`,inputSchema:{type:`object`,additionalProperties:!0},handler:(e,{cwd:t,taskId:n})=>D(t,n,e).catch(e=>({behavior:`deny`,message:`coder mcp tool failed: ${e instanceof Error?e.message:String(e)}`}))}},k=f({name:`mcp serve`,options:{cwd:p},args:1,run:({args:e,cwd:t})=>m(`coder`,O,{cwd:t,taskId:e[0]},void 0,u())});export{k as commandMcp};
@@ -1 +0,0 @@
1
- import{i as e,t}from"./cli-DtTdpTy3.js";import{p as n,s as r}from"./output-BKeyLbvt.js";import{n as i,o as a,s as o,t as s}from"./args-DEMOfLz2.js";import c from"node:process";import*as l from"zod/mini";const u=e({name:`runner serve`,help:{usage:`coder runner serve --url <public url> [--token <token>] [--runner-url <url>] [--port <n>] [--name <name>] [--workspace] [--server [url]] [--json]`,summary:`Run tasks on this machine with its own claude and codex logins. Expose the port with any tunnel (cloudflared, ngrok, Tailscale Funnel or a public VS Code port) and pass the tunnel's URL; each start registers the current URL, so a changing tunnel URL is fine. Choose a default with coder runner default. Tasks use their named runner, the agent setting, your default, the workspace default, then the server default.`,flags:[[`--url <public url>`,`the HTTPS address the server reaches this runner at`],[`--token <token>`,`one-use pairing token, --url is the Coder server`],[`--runner-url <url>`,`public tunnel address when pairing, or CODER_RUNNER_URL`],[`--port <n>`,`local port the tunnel forwards to (default 4100)`],[`--name <name>`,`shown in the dashboard (default: this machine's hostname)`],[`--workspace`,`run every member's tasks, not only yours (owners and admins)`],t],examples:[[`cloudflared tunnel --url http://localhost:4100`,`expose the port in one terminal`],[`coder runner serve --url https://abc.trycloudflare.com`,`then serve through it`]]},options:{...s,port:l.optional(l.coerce.number().check(l.int(),l.positive())),url:o,name:o,token:o,"runner-url":o,workspace:i,server:a,yes:i},async run({options:e}){let{serveRunner:t}=await import(`./serve-xMihn4g-.js`).then(e=>e.n),n=await t({...e,runnerUrl:e[`runner-url`]}),r=()=>void n.close().finally(()=>c.exit(0));return c.once(`SIGINT`,r),c.once(`SIGTERM`,r),n},json:({server:e,close:t,...n})=>({ok:!0,...n}),print:e=>c.stdout.write(`Runner ${n.bold(e.name)} serves ${e.server} at ${n.cyan(e.config.url??``)} (${e.scope}), listening on localhost:${e.port}.\n${r([`Tasks run here with this machine's own claude and codex logins`,`Stop with Ctrl-C; the server marks the runner offline`],n,n.cyan)}\n`)});export{u as commandRunnerServe};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{Mt as t,St as n}from"./dispatch-YW1aqjEg.js";import{n as r,o as i}from"./remote-AcWWfKVS.js";import{u as a}from"./integrations-B2CavXR1.js";import{t as o}from"./local-B0GiaLV0.js";import{s,t as c}from"./http-DG54kyx4.js";import l from"node:path";import u from"node:fs";import{createHmac as d,randomBytes as f}from"node:crypto";import p from"node:os";import m from"node:http";var h=e({runnerController:()=>C,serveRunner:()=>b});const g=()=>t(`runners.json`);function _(){try{return JSON.parse(u.readFileSync(g(),`utf8`))}catch{return{}}}function v(e){u.mkdirSync(l.dirname(g()),{recursive:!0}),u.writeFileSync(g(),JSON.stringify(e,null,2),{mode:384})}const y=e=>[`cloudflared tunnel --url http://localhost:${e}`,`ngrok http ${e}`,`tailscale funnel ${e}`,`VS Code: forward port ${e} in the Ports view and set its visibility to Public`];async function b(e={}){let a=e.port??4100,l=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!l)throw new n(`invalid-option`,e.token?`Expose this runner and set CODER_RUNNER_URL or --runner-url to its public HTTPS address.`:`Expose this runner with a tunnel, then pass its public URL with --url.`,{hint:y(a)});let u=e.token?i({...e,server:e.url??e.server,yes:!0}):i(e),d=_(),h=d[u]??{secret:f(32).toString(`base64url`)},g=new o(t(`runner`)),b=C({secret:h.secret,server:u,runner:g}),x=m.createServer(s(b,{limit:c}));await new Promise((e,t)=>{x.once(`error`,t),x.listen(a,`127.0.0.1`,e)});let S=()=>new Promise(e=>x.close(()=>e())),w=e.name??p.hostname(),T=async(e,t)=>{let r=await fetch(`${u}/runners/register`,{method:`POST`,redirect:`manual`,signal:AbortSignal.timeout(5e3),headers:{"content-type":`application/json`},body:JSON.stringify({...e?{token:e}:{id:h.id,organizationId:h.organizationId},name:w,url:l,secret:h.secret,...t?{offline:t}:{}})});if(!r.ok)throw new n(`server`,`Runner registration failed`,{status:r.status});return r.json()},E;try{if(e.token){let t=await T(e.token);E=t,h.organizationId=t.organizationId}else{let t=h.id&&h.organizationId?await T().catch(e=>{if(!(e instanceof n&&e.status===401))throw e}):void 0;if(t)E=t;else{let t=r(e),n=await t.me();E=await t.runners.add({kind:`http`,name:w,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:l,secret:h.secret}}),h.organizationId=n.organization?.id,h.id=E.id,E=await T()}}h.id=E.id,v({...d,[u]:h})}catch(e){throw await S(),e}let D=Promise.resolve(),O=setInterval(()=>{D=D.then(()=>T().then(()=>{})).catch(()=>{})},6e4);return{...E,port:a,server:u,close:async()=>{clearInterval(O),await D,await T(void 0,!0).catch(()=>{}),await S()}}}const x=3e5,S=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function C(e){let t=e.now??Date.now,n=new Map,r=(r,i)=>{let o=r.headers.get(`x-coder-timestamp`)??``,s=r.headers.get(`x-coder-nonce`)??``,c=r.headers.get(`x-coder-signature`)??``,l=Number(o);if(!s||!Number.isFinite(l)||Math.abs(t()-l)>x)return!1;let u=d(`sha256`,e.secret).update(`${i}.${o}.${s}`).digest(`base64url`);if(!a(c,u))return!1;for(let[e,r]of n)r<t()&&n.delete(e);return!n.has(s)&&(n.set(s,l+x),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return S({error:`Unauthorized`},401);let i=new URL(t.url),[,a,o]=i.pathname.split(`/`).map(decodeURIComponent);try{if(t.method===`POST`&&a===`start`&&!o){let t=JSON.parse(n);if(typeof t.task!=`string`||!t.env)return S({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return S({error:`Invalid start`},400);let i={CODER_SERVER:e.server,CODER_TASK_TOKEN:r,CODER_INBOX_MODE:e.runner.push?`push`:`poll`,...t.env.CODER_LOGIN===`claude`||t.env.CODER_LOGIN===`codex`?{CODER_LOGIN:t.env.CODER_LOGIN}:{}};return S({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&a===`health`&&!o)return S({ok:!0});if(!o)return S({error:`Not found`},404);if(t.method===`POST`&&a===`messages`&&e.runner.push){let{entries:t}=JSON.parse(n);return!Array.isArray(t)||!t.length?S({error:`Invalid messages`},400):S(await e.runner.push(o,t))}return t.method===`GET`&&a===`status`?S(await e.runner.status(o)):t.method===`GET`&&a===`logs`?S(await e.runner.logs(o,Number(i.searchParams.get(`after`)??-1))):t.method===`POST`&&a===`stop`?(await e.runner.stop(o),new Response(null,{status:204})):S({error:`Not found`},404)}catch(e){return S({error:e instanceof Error?e.message:String(e)},400)}}}export{h as n,b as t};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-DtTdpTy3.js";const t=e(`server`,{serve:async()=>(await import(`./serve-Ci0AFWtY.js`)).commandServerServe,migrate:async()=>(await import(`./migrate-CSwkAInI.js`)).commandServerMigrate,"rotate-key":async()=>(await import(`./rotate-key-pIfcaeCd.js`)).commandServerRotateKey,app:async()=>(await import(`./app-CE5j7IDN.js`)).commandServerApp,workflow:async()=>(await import(`./workflow-BOPHazbM.js`)).commandServerWorkflow},{menu:[{usage:`serve [--port <n>]`,blurb:`run the server`},{usage:`migrate`,blurb:`apply pending database migrations`},{usage:`rotate-key`,blurb:`re-seal secrets with SERVER_ENCRYPTION_KEY`},{usage:`app create <integration>`,blurb:`create the built-in agent's public app`},{usage:`workflow`,blurb:`print the GitHub Actions workflow for RUNNER=github-actions`}],description:[`Self-host Coder: the server your agents and platform apps talk to, with a dashboard and sign-in. We run one as the hosted service; you can run your own.`],exampleCommand:`server serve`},{nested:[`app`]});export{t as commandServer};
@@ -1 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{Bn as t}from"./store-Cxc2GYyj.js";import{d as n,n as r,o as i,p as a,s as o,t as s}from"./schema-DoNO0dPh.js";import{and as c,eq as l,or as u}from"drizzle-orm";var d=e({UNSCOPED_ORGANIZATION:()=>``,addSecret:()=>N,agentRowId:()=>O,agentValue:()=>S,app:()=>m,appRowId:()=>D,date:()=>_,defined:()=>y,escapeLike:()=>v,install:()=>h,installationRowId:()=>k,ms:()=>g,opaque:()=>M,rows:()=>L,setSecret:()=>P,splitKey:()=>p,stateKey:()=>I,statePrefix:()=>F,taskRecord:()=>E,taskRowId:()=>A,versionColumns:()=>w,versionSummary:()=>T,versionValue:()=>C});const f=``;function p(e){let t=e.lastIndexOf(`:`),n=e.slice(t+1);return t>0&&/^\d+$/.test(n)?[e.slice(0,t),Number(n)]:void 0}const m=i,h=o,g=e=>e.getTime(),_=e=>new Date(e),v=e=>e.replace(/[\\%_]/g,`\\$&`),y=e=>Object.fromEntries(Object.entries(e).filter(([,e])=>e!=null)),b=e=>e?g(e):void 0,x=(e,t)=>{let n=/^repo:([^@]+)@(.+)$/.exec(e);return n&&t?{repo:n[1],ref:n[2],commit:t}:void 0},S=e=>y({id:e.slug,name:e.name,description:e.description,source:e.source,repo:e.repo,path:e.path,currentVersion:e.currentVersion,settings:e.settings,createdAt:g(e.createdAt),updatedAt:g(e.updatedAt)}),C=(e,t)=>y({agent:t,version:e.version,definition:e.definition,systemPrompt:e.systemPrompt,files:e.files,commit:e.commit,source:x(e.importedFrom,e.commit),importedFrom:e.importedFrom,createdAt:g(e.createdAt)}),w={id:r.id,agentId:r.agentId,version:r.version,definition:r.definition,commit:r.commit,importedFrom:r.importedFrom,createdAt:r.createdAt},T=(e,t)=>{let{systemPrompt:n,files:r,...i}=C({...e,systemPrompt:``,files:null},t);return i};function E(e){return y({task:y({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,runner:e.runner,permissions:e.permissions,event:e.event,prompt:e.prompt,args:e.args,mcp:e.mcp,author:e.author,definition:e.definition,credential:e.credential,requester:e.requester,runnerId:e.runnerId,usage:e.usage,tools:e.tools,toolScopes:e.toolScopes,context:e.context,files:e.files}),status:e.status,attempts:e.attempts,generation:e.generation,inboxSeq:e.inboxSeq,inboxAck:e.inboxAck<0?void 0:{generation:e.generation,seq:e.inboxAck},result:e.result,error:e.error,tokens:e.tokens,handle:e.handle,tokenHash:e.tokenHash,lastSeenAt:b(e.lastSeenAt),logCursor:e.logCursor??void 0,logSeq:e.logSeq??void 0,logBytes:e.logBytes??void 0,archivedAt:b(e.archivedAt),approval:e.approval,answer:Array.isArray(e.answer)?e.answer:void 0,createdAt:g(e.createdAt),startedAt:b(e.startedAt),finishedAt:b(e.finishedAt),cancelRequestedAt:b(e.cancelRequestedAt),updatedAt:g(e.updatedAt)})}async function D(e,t){let[n]=await e.db.select({id:m.id}).from(m).where(c(u(e.mine(m.organizationId),l(m.organizationId,``)),l(m.key,t)));if(!n)throw Error(`Unknown app "${t}".`);return n.id}async function O(e,t){let[n]=await e.db.select({id:s.id}).from(s).where(c(e.mine(s.organizationId),l(s.slug,t)));if(!n)throw Error(`Unknown agent "${t}".`);return n.id}async function k(e,t){let[n]=await e.db.select({id:h.id}).from(h).where(c(e.mine(h.organizationId),l(h.key,t)));if(!n)throw Error(`Unknown installation "${t}".`);return n.id}async function A(e,t){let[n]=await e.db.select({id:a.id}).from(a).where(c(e.mine(a.organizationId),l(a.publicId,t)));if(!n)throw Error(`Unknown task "${t}".`);return n.id}function j(e,n){if(n.startsWith(`plain.`))return{iv:`plain`,tag:``,ciphertext:n.slice(6),keyVersion:0};let[r,i,a]=n.split(`.`);if(!r||!i||!a)throw Error(`Invalid encrypted secret`);return{iv:r,tag:i,ciphertext:a,keyVersion:t(e.encryption,n)}}function M(e){return e.iv===`plain`?`plain.${e.ciphertext}`:`${e.iv}.${e.tag}.${e.ciphertext}`}async function N(e,t,r){let[i]=await e.db.insert(n).values({organizationId:e.organizationId,kind:t,...j(e,r)}).returning({id:n.id});return i.id}async function P(e,t,r){await e.db.update(n).set({...j(e,r),updatedAt:e.at()}).where(c(e.mine(n.organizationId),l(n.id,t)))}const F=(e,t)=>`o:${JSON.stringify([e,t])}:`,I=(e,t,n)=>F(e,t)+n;async function L(e,t){let n=await e.execute(t);return Array.isArray(n)?n:n.rows}export{T as C,w as S,p as _,m as a,E as b,y as c,k as d,g as f,d as g,P as h,S as i,v as l,L as m,N as n,D as o,M as p,O as r,_ as s,f as t,h as u,I as v,C as w,A as x,F as y};
@@ -1 +0,0 @@
1
- import{i as e,r as t}from"./cli-DtTdpTy3.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{i,n as a,s as o,t as s}from"./args-DEMOfLz2.js";import{isLocal as c}from"./list-CJhHYVb2.js";import l from"node:path";import u from"node:process";const d={server:i,workspace:o,yes:a};function f(e,t){return c(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,...e.dir&&!e.builtin?{dir:l.relative(t,e.dir)}:{},definition:e.definition,...e.usage?{usage:e.usage}:{}}:{id:e.id,name:e.name,source:e.source,definition:e.definition,...e.settings?{usage:e.settings}:{}}}function p(e){let t=r,{definition:i,usage:a}=e,o=`dir`in e?e.dir:void 0,s=[[`name`,e.name],[`source`,o?`${e.source} (${o})`:e.source],[`description`,i.description],[`permissions`,a?.permissions??i.permissions],[`engine`,a?.engine??i.engine],[`model`,a?.model??i.model],[`effort`,a?.effort??i.effort]],c=Math.max(...s.map(([e])=>e.length))+2;for(let[e,n]of s)n&&u.stdout.write(`${t.dim(e.padEnd(c))}${n}\n`);let l=Object.entries(i.integrations).map(([e,t])=>{let n=a?.integrations?.[e],r=Array.isArray(t.triggers)?t.triggers:Object.keys(t.triggers??{}),i=n?.allowedEvents?r.filter(e=>n.allowedEvents.includes(e)):r,o=n?.allowedTools??t.tools;return{id:e,events:i.join(`, `)||`-`,tools:Array.isArray(o)?o.join(`, `):o??`-`}});u.stdout.write(`\n${n([{header:`integration`,value:e=>e.id,paint:e=>t.cyan(e)},{header:`events`,value:e=>e.events},{header:`tools`,value:e=>e.tools}],l,{style:t,border:!0})}`)}const m=e({name:`agent show`,help:{usage:`coder agent show <id> [--server [url]] [--json] [--cwd <dir>]`,summary:`Describe one agent as it will run here, or its active version on a server: its settings and per-integration triggers and tools.`,flags:[t],examples:[[`coder agent show coder`,`what the built-in agent listens to and may do`]]},options:{...s,...d},args:1,run:async({options:e,args:[t],cwd:n})=>{let{agents:r}=await import(`./agent-D0pQ_ewc.js`).then(e=>e.t);return r.show(t,{...e,cwd:n,organization:e.workspace})},json:(e,{cwd:t})=>f(e,t),print:(e,{cwd:t})=>p(f(e,t))});export{m as commandAgentShow};
@@ -1,4 +0,0 @@
1
- import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,r as n}from"./cli-DtTdpTy3.js";import{p as r,r as i,s as a}from"./output-BKeyLbvt.js";import{i as o,n as s,s as c,t as l}from"./args-DEMOfLz2.js";import{i as u,r as d}from"./result-DtVw6XYk.js";import f from"node:process";const p={server:o,workspace:c,yes:s};function m(t,n,r){let[i,...a]=t,o=a.join(` `).trim();if(!i||!o)throw new e(`invalid-option`,n,{hint:r});return{id:i,text:o}}function h(e,t=!1){let{taskId:n,steered:o}=e;if(o===`queued`){f.stdout.write(`${r.dim(`[coder]`)} follow-up queued for task ${r.cyan(n)}; it runs when the current turn finishes.\n`),t&&f.stdout.write(`\n${r.dim(`[coder] --wait is not available for a queued follow-up.`)}\n\n${a([`Wait in its own background shell, one per task: coder task result ${n} --wait`],r)}\n`);return}if(!t){f.stdout.write(o===`live`?`${r.dim(`[coder]`)} steered follow-up into running task ${r.cyan(n)}.\n`:`${r.dim(`[coder]`)} resumed task ${r.cyan(n)} with the follow-up (same thread, same id).\n`),f.stdout.write(`\n${a([`Wait in its own background shell, one per task: coder task result ${n} --wait`],r)}\n`);return}f.stdout.write(`\n${e.finalMessage||`(no final message)`}\n\n`),f.stderr.write(`${r.dim(`[coder] task=${n} status=${e.status??`unknown`}`)}\n\n${d(n,i)}\n`)}const g=t({name:`task steer`,help:{usage:`coder task steer <task-id> "<follow-up instructions>" [--wait] [--server [url]]`,summary:`Continue a task's thread with new instructions. They are injected into a live Codex or
2
- Claude turn at its next tool boundary and queued across a startup or completion race.
3
- A stopped, finished, or archived task resumes on the same task id. It reuses the
4
- task's engine, model, and permissions unless overridden.`,flags:[[`--wait`,`run in the foreground and block until the answer is ready`],[`--model <alias|slug>`,`override the task's model for this follow-up`],[`--effort <low|medium|high>`,`override the task's reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto`],n],examples:[[`coder task steer task-abc "now add tests"`,`continue that task with a follow-up`]]},options:{...l,model:c,effort:c,permissions:c,wait:s,...p},args:1/0,async run({options:e,args:t}){let{tasks:n}=await import(`./task-DEp3GHwH.js`).then(e=>e.t),{id:r,text:i}=m(t,`Missing task id or follow-up text.`,[`Usage: coder task steer <task-id> "<follow-up>" [--wait]`,`Help: coder task steer --help`]);return n.steer(r,i,{...e,organization:e.workspace})},json(e,{options:t}){let n=e;return t.server!==void 0||!t.wait||n.steered===`queued`?e:{taskId:n.taskId,status:n.status??null,finalMessage:n.finalMessage??null}},print(e,{options:t,args:[n]}){if(t.server===void 0)return h(e,t.wait);if(t.wait)return u(e,r);f.stdout.write(`Steered server task ${r.cyan(n)}.\n`)},exit(e,{options:t}){let n=e;if(t.wait&&(t.server!==void 0||n.steered!==`queued`))return n.status===`completed`?0:1}});export{g as commandSteer,m as idAndText};
@@ -1,42 +0,0 @@
1
- import{dt as e,it as t,rt as n,st as r}from"./store-Cxc2GYyj.js";import{_ as i,a,d as o,h as s,i as c,l,m as u,n as d,p as f,r as p,t as m}from"./schema-DoNO0dPh.js";import{i as h}from"./client-31YzOj-i.js";import{C as g,S as _,_ as v,a as y,b as ee,c as b,d as x,f as S,h as C,i as w,l as T,n as E,o as D,p as O,r as k,s as A,u as j,v as M,w as N,x as P,y as te}from"./shared-D64pQ0XU.js";import{i as ne,t as re}from"./usage-Bw7fQeFC.js";import{isDeepStrictEqual as F}from"node:util";import{and as I,asc as L,desc as ie,eq as R,gt as z,gte as B,ilike as V,inArray as H,isNull as U,lt as W,lte as G,or as K,sql as q}from"drizzle-orm";import{alias as J}from"drizzle-orm/pg-core";function ae(e,t,n){return e.db.transaction(async r=>{let[i]=await r.insert(m).values({organizationId:e.organizationId,slug:t.id,name:t.name,description:t.description??null,source:t.source,repo:t.repo??null,path:t.path??null,currentVersion:0,createdAt:A(t.createdAt),updatedAt:A(t.updatedAt)}).onConflictDoUpdate({target:[m.organizationId,m.slug],set:{slug:t.id}}).returning(),a=w(i),[o]=a.currentVersion?await r.select().from(d).where(I(R(d.agentId,i.id),R(d.version,a.currentVersion))):[],s=o&&N(o,t.id),c=!!(s&&F(s.definition,n.definition)&&s.systemPrompt===n.systemPrompt&&F(s.files,n.files)),l=c?s:{...n,version:a.currentVersion+1},u={...t,currentVersion:l.version,createdAt:a.createdAt,...a.settings?{settings:a.settings}:{},updatedAt:a.updatedAt};if(c&&F(u,a))return{record:a,version:l,unchanged:c};u={...u,updatedAt:t.updatedAt};let f=c?q``:q`with published as (
2
- insert into ${d} (agent_id, version, definition, system_prompt, files, commit, imported_from, created_at)
3
- values (${i.id}, ${l.version}, ${JSON.stringify(l.definition)}::jsonb, ${l.systemPrompt},
4
- ${l.files?JSON.stringify(l.files):null}::jsonb, ${l.commit??null}, ${l.importedFrom}, ${A(l.createdAt).toISOString()}::timestamptz)
5
- returning version
6
- )`;return await r.execute(q`${f} update ${m} set
7
- name = ${u.name}, description = ${u.description??null}, source = ${u.source},
8
- repo = ${u.repo??null}, path = ${u.path??null},
9
- current_version = ${c?q`${l.version}`:q`(select version from published)`}, updated_at = ${A(u.updatedAt).toISOString()}::timestamptz
10
- where id = ${i.id}`),{record:u,version:l,unchanged:c}})}function oe(e){let t=m;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(I(e.mine(t.organizationId),n)).orderBy(L(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:w(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,settings:r.settings??null,createdAt:A(r.createdAt),updatedAt:A(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.slug,n)))}}}async function Y(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(d).values({agentId:await k(e,t.slice(0,r)),version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:A(n.createdAt)}).onConflictDoNothing().returning({id:d.id})).length>0}function se(e){let t=d,n=q`${m.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>I(R(m.slug,e),n===void 0?void 0:r?R(t.version,n):z(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:m.slug,key:n}).from(t).innerJoin(m,R(m.id,t.agentId)).where(I(e.mine(m.organizationId),r)).orderBy(L(m.slug),L(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:N(e,t)}))},put:async(t,n)=>{await Y(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=await k(e,n.slice(0,r)).catch(()=>void 0);i!==void 0&&await e.db.delete(t).where(I(R(t.agentId,i),R(t.version,Number(n.slice(r+1)))))}}}const X=(e,t)=>b({id:e.key,integration:e.integration,agent:e.agent,name:e.name,agentsRepo:e.agentsRepo,branch:e.branch,builtin:e.organizationId===``||void 0,credentials:O(t),createdAt:S(e.createdAt)});function ce(e){let t=y;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:o}).from(t).innerJoin(o,R(o.id,t.credentialsSecretId)).where(I(e.mine(t.organizationId),n)).orderBy(L(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:e.key,value:X(e,t)}))},put:(n,r)=>e.transaction(`app:${n}`,async e=>{let[i]=await e.db.select({secretId:t.credentialsSecretId,sealed:o}).from(t).innerJoin(o,R(o.id,t.credentialsSecretId)).where(I(e.mine(t.organizationId),R(t.key,n))),a=i?.secretId??await E(e,`app`,r.credentials);i&&O(i.sealed)!==r.credentials&&await C(e,a,r.credentials);let s={integration:r.integration,platformAppId:n.slice(n.indexOf(`:`)+1),agent:r.agent,name:r.name,agentsRepo:r.agentsRepo??null,branch:r.branch??null,credentialsSecretId:a,createdAt:A(r.createdAt),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...s}).onConflictDoUpdate({target:[t.organizationId,t.key],set:s})}),delete:n=>e.transaction(`app:${n}`,async e=>{let[r]=await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.key,n))).returning({secretId:t.credentialsSecretId});r&&await e.db.delete(o).where(R(o.id,r.secretId))})}}function Z(e,t,n){return b({id:e.key,app:t.key,integration:t.integration,account:e.account,token:n?O(n):void 0,installer:e.installer,connections:e.connections,settings:e.settings,createdAt:S(e.createdAt),deletedAt:e.deletedAt?S(e.deletedAt):void 0})}function le(e){let t=j;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,app:{key:y.key,integration:y.integration},sealed:o}).from(t).innerJoin(y,R(y.id,t.appId)).leftJoin(o,R(o.id,t.tokenSecretId)).where(I(e.mine(t.organizationId),n)).orderBy(L(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,app:t,sealed:n})=>({id:e.key,value:Z(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({secretId:t.tokenSecretId,organizationId:t.organizationId,sealed:o}).from(t).leftJoin(o,R(o.id,t.tokenSecretId)).where(R(t.key,n)),a=()=>Error(`Installation "${n}" belongs to another workspace.`);if(i&&i.organizationId!==e.organizationId)throw a();let s=i?.secretId??null;r.token&&(s?(!i?.sealed||O(i.sealed)!==r.token)&&await C(e,s,r.token):s=await E(e,`installation`,r.token));let c={appId:await D(e,r.app),platformInstallId:n.slice(r.app.length+1),account:r.account,tokenSecretId:r.token?s:null,installer:r.installer??null,connections:r.connections??null,settings:r.settings??null,createdAt:A(r.createdAt),updatedAt:e.at(),deletedAt:r.deletedAt===void 0?null:A(r.deletedAt)},[l]=await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:t.key,set:c,setWhere:e.mine(t.organizationId)}).returning({id:t.id});if(!l)throw a();!r.token&&i?.secretId&&await e.db.delete(o).where(R(o.id,i.secretId))}),delete:n=>e.transaction(`installation:${n}`,async e=>{let[r]=await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.key,n))).returning({secretId:t.tokenSecretId});r?.secretId&&await e.db.delete(o).where(R(o.id,r.secretId))})}}async function ue(e,t){let n=J(j,`locked`),[r]=await e.db.select({row:n,app:{key:y.key,integration:y.integration},sealed:o}).from(n).innerJoin(y,R(y.id,n.appId)).leftJoin(o,R(o.id,n.tokenSecretId)).where(I(e.mine(n.organizationId),R(n.key,t))).for(`update`,{of:n});return r&&Z(r.row,r.app,r.sealed)}const Q=(e,t)=>b({iv:t.iv,tag:t.tag,ciphertext:t.ciphertext,engine:e.engine,owner:e.owner,account:e.account,isDefault:e.isDefault,createdAt:S(e.createdAt)}),de=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function fe(e,t){let n=a;return(await e.db.select({row:n,sealed:o}).from(n).innerJoin(o,R(o.id,n.secretId)).where(I(e.mine(n.organizationId),t?R(n.owner,t):U(n.owner))).orderBy(L(n.label)).for(`update`)).map(({row:e,sealed:t})=>({id:r(e.owner??void 0,e.label),value:Q(e,t),row:e,sealed:t}))}async function pe(t,n,r,i){let s=a;if(!i){if(!n)return;await t.db.delete(s).where(R(s.id,n.row.id)),await t.db.delete(o).where(R(o.id,n.row.secretId));return}let c=O(i),l={engine:i.engine,isDefault:i.isDefault??!1,account:i.account??null,createdAt:i.createdAt===void 0?n?.row.createdAt??t.at():A(i.createdAt),updatedAt:t.at()};if(n){O(n.sealed)!==c&&await C(t,n.row.secretId,c),await t.db.update(s).set(l).where(R(s.id,n.row.id));return}let{owner:u,label:d}=e(r);await t.db.insert(s).values({organizationId:t.organizationId,owner:u??null,label:d,secretId:await E(t,`engine`,c),...l})}function me(t){let n=a,i=(n,r)=>{let{owner:i}=e(n);return t.transaction(de(t,i),async e=>pe(e,(await fe(e,i)).find(e=>e.id===n),n,r))};return{key:q`coalesce(${n.owner} || '/', '') || ${n.label}`,rows:async(e,i)=>{let a=t.db.select({row:n,sealed:o}).from(n).innerJoin(o,R(o.id,n.secretId)).where(I(t.mine(n.organizationId),e)).orderBy(L(n.owner),L(n.label));return(await(i===void 0?a:a.limit(i))).map(({row:e,sealed:t})=>({id:r(e.owner??void 0,e.label),value:Q(e,t)}))},put:(e,t)=>i(e,t),delete:e=>i(e,null)}}function $(e,t){let n=c,r=te(e.organizationId,t),i=n.key;return{key:i,where:e=>I(e.id===void 0?q`${n.key} like ${`${T(r+(e.prefix??``))}%`}`:R(n.key,r+e.id),e.after===void 0?void 0:z(n.key,r+e.after)),rows:async(t,a)=>{let o=e.db.select({id:i,value:q`${n.value}`}).from(n).where(I(q`${n.key} like ${`${T(r)}%`}`,e.live(n.expiresAt),t)).orderBy(L(n.key));return(await(a===void 0?o:o.limit(a))).map(e=>({id:e.id.slice(r.length),value:e.value}))},put:async(i,a,o)=>{let s=t===`login`?o??e.at():o;await e.db.insert(n).values({key:r+(t===`config`?`workspace`:i),value:a,expiresAt:t===`config`?null:s}).onConflictDoUpdate({target:n.key,set:{value:a,expiresAt:t===`config`?null:t===`login`&&!o?q`${n.expiresAt}`:s}})},delete:async i=>{await e.db.delete(n).where(R(n.key,r+(t===`config`?`workspace`:i)))}}}function he(e){let t=l,n=n=>I(e.mine(t.organizationId),R(t.publicId,n));return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:o}).from(t).innerJoin(o,R(o.id,t.secretId)).where(I(e.mine(t.organizationId),n)).orderBy(L(t.publicId));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:e.publicId,value:b({name:e.name,owner:e.owner,kind:e.kind,scope:e.scope,config:e.config,createdBy:e.createdBy,default:e.isDefault,lastSeen:e.lastSeen?S(e.lastSeen):void 0,secret:O(t),createdAt:S(e.createdAt),updatedAt:S(e.updatedAt)})}))},put:(r,i)=>e.transaction(`runner:${e.organizationId}:${r}`,async e=>{let[a]=await e.db.select({id:t.id,secretId:t.secretId,sealed:o}).from(t).innerJoin(o,R(o.id,t.secretId)).where(n(r)),s={owner:i.owner??null,name:i.name,kind:i.kind,scope:i.scope,config:i.config,createdBy:i.createdBy??null,isDefault:i.default,lastSeen:i.lastSeen===void 0?null:A(i.lastSeen),updatedAt:A(i.updatedAt)};if(a){O(a.sealed)!==i.secret&&await C(e,a.secretId,i.secret),await e.db.update(t).set(s).where(R(t.id,a.id));return}await e.db.insert(t).values({organizationId:e.organizationId,publicId:r,secretId:await E(e,`runner`,i.secret),createdAt:A(i.createdAt),...s})}),delete:r=>e.transaction(`runner:${e.organizationId}:${r}`,async e=>{let[i]=await e.db.delete(t).where(n(r)).returning({secretId:t.secretId});i&&await e.db.delete(o).where(R(o.id,i.secretId))})}}function ge(e){let t=f;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(I(e.mine(t.organizationId),n)).orderBy(L(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:ee(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,s={source:o.source,status:r.status,agent:o.agent,flow:o.flow,runner:o.runner,permissions:o.permissions??null,appId:o.event?await D(e,o.event.appId):null,installationId:o.event?await x(e,`${o.event.appId}:${o.event.installationId}`):null,event:o.event??null,prompt:o.prompt??null,args:o.args??null,mcp:o.mcp??null,author:o.author??null,definition:o.definition,credential:o.credential??null,requester:o.requester??null,runnerId:o.runnerId??null,usage:o.usage??null,tools:o.tools,toolScopes:o.toolScopes??null,context:o.context??null,files:o.files??null,result:r.result??null,error:r.error??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:A(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,archivedAt:r.archivedAt===void 0?null:A(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:A(r.createdAt),startedAt:r.startedAt===void 0?null:A(r.startedAt),finishedAt:r.finishedAt===void 0?null:A(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:A(r.cancelRequestedAt),updatedAt:A(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...s}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...s,archivedAt:a.unarchive?s.archivedAt:q`coalesce(${t.archivedAt}, ${s.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(I(e.mine(t.organizationId),R(t.publicId,n)))}}}function _e(e){let t=s,n=q`${f.publicId} || ':' || lpad(${t.seq}::text, 6, '0')`;return{key:n,split:(n,r,i)=>I(e.mine(f.organizationId),R(f.publicId,n),r===void 0?void 0:i?R(t.seq,r):z(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(f,R(f.id,t.taskId)).where(I(e.mine(t.organizationId),r)).orderBy(L(f.publicId),L(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{at:S(e.at),level:e.level,line:e.line}}))},put:async(n,r)=>{let i=n.lastIndexOf(`:`),a={at:A(r.at),level:r.level,line:r.line};await e.db.insert(t).values({organizationId:e.organizationId,taskId:await P(e,n.slice(0,i)),seq:Number(n.slice(i+1)),...a}).onConflictDoUpdate({target:[t.taskId,t.seq],set:a})},delete:async n=>{let r=n.lastIndexOf(`:`),i=await P(e,n.slice(0,r)).catch(()=>void 0);i!==void 0&&await e.db.delete(t).where(I(R(t.taskId,i),R(t.seq,Number(n.slice(r+1)))))}}}function ve(e){let t=u,n=q`${f.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>I(e.mine(f.organizationId),R(f.publicId,n),r===void 0?void 0:i?R(t.seq,r):z(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(f,R(f.id,t.taskId)).where(I(e.mine(t.organizationId),r)).orderBy(L(f.publicId),L(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:S(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{let i=n.lastIndexOf(`:`);await e.db.insert(t).values({organizationId:e.organizationId,taskId:await P(e,n.slice(0,i)),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:A(r.at)})},delete:async n=>{let r=n.lastIndexOf(`:`),i=await P(e,n.slice(0,r)).catch(()=>void 0);i!==void 0&&await e.db.delete(t).where(I(R(t.taskId,i),R(t.seq,Number(n.slice(r+1)))))}}}function ye(e){let t=i;return{key:f.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,taskId:f.publicId,installationId:j.key}).from(t).innerJoin(f,R(f.id,t.taskId)).leftJoin(j,R(j.id,t.installationId)).where(I(e.mine(t.organizationId),n)).orderBy(L(f.publicId));return(await(r===void 0?i:i.limit(r))).map(({row:e,taskId:t,installationId:n})=>({id:t,value:b({installationId:n,taskId:t,agent:e.agent,target:e.target,engine:e.engine,model:e.model,credential:e.credential,runnerElapsedMs:e.runnerMs,tokens:e.tokens,at:S(e.at)})}))},put:async(n,r)=>{let i=await P(e,n),a={installationId:r.installationId?await x(e,r.installationId):null,agent:r.agent,target:r.target,engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokens:r.tokens??null,at:A(r.at),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,taskId:i,...a}).onConflictDoUpdate({target:t.taskId,set:a})},delete:async n=>{let r=await P(e,n).catch(()=>void 0);r!==void 0&&await e.db.delete(t).where(R(t.taskId,r))}}}var be=class u{db;organizationId;now;encryption;publishAgent=(e,t)=>ae(this,e,t);kinds;constructor(e,t,n=Date.now,r={}){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.kinds={agent:oe(this),agentversion:se(this),app:ce(this),installation:le(this),credential:me(this),task:ge(this),tasklog:_e(this),inbox:ve(this),usage:ye(this),delivery:$(this,`delivery`),note:$(this,`note`),login:$(this,`login`),config:$(this,`config`),runner:he(this),snapshot:$(this,`snapshot`)}}static async webhookTarget(e,t,n){let r=J(o,`installation_secret`),[i]=await h(e,()=>e.select({app:y,credentials:o,installation:j,token:r}).from(y).innerJoin(o,R(o.id,y.credentialsSecretId)).leftJoin(j,I(R(j.appId,y.id),R(j.key,n??``),U(j.deletedAt))).leftJoin(r,R(r.id,j.tokenSecretId)).where(I(R(y.integration,t.slice(0,t.indexOf(`:`))),R(y.platformAppId,t.slice(t.indexOf(`:`)+1)))));return i&&{organizationId:i.app.organizationId,app:X(i.app,i.credentials),...i.installation?{bound:{organizationId:i.installation.organizationId,installation:Z(i.installation,i.app,i.token)}}:{}}}static async appRecord(e,t){let[n]=await h(e,()=>e.select({row:y,sealed:o}).from(y).innerJoin(o,R(o.id,y.credentialsSecretId)).where(I(R(y.integration,t.slice(0,t.indexOf(`:`))),R(y.platformAppId,t.slice(t.indexOf(`:`)+1)))));return n&&{organizationId:n.row.organizationId,app:X(n.row,n.sealed)}}static async installationOrganization(e,t){let[n]=await h(e,()=>e.select({organizationId:j.organizationId}).from(j).where(R(j.key,t)));return n?.organizationId}static async installations(e,t){return h(e,()=>e.select({key:j.key,organizationId:j.organizationId}).from(j).where(I(q`${j.key} like ${`${T(t)}:%`}`,U(j.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await h(e,()=>e.select({organizationId:f.organizationId}).from(f).where(I(R(f.publicId,t),R(f.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await h(this.db,()=>this.db.select({row:y,sealed:o}).from(y).innerJoin(o,R(o.id,y.credentialsSecretId)).where(I(H(y.organizationId,[this.organizationId,``]),H(y.key,e))))).map(e=>({id:e.row.key,value:X(e.row,e.sealed)})):[]}async listCredentials(e){let t=a;return(await h(this.db,()=>this.db.select({row:t,sealed:o}).from(t).innerJoin(o,R(o.id,t.secretId)).where(I(this.mine(t.organizationId),e.owner?K(U(t.owner),R(t.owner,e.owner)):U(t.owner),e.engine?R(t.engine,e.engine):void 0)).orderBy(L(t.owner),L(t.label)))).map(({row:e,sealed:t})=>({id:r(e.owner??void 0,e.label),value:Q(e,t)}))}async updateMetadata(e,t,n){let r=e===`app`?y:e===`installation`?j:l,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`connections`,`settings`,`deletedAt`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?A(t):t])),o=e===`runner`?l.publicId:e===`app`?y.key:j.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?A(n.updatedAt):this.at()}).where(I(this.mine(r.organizationId),R(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){return this.transaction(`app:${e}`,t)}withConfigLock(e){return this.db.transaction(async t=>{let n=M(this.organizationId,`config`,`workspace`);return await t.insert(c).values({key:n,value:{},expiresAt:null}).onConflictDoNothing(),await t.select({key:c.key}).from(c).where(R(c.key,n)).for(`update`),e(new u(t,this.organizationId,this.now,this.encryption))})}transaction(e,t){return this.db.transaction(async n=>(await n.execute(q`select pg_advisory_xact_lock(3, hashtext(${e}))`),t(new u(n,this.organizationId,this.now,this.encryption))))}withCredential(t,r,i){if(t===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>n(e,`runner`,r,i));if(t===`installation`)return this.transaction(`installation:${r}`,async e=>{let t=await ue(e,r),n=await i(t,t?[{id:r,value:t}]:[],e);for(let t of n??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!n?.length});let{owner:a}=e(r);return this.transaction(de(this,a),async e=>{let t=await fe(e,a),n=t.map(({id:e,value:t})=>({id:e,value:t})),o=await i(n.find(e=>e.id===r)?.value,n,e);for(let n of o??[])await pe(e,t.find(e=>e.id===n.id),n.id,n.value);return!!o?.length})}at(){return A(this.now())}live(e){return K(U(e),z(e,this.at()))}mine(e){return R(e,this.organizationId)}async get(e,t){let n=this.kinds[e],r=v(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):q`${n.key} = ${t}`,a=(await h(this.db,async()=>await n.rows(i,1)))[0]?.value;return a||e!==`app`||this.organizationId===``?a:new u(this.db,``,this.now,this.encryption).get(e,t)}async patchLogin(e,t,n={}){let[r]=await this.db.update(c).set({value:q`jsonb_strip_nulls(${c.value} || ${JSON.stringify(t)}::jsonb)`}).where(I(R(c.key,M(this.organizationId,`login`,e)),this.live(c.expiresAt),q`(${c.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?H(q`${c.value}->>${e}`,t):q`${c.value}->>${e} = ${t}`))).returning({value:q`${c.value}`});return r?.value}completeLogin(e,n,r,i){return t(this,e,n,r,i)}async taskInputs(e,t,n){let i=q`coalesce(${n??null}, ${m.settings}->>'engine', ${d.definition}->>'engine')`,o=this.db.select({owner:a.owner,label:a.label}).from(a).where(I(this.mine(a.organizationId),t?K(U(a.owner),R(a.owner,t)):U(a.owner),q`(${i} is null or ${a.engine} = ${i})`)).orderBy(q`${a.owner} is not null desc`,ie(a.isDefault),L(a.label)).limit(1).as(`selected_credential`),[s]=await h(this.db,()=>this.db.select({record:m,version:d,credentialLabel:o.label,credentialOwner:o.owner}).from(m).leftJoin(d,I(R(d.agentId,m.id),R(d.version,m.currentVersion))).leftJoinLateral(o,q`true`).where(I(this.mine(m.organizationId),R(m.slug,e))));return s?{record:w(s.record),...s.version?{version:N(s.version,s.record.slug)}:{},...s.credentialLabel?{credential:r(s.credentialOwner??void 0,s.credentialLabel)}:{}}:{}}async listAgentsWithVersions(e){return(await h(this.db,()=>this.db.select({record:m,version:d}).from(m).leftJoin(d,I(R(d.agentId,m.id),R(d.version,m.currentVersion))).where(I(this.mine(m.organizationId),e===void 0?void 0:R(m.slug,e))).orderBy(L(m.slug)))).map(({record:e,version:t})=>({record:w(e),...t?{version:N(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${T(e.q)}%`:void 0,n=this.db.select({record:m,version:_}).from(m).leftJoin(d,I(R(d.agentId,m.id),R(d.version,m.currentVersion))).where(I(this.mine(m.organizationId),e.slug===void 0?void 0:R(m.slug,e.slug),e.after?z(m.slug,e.after):void 0,e.source?R(m.source,e.source):void 0,t?K(V(m.slug,t),V(m.name,t),V(m.description,t),V(m.repo,t)):void 0,e.platform?q`${d.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(L(m.slug));return(await h(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({record:e,version:t})=>({record:w(e),...t?{version:g(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:_}).from(d).innerJoin(m,R(m.id,d.agentId)).where(I(this.mine(m.organizationId),R(m.slug,e),n===void 0?t===void 0?void 0:G(d.version,m.currentVersion):W(d.version,n),t===void 0?void 0:B(d.version,n===void 0?q`${m.currentVersion} + 1 - ${t}`:n-t))).orderBy(L(d.version));return(await h(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:g(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:A(this.now()+r.ttlMs);await this.kinds[e].put(t,n,i,r)}async putMany(e,t){if(!t.length)return;if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value)));return}let n=t[0].id.lastIndexOf(`:`),r=t[0].id.slice(0,n),i=t.map(e=>{let t=e.id.lastIndexOf(`:`),n=e.value;if(e.id.slice(0,t)!==r)throw Error(`A log batch must belong to one task`);return{organizationId:this.organizationId,taskId:q`(select ${f.id} from ${f} where ${f.organizationId} = ${this.organizationId} and ${f.publicId} = ${r})`,seq:Number(e.id.slice(t+1)),at:A(n.at),level:n.level,line:n.line}});await this.db.insert(s).values(i).onConflictDoUpdate({target:[s.taskId,s.seq],set:{at:q`excluded.at`,level:q`excluded.level`,line:q`excluded.line`}})}async list(e,t={}){let n=this.kinds[e];if(n.where)return h(this.db,async()=>await n.rows(n.where(t),t.limit));let r=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,i=t.after===void 0?void 0:v(t.after);if(n.split&&r&&!r.includes(`:`)&&(t.after===void 0||i?.[0]===r))return h(this.db,async()=>await n.rows(n.split(r,i?.[1]),t.limit));let a=t.prefix?q`${n.key} like ${`${T(t.prefix)}%`}`:void 0,o=t.after?q`${n.key} > ${t.after}`:void 0,s=a&&o?I(a,o):a??o;return h(this.db,async()=>await n.rows(s,t.limit))}async delete(e,t){await this.kinds[e].delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Y(this,t,n);if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:A(this.now()+r.ttlMs);return(await this.db.insert(c).values({key:M(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:c.key,set:{value:n,expiresAt:i},setWhere:G(c.expiresAt,this.at())}).returning({key:c.key})).length>0}async claimDeliveryLease(e,t,n){let r=q`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(c).values({key:M(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:c.key,set:{value:q`${c.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:q`${c.expiresAt} <= clock_timestamp()`}).returning({value:c.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=I(R(c.key,M(this.organizationId,`delivery`,e)),q`${c.value}->>'owner' = ${t} and ${c.expiresAt} > clock_timestamp()`),a=q`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(c).where(i).returning({key:c.key}):await this.db.update(c).set({value:n.next===void 0?n:q`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:c.key})).length>0}async updateDelivery(e,t,n,r={}){let i=I(R(c.key,M(this.organizationId,`delivery`,e)),q`${c.value}->>'owner' = ${t}`,this.live(c.expiresAt));return(n===void 0?await this.db.delete(c).where(i).returning({key:c.key}):await this.db.update(c).set({value:n,expiresAt:r.ttlMs===void 0?null:A(this.now()+r.ttlMs)}).where(i).returning({key:c.key})).length>0}async take(e,t){return e===`delivery`?(await this.db.delete(c).where(I(R(c.key,M(this.organizationId,e,t)),this.live(c.expiresAt))).returning({key:c.key})).length>0:await this.get(e,t)!==void 0&&(await this.delete(e,t),!0)}async usageTotals(e){let t=i,n=e.by===`agent`?q`${t.agent}`:e.by===`engine`?q`coalesce(${t.engine}, 'unknown')`:e.by===`installation`?q`coalesce(${j.key}, 'none')`:q`to_char(${t.at} at time zone ${ne(e.tz)}, 'YYYY-MM-DD')`,r=I(this.mine(t.organizationId),B(t.at,A(e.since)),e.until===void 0?void 0:W(t.at,A(e.until)),e.agent?R(t.agent,e.agent):void 0),a=q`coalesce(
11
- case when jsonb_typeof(${t.tokens} -> 'total') = 'number' then (${t.tokens} ->> 'total')::numeric end,
12
- (select sum((v #>> '{}')::numeric)
13
- from jsonb_path_query(coalesce(${t.tokens}, 'null'::jsonb), 'strict $.**') v
14
- where jsonb_typeof(v) = 'number')
15
- )`,o={tasks:q`count(*)`,runnerMs:q`coalesce(sum(${t.runnerMs}), 0)`,tokenCount:q`coalesce(sum(${a}), 0)`},s=e.top?q`case when ${t.agent} in (
16
- select ${t.agent} from ${t} where ${r} group by ${t.agent}
17
- order by ${o[e.top.by]} desc, ${t.agent} limit ${e.top.count}
18
- ) then ${t.agent} end`:e.parts?.length?q`case when ${H(t.agent,e.parts)} then ${t.agent} end`:q`null::text`,c=e.by===`installation`?q`left join ${j} on ${j.id} = ${t.installationId}`:q``,l=await h(this.db,()=>this.db.execute(q`
19
- select ${n} as key, ${s} as part, ${o.tasks}::int as tasks,
20
- ${o.runnerMs}::float8 as runner_ms,
21
- ${o.tokenCount}::float8 as token_count
22
- from ${t} ${c}
23
- where ${r}
24
- group by 1, 2
25
- `)),u=Array.isArray(l)?l:l.rows,d=new Map;for(let e of u){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=d.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};re(n,t),e.part&&((n.parts??={})[e.part]=t),d.set(e.key,n)}return[...d.values()].sort((e,t)=>e.key.localeCompare(t.key))}async sweep(e=1e3){if(!Number.isInteger(e)||e<1)throw Error(`Sweep batch must be positive`);let t=this.at().toISOString();await this.db.execute(q`
26
- with expired_state as (
27
- delete from ${c} where expires_at <= clock_timestamp() and key in (
28
- select key from ${c} where expires_at <= clock_timestamp() order by expires_at limit ${e}
29
- )
30
- ), lists as (
31
- select expired.key from ${p} as expired
32
- where expired.key like 'k:%' and expired.expires_at <= ${t}::timestamptz
33
- and not exists (select 1 from ${p} as newer where newer.key = expired.key and newer.seq > expired.seq)
34
- order by expired.expires_at limit ${e}
35
- ), expired_items as (
36
- select key, seq from ${p} where key in (select key from lists) order by seq limit ${e}
37
- ), expired_queue as (
38
- select key, seq from ${p} where key like 'q:%' and expires_at <= ${t}::timestamptz order by expires_at limit ${e}
39
- )
40
- delete from ${p} where (key, seq) in (
41
- select key, seq from expired_items union all select key, seq from expired_queue
42
- )`)}};export{be as DrizzleStore};