@wular/coder 0.5.0 → 0.5.1

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 (266) hide show
  1. package/dist/{actions-CkMAM1Km.js → actions-DO8MvHwc.js} +2 -2
  2. package/dist/{agent-Bi5nbUhA.js → agent-Cgala63h.js} +1 -1
  3. package/dist/{app-server-BTpa5GBV.js → app-server-dnlLhhZb.js} +1 -1
  4. package/dist/{approvals-CRwkc9vB.js → approvals-C8XV7CK2.js} +1 -1
  5. package/dist/apps-BORri-28.js +18 -0
  6. package/dist/async-BS9tyhva.js +3 -0
  7. package/dist/{auth-oCvlHitk.js → auth-C16ylySv.js} +1 -1
  8. package/dist/builtin/coder/system.md +6 -3
  9. package/dist/{chat-4AiZEqKh.js → chat-czruXAt3.js} +1 -1
  10. package/dist/cli.js +3 -3
  11. package/dist/{cmd-Cu3OquA_.js → cmd-C1gHyVG7.js} +34 -34
  12. package/dist/{config-D_RuO6gX.js → config-_32PHl9g.js} +1 -1
  13. package/dist/{connection-BXjn7gCC.js → connection-CgA5_NJ7.js} +1 -1
  14. package/dist/{connections-Cswv7r8Z.js → connections-B90TemYf.js} +1 -1
  15. package/dist/{context-CFrDYenS.js → context-C1XBbfEL.js} +1 -1
  16. package/dist/dash/standalone/server/build-index.json +1 -1
  17. package/dist/dash/standalone/server/manifest.json +1391 -1391
  18. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.54c45900f2153d34.js → index.91e126d7a389d4bd.js} +0 -3
  19. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.252f972b42c690e2.js → load.858c062c7891a2c1.js} +2 -2
  20. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.11efd0e175db9053.js → page.9375ab741dc9791e.js} +3 -3
  21. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.59ae138dc182d7c3.js → notify.c36570a56d279ce2.js} +1 -1
  22. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.e9386951cedea737.js → page.13fdd9cc55ad3a52.js} +3 -3
  23. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.713d3ec10951fde5.js → sign-out.38a7f39cddc670f7.js} +1 -1
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f989d6f2d9ece6e4.js → agents-grid.2385ffa8fdad08d6.js} +1 -1
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.0f88720e52db99a2.js → page.5ca6921e50484f8c.js} +6 -6
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.8d2f0997462fc958.js → layout.afc4a8a5a8360975.js} +7 -7
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.bc93891522c8120d.js → page.ba65063a1aa99a62.js} +7 -7
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.cf5cf9afe38ab0e4.js → page.03c5e72b0fe50ba9.js} +11 -11
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.c44c7df7841719f2.js → platform-actions.7c8c75bd0c05df4a.js} +3 -3
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-step.6e90cbfe308f28a0.js → platform-step.d6a980d1181dc940.js} +1 -1
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.61de585104c2be10.js → agent-settings-form.b5299f5130a4e8af.js} +16 -17
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.4d06f759984a63b3.js → page.fad77cea17947d47.js} +8 -9
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.ea2925eab1d2e594.js → loading.4120e6979eaed441.js} +1 -1
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.fb069bf82b727d27.js → page.474b3524d5ea53b7.js} +1 -1
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.0a472a0e269b8c01.js → page.7868a07efcaa26f4.js} +3 -3
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.7ef7dfd5d8f5de43.js → versions-list.ba93a53773cab8a8.js} +1 -1
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.007326a04f05d46c.js → loading.6e53829bd1f3021d.js} +1 -1
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.a26aa7bc6ab655f0.js → page.5798ede8ba8ace97.js} +6 -6
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{app-cards.361918fe58349aa1.js → app-cards.55778a4b3177846d.js} +2 -2
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.3f60cf67517d0d31.js → page.ce391cad0d78795f.js} +3 -3
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.ffbf9a8b8b2fbde7.js → agent-toggle.0cec822c6099f058.js} +2 -2
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.0ae015a4fbe6321e.js → hero.7151c467e7ecf6a5.js} +1 -1
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.9abe365f0098d358.js → connect-repositories.4e121d31ed0cfe02.js} +1 -1
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.6548f8f757578f90.js → editor.f314d92af0bb33b0.js} +8 -8
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.577b1d84c7ab84e1.js → import-picker.11028d5329ad537b.js} +3 -3
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.2b326d00ccef5544.js → page.1476d31e4554e88b.js} +4 -4
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.45a09107b19f0a7e.js → layout.150d950d191db477.js} +3 -3
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.f8d679f2d06b0ebc.js → operator-apps.3e72de86b86a7338.js} +6 -6
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.5aa3ddc669366703.js → page.6a4be3b1a473ff8c.js} +5 -5
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.5a5188f0fc75dcd2.js → page.262ed73437c17872.js} +1 -1
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{advanced-list.73cdadb2968a39d2.js → advanced-list.7180570379e2625c.js} +1 -1
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.353ec01fbb814f78.js → connection-add.632b1847c16ecd42.js} +4 -4
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.cf4061ae909272c3.js → connections-list.4378ae707b2092ed.js} +5 -5
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.fc4cff0289267551.js → credentials-list.e47897acb6867df8.js} +4 -4
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.db01de2581ac65f3.js → credentials.6bd06f96afbe7329.js} +8 -8
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.e7d6a422f6a869ea.js → list.38e70272eeb98cd0.js} +3 -3
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.acb92b39cab1d11c.js → models-list.a08cd37d0f7ff86c.js} +6 -6
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.95fe939e36e5be55.js → page.f096b5a9ac419326.js} +13 -13
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.5764eac3307d67cc.js → runners-list.0df1f9329df1b67d.js} +6 -6
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.d316bb157f747f6c.js → secrets-list.6d2f56fa7d6fcab0.js} +4 -4
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.4eb70f2de8674f93.js → layout.0fd865c865e5bab4.js} +1 -1
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.dc630cb6e2cbf83a.js → model-options.0d6077fe68db3af9.js} +2 -5
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-pick.a143e77f5ed5f9d3.js → model-pick.695538b2edf9dd15.js} +1 -1
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.70cad0e981c33fa5.js → page.c57b81c2197cce0f.js} +1 -1
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.18bd2b92cd23b73f.js → create-link.60aadbe43ea1e39c.js} +3 -3
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.95f7be49430248eb.js → outcome-toast.e2b9ef0344b1a1a2.js} +1 -1
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.e39ee9236664d043.js → page.c456ad99c8a9f875.js} +4 -4
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.441e82ab00344fb2.js → activity.2ec05d78d609b7b2.js} +1 -1
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.24e121ea6eb578ba.js → page.578be2f6c89fcba0.js} +6 -6
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.4a4052a38db4bad3.js → task-actions.d131453dd2a423c3.js} +4 -4
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.0cd3ec2655f44cc7.js → task-view.3d72a4ecd2b3826e.js} +7 -53
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.73225456d60d63e3.js → composer-data.c16854be11a561e4.js} +1 -1
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.ee326fbf5e526fb1.js → composer.97be3e67214889c1.js} +24 -82
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.7607998094780fdd.js → pending-approvals.9175908da02960e1.js} +1 -1
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.e486cbd16ea3e963.js → tasks-list.028798c79227a366.js} +8 -8
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.01510523d1556d59.js → tasks-section.9a9d13057b326f25.js} +4 -4
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.ede64f82388f9480.js → page.045c6db0c56975b2.js} +3 -3
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.0499098badd3f5f8.js → page.938d29ff7edb678d.js} +2 -2
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e3800e736f832124.js → stream.2cdb8eabd8f6df70.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.3b7eeee29fc327de.js → task-toasts.8733901ca0e4c246.js} +1 -1
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.f22057e7dfac40fe.js → action.56cea462eb725c39.js} +1 -1
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.c8d7efefb6194d7d.js → client.685154f230716834.js} +1 -1
  83. package/dist/dash/standalone/static/assets/chunks/{advanced-list-850a950afe4f6996.js → advanced-list-b75a9c2bd11026de.js} +1 -1
  84. package/dist/dash/standalone/static/assets/chunks/{agent-pills-9f6fa120182db948.js → agent-pills-54564413a57d7fa7.js} +1 -1
  85. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-55d294dad2ce5a0d.js +1 -0
  86. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-521136f20a71400d.js → agent-toggle-b5dcc4ea6292fb3d.js} +1 -1
  87. package/dist/dash/standalone/static/assets/chunks/{agents-grid-bcd13cd7a46224a6.js → agents-grid-69461c53abbba433.js} +1 -1
  88. package/dist/dash/standalone/static/assets/chunks/{back-2d67134b122334f4.js → back-ba5e4340a9f8bbd2.js} +1 -1
  89. package/dist/dash/standalone/static/assets/chunks/{chain-hint-53675e299a865420.js → chain-hint-491eb09a20a15702.js} +1 -1
  90. package/dist/dash/standalone/static/assets/chunks/{combo-cb2c62fe580a8903.js → combo-6df61e8a1cc31037.js} +1 -1
  91. package/dist/dash/standalone/static/assets/chunks/composer-198b844da57b82a3.js +1 -0
  92. package/dist/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +1 -0
  93. package/dist/dash/standalone/static/assets/chunks/{composer-data-890f71bade4f0616.js → composer-data-b05f3d93fdc472d7.js} +1 -1
  94. package/dist/dash/standalone/static/assets/chunks/{confirm-d6b2c5b1deccd1e8.js → confirm-14d018653fbe50fc.js} +1 -1
  95. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-226bf70aa81c29d8.js → connect-repositories-5118edc019fc7890.js} +1 -1
  96. package/dist/dash/standalone/static/assets/chunks/{connections-list-a33d6637e2d52fcf.js → connections-list-5412dad7e0def52f.js} +1 -1
  97. package/dist/dash/standalone/static/assets/chunks/{copy-294c6052b3b69424.js → copy-04781f9af4e10f06.js} +1 -1
  98. package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +1 -0
  99. package/dist/dash/standalone/static/assets/chunks/{credentials-list-90fc1c6d202e1461.js → credentials-list-e64c973aee5602d3.js} +1 -1
  100. package/dist/dash/standalone/static/assets/chunks/{custom-range-efa1b6a71ba84597.js → custom-range-b6919bab9846ebf7.js} +1 -1
  101. package/dist/dash/standalone/static/assets/chunks/{editor-53a3e1a893644fff.js → editor-68e9ccd1764fc512.js} +3 -3
  102. package/dist/dash/standalone/static/assets/chunks/{field-4d374d5ed3f43d7e.js → field-adcb6e6a5f9b7131.js} +1 -1
  103. package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +1 -0
  104. package/dist/dash/standalone/static/assets/chunks/{instructions-d3dc01b2f90820db.js → instructions-7b274685ceb26457.js} +1 -1
  105. package/dist/dash/standalone/static/assets/chunks/{list-16247e39898cd20e.js → list-662f042656857c82.js} +1 -1
  106. package/dist/dash/standalone/static/assets/chunks/model-options-5e07b3318d69d218.js +1 -0
  107. package/dist/dash/standalone/static/assets/chunks/{models-list-6d93523660503dfb.js → models-list-ae1e2eff30d21824.js} +1 -1
  108. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +1 -0
  109. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-755fc581cbc2836e.js → outcome-dialog-fd86ded4c44c2de7.js} +1 -1
  110. package/dist/dash/standalone/static/assets/chunks/outcome-toast-c00becdb638cd9a8.js +1 -0
  111. package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +1 -0
  112. package/dist/dash/standalone/static/assets/chunks/{platform-actions-08e9b3816dcd62b1.js → platform-actions-f3979ab69a6ceb53.js} +1 -1
  113. package/dist/dash/standalone/static/assets/chunks/{platform-step-5881a8be1e761e00.js → platform-step-5454b6c0a19caefd.js} +1 -1
  114. package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +1 -0
  115. package/dist/dash/standalone/static/assets/chunks/{runners-list-dd759d408c643a29.js → runners-list-20d42f19fb4bec8a.js} +1 -1
  116. package/dist/dash/standalone/static/assets/chunks/{runtime-9b28886f3cbe0ed3-1.js → runtime-3fcac605fffcc273-1.js} +1 -1
  117. package/dist/dash/standalone/static/assets/chunks/{secrets-list-be1f634a1b077baa.js → secrets-list-89f89ee70edb3856.js} +1 -1
  118. package/dist/dash/standalone/static/assets/chunks/{segmented-f646bfa8aa0aa449.js → segmented-66a8c77c6294fec3.js} +1 -1
  119. package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +1 -0
  120. package/dist/dash/standalone/static/assets/chunks/{shared-init-953965859f7bf6b9.js → shared-init-96225b8c7758de9d.js} +1 -1
  121. package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +1 -0
  122. package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +9 -0
  123. package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +1 -0
  124. package/dist/dash/standalone/static/assets/chunks/{tail-d13c4cc0cf11ffd1.js → tail-40f16e09eade7eee.js} +1 -1
  125. package/dist/dash/standalone/static/assets/chunks/{task-423e6a3f2527f534.js → task-396d849e58e50d59.js} +1 -1
  126. package/dist/dash/standalone/static/assets/chunks/{task-actions-5917357eac6504ca.js → task-actions-0b3054dc0f8d17c0.js} +1 -1
  127. package/dist/dash/standalone/static/assets/chunks/task-view-9e026dc5da58af5b.js +3 -0
  128. package/dist/dash/standalone/static/assets/chunks/{tasks-list-2c5ce592e00fda45.js → tasks-list-04c6568d7f7237b7.js} +1 -1
  129. package/dist/dash/standalone/static/assets/chunks/{versions-list-177ae397ad64dcea.js → versions-list-ceb756236e69b761.js} +1 -1
  130. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-9b28886f3cbe0ed3-0.js → wular-pnext-3fcac605fffcc273-0.js} +1 -1
  131. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-00243b34eb094b95.css → dash-param-org-agents-param-slug-dd4ac319a0d62432.css} +1 -1
  132. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css → dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css} +1 -1
  133. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css → dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css} +1 -1
  134. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css → dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css} +1 -1
  135. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css +1 -0
  136. package/dist/dash/standalone/static/assets/{dash-param-org-tasks-8a44e171984d32a1.css → dash-param-org-tasks-be3cb3d64573f3d9.css} +1 -1
  137. package/dist/dash/standalone/static/assets/{dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css → dash-param-org-tasks-param-id-c20a0537bc82620d.css} +1 -1
  138. package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +1 -0
  139. package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +1 -0
  140. package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +1 -0
  141. package/dist/dash/standalone/static/assets/pnext-client-27207e4f43f9a21b.js +1 -0
  142. package/dist/dash/standalone/static/assets/{pnext-client-7ecbd7a0cbe4e231.js → pnext-client-435db60553fa3a67.js} +1 -1
  143. package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +1 -0
  144. package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +1 -0
  145. package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +1 -0
  146. package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +1 -0
  147. package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +1 -0
  148. package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +1 -0
  149. package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +1 -0
  150. package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +1 -0
  151. package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +1 -0
  152. package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +1 -0
  153. package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +1 -0
  154. package/dist/dash/standalone/static/assets/{pnext-client-ed31510d4615a5a5.js → pnext-client-b1af82c6f0db0033.js} +1 -1
  155. package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +1 -0
  156. package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +1 -0
  157. package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +1 -0
  158. package/dist/{definition-4on4SG5J.js → definition-D0OpQfGX.js} +1 -1
  159. package/dist/{discover-DvzAbQvU.js → discover-BfYHHJN_.js} +1 -1
  160. package/dist/{dispatch-BaW2X6Sc.js → dispatch-BkoIU4GU.js} +2 -2
  161. package/dist/{docs-CbgaMPvq.js → docs-CxklYa3P.js} +1 -1
  162. package/dist/{drive-Tk6JvQK5.js → drive-B7SBFfcb.js} +1 -1
  163. package/dist/env-BwFCHakK.js +1 -0
  164. package/dist/{exec-CAaYFJD1.js → exec-D9jF2F-H.js} +2 -2
  165. package/dist/{executor-Chc0zawh.js → executor-DBW7R7Tf.js} +6 -6
  166. package/dist/flow/builtin/review/index.d.ts +2 -2
  167. package/dist/flow/builtin/review/index.js +10 -15
  168. package/dist/flow/index.d.ts +2 -2
  169. package/dist/flow/index.js +1 -1
  170. package/dist/{hook-COWDSO4a.js → hook-DN__zYOG.js} +1 -1
  171. package/dist/{index-ezhbF5wC.d.ts → index-CTAQrCRU.d.ts} +71 -66
  172. package/dist/integrations-DSZSa8Rc.js +9 -0
  173. package/dist/lib/broker.js +1 -1
  174. package/dist/{load-PqaDHiHX.js → load-BtIDghgd.js} +2 -2
  175. package/dist/{local-BzZuOwgI.js → local-BzMvgiwL.js} +1 -1
  176. package/dist/{local-BMGcCk8N.js → local-GIxwz_Or.js} +1 -1
  177. package/dist/{login-BDKTNynK.js → login-LlZrIlxb.js} +1 -1
  178. package/dist/maintenance-DyiyHI8S.js +1 -0
  179. package/dist/{mcp-BGam3G_B.js → mcp-Caq72REF.js} +1 -1
  180. package/dist/{mcp-BNz_l5TV2.js → mcp-CrtKQoVi.js} +1 -1
  181. package/dist/{mcp-BGx48pyR.js → mcp-cEIva8Pd.js} +6 -4
  182. package/dist/{models-D1NXi6ni.js → models-BVxs3I8o.js} +1 -1
  183. package/dist/{permission-BkYxjiFR.js → permission-RSZM3DUk.js} +1 -1
  184. package/dist/post-DLenID75.js +11 -0
  185. package/dist/{refresh-yfEi5SQs.js → refresh-CWEpTAkD.js} +1 -1
  186. package/dist/{remote-rArUa01V.js → remote-BDMuKaON.js} +1 -1
  187. package/dist/{remote-BbXx6S9P.js → remote-CY-qYX2C.js} +1 -1
  188. package/dist/{runner-DG9jrX5H.js → runner-CKMOh5Q3.js} +1 -1
  189. package/dist/runner.json +1 -1
  190. package/dist/runner.tgz +0 -0
  191. package/dist/schema.js +1 -1
  192. package/dist/sdk.d.ts +15 -45
  193. package/dist/sdk.js +1 -1
  194. package/dist/serve-D23JqDip.js +12 -0
  195. package/dist/{serve-B-5rDiZm.js → serve-YlU04KO7.js} +1 -1
  196. package/dist/{session-Dtje9y-r.js → session-D7eeJIaH.js} +1 -1
  197. package/dist/{sessions-DIz9fyRN.js → sessions-BGUfSe8L.js} +1 -1
  198. package/dist/{shared--aE4olIO.js → shared-BzNReirj.js} +1 -1
  199. package/dist/{sign-in-wWkyaq5X.js → sign-in-Dr6sU7vz.js} +2 -2
  200. package/dist/{state-Br-Fuaxg.js → state-CxAUec80.js} +1 -1
  201. package/dist/store-BrnWdtRw.js +349 -0
  202. package/dist/{task-CFt85vTy.js → task-CyqtCXo3.js} +1 -1
  203. package/dist/task-DN4assR8.js +7 -0
  204. package/dist/{tool-search-BkdgVolu.js → tool-search-C9Ty3hhL.js} +1 -1
  205. package/dist/{tools-DNgEptor.js → tools-Ck-ZWtmB.js} +1 -1
  206. package/dist/{tools-oQvFAnh5.js → tools-DVtBtED6.js} +1 -1
  207. package/dist/{tools-search-D1zArRyJ.js → tools-search-BNDea9vZ.js} +1 -1
  208. package/dist/{turn-Cc-v-eSy.js → turn-eI4iRPsq.js} +1 -1
  209. package/dist/{update-check-UyRob3yy.js → update-check-Bap3dwaj.js} +1 -1
  210. package/dist/{views-3TxH367C.js → views-Bxm_5J6T.js} +1 -1
  211. package/dist/{worker-BMuKKiIa.js → worker-DJANNSCT.js} +1 -1
  212. package/dist/worker-DeuC38Vp.js +7 -0
  213. package/docs/agents/coder.md +1 -1
  214. package/docs/cli/index.md +5 -3
  215. package/docs/connections.md +1 -1
  216. package/docs/flows.md +1 -1
  217. package/docs/review.md +36 -8
  218. package/docs/self-host.md +2 -1
  219. package/package.json +1 -1
  220. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  221. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  222. package/dist/apps-B6mUToTa.js +0 -18
  223. package/dist/async-CNhQ4wyZ.js +0 -3
  224. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +0 -1
  225. package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +0 -1
  226. package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +0 -1
  227. package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +0 -1
  228. package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +0 -1
  229. package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +0 -1
  230. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +0 -1
  231. package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +0 -1
  232. package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +0 -1
  233. package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +0 -1
  234. package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +0 -9
  235. package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +0 -1
  236. package/dist/dash/standalone/static/assets/chunks/shared-init-b42d2c06c25d1e2b.js +0 -1
  237. package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +0 -1
  238. package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +0 -3
  239. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +0 -1
  240. package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +0 -1
  241. package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +0 -1
  242. package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +0 -1
  243. package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +0 -1
  244. package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +0 -1
  245. package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +0 -1
  246. package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +0 -1
  247. package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +0 -1
  248. package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +0 -1
  249. package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +0 -1
  250. package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +0 -1
  251. package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +0 -1
  252. package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +0 -1
  253. package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +0 -1
  254. package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +0 -1
  255. package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +0 -1
  256. package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +0 -1
  257. package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +0 -1
  258. package/dist/env-_AxrvBXP.js +0 -1
  259. package/dist/integrations-BVmsk64f.js +0 -9
  260. package/dist/maintenance-d43Ml540.js +0 -1
  261. package/dist/serve-CvnrGAj7.js +0 -12
  262. package/dist/store-CzQLgCzt.js +0 -352
  263. package/dist/task-N0qhnKpK.js +0 -7
  264. package/dist/worker-CIHY9L42.js +0 -7
  265. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{types.5bf5a41cedb54154.js → types.9d22123d6296f5af.js} +0 -0
  266. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.aae9fa481b9015d1.css.pnext-asset.js → task-view.440367ae07204ee7.css.pnext-asset.js} +0 -0
@@ -1,2 +1,2 @@
1
- import{Ea as e,s as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import{W as r,p as i}from"./state-Br-Fuaxg.js";import{t as a}from"./types-DHBqXFE2.js";import{F as o,w as s}from"./config-D_RuO6gX.js";import{l as c,p as l,u}from"./definition-4on4SG5J.js";import d from"node:path";import{fileURLToPath as f}from"node:url";import p from"node:fs";import{execFile as m}from"node:child_process";import h from"node:os";import g from"node:fs/promises";import{promisify as _}from"node:util";var v={name:`Coder`,description:`Answers engineering questions, reviews pull requests, and makes requested changes.`,integrations:{github:{events:{pull_request:!0,mention:!0,issue:!0,comment:{match:`[Cc]oder`}}},slack:{events:{mention:!0,dm:!0,channel:{match:`[Cc]oder`}}},linear:{events:{mention:!0,issue:!0,comment:{match:`[Cc]oder`}}}}},y=e({AgentLoadError:()=>b,agentsFromSources:()=>D,assertNotReserved:()=>O,builtinDefinitions:()=>w,defaultAgent:()=>T,folderFiles:()=>L,init:()=>V,loadAgents:()=>j,repoAgentOverride:()=>A}),b=class extends Error{};const x=f(new URL(`./builtin/coder/`,import.meta.url)),S={coder:{json:v,builtin:!0,dir:x,systemPrompt:p.readFileSync(d.join(x,`system.md`),`utf8`)}};function C(e,t=!1){let n={},r;try{r=p.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return n}for(let i of r){let r=d.join(e,i),a=d.join(r,`agent.json`);p.statSync(a,{throwIfNoEntry:!1})?.isFile()&&(n[i]={json:JSON.parse(p.readFileSync(a,`utf8`)),builtin:t,dir:r})}return n}function w(){return S}function T(){return`coder`}function E(e,t){let n=Object.entries(e.integrations).flatMap(([e,n])=>{let r=t[e]?.events;if(!r)return[];let i=Array.isArray(n.events)?n.events.filter(e=>e in r):n.events&&Object.fromEntries(Object.entries(n.events).filter(([e])=>e in r));return[[e,{...n,...i?{events:i}:{}}]]});return{...e,integrations:Object.fromEntries(n)}}function D(e,t,n){let r=u(e.usage),i=Object.keys(r).filter(t=>!(t in e.definitions));if(i.length){let t=Object.keys(e.definitions).sort().join(`, `)||`none`;throw Error(`Invalid agents:\n agents.${i.sort().join(`, agents.`)}: no agent definition; known ids: ${t}`)}let a=[];for(let[n,i]of Object.entries(e.definitions)){let o=r[n],s=o===!1?{disabled:!0}:o,l=typeof s==`object`&&s.disabled;if(l&&!e.includeDisabled)continue;let u;try{u=c(n,i.json,i.repository??!i.builtin)}catch(e){if(l)continue;throw new b(e instanceof Error?e.message:String(e))}let d=i.builtin?E(u,t):u;a.push({id:n,name:d.name??n,definition:d,...typeof s==`object`?{usage:s}:{},...i.dir?{dir:i.dir}:{},builtin:i.builtin})}let o=l(a.filter(e=>!e.usage?.disabled),t);if(o.length)throw new b(`Invalid agents:\n ${o.join(`
2
- `)}`);return a}function O(e){let t=e.filter(e=>e in w()).sort();if(t.length)throw Error(`Invalid agents:\n agents.${t.join(`, agents.`)}: built-in agent ids are reserved`)}function k(e){let t=o(r(d.resolve(e)));return{file:t,usage:p.existsSync(t)?JSON.parse(p.readFileSync(t,`utf8`)).agents??{}:{}}}function A(e,t,n){let{file:r,usage:i}=k(e),a=i[t],o=typeof a==`boolean`?!a:a?.disabled;return o===void 0||o===n?void 0:r}async function j(e,t,{includeDisabled:n=!1}={}){e=d.resolve(e);let r={...w()},a=C(i(`agents`));for(let e of Object.values(a))e.repository=!1;let o=C(d.join(e,`.coder`,`agents`));O([...Object.keys(a),...Object.keys(o)]),Object.assign(r,a,o);let c={...s(e).agents},{usage:l}=k(e);for(let e of Object.keys(c))!(e in r)&&!(e in l)&&delete c[e];return D({definitions:r,usage:c,includeDisabled:n},t,e)}const M={"**/":`(?:.*/)?`,"/**":`/.*`,"**":`.*`,"*":`[^/]*`,"?":`[^/]`};function N(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=>M[e]),a=t.includes(`/`);return[{pattern:RegExp(a?`^${i}$`:`^(?:.*/)?${i}$`),negate:n,directory:r}]})}const P=(e,t,n)=>e.reduce((e,r)=>(!r.directory||n)&&r.pattern.test(t)?!r.negate:e,!1);async function F(e,t,n=``){let r=[];for(let i of await p.promises.readdir(d.join(e,n),{withFileTypes:!0})){let a=n?`${n}/${i.name}`:i.name;i.isDirectory()&&!P(t,a,!0)?r.push(...await F(e,t,a)):i.isFile()&&!P(t,a,!1)&&r.push(a)}return r}async function I(e){return(await _(m)(`git`,[`-C`,e,`ls-files`,`--cached`,`--others`,`--exclude-standard`,`-z`,`--`,`.`],{maxBuffer:67108864}).catch(()=>void 0))?.stdout.split(`\0`).filter(Boolean)}async function L(e){let t=await I(e)??await F(e,N(await p.promises.readFile(d.join(e,`.gitignore`),`utf8`).catch(()=>``))),n={};for(let r of t){if(r===`agent.json`||r===`system.md`)continue;let t=d.join(e,r);(await p.promises.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await p.promises.readFile(t,`utf8`))}return n}const R=/^[a-z0-9][a-z0-9_-]*$/;function z(e,t){if(!R.test(t))return`Use lowercase letters, digits, - or _, starting with a letter or digit.`;let n=d.join(e,`.coder`,`agents`,t);if(p.existsSync(n)&&p.readdirSync(n).length>0)return`${d.relative(e,n)} is not empty; clear it to start over, or edit what is there.`}function B(e,t,n){return{integration:e,type:t,appId:`${e}:sample`,installationId:`sample`,deliveryId:`sample-1`,actor:{id:`user-1`,login:`someone`,role:`member`},text:`Replace me with the text a real event would carry.`,...n?{chat:{thread:{_type:`chat:Thread`,adapterName:e,channelId:n.slice(0,n.lastIndexOf(`:`)),id:n,isDM:!1}}}:{}}}async function V(e,r={}){let{INTEGRATIONS:i}=await import(`./integrations-BVmsk64f.js`).then(e=>e.r),o=d.resolve(r.cwd??`.`);if(!e&&r.askId&&(e=await r.askId(e=>z(o,e))),!e)throw new n(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent init <id>`});let s=z(o,e);if(s)throw new n(`invalid-option`,s.includes(`not empty`)?s:`Agent id "${e}": ${s}`);let c=d.join(o,`.coder`,`agents`,e),l=r.askPicks?await r.askPicks(e):{...r.name?{name:r.name}:{},integrations:r.integrations?.length?r.integrations:[Object.keys(i)[0]],events:{},matches:{},access:r.access??`auto`};if(!a.includes(l.access))throw new n(`invalid-option`,`Unknown access "${l.access}"; valid: ${a.join(`, `)}`);let u={},f=r.events??[],p=e=>Object.keys(i[e]?.events??{});for(let e of l.integrations)if(!i[e])throw new n(`invalid-option`,`Unknown integration "${e}"; valid: ${Object.keys(i).join(`, `)}`);for(let e of f)if(!l.integrations.some(t=>p(t).includes(e)))throw new n(`invalid-option`,`No chosen integration has event "${e}".`,{hint:`Events per integration: coder agent integrations show <id>`});for(let[e,i]of Object.entries(r.matches??{}))if(t(i))throw new n(`invalid-option`,`Bad --match for ${e}: ${t(i)}`);for(let e of l.integrations){let t=p(e),i=l.events[e]??(f.length?f.filter(e=>t.includes(e)):[t.includes(`mention`)?`mention`:t[0]]);for(let r of i)if(!t.includes(r))throw new n(`invalid-option`,`${e} has no event "${r}"; valid: ${t.join(`, `)}`);let a={...r.matches,...l.matches[e]??{}},o=i.filter(e=>a[e]);i.length&&(u[e]={events:o.length?Object.fromEntries(i.map(e=>[e,!a[e]||{match:a[e]}])):i})}let m={...l.name?{name:l.name}:{},...r.description?{description:r.description}:{},access:l.access,integrations:u};await g.mkdir(c,{recursive:!0}),await g.writeFile(d.join(c,`agent.json`),`${JSON.stringify(m,null,2)}\n`),await g.writeFile(d.join(c,`system.md`),``);let _=d.join(h.tmpdir(),`coder-agent-samples`,e),v=[];for(let[e,t]of Object.entries(u)){let n=(Array.isArray(t.events)?t.events:Object.keys(t.events??{}))[0];await g.mkdir(_,{recursive:!0});let r=d.join(_,`sample-${e}-${n}.json`),a=B(e,n,i[e]?.sample);await g.writeFile(r,`${JSON.stringify(a,null,2)}\n`),v.push(r)}return{id:e,dir:c,files:[`agent.json`,`system.md`],samples:v,integrations:Object.keys(u)}}export{T as a,j as c,w as i,y as l,D as n,L as o,O as r,V as s,b as t,A as u};
1
+ import{Ea as e,s as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import{W as r,p as i}from"./state-CxAUec80.js";import{t as a}from"./types-DHBqXFE2.js";import{F as o,w as s}from"./config-_32PHl9g.js";import{l as c,p as l,u}from"./definition-D0OpQfGX.js";import d from"node:path";import{fileURLToPath as f}from"node:url";import p from"node:fs";import{execFile as m}from"node:child_process";import h from"node:os";import g from"node:fs/promises";import{promisify as _}from"node:util";var v={name:`Coder`,description:`Answers engineering questions, reviews pull requests, and makes requested changes.`,integrations:{github:{events:{pull_request:!0,mention:!0,issue:!0,comment:{match:`[Cc]oder`}}},slack:{events:{mention:!0,dm:!0,channel:{match:`[Cc]oder`}}},linear:{events:{mention:!0,issue:!0,comment:{match:`[Cc]oder`}}}}},y=e({AgentLoadError:()=>b,agentsFromSources:()=>D,assertNotReserved:()=>O,builtinDefinitions:()=>w,defaultAgent:()=>T,folderFiles:()=>L,init:()=>V,loadAgents:()=>j,repoAgentOverride:()=>A}),b=class extends Error{};const x=f(new URL(`./builtin/coder/`,import.meta.url)),S={coder:{json:v,builtin:!0,dir:x,systemPrompt:p.readFileSync(d.join(x,`system.md`),`utf8`)}};function C(e,t=!1){let n={},r;try{r=p.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return n}for(let i of r){let r=d.join(e,i),a=d.join(r,`agent.json`);p.statSync(a,{throwIfNoEntry:!1})?.isFile()&&(n[i]={json:JSON.parse(p.readFileSync(a,`utf8`)),builtin:t,dir:r})}return n}function w(){return S}function T(){return`coder`}function E(e,t){let n=Object.entries(e.integrations).flatMap(([e,n])=>{let r=t[e]?.events;if(!r)return[];let i=Array.isArray(n.events)?n.events.filter(e=>e in r):n.events&&Object.fromEntries(Object.entries(n.events).filter(([e])=>e in r));return[[e,{...n,...i?{events:i}:{}}]]});return{...e,integrations:Object.fromEntries(n)}}function D(e,t,n){let r=u(e.usage),i=Object.keys(r).filter(t=>!(t in e.definitions));if(i.length){let t=Object.keys(e.definitions).sort().join(`, `)||`none`;throw Error(`Invalid agents:\n agents.${i.sort().join(`, agents.`)}: no agent definition; known ids: ${t}`)}let a=[];for(let[n,i]of Object.entries(e.definitions)){let o=r[n],s=o===!1?{disabled:!0}:o,l=typeof s==`object`&&s.disabled;if(l&&!e.includeDisabled)continue;let u;try{u=c(n,i.json,i.repository??!i.builtin)}catch(e){if(l)continue;throw new b(e instanceof Error?e.message:String(e))}let d=i.builtin?E(u,t):u;a.push({id:n,name:d.name??n,definition:d,...typeof s==`object`?{usage:s}:{},...i.dir?{dir:i.dir}:{},builtin:i.builtin})}let o=l(a.filter(e=>!e.usage?.disabled),t);if(o.length)throw new b(`Invalid agents:\n ${o.join(`
2
+ `)}`);return a}function O(e){let t=e.filter(e=>e in w()).sort();if(t.length)throw Error(`Invalid agents:\n agents.${t.join(`, agents.`)}: built-in agent ids are reserved`)}function k(e){let t=o(r(d.resolve(e)));return{file:t,usage:p.existsSync(t)?JSON.parse(p.readFileSync(t,`utf8`)).agents??{}:{}}}function A(e,t,n){let{file:r,usage:i}=k(e),a=i[t],o=typeof a==`boolean`?!a:a?.disabled;return o===void 0||o===n?void 0:r}async function j(e,t,{includeDisabled:n=!1}={}){e=d.resolve(e);let r={...w()},a=C(i(`agents`));for(let e of Object.values(a))e.repository=!1;let o=C(d.join(e,`.coder`,`agents`));O([...Object.keys(a),...Object.keys(o)]),Object.assign(r,a,o);let c={...s(e).agents},{usage:l}=k(e);for(let e of Object.keys(c))!(e in r)&&!(e in l)&&delete c[e];return D({definitions:r,usage:c,includeDisabled:n},t,e)}const M={"**/":`(?:.*/)?`,"/**":`/.*`,"**":`.*`,"*":`[^/]*`,"?":`[^/]`};function N(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=>M[e]),a=t.includes(`/`);return[{pattern:RegExp(a?`^${i}$`:`^(?:.*/)?${i}$`),negate:n,directory:r}]})}const P=(e,t,n)=>e.reduce((e,r)=>(!r.directory||n)&&r.pattern.test(t)?!r.negate:e,!1);async function F(e,t,n=``){let r=[];for(let i of await p.promises.readdir(d.join(e,n),{withFileTypes:!0})){let a=n?`${n}/${i.name}`:i.name;i.isDirectory()&&!P(t,a,!0)?r.push(...await F(e,t,a)):i.isFile()&&!P(t,a,!1)&&r.push(a)}return r}async function I(e){return(await _(m)(`git`,[`-C`,e,`ls-files`,`--cached`,`--others`,`--exclude-standard`,`-z`,`--`,`.`],{maxBuffer:67108864}).catch(()=>void 0))?.stdout.split(`\0`).filter(Boolean)}async function L(e){let t=await I(e)??await F(e,N(await p.promises.readFile(d.join(e,`.gitignore`),`utf8`).catch(()=>``))),n={};for(let r of t){if(r===`agent.json`||r===`system.md`)continue;let t=d.join(e,r);(await p.promises.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await p.promises.readFile(t,`utf8`))}return n}const R=/^[a-z0-9][a-z0-9_-]*$/;function z(e,t){if(!R.test(t))return`Use lowercase letters, digits, - or _, starting with a letter or digit.`;let n=d.join(e,`.coder`,`agents`,t);if(p.existsSync(n)&&p.readdirSync(n).length>0)return`${d.relative(e,n)} is not empty; clear it to start over, or edit what is there.`}function B(e,t,n){return{integration:e,type:t,appId:`${e}:sample`,installationId:`sample`,deliveryId:`sample-1`,actor:{id:`user-1`,login:`someone`,role:`member`},text:`Replace me with the text a real event would carry.`,...n?{chat:{thread:{_type:`chat:Thread`,adapterName:e,channelId:n.slice(0,n.lastIndexOf(`:`)),id:n,isDM:!1}}}:{}}}async function V(e,r={}){let{INTEGRATIONS:i}=await import(`./integrations-DSZSa8Rc.js`).then(e=>e.r),o=d.resolve(r.cwd??`.`);if(!e&&r.askId&&(e=await r.askId(e=>z(o,e))),!e)throw new n(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent init <id>`});let s=z(o,e);if(s)throw new n(`invalid-option`,s.includes(`not empty`)?s:`Agent id "${e}": ${s}`);let c=d.join(o,`.coder`,`agents`,e),l=r.askPicks?await r.askPicks(e):{...r.name?{name:r.name}:{},integrations:r.integrations?.length?r.integrations:[Object.keys(i)[0]],events:{},matches:{},access:r.access??`auto`};if(!a.includes(l.access))throw new n(`invalid-option`,`Unknown access "${l.access}"; valid: ${a.join(`, `)}`);let u={},f=r.events??[],p=e=>Object.keys(i[e]?.events??{});for(let e of l.integrations)if(!i[e])throw new n(`invalid-option`,`Unknown integration "${e}"; valid: ${Object.keys(i).join(`, `)}`);for(let e of f)if(!l.integrations.some(t=>p(t).includes(e)))throw new n(`invalid-option`,`No chosen integration has event "${e}".`,{hint:`Events per integration: coder agent integrations show <id>`});for(let[e,i]of Object.entries(r.matches??{}))if(t(i))throw new n(`invalid-option`,`Bad --match for ${e}: ${t(i)}`);for(let e of l.integrations){let t=p(e),i=l.events[e]??(f.length?f.filter(e=>t.includes(e)):[t.includes(`mention`)?`mention`:t[0]]);for(let r of i)if(!t.includes(r))throw new n(`invalid-option`,`${e} has no event "${r}"; valid: ${t.join(`, `)}`);let a={...r.matches,...l.matches[e]??{}},o=i.filter(e=>a[e]);i.length&&(u[e]={events:o.length?Object.fromEntries(i.map(e=>[e,!a[e]||{match:a[e]}])):i})}let m={...l.name?{name:l.name}:{},...r.description?{description:r.description}:{},access:l.access,integrations:u};await g.mkdir(c,{recursive:!0}),await g.writeFile(d.join(c,`agent.json`),`${JSON.stringify(m,null,2)}\n`),await g.writeFile(d.join(c,`system.md`),``);let _=d.join(h.tmpdir(),`coder-agent-samples`,e),v=[];for(let[e,t]of Object.entries(u)){let n=(Array.isArray(t.events)?t.events:Object.keys(t.events??{}))[0];await g.mkdir(_,{recursive:!0});let r=d.join(_,`sample-${e}-${n}.json`),a=B(e,n,i[e]?.sample);await g.writeFile(r,`${JSON.stringify(a,null,2)}\n`),v.push(r)}return{id:e,dir:c,files:[`agent.json`,`system.md`],samples:v,integrations:Object.keys(u)}}export{T as a,j as c,w as i,y as l,D as n,L as o,O as r,V as s,b as t,A as u};
@@ -1,4 +1,4 @@
1
- import{Ea as e,ma as t}from"./args-CJsHYWbt.js";import{B as n,p as r,vt as i,z as a}from"./state-Br-Fuaxg.js";import{z as o}from"./config-D_RuO6gX.js";import{n as s}from"./connections-Cswv7r8Z.js";import{c,i as l,n as u}from"./load-PqaDHiHX.js";import{t as d}from"./integrations-BVmsk64f.js";import{f,i as ee,l as p}from"./definition-4on4SG5J.js";import"./turn-Cc-v-eSy.js";import m from"node:path";import h from"node:fs";import{execFile as te}from"node:child_process";import{randomUUID as ne}from"node:crypto";import{isDeepStrictEqual as g}from"node:util";const _=(e,t,n)=>(e.retryAt??1/0)<=t||!e.shownAt&&e.at<=t-n,v=3e4;var y=class extends Error{};const b=e=>`${e.source===`builtin`?0:1}:${e.id}`,x=(e,t=``)=>`token:${e}:${t}`,S=e=>`token-drop:${e}`;var re=e({agentProblems:()=>M,agentWithVersion:()=>D,diskFiles:()=>P,ensureBuiltinAgents:()=>L,getAgent:()=>w,getVersion:()=>E,listAgents:()=>T,publishAgent:()=>O,publishVersion:()=>k,seedBuiltinAgent:()=>F,seedBuiltinAgents:()=>I,setAgentSettings:()=>A,toAgent:()=>N,versionKey:()=>C});const C=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function w(e,t){return e.get(`agent`,t)}async function T(e){return(await e.list(`agent`)).map(e=>e.value)}async function E(e,t,n){let r=n??(await w(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,C(t,r))}async function D(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function O(e,t,n,r){let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},r)}async function k(e,t,n,r){if(!r)return(await O(e,t,n)).version;let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await w(e,t.id),s=r?r.version:o?await E(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>g(e.definition,i)&&e.systemPrompt===t.systemPrompt&&g(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return g(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,C(t.id,r),u);r++){let n=await e.get(`agentversion`,C(t.id,r));if(n&&l(n)){u=n;break}}let d=await w(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function A(e,t,n,r=Date.now()){let i=await w(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}function j(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},s=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),c=Object.fromEntries([...s].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),l=a.engine||a.model?{engine:void 0,model:void 0,effort:void 0}:{};return{...i,...l,...a,...i.access||a.access?{access:o(i.access,a.access)}:{},...s.size?{integrations:c}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function M(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];let r=ee(t.definition);if(r.length)return r;try{return u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:f(e.settings)}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function N(e,t,n,r=d){let i=j(t.definition,void 0,e.settings,r),a=j(t.definition,i,n,r),[o]=u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:f(a)}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function P(e,t=``){let n={};for(let r of h.readdirSync(m.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,P(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=h.readFileSync(m.join(e,i),`utf8`))}return n}async function F(e,n,r,i){let a=l()[r];return a?await k(e,{id:r,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${t()}`},n,i)!==i.version:!1}async function I(e,t,n){let r=n??await Promise.all(Object.keys(l()).map(t=>D(e,t))),i=!1;for(let n of Object.keys(l()))await F(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function L(e,t){let n=e.settings??={};return n.builtinAgents||=I(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}function R(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const z=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function B(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-B6mUToTa.js`).then(e=>e.Yt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function V(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new y(`Installation "${t}" is bound through another app.`)}function H(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function ie(e,t){let n=e.sending?.count??0;return t===void 0?n:e.items.findIndex((e,r)=>r<n&&e.admission===t)+1}function ae(e,t,n,r){let{sending:i,...a}=e,o=t?ie(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+v}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:H(s,s.owner,[],s.at)}function U(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:ne()},a=i.version??i.messages.length+i.more,o=i.messages.map((e,t)=>({sequence:t+1,...e}));if(t)return{...i,version:a+1,messages:o.length<50?[...o,{...t,sequence:a+1}]:o,more:i.more+(o.length<50?0:1)};if(i.epoch!==r)return i;let s=Math.max(i.acknowledged??0,Math.min(n,a)),c=o.filter(e=>e.sequence>s);return{...i,version:a,acknowledged:s,messages:c,more:a-s-c.length}}function oe(e){let{sending:t,...n}=e;return H({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,t){let n=`${e}:${t}`,r=i();return this.recordEvents.addEventListener(n,r.notify),{...r,close:()=>{this.recordEvents.removeEventListener(n,r.notify),r.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(z(e,t),()=>B(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||b(t)>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).sort((e,t)=>b(e.record)<b(t.record)?-1:1).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t,n){let{publishVersion:r}=await Promise.resolve().then(()=>re);return this.withAppLock(`agent:${e.id}`,async()=>{let i=(await this.listAgentsWithVersions(e.id))[0]??{};if(n&&(i.record?.currentVersion??0)!==n.currentVersion)return;let a=await r(this,{...e,definition:t.definition,systemPrompt:t.systemPrompt,files:t.files,commit:t.commit,origin:t.source,importedFrom:t.importedFrom},e.updatedAt,i);return{record:await this.get(`agent`,e.id),version:a,unchanged:a.version===i.record?.currentVersion}})}async listCredentials(e){return(await this.list(`credential`)).filter(({value:t})=>!t.owner||t.owner===e.owner).slice(0,e.limit)}async installationApp(e){let t=await this.get(`installation`,e);if(!t||t.deletedAt)return;let n=await this.get(`app`,t.app);return n?{installation:t,app:n}:void 0}async getApps(e){return(await Promise.all([...new Set(e)].map(async e=>({id:e,value:await this.get(`app`,e)})))).filter(e=>!!e.value)}async updateMetadata(e,t,n){let r=await this.get(e,t);return r?(await this.put(e,t,{...r,...n}),!0):!1}async listHistory(e){return(await this.list(`history`,{prefix:`${e}:`})).map(({value:{engine:e,conversation:t,savedAt:n}})=>({engine:e,conversation:t,savedAt:n})).sort((e,t)=>e.savedAt-t.savedAt)}async conversationState(e){let[t,n,r]=await Promise.all([this.get(`delivery`,e),this.get(`delivery`,`since:${e}`),this.get(`delivery`,`batch:${e}`)]),i=t&&await this.get(`task`,t.taskId);return{record:t,unseen:n,batch:r,...i?.task.flow==="default"?{status:i}:{}}}async markConversation(e,t,n,r,i){let a=await this.get(`delivery`,e);a?.taskId===t&&await this.put(`delivery`,e,{...a,at:r,seen:n},{ttlMs:i})}async heldTokens(e,t){let n={held:new Map,drops:new Map};for(let t of e)for(let e of await this.list(`snapshot`,{prefix:x(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(S(r),(await this.get(`snapshot`,S(r)))?.drop);return n}async holdToken(e){(await Promise.all(e.drops.map(async e=>(await this.get(`snapshot`,e.key))?.drop===e.drop))).every(Boolean)&&await this.put(`snapshot`,e.key,e.value,{ttlMs:e.ttlMs})}saveTaskSecrets(e,t){return this.withAppLock(`connections:${e}`,async n=>{let r=await n.get(`task`,e),i=!!(r&&![`completed`,`failed`,`cancelled`].includes(r.status));if(i)for(let e of t)await n.put(`snapshot`,e.id,{secret:e.value,expiresAt:e.expiresAt},{ttlMs:Math.max(1,e.expiresAt-this.now())});return i})}async dispatchState(e){let{key:t,owner:n,at:r,ttlMs:i}=e.delivery,a=this.live(`delivery`).get(t)?.value,o=a?.pending!==void 0&&(!a.owner||(a.at??0)+i<=r);return a&&!o?{claimed:!1}:(await this.put(`delivery`,t,{at:r,owner:n,pending:a?.pending??!0},a?.pending&&a.pending!==!0?{}:{ttlMs:i}),{claimed:!0})}async usageTotals(e){let{sumUsageTotals:t}=await import(`./apps-B6mUToTa.js`).then(e=>e.bt);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-B6mUToTa.js`).then(e=>e.bt);return n((await this.list(`usage`)).map(e=>e.value),e,t).totals}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}changed(e){}read(e,t){let n=t;if(e!==`app`||!n.shared)return t;let r=this.live(`app`).get(n.shared)?.value;return{...n,credentials:r?.credentials??``}}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){let n=this.live(e).get(t);return n&&this.read(e,n.value)}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,this.recordEvents.dispatchEvent(new Event(`login:${e}`)),a}async completeLogin(e,t,n){let{completeLogin:r}=await import(`./apps-B6mUToTa.js`).then(e=>e.Yt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&V([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>R(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async approvalPostsDue(e,t){return[...this.live(`delivery`).entries()].filter(([e])=>e.startsWith(`approval:`)).map(([e,t])=>({id:e,value:t.value})).filter(({value:n})=>_(n,e,t))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:U(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=U(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=H(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=oe(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+v,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=ae(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},se=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(h.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){h.mkdirSync(m.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{h.writeFileSync(n,t,{mode:384}),h.renameSync(n,e)}finally{h.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new s){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>B(this,e,t,n);return e===`credential`?this.connections().withLock(r,z(e,t)):super.withAppLock(z(e,t),r)}get appsFile(){return r(`apps.json`)}get deliveriesFile(){return m.join(n(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?a():e===`snapshot`?m.join(n(``),`snapshots.json`):m.join(n(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=h.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return m.join(n(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=h.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
1
+ import{Ea as e,ma as t}from"./args-CJsHYWbt.js";import{B as n,p as r,vt as i,z as a}from"./state-CxAUec80.js";import{z as o}from"./config-_32PHl9g.js";import{n as s}from"./connections-B90TemYf.js";import{c,i as l,n as u}from"./load-BtIDghgd.js";import{t as d}from"./integrations-DSZSa8Rc.js";import{f,i as ee,l as p}from"./definition-D0OpQfGX.js";import"./turn-eI4iRPsq.js";import m from"node:path";import h from"node:fs";import{execFile as te}from"node:child_process";import{randomUUID as ne}from"node:crypto";import{isDeepStrictEqual as g}from"node:util";const _=(e,t,n)=>(e.retryAt??1/0)<=t||!e.shownAt&&e.at<=t-n,v=3e4;var y=class extends Error{};const b=e=>`${e.source===`builtin`?0:1}:${e.id}`,x=(e,t=``)=>`token:${e}:${t}`,S=e=>`token-drop:${e}`;var re=e({agentProblems:()=>M,agentWithVersion:()=>D,diskFiles:()=>P,ensureBuiltinAgents:()=>L,getAgent:()=>w,getVersion:()=>E,listAgents:()=>T,publishAgent:()=>O,publishVersion:()=>k,seedBuiltinAgent:()=>F,seedBuiltinAgents:()=>I,setAgentSettings:()=>A,toAgent:()=>N,versionKey:()=>C});const C=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function w(e,t){return e.get(`agent`,t)}async function T(e){return(await e.list(`agent`)).map(e=>e.value)}async function E(e,t,n){let r=n??(await w(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,C(t,r))}async function D(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function O(e,t,n,r){let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},r)}async function k(e,t,n,r){if(!r)return(await O(e,t,n)).version;let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await w(e,t.id),s=r?r.version:o?await E(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>g(e.definition,i)&&e.systemPrompt===t.systemPrompt&&g(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return g(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,C(t.id,r),u);r++){let n=await e.get(`agentversion`,C(t.id,r));if(n&&l(n)){u=n;break}}let d=await w(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function A(e,t,n,r=Date.now()){let i=await w(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}function j(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},s=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),c=Object.fromEntries([...s].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),l=a.engine||a.model?{engine:void 0,model:void 0,effort:void 0}:{};return{...i,...l,...a,...i.access||a.access?{access:o(i.access,a.access)}:{},...s.size?{integrations:c}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function M(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];let r=ee(t.definition);if(r.length)return r;try{return u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:f(e.settings)}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function N(e,t,n,r=d){let i=j(t.definition,void 0,e.settings,r),a=j(t.definition,i,n,r),[o]=u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:f(a)}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function P(e,t=``){let n={};for(let r of h.readdirSync(m.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,P(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=h.readFileSync(m.join(e,i),`utf8`))}return n}async function F(e,n,r,i){let a=l()[r];return a?await k(e,{id:r,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${t()}`},n,i)!==i.version:!1}async function I(e,t,n){let r=n??await Promise.all(Object.keys(l()).map(t=>D(e,t))),i=!1;for(let n of Object.keys(l()))await F(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function L(e,t){let n=e.settings??={};return n.builtinAgents||=I(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}function R(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const z=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function B(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-BORri-28.js`).then(e=>e.Jt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function V(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new y(`Installation "${t}" is bound through another app.`)}function H(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function ie(e,t){let n=e.sending?.count??0;return t===void 0?n:e.items.findIndex((e,r)=>r<n&&e.admission===t)+1}function ae(e,t,n,r){let{sending:i,...a}=e,o=t?ie(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+v}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:H(s,s.owner,[],s.at)}function U(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:ne()},a=i.version??i.messages.length+i.more,o=i.messages.map((e,t)=>({sequence:t+1,...e}));if(t)return{...i,version:a+1,messages:o.length<50?[...o,{...t,sequence:a+1}]:o,more:i.more+(o.length<50?0:1)};if(i.epoch!==r)return i;let s=Math.max(i.acknowledged??0,Math.min(n,a)),c=o.filter(e=>e.sequence>s);return{...i,version:a,acknowledged:s,messages:c,more:a-s-c.length}}function oe(e){let{sending:t,...n}=e;return H({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,t){let n=`${e}:${t}`,r=i();return this.recordEvents.addEventListener(n,r.notify),{...r,close:()=>{this.recordEvents.removeEventListener(n,r.notify),r.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(z(e,t),()=>B(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||b(t)>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).sort((e,t)=>b(e.record)<b(t.record)?-1:1).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t,n){let{publishVersion:r}=await Promise.resolve().then(()=>re);return this.withAppLock(`agent:${e.id}`,async()=>{let i=(await this.listAgentsWithVersions(e.id))[0]??{};if(n&&(i.record?.currentVersion??0)!==n.currentVersion)return;let a=await r(this,{...e,definition:t.definition,systemPrompt:t.systemPrompt,files:t.files,commit:t.commit,origin:t.source,importedFrom:t.importedFrom},e.updatedAt,i);return{record:await this.get(`agent`,e.id),version:a,unchanged:a.version===i.record?.currentVersion}})}async listCredentials(e){return(await this.list(`credential`)).filter(({value:t})=>!t.owner||t.owner===e.owner).slice(0,e.limit)}async installationApp(e){let t=await this.get(`installation`,e);if(!t||t.deletedAt)return;let n=await this.get(`app`,t.app);return n?{installation:t,app:n}:void 0}async getApps(e){return(await Promise.all([...new Set(e)].map(async e=>({id:e,value:await this.get(`app`,e)})))).filter(e=>!!e.value)}async updateMetadata(e,t,n){let r=await this.get(e,t);return r?(await this.put(e,t,{...r,...n}),!0):!1}async listHistory(e){return(await this.list(`history`,{prefix:`${e}:`})).map(({value:{engine:e,conversation:t,savedAt:n}})=>({engine:e,conversation:t,savedAt:n})).sort((e,t)=>e.savedAt-t.savedAt)}async conversationState(e){let[t,n,r]=await Promise.all([this.get(`delivery`,e),this.get(`delivery`,`since:${e}`),this.get(`delivery`,`batch:${e}`)]),i=t&&await this.get(`task`,t.taskId);return{record:t,unseen:n,batch:r,...i?.task.flow==="default"?{status:i}:{}}}async markConversation(e,t,n,r,i){let a=await this.get(`delivery`,e);a?.taskId===t&&await this.put(`delivery`,e,{...a,at:r,seen:n},{ttlMs:i})}async heldTokens(e,t){let n={held:new Map,drops:new Map};for(let t of e)for(let e of await this.list(`snapshot`,{prefix:x(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(S(r),(await this.get(`snapshot`,S(r)))?.drop);return n}async holdToken(e){(await Promise.all(e.drops.map(async e=>(await this.get(`snapshot`,e.key))?.drop===e.drop))).every(Boolean)&&await this.put(`snapshot`,e.key,e.value,{ttlMs:e.ttlMs})}saveTaskSecrets(e,t){return this.withAppLock(`connections:${e}`,async n=>{let r=await n.get(`task`,e),i=!!(r&&![`completed`,`failed`,`cancelled`].includes(r.status));if(i)for(let e of t)await n.put(`snapshot`,e.id,{secret:e.value,expiresAt:e.expiresAt},{ttlMs:Math.max(1,e.expiresAt-this.now())});return i})}async dispatchState(e){let{key:t,owner:n,at:r,ttlMs:i}=e.delivery,a=this.live(`delivery`).get(t)?.value,o=a?.pending!==void 0&&(!a.owner||(a.at??0)+i<=r);return a&&!o?{claimed:!1}:(await this.put(`delivery`,t,{at:r,owner:n,pending:a?.pending??!0},a?.pending&&a.pending!==!0?{}:{ttlMs:i}),{claimed:!0})}async usageTotals(e){let{sumUsageTotals:t}=await import(`./apps-BORri-28.js`).then(e=>e.bt);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-BORri-28.js`).then(e=>e.bt);return n((await this.list(`usage`)).map(e=>e.value),e,t).totals}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}changed(e){}read(e,t){let n=t;if(e!==`app`||!n.shared)return t;let r=this.live(`app`).get(n.shared)?.value;return{...n,credentials:r?.credentials??``}}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){let n=this.live(e).get(t);return n&&this.read(e,n.value)}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,this.recordEvents.dispatchEvent(new Event(`login:${e}`)),a}async completeLogin(e,t,n){let{completeLogin:r}=await import(`./apps-BORri-28.js`).then(e=>e.Jt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&V([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>R(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async approvalPostsDue(e,t){return[...this.live(`delivery`).entries()].filter(([e])=>e.startsWith(`approval:`)).map(([e,t])=>({id:e,value:t.value})).filter(({value:n})=>_(n,e,t))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:U(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=U(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=H(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=oe(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+v,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=ae(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},se=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(h.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){h.mkdirSync(m.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{h.writeFileSync(n,t,{mode:384}),h.renameSync(n,e)}finally{h.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new s){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>B(this,e,t,n);return e===`credential`?this.connections().withLock(r,z(e,t)):super.withAppLock(z(e,t),r)}get appsFile(){return r(`apps.json`)}get deliveriesFile(){return m.join(n(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?a():e===`snapshot`?m.join(n(``),`snapshots.json`):m.join(n(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=h.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return m.join(n(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=h.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
2
2
  `).filter(Boolean)){let{id:n,...r}=JSON.parse(e);t.set(n,r)}}catch(e){if(e.code!==`ENOENT`)throw e}return this.logBuckets.set(e,t),t}entries(e){if(e===`connection`)return this.connections().list().map(e=>[e.id,e]);if(e===`credential`)return this.connections().credentials().map(e=>[e.id,e.value]);if(G.has(e)){let t=this.apps(),n=Object.entries(t[e]??{});return e===`app`?n.map(([e,n])=>{let r=n,i=r.shared?t.app?.[r.shared]:void 0;return[e,r.shared?{...r,credentials:i?.credentials??``}:r]}):n}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(e===`connection`)return this.connections().get(t);if(e===`tasklog`){let e=this.loadLog(t.slice(0,t.lastIndexOf(`:`))).get(t);return e&&(e.expiresAt===void 0||e.expiresAt>this.now())?e.value:void 0}return!G.has(e)&&!K.has(e)?super.get(e,t):this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(e===`tasklog`)return this.putMany(e,[{id:t,value:n}],r);if(!G.has(e)&&!K.has(e))return super.put(e,t,n,r);await this.serial(()=>this.write(e,t,n),K.has(e))}write(e,t,n){if(e===`connection`){this.connections().put(n);return}if(e===`credential`&&t!==`claude`&&t!==`codex`){this.connections().putCredential(t,n);return}if(G.has(e)){let r=this.apps();e===`installation`&&V(Object.entries(r.installation??{}),t,n),e===`app`&&n.shared&&(n={...n,credentials:``}),r[e]={...r[e],[t]:n},Y(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else this.refuse(e)}remove(e,t){if(e===`connection`){let e=this.connections(),n=!!e.get(t);return e.delete(t),n}if(e===`credential`){let e=this.connections(),n=e.credentials().some(e=>e.id===t);return e.deleteCredential(t),n}if(G.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],Y(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}return!1}async putMany(e,t,n={}){if(e===`tasklog`){let e=new Map;for(let{id:r,value:i}of t){let t=r.slice(0,r.lastIndexOf(`:`)),a=e.get(t)??[];a.push(JSON.stringify({id:r,value:i,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})),e.set(t,a)}for(let[t,n]of e){let e=this.logFile(t);h.mkdirSync(m.dirname(e),{recursive:!0}),h.appendFileSync(e,`${n.join(`
3
3
  `)}\n`,{mode:384})}for(let{id:e,value:r}of t)this.loadLog(e.slice(0,e.lastIndexOf(`:`))).set(e,{value:r,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})}else if(!G.has(e)&&!K.has(e))await super.putMany(e,t,n);else for(let r of t)await this.put(e,r.id,r.value,n)}async list(e,t={}){if(e===`tasklog`){let e=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0;if(e!==void 0)this.loadLog(e);else{let e=m.dirname(this.logFile(``));if(h.existsSync(e))for(let t of h.readdirSync(e))t.endsWith(`.jsonl`)&&this.loadLog(decodeURIComponent(t.slice(0,-6)))}return(e===void 0?[...this.logBuckets.values()]:[this.loadLog(e)]).flatMap(e=>[...e]).filter(([e,n])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)&&(n.expiresAt===void 0||n.expiresAt>this.now())).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}if(!G.has(e)&&!K.has(e))return super.list(e,t);let n=e===`installation`&&t.agent?this.apps().app:void 0;return this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).filter(([e,r])=>R(e,r,t,n?.[r.app]?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([n,r])=>{let i=r;return{id:n,value:(e===`connection`&&t.secrets&&(t.secrets===`all`||i.provider===`mcp`&&i.auth===`oauth`)?this.connections().get(n):void 0)??r}})}async delete(e,t){if(e===`tasklog`){let e=t.slice(0,t.lastIndexOf(`:`)),n=this.loadLog(e);n.delete(t),Y(this.logFile(e),[...n].map(([e,t])=>JSON.stringify({id:e,...t})).join(`
4
4
  `)+`
@@ -1 +1 @@
1
- import{la as e}from"./args-CJsHYWbt.js";import{l as t}from"./state-Br-Fuaxg.js";import{t as n}from"./integrations-BVmsk64f.js";import{n as r,t as i}from"./crypto-Ittsv-m4.js";import{a,i as o,o as s,s as c}from"./task-N0qhnKpK.js";import l from"node:path";import u from"node:process";import d from"node:fs";import{execFile as f,spawn as p}from"node:child_process";import m from"node:fs/promises";import{promisify as h}from"node:util";const g=h(f);async function _(e){if(u.platform===`linux`){let t=await m.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await g(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function v(e){let t=i(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var y=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,n){let i=this.taskDir(t.id),s=t.runner===`local`?o(t):void 0;await m.mkdir(i,{recursive:!0});let c=d.openSync(l.join(i,`runner.log`),`a`);await m.mkdir(l.join(i,`bin`),{recursive:!0}),await m.writeFile(l.join(i,`bin/coder`),`#!/bin/sh\nexec "${u.execPath}" "${e}" "$@"\n`,{mode:493});let f=p(u.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:i,detached:!0,env:{PATH:[l.join(i,`bin`),u.env.PATH??``].join(l.delimiter),HOME:u.env.HOME??``,TMPDIR:u.env.TMPDIR??``,...u.env.CODER_HOME?{CODER_HOME:u.env.CODER_HOME}:{},...n,...s?{CODER_CHECKOUT_CACHE:s}:{},CODER_INBOX_SOCKET:a(i)},stdio:[`ignore`,c,c]});await new Promise((e,t)=>{f.once(`spawn`,e),f.once(`error`,t)}),d.closeSync(c);let h={child:f};this.children.set(f.pid,h),f.once(`close`,e=>{h.code=e}),f.unref();let g=await _(f.pid);if(!g)throw Error(`Could not identify the local runner process`);return r({pid:f.pid,dir:i,started:g})}async status(e){let{pid:t,started:n}=v(e),r=this.children.get(t);if(r?.code===void 0)try{if(u.kill(t,0),await _(t)===n)return{state:`running`}}catch{}return{state:`exited`,...r?.code==null?{}:{code:r.code}}}async stop(e){let{pid:t,started:n}=v(e);if(await _(t)===n)try{u.kill(-t,`SIGTERM`)}catch{try{u.kill(t,`SIGTERM`)}catch{}}}async remove(e,t){let n=this.taskDir(e);if(t){let{pid:e,started:n}=v(t);for(let t=0;t<100&&await _(e)===n;t++)await new Promise(e=>setTimeout(e,100))}await s(l.join(n,`work`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e)),await m.rm(n,{recursive:!0,force:!0}),await m.rm(a(n),{force:!0})}taskDir(e){return t(e,`task id`),l.join(this.workDir,e)}async push(e,t){let{pid:n,dir:r,started:i}=v(e);if(await _(n)!==i)throw Error(`The task process exited`);return c(a(r),t)}};function b(e,t,n={}){return new Promise((r,i)=>{let a=p(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function x(){return Object.values(n).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}export{b as n,x as r,y as t};
1
+ import{la as e}from"./args-CJsHYWbt.js";import{l as t}from"./state-CxAUec80.js";import{t as n}from"./integrations-DSZSa8Rc.js";import{n as r,t as i}from"./crypto-Ittsv-m4.js";import{a,i as o,o as s,s as c}from"./task-DN4assR8.js";import l from"node:path";import u from"node:process";import d from"node:fs";import{execFile as f,spawn as p}from"node:child_process";import m from"node:fs/promises";import{promisify as h}from"node:util";const g=h(f);async function _(e){if(u.platform===`linux`){let t=await m.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await g(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function v(e){let t=i(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var y=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,n){let i=this.taskDir(t.id),s=t.runner===`local`?o(t):void 0;await m.mkdir(i,{recursive:!0});let c=d.openSync(l.join(i,`runner.log`),`a`);await m.mkdir(l.join(i,`bin`),{recursive:!0}),await m.writeFile(l.join(i,`bin/coder`),`#!/bin/sh\nexec "${u.execPath}" "${e}" "$@"\n`,{mode:493});let f=p(u.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:i,detached:!0,env:{PATH:[l.join(i,`bin`),u.env.PATH??``].join(l.delimiter),HOME:u.env.HOME??``,TMPDIR:u.env.TMPDIR??``,...u.env.CODER_HOME?{CODER_HOME:u.env.CODER_HOME}:{},...n,...s?{CODER_CHECKOUT_CACHE:s}:{},CODER_INBOX_SOCKET:a(i)},stdio:[`ignore`,c,c]});await new Promise((e,t)=>{f.once(`spawn`,e),f.once(`error`,t)}),d.closeSync(c);let h={child:f};this.children.set(f.pid,h),f.once(`close`,e=>{h.code=e}),f.unref();let g=await _(f.pid);if(!g)throw Error(`Could not identify the local runner process`);return r({pid:f.pid,dir:i,started:g})}async status(e){let{pid:t,started:n}=v(e),r=this.children.get(t);if(r?.code===void 0)try{if(u.kill(t,0),await _(t)===n)return{state:`running`}}catch{}return{state:`exited`,...r?.code==null?{}:{code:r.code}}}async stop(e){let{pid:t,started:n}=v(e);if(await _(t)===n)try{u.kill(-t,`SIGTERM`)}catch{try{u.kill(t,`SIGTERM`)}catch{}}}async remove(e,t){let n=this.taskDir(e);if(t){let{pid:e,started:n}=v(t);for(let t=0;t<100&&await _(e)===n;t++)await new Promise(e=>setTimeout(e,100))}await s(l.join(n,`work`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e)),await m.rm(n,{recursive:!0,force:!0}),await m.rm(a(n),{force:!0})}taskDir(e){return t(e,`task id`),l.join(this.workDir,e)}async push(e,t){let{pid:n,dir:r,started:i}=v(e);if(await _(n)!==i)throw Error(`The task process exited`);return c(a(r),t)}};function b(e,t,n={}){return new Promise((r,i)=>{let a=p(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function x(){return Object.values(n).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}export{b as n,x as r,y as t};
@@ -1,4 +1,4 @@
1
- import{c as e}from"./task-N0qhnKpK.js";import t from"node:path";import n from"node:process";import{spawn as r}from"node:child_process";import i from"node:fs/promises";const a=[`SIGTERM`,`SIGINT`],o=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Z0-9]|\r/g;function s(e,t){if(e===`codex`)return{file:`codex`,args:[`login`,`--device-auth`],env:{CODEX_HOME:t}};let r=`stty cols 4000 rows 50 2>/dev/null; exec claude setup-token`;return{file:`sh`,args:[`-c`,`cat | { ${n.platform===`darwin`?`script -q /dev/null sh -c '${r}'`:`script -qfec '${r}' /dev/null`}; kill 0; }`],env:{CLAUDE_CONFIG_DIR:t,BROWSER:`true`}}}function c(e){try{return JSON.parse(Buffer.from(String(e).split(`.`)[1]??``,`base64url`).toString())}catch{return{}}}function l(e){let t=c(JSON.parse(e).tokens?.id_token),n=t[`https://api.openai.com/auth`];return{...typeof t.email==`string`?{email:t.email}:{},...typeof n?.chatgpt_plan_type==`string`?{plan:n.chatgpt_plan_type}:{}}}function u(e,t){let n=t.replace(o,``),r=/\x1b\]8;[^;]*;(https:\/\/[^\x07\x1b]+)(?:\x07|\x1b\\)/.exec(t)?.[1],i=e===`claude`?r??/https:\/\/\S*(?:oauth|authorize)\S*(?=\s)/.exec(n)?.[0]:/https:\/\/\S+(?=\s)/.exec(n)?.[0],a=e===`codex`?/\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/.exec(n)?.[0]:void 0;if(!(!i||e===`codex`&&!a))return{url:i,...a?{code:a}:{}}}const d=/sk-ant-oat[\w-]+/,f=e=>e.replace(/[\w#.%-]{20,}|\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/g,`…`).slice(-600),p=/\x1b(?:\[([0-9;?<>=]*)[ -/]*([@-~])|\][^\x07\x1b]*(?:\x07|\x1b\\)|[()][\s\S]|[^[\]()])/y;var m=class{height;rows=[[]];row=0;col=0;saved=[0,0];rest=``;constructor(e=50){this.height=e}write(e){let t=this.rest+e;this.rest=``;for(let e=0;e<t.length;){if(t[e]===`\x1B`){p.lastIndex=e;let n=p.exec(t);if(!n){this.rest=t.slice(e,e+4096);return}n[2]&&!/^[?<>=]/.test(n[1])?this.csi(n[1].split(`;`),n[2]):n[0]===`\x1B7`?this.saved=[this.row,this.col]:n[0]===`\x1B8`&&([this.row,this.col]=this.saved),e+=n[0].length;continue}let n=t.codePointAt(e),r=String.fromCodePoint(n);e+=r.length,r===`\r`?this.col=0:r===`
1
+ import{c as e}from"./task-DN4assR8.js";import t from"node:path";import n from"node:process";import{spawn as r}from"node:child_process";import i from"node:fs/promises";const a=[`SIGTERM`,`SIGINT`],o=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Z0-9]|\r/g;function s(e,t){if(e===`codex`)return{file:`codex`,args:[`login`,`--device-auth`],env:{CODEX_HOME:t}};let r=`stty cols 4000 rows 50 2>/dev/null; exec claude setup-token`;return{file:`sh`,args:[`-c`,`cat | { ${n.platform===`darwin`?`script -q /dev/null sh -c '${r}'`:`script -qfec '${r}' /dev/null`}; kill 0; }`],env:{CLAUDE_CONFIG_DIR:t,BROWSER:`true`}}}function c(e){try{return JSON.parse(Buffer.from(String(e).split(`.`)[1]??``,`base64url`).toString())}catch{return{}}}function l(e){let t=c(JSON.parse(e).tokens?.id_token),n=t[`https://api.openai.com/auth`];return{...typeof t.email==`string`?{email:t.email}:{},...typeof n?.chatgpt_plan_type==`string`?{plan:n.chatgpt_plan_type}:{}}}function u(e,t){let n=t.replace(o,``),r=/\x1b\]8;[^;]*;(https:\/\/[^\x07\x1b]+)(?:\x07|\x1b\\)/.exec(t)?.[1],i=e===`claude`?r??/https:\/\/\S*(?:oauth|authorize)\S*(?=\s)/.exec(n)?.[0]:/https:\/\/\S+(?=\s)/.exec(n)?.[0],a=e===`codex`?/\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/.exec(n)?.[0]:void 0;if(!(!i||e===`codex`&&!a))return{url:i,...a?{code:a}:{}}}const d=/sk-ant-oat[\w-]+/,f=e=>e.replace(/[\w#.%-]{20,}|\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/g,`…`).slice(-600),p=/\x1b(?:\[([0-9;?<>=]*)[ -/]*([@-~])|\][^\x07\x1b]*(?:\x07|\x1b\\)|[()][\s\S]|[^[\]()])/y;var m=class{height;rows=[[]];row=0;col=0;saved=[0,0];rest=``;constructor(e=50){this.height=e}write(e){let t=this.rest+e;this.rest=``;for(let e=0;e<t.length;){if(t[e]===`\x1B`){p.lastIndex=e;let n=p.exec(t);if(!n){this.rest=t.slice(e,e+4096);return}n[2]&&!/^[?<>=]/.test(n[1])?this.csi(n[1].split(`;`),n[2]):n[0]===`\x1B7`?this.saved=[this.row,this.col]:n[0]===`\x1B8`&&([this.row,this.col]=this.saved),e+=n[0].length;continue}let n=t.codePointAt(e),r=String.fromCodePoint(n);e+=r.length,r===`\r`?this.col=0:r===`
2
2
  `?this.down():r===`\b`?this.col=Math.max(0,this.col-1):n>=32&&n!==127&&(this.line()[this.col++]=r)}}text(){return this.rows.map(e=>Array.from(e,e=>e??` `).join(``).trimEnd()).join(`
3
3
  `)}line(){return this.rows[this.row]??=[]}down(){this.row<this.height-1?this.row++:this.rows.splice(0,this.rows.length-this.height+1)}csi(e,t){let n=(t=0)=>Number(e[t])||1,r=Number(e[0])||0,i=this.height-1;if(t===`A`)this.row=Math.max(0,this.row-n());else if(t===`B`)this.row=Math.min(i,this.row+n());else if(t===`C`)this.col+=n();else if(t===`D`)this.col=Math.max(0,this.col-n());else if(t===`E`||t===`F`)this.row=Math.max(0,Math.min(i,this.row+(t===`E`?n():-n()))),this.col=0;else if(t===`G`)this.col=n()-1;else if(t===`d`)this.row=Math.min(i,n()-1);else if(t===`H`||t===`f`)this.row=Math.min(i,n()-1),this.col=n(1)-1;else if(t===`K`){let e=this.line();r===0?e.length=Math.min(e.length,this.col):r===1?e.fill(` `,0,this.col+1):e.length=0}else t===`J`?r===0?(this.line().length=Math.min(this.line().length,this.col),this.rows.length=Math.min(this.rows.length,this.row+1)):r>=2&&(this.rows=[]):t===`s`?this.saved=[this.row,this.col]:t===`u`&&([this.row,this.col]=this.saved)}};async function h(c,p){let{server:h,token:g}=e();delete n.env.CODER_TASK_TOKEN,delete n.env.CODER_LOGIN;let _=new AbortController,v=async(e,t)=>{let n=e?_.signal:void 0;for(let r=1;;r++){let i=await fetch(`${h}/logins/${encodeURIComponent(c)}${e}`,{method:t===void 0?`GET`:`POST`,...n?{signal:n}:{},headers:{authorization:`Bearer ${g}`,...t===void 0?{}:{"content-type":`application/json`}},...t===void 0?{}:{body:JSON.stringify(t)}}).catch(t=>{if(n?.aborted||e===`/input`||r>=10)throw t;console.error(`coder runner: Coder server did not answer: ${t.message}`)});if(i?.ok)return await i.json();if(i&&(i.status<500||r>=10))throw Error(`Coder server answered ${i.status}`);i&&console.error(`coder runner: Coder server answered ${i.status}`),await new Promise(e=>setTimeout(e,1e3))}},{engine:y}=await v(``),b=await i.mkdtemp(t.join(p,`.login-`)),x=s(y,b),S=r(x.file,x.args,{env:{...n.env,...x.env},stdio:[`pipe`,`pipe`,`pipe`],detached:!0}),C=()=>{try{n.kill(-S.pid,`SIGTERM`)}catch{}},w=``,T=new m,E=!1,D=!1,O=0,k,A,j,M=new Promise((e,t)=>{S.once(`error`,t),S.once(`close`,e)}),N=setTimeout(C,6e5);for(let e of a)n.once(e,C);let P=async()=>{for(;!_.signal.aborted;){let{code:e}=await v(`/input`);if(e){k=w.length,S.stdin.write(e),await new Promise(e=>setTimeout(e,500)),S.stdin.write(`\r`),n.stdout.write(`Sign-in code typed
4
4
  `);let t=k;setTimeout(()=>{k===t&&!E&&console.error(`coder runner: claude has not answered the code: ${JSON.stringify(f(T.text()))}`)},2e4).unref();return}}},F=e=>{if(w+=e,T.write(e),!D){let e=u(y,w.slice(O));e&&(D=!0,clearInterval(A),n.stdout.write(`Sign-in link ready
@@ -0,0 +1 @@
1
+ import{t as e}from"./errors-DK_trCff.js";import"./dispatch-BkoIU4GU.js";import{n as t}from"./env-BwFCHakK.js";import{p as n}from"./drizzle-orm-CYU7WOQS.js";import{secret as r}from"./schema.js";import{Dr as i,Qt as a,ai as o,oi as s,ri as c,si as l}from"./apps-BORri-28.js";import u from"node:process";async function d(t){try{return await t()}catch(t){throw t instanceof e?t:new e(`server`,t instanceof Error?t.message:String(t))}}function f(f={}){return d(async()=>{let d=t(f.env??u.env);if(!d.encryptionKey)throw new e(`invalid-option`,`SERVER_ENCRYPTION_KEY is required to rotate keys.`,{hint:`Set the new key in SERVER_ENCRYPTION_KEY and the old key in SERVER_ENCRYPTION_KEY_PREVIOUS.`});let p=await i(d);try{let e=p.connection?.db;if(!e)return{moved:await a(p.store(p.defaultOrganizationId),d)};let t=s(d.encryptionKey),i=0;for(let a of await e.select().from(r))l(d,a.value)!==t&&(await e.update(r).set({value:o(d,c(d,a.value))}).where(n(r.id,a.id)),i++);return{moved:i}}finally{await p.close()}})}export{f as rotateKey};
@@ -1 +1 @@
1
- import{la as e,ua as t}from"./args-CJsHYWbt.js";import{s as n,t as r}from"./emit-BgeqsCkC.js";import{l as i,u as a,z as o}from"./config-D_RuO6gX.js";import{v as s}from"./connections-Cswv7r8Z.js";import{t as c}from"./dispatch-BaW2X6Sc.js";import{o as l,s as u}from"./mcp-BGx48pyR.js";import{n as d,r as f,t as p}from"./tools-oQvFAnh5.js";import{o as m}from"./async-CNhQ4wyZ.js";import{i as h,n as g,t as _}from"./tool-search-BkdgVolu.js";import v from"node:path";import y from"node:process";const b=[`CODER_HOME`,`CODER_MCP_MODE`,a,i,`CODEX_HOME`,`CLAUDE_CONFIG_DIR`,`CLAUDE_CODE_PROJECT_DIR_NAME`],x=()=>Object.fromEntries(b.flatMap(e=>y.env[e]?[[e,y.env[e]]]:[])),S=(e,t)=>!!e.readOnly||o(e.access,t)===`read-only`;async function C(e){let t=await s(e,fetch,AbortSignal.timeout(3e4));try{return await t.tools()}finally{await t.close().catch(()=>{})}}async function w(n,r,i,a){let s=e=>i.find(t=>t.name===e&&!t.command&&!t.url),d=s(`conversation`),f=s(t),m=e=>e.command?{...e,env:{...e.env,[c]:`1`}}:e,_=n.conversation?{...E(f?.env),connect:`start`}:void 0,b=[..._?[_]:[],...i.filter(e=>e!==d&&e!==f)].map(e=>m(S(e,e===_?`auto`:o(n.access,a.access))?{...e,readOnly:!0}:e)),C=A(n),w=p.flatMap(e=>{let t=e.platform&&u(i,e.platform);return t?[[l(e.platform),t]]:[]}),D=d?.env?.CODER_REPLY_URL,O=d?.env?.CODER_REPLY_TOKEN,j=D&&URL.canParse(D)?`${new URL(D).origin}/dash/settings/connections`:void 0;return{servers:[...C.length?[T(v.join(r,`job.json`),C,{...d?.env,...Object.fromEntries(w)})]:[],...b.length?[{...g({command:y.execPath,args:[e,`task`,`tools-search`],env:x()},b,j,D&&O?{url:D,token:O}:void 0,h(await k(b))),alwaysLoad:!0}]:[]].map(m),listed:b}}function T(t,r,i={}){return{name:d.name,command:y.execPath,args:[e,`task`,`tools`,...r],env:{...i,...x(),CODER_HISTORY_TASK:t},tools:r,alwaysLoad:!0,instructions:n(f(r))}}function E(n={}){return{name:t,command:y.execPath,args:[e,`mcp`],env:{...n,...x()}}}const D=(e,t=fetch)=>async(n,r)=>{let i=await t(`${e.url}/connection`,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:n.connection??n.name,url:n.url,connectionCreatedAt:n.connectionCreatedAt,...r?{refused:r}:{}}),signal:AbortSignal.timeout(1e4)});if(i.status===403)throw Error((await i.json()).error);if(!i.ok)throw Error(`The connection is unavailable (${i.status})`);return(await i.json()).token};async function O(e={}){let t=await import(`./context-CFrDYenS.js`),i=e.CODER_MCP_MODE===`cloud`?t.cloudApp:t.app,a=r(i).commands.flatMap(e=>e.command.mcp===!1?[]:[e.id]);return{description:i.description,started:{instructions:n(i,{tools:!1}),tools:[...a,...i.skills?.length?[`load_skill`]:[]]}}}function k(e){return Promise.all(e.map(async e=>{if(e.connect!==`start`)return e;if(e.name===`coder`)return{...e,...await O(e.env)};let t=await _(e,1e4).catch(()=>void 0);await t?.client.close().catch(()=>{});let n=t?.serverInfo?.description;return t?{...e,...n?{description:n}:{},started:{instructions:t.instructions,tools:t.tools.map(e=>e.name)}}:e}))}function A(e){let t=m(e);return[...p.some(e=>e.flow===t)?[]:p.map(e=>e.name),...(e.access??`auto`)===`auto`?[`escalate`]:[],...e.conversation?[`reply`,`react`,`history`]:[]]}export{C as listServerTools,D as serverCredential,A as taskToolNames,T as taskToolServer,w as turnToolServers};
1
+ import{la as e,ua as t}from"./args-CJsHYWbt.js";import{s as n,t as r}from"./emit-BgeqsCkC.js";import{l as i,u as a,z as o}from"./config-_32PHl9g.js";import{v as s}from"./connections-B90TemYf.js";import{t as c}from"./dispatch-BkoIU4GU.js";import{o as l,s as u}from"./mcp-cEIva8Pd.js";import{n as d,r as f,t as p}from"./tools-DVtBtED6.js";import{o as m}from"./async-BS9tyhva.js";import{i as h,n as g,t as _}from"./tool-search-C9Ty3hhL.js";import v from"node:path";import y from"node:process";const b=[`CODER_HOME`,`CODER_MCP_MODE`,a,i,`CODEX_HOME`,`CLAUDE_CONFIG_DIR`,`CLAUDE_CODE_PROJECT_DIR_NAME`],x=()=>Object.fromEntries(b.flatMap(e=>y.env[e]?[[e,y.env[e]]]:[])),S=(e,t)=>!!e.readOnly||o(e.access,t)===`read-only`;async function C(e){let t=await s(e,fetch,AbortSignal.timeout(3e4));try{return await t.tools()}finally{await t.close().catch(()=>{})}}async function w(n,r,i,a){let s=e=>i.find(t=>t.name===e&&!t.command&&!t.url),d=s(`conversation`),f=s(t),m=e=>e.command?{...e,env:{...e.env,[c]:`1`}}:e,_=n.conversation?{...E(f?.env),connect:`start`}:void 0,b=[..._?[_]:[],...i.filter(e=>e!==d&&e!==f)].map(e=>m(S(e,e===_?`auto`:o(n.access,a.access))?{...e,readOnly:!0}:e)),C=A(n),w=p.flatMap(e=>{let t=e.platform&&u(i,e.platform);return t?[[l(e.platform),t]]:[]}),D=d?.env?.CODER_REPLY_URL,O=d?.env?.CODER_REPLY_TOKEN,j=D&&URL.canParse(D)?`${new URL(D).origin}/dash/settings/connections`:void 0;return{servers:[...C.length?[T(v.join(r,`job.json`),C,{...d?.env,...Object.fromEntries(w)})]:[],...b.length?[{...g({command:y.execPath,args:[e,`task`,`tools-search`],env:x()},b,j,D&&O?{url:D,token:O}:void 0,h(await k(b))),alwaysLoad:!0}]:[]].map(m),listed:b}}function T(t,r,i={}){return{name:d.name,command:y.execPath,args:[e,`task`,`tools`,...r],env:{...i,...x(),CODER_HISTORY_TASK:t},tools:r,alwaysLoad:!0,instructions:n(f(r))}}function E(n={}){return{name:t,command:y.execPath,args:[e,`mcp`],env:{...n,...x()}}}const D=(e,t=fetch)=>async(n,r)=>{let i=await t(`${e.url}/connection`,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:n.connection??n.name,url:n.url,connectionCreatedAt:n.connectionCreatedAt,...r?{refused:r}:{}}),signal:AbortSignal.timeout(1e4)});if(i.status===403)throw Error((await i.json()).error);if(!i.ok)throw Error(`The connection is unavailable (${i.status})`);return(await i.json()).token};async function O(e={}){let t=await import(`./context-C1XBbfEL.js`),i=e.CODER_MCP_MODE===`cloud`?t.cloudApp:t.app,a=r(i).commands.flatMap(e=>e.command.mcp===!1?[]:[e.id]);return{description:i.description,started:{instructions:n(i,{tools:!1}),tools:[...a,...i.skills?.length?[`load_skill`]:[]]}}}function k(e){return Promise.all(e.map(async e=>{if(e.connect!==`start`)return e;if(e.name===`coder`)return{...e,...await O(e.env)};let t=await _(e,1e4).catch(()=>void 0);await t?.client.close().catch(()=>{});let n=t?.serverInfo?.description;return t?{...e,...n?{description:n}:{},started:{instructions:t.instructions,tools:t.tools.map(e=>e.name)}}:e}))}function A(e){let t=m(e);return[...p.some(e=>e.flow===t)?[]:p.map(e=>e.name),...(e.access??`auto`)===`auto`?[`escalate`]:[],...e.conversation?[`reply`,`react`,`history`]:[]]}export{C as listServerTools,D as serverCredential,A as taskToolNames,T as taskToolServer,w as turnToolServers};
@@ -1 +1 @@
1
- import{F as e,O as t,T as n,ba as r,j as i,t as a,u as o,va as s}from"./args-CJsHYWbt.js";import{command as c}from"./cli.js";import{n as l}from"./permission-BkYxjiFR.js";import{serve as u}from"./serve-DoYbHm_k.js";const d=a(n(t(i(),e())),`The tool's input.`),f=(e,t)=>s({name:`coder`,description:`Coder approval policy`,commands:[r({name:`approval_prompt`,description:`Coder approval policy for claude permission prompts.`,args:{tool_name:o(`The tool Claude asks to run.`),input:d,tool_input:d},access:`read`,run:n=>l(e,t,n),mcp:{text:e=>JSON.stringify(e)}})]}),p=c({name:`mcp`,description:`the coder MCP server engines call back into`,access:`write`,args:{"task-id":o()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,run:async({args:e,cwd:t})=>{await(await u(f(t,e[0]),`stdio`)).done}});export{p as commandTaskMcp};
1
+ import{F as e,O as t,T as n,ba as r,j as i,t as a,u as o,va as s}from"./args-CJsHYWbt.js";import{command as c}from"./cli.js";import{n as l}from"./permission-RSZM3DUk.js";import{serve as u}from"./serve-DoYbHm_k.js";const d=a(n(t(i(),e())),`The tool's input.`),f=(e,t)=>s({name:`coder`,description:`Coder approval policy`,commands:[r({name:`approval_prompt`,description:`Coder approval policy for claude permission prompts.`,args:{tool_name:o(`The tool Claude asks to run.`),input:d,tool_input:d},access:`read`,run:n=>l(e,t,n),mcp:{text:e=>JSON.stringify(e)}})]}),p=c({name:`mcp`,description:`the coder MCP server engines call back into`,access:`write`,args:{"task-id":o()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,run:async({args:e,cwd:t})=>{await(await u(f(t,e[0]),`stdio`)).done}});export{p as commandTaskMcp};
@@ -1,4 +1,4 @@
1
- import{a as e,l as t}from"./connections-Cswv7r8Z.js";import{t as n}from"./integrations-BVmsk64f.js";import r from"node:path";import i from"node:process";import a from"node:os";import o from"node:fs/promises";function s(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const c=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function l(e,t,r){let{tools:i,repos:a}=n[e],{readOnly:o,...s}=i.server(t,r.event,r.token,r.owner),l=Object.entries(s.env??{}).find(([,e])=>e===r.token)?.[0],d=t.some(e=>!i.presets[`read-only`].includes(e))?`auto`:`read-only`,f=r.account??(r.event?.integration===e?r.event.repo?.owner:void 0);return{...s,name:c(u(e,r.account)),integration:e,...f?{account:f}:{},access:d,...o?{readOnly:o}:{},...l?{credentialFields:{env:l}}:{},...a?.credentialUsername?{gitCredential:!0}:{}}}const u=(e,t)=>t?`${e}:${t}`:e;function d(e){if(!e?.integration||!n[e.integration])return;let t=l(e.integration,[],{token:`\0`}),r=Object.entries(t.env??{}).find(([,e])=>e===`\0`)?.[0],i=t.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function f(e,t){return d(e.find(e=>e.name===t))}function p(e,t){let r=new Set;return Object.keys(t).flatMap(i=>{let[a,o]=i.split(/:(.*)/),s=e.tools[a],c=t[i];if(!n[a]||!c||!s?.length)return[];let u=l(a,s,{token:c,...e.event?{event:e.event}:{},...o?{account:o}:{}}),d=u.name;for(let e=2;r.has(d);e++)d=`${u.name}-${e}`;return r.add(d),[{...u,name:d}]})}function m(e,n,r){let i=l(e.provider,n,{token:`\0`,...r?{event:r}:{},...e.owner?{owner:e.owner}:{}});for(let e of[`env`,`headers`])i[e]&&(i[e]=Object.fromEntries(Object.entries(i[e]).filter(([,e])=>!e.includes(`\0`))));return{...i,name:t(e),connection:e.id,credentialOnUse:i.credentialFields,owner:e.owner,account:e.login??e.account}}function h(t,n,r){return e(Object.fromEntries([...p(t,n).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}],[`native:coder`,{name:`coder`,resolved:!0,env:{CODER_SERVER:new URL(r.url).origin,CODER_TASK_TOKEN:r.token,...r.dashboard?{CODER_DASHBOARD:r.dashboard}:{}},credentialFields:{env:`CODER_TASK_TOKEN`}}]]:[]]))}async function g(e){let t=e.find(e=>e.name===`conversation`)?.env,s=t?.CODER_REPLY_URL&&t.CODER_REPLY_TOKEN?{url:`${t.CODER_REPLY_URL}/connection`,token:t.CODER_REPLY_TOKEN}:void 0,c=e.flatMap(e=>{let t=e.integration?n[e.integration]?.repos:void 0;if(!e.gitCredential||!t?.credentialUsername)return[];let r=d(e),i=s&&e.credentialOnUse&&e.access!==`read-only`?e.connection:void 0;return(r||i)&&!/[\r\n]/.test(r??``)?t.cloneHosts.map(n=>({host:n,username:t.credentialUsername,...r?{password:r}:{},...i?{connection:i}:{},...e.account?{owner:e.account.toLowerCase()}:{}})):[]});if(!c.length)return{env:{},close:async()=>{}};let l=await o.mkdtemp(r.join(a.tmpdir(),`coder-git-`)),u=r.join(l,`credential.cjs`);try{await o.writeFile(r.join(l,`tokens.json`),JSON.stringify({credentials:c,endpoint:s}),{mode:384}),await o.writeFile(u,`const fs = require('node:fs');
1
+ import{a as e,l as t}from"./connections-B90TemYf.js";import{t as n}from"./integrations-DSZSa8Rc.js";import r from"node:path";import i from"node:process";import a from"node:os";import o from"node:fs/promises";function s(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const c=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function l(e,t,r){let{tools:i,repos:a}=n[e],{readOnly:o,...s}=i.server(t,r.event,r.token,r.owner),l=Object.entries(s.env??{}).find(([,e])=>e===r.token)?.[0],d=t.some(e=>!i.presets[`read-only`].includes(e))?`auto`:`read-only`,f=r.account??(r.event?.integration===e?r.event.repo?.owner:void 0);return{...s,name:c(u(e,r.account)),integration:e,...f?{account:f}:{},access:d,...o?{readOnly:o}:{},...l?{credentialFields:{env:l}}:{},...a?.credentialUsername?{gitCredential:!0}:{}}}const u=(e,t)=>t?`${e}:${t}`:e;function d(e){if(!e?.integration||!n[e.integration])return;let t=l(e.integration,[],{token:`\0`}),r=Object.entries(t.env??{}).find(([,e])=>e===`\0`)?.[0],i=t.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function f(e,t){return d(e.find(e=>e.name===t))}function p(e,t){let r=new Set;return Object.keys(t).flatMap(i=>{let[a,o]=i.split(/:(.*)/),s=e.tools[a],c=t[i];if(!n[a]||!c||!s?.length)return[];let u=l(a,s,{token:c,...e.event?{event:e.event}:{},...o?{account:o}:{}}),d=u.name;for(let e=2;r.has(d);e++)d=`${u.name}-${e}`;return r.add(d),[{...u,name:d}]})}function m(e,n,r){let i=l(e.provider,n,{token:`\0`,...r?{event:r}:{},...e.owner?{owner:e.owner}:{}});for(let e of[`env`,`headers`])i[e]&&(i[e]=Object.fromEntries(Object.entries(i[e]).filter(([,e])=>!e.includes(`\0`))));return{...i,name:t(e),connection:e.id,credentialOnUse:i.credentialFields,owner:e.owner,account:e.login??e.account}}function h(t,n,r){return e(Object.fromEntries([...p(t,n).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}],[`native:coder`,{name:`coder`,resolved:!0,env:{CODER_SERVER:new URL(r.url).origin,CODER_TASK_TOKEN:r.token,...r.dashboard?{CODER_DASHBOARD:r.dashboard}:{}},credentialFields:{env:`CODER_TASK_TOKEN`}}]]:[]]))}async function g(e,t){return(await Promise.all(t.map(async t=>{try{let n=await fetch(e.url,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:t,git:!0}),signal:AbortSignal.timeout(1e4)});if(!n.ok)return;let{name:r,email:i}=(await n.json()).author??{};return{connection:t,...typeof r==`string`&&typeof i==`string`?{author:{name:r,email:i}}:{}}}catch(e){console.error(`coder: act-as probe failed for ${t}`,e);return}}))).find(e=>e!==void 0)}const _=e=>e?{GIT_AUTHOR_NAME:e.name,GIT_COMMITTER_NAME:e.name,GIT_AUTHOR_EMAIL:e.email,GIT_COMMITTER_EMAIL:e.email}:{};async function v(e){let t=e.find(e=>e.name===`conversation`)?.env,s=t?.CODER_REPLY_URL&&t.CODER_REPLY_TOKEN?{url:`${t.CODER_REPLY_URL}/connection`,token:t.CODER_REPLY_TOKEN}:void 0,c=e.flatMap(e=>{let t=e.integration?n[e.integration]?.repos:void 0;if(!e.gitCredential||!t?.credentialUsername)return[];let r=d(e),i=s&&e.credentialOnUse&&e.access!==`read-only`?e.connection:void 0;return(r||i)&&!/[\r\n]/.test(r??``)?t.cloneHosts.map(n=>({host:n,username:t.credentialUsername,...r?{password:r}:{},...i?{connection:i}:{},...e.account?{owner:e.account.toLowerCase()}:{},actAs:!1})):[]}),l=[...new Set(c.flatMap(e=>e.connection??[]))],u=s&&l.length?await g(s,l):void 0;for(let e of c)e.actAs=!!u&&!!e.connection&&e.connection===u.connection;let f=i.env.CODER_GIT_AUTHOR?JSON.parse(i.env.CODER_GIT_AUTHOR):void 0,p=_(u?u.author:f);if(!c.length)return{env:p,close:async()=>{}};let m=await o.mkdtemp(r.join(a.tmpdir(),`coder-git-`)),h=r.join(m,`credential.cjs`);try{let e={credentials:c,...c.some(e=>e.connection)?{endpoint:s}:{}};await o.writeFile(r.join(m,`tokens.json`),JSON.stringify(e),{mode:384}),await o.writeFile(h,`const fs = require('node:fs');
2
2
  let input = '';
3
3
  process.stdin.on('data', data => input += data);
4
4
  process.stdin.on('end', async () => {
@@ -8,9 +8,11 @@ process.stdin.on('end', async () => {
8
8
  const owner = (fields.path || '').split('/')[0].toLowerCase();
9
9
  const hosted = credentials.filter(entry => fields.protocol === 'https' && fields.host === entry.host);
10
10
  const apps = hosted.filter(entry => !entry.connection);
11
- const members = hosted.filter(entry => entry.connection);
11
+ const members = hosted.filter(entry => entry.connection && !entry.actAs);
12
12
  const covering = apps.find(entry => entry.owner === owner);
13
- const ordered = covering
13
+ // The account acted as is the only credential: refused, the push fails rather than pushing another way under its name.
14
+ const acting = hosted.filter(entry => entry.actAs);
15
+ const ordered = acting.length ? acting : covering
14
16
  ? [covering]
15
17
  : [...members.filter(entry => entry.owner === owner), ...members.filter(entry => entry.owner !== owner), ...apps.filter(entry => !entry.owner), ...apps.filter(entry => entry.owner)];
16
18
  for (const credential of ordered) {
@@ -22,4 +24,4 @@ process.stdin.on('end', async () => {
22
24
  if (password) return process.stdout.write('username=' + credential.username + '\\npassword=' + password + '\\n');
23
25
  }
24
26
  });
25
- `,{mode:384});let e=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,t=Number(i.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(t)||t<0||t>1e3)throw Error(`Invalid git config count`);return{env:{GIT_CONFIG_COUNT:String(t+3),[`GIT_CONFIG_KEY_${t}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${t}`]:``,[`GIT_CONFIG_KEY_${t+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${t+1}`]:`!${e(i.execPath)} ${e(u)}`,[`GIT_CONFIG_KEY_${t+2}`]:`credential.useHttpPath`,[`GIT_CONFIG_VALUE_${t+2}`]:`true`},close:()=>o.rm(l,{recursive:!0,force:!0})}}catch(e){throw await o.rm(l,{recursive:!0,force:!0}),e}}export{c as a,h as i,g as n,s as o,u as r,f as s,m as t};
27
+ `,{mode:384});let t=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,n=Number(i.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(n)||n<0||n>1e3)throw Error(`Invalid git config count`);return{env:{...p,GIT_CONFIG_COUNT:String(n+3),[`GIT_CONFIG_KEY_${n}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${n}`]:``,[`GIT_CONFIG_KEY_${n+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${n+1}`]:`!${t(i.execPath)} ${t(h)}`,[`GIT_CONFIG_KEY_${n+2}`]:`credential.useHttpPath`,[`GIT_CONFIG_VALUE_${n+2}`]:`true`},close:()=>o.rm(m,{recursive:!0,force:!0})}}catch(e){throw await o.rm(m,{recursive:!0,force:!0}),e}}export{c as a,h as i,v as n,s as o,u as r,f as s,m as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{B as n,C as r,G as i,O as a,R as o,S as s,b as c,c as l,f as u,j as d,k as f,r as p,v as m,w as h,x as g}from"./config-D_RuO6gX.js";import{n as _}from"./remote-BbXx6S9P.js";import{M as v,O as y}from"./dispatch-BaW2X6Sc.js";import b from"node:path";import x from"node:process";var S=e({detectWireApi:()=>G,models:()=>U,probeEndpoint:()=>w});const C=new Set([`codex`,`claude`,`custom`]);async function w(e,t={}){let n=`key`in t?t.key:e.envKey?x.env[e.envKey]:void 0,r=t.fetch??fetch,i=c(e.baseUrl,`models`),a=null;for(let t of i)try{let i=await r(t,{headers:n?{Authorization:`Bearer ${n}`}:{},signal:AbortSignal.timeout(5e3)});if(!i.ok){a=i.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${t} -> HTTP ${i.status}`};continue}let o=await i.json().catch(()=>null),s=Array.isArray(o?.data)?o.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};let c=Object.fromEntries(o.data.flatMap(e=>{let t=T(e.context_window??e.context_length??e.max_model_len);return typeof e.id==`string`&&t?[[e.id,t]]:[]})),l=Object.keys(c).length?c:await E(e.baseUrl,e.model?[e.model]:s,n,r),u=Object.keys(l).length?{contextWindows:l}:{};if(!e.model)return{reachable:!0,modelListed:null,models:s,...u,detail:`endpoint reachable; ${s.length} models listed`};let d=s.includes(e.model);return{reachable:!0,modelListed:d,models:s,...u,detail:d?`endpoint reachable; model "${e.model}" listed`:`endpoint reachable, but "${e.model}" is not in its model list`}}catch(e){a={reachable:!1,modelListed:null,models:null,detail:`${t} unreachable (${e instanceof Error?e.message:String(e)})`}}return a}const T=e=>Number.isInteger(e)&&e>0?e:void 0;async function E(e,t,n,r){let i=`${a(e).replace(/\/v1$/,``)}/api/show`,o=async e=>{let t=await r(i,{method:`POST`,headers:{"content-type":`application/json`,...n?{Authorization:`Bearer ${n}`}:{}},body:JSON.stringify({model:e}),signal:AbortSignal.timeout(5e3)}).catch(()=>null),a=(t?.ok?await t.json().catch(()=>null):null)?.model_info??{},o=Object.keys(a).find(e=>e.endsWith(`.context_length`));return o?T(a[o]):void 0},[s,...c]=t,l=s?await o(s):void 0;if(!l)return{};let u=await Promise.all(c.map(async e=>[e,await o(e)]));return Object.fromEntries([[s,l],...u].filter(e=>!!e[1]))}function D(e,t){i(e,e=>{e.models=e.models??{},t(e.models)})}const O=(e,t=p)=>Object.fromEntries(Object.entries(t).flatMap(([t,n])=>{let[r,i]=n.split(`/`);return r===e&&i?[[t,i]]:[]}));function k(e){let t=e.models??{},n=Object.entries(t).filter(e=>r(e[1])),i=Object.entries(t).filter(e=>g(e[1])).map(([t,n])=>{let r=u(n,e),i=O(r.engine),a=(r.model&&i[r.model])??r.model,o=()=>[r.engine,r.model,r.effort].filter(Boolean).join(`/`),c=s(t)?t:Object.entries(i).find(([,e])=>e===a)?.[0];return{name:t,spec:o(),replaces:c,disabled:!1}}),a=new Map;for(let e of i)e.replaces&&(e.name===e.replaces||!a.has(e.replaces))&&a.get(e.replaces)?.name!==e.replaces&&a.set(e.replaces,e);let o=e=>t[e]===!1,c=i.filter(e=>![...a.values()].some(t=>t.name===e.name));return{models:t,endpoints:n,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=a.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:o(e)}}),...c.filter(t=>t.spec.startsWith(`${e}/`)).map(({name:e,spec:t,disabled:n})=>({alias:e,spec:t,disabled:n}))],toggledSlugs:Object.entries(t).filter(([e,t])=>t===!1&&!s(e)).map(([e])=>({name:e,disabled:!0})),disabled:o}}async function A(e,t){let n=t?await _(t).models.list():void 0,{endpoints:r,providerRows:i,toggledSlugs:a}=k(n?{models:n.models}:h(e)),o=await Promise.all(r.map(async([e,t])=>({name:e,...t,...n?{}:{probe:await w(t)}})));return{codex:i(`codex`,O(`codex`,n?.builtin)),claude:i(`claude`,O(`claude`,n?.builtin)),custom:o,...a.length?{toggles:a}:{}}}async function j(e,t,n,r){let i=await G(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi;let o=await w(t),s=o.contextWindows?.[t.model];!t.contextWindow&&s&&(t.contextWindow=s),D(n,n=>{n[e]=t});let c=y(v(r)),l=v(r);return{name:e,entry:t,file:n,probe:o,codex:l,install:c,nativeResponses:a,keyMissing:!!(t.envKey&&!x.env[t.envKey]),ready:o.reachable&&l.available}}const M=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR] [--context-window <tokens>]`,N=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR] [--context-window <tokens>]`,P=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex/luna)`,F=`List them: coder model list`;function I(e,n,r){if(!e)throw new t(`invalid-option`,`Missing model name.`,{hint:r});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new t(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(l.has(e)||n===`model`&&(C.has(e)||s(e)))throw new t(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function L(e,n,i){I(n,`model`,M);let o=h(e).models?.[n];if(o)throw new t(`invalid-option`,r(o)?`Custom model "${n}" already exists.`:`"${n}" is already configured as an ${g(o)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${n} [--base-url|--model|--env-key], or remove it first.`});if(!i.baseUrl||!i.model)throw new t(`invalid-option`,`Missing --base-url or --model.`,{hint:M});return j(n,{baseUrl:a(i.baseUrl),model:i.model,...i.envKey?{envKey:i.envKey}:{},...i.contextWindow?{contextWindow:i.contextWindow}:{}},m(e,i.workspace),e)}async function R(e,n,i){let o=n?h(e).models?.[n]:void 0,s=o&&r(o)?o:void 0;if(!n||!s)throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:N});if(!i.baseUrl&&!i.model&&!i.envKey&&!i.contextWindow)throw new t(`invalid-option`,`Nothing to update: pass --base-url, --model, --env-key, or --context-window.`,{hint:N});let c={...s,...i.baseUrl?{baseUrl:a(i.baseUrl)}:{},...i.model?{model:i.model}:{},...i.envKey?{envKey:i.envKey}:{}};return i.contextWindow?c.contextWindow=i.contextWindow:(c.model!==s.model||c.baseUrl!==s.baseUrl)&&delete c.contextWindow,j(n,c,m(e,i.workspace),e)}function z(e,n,r={}){if(!n||!h(e).models?.[n])throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:`Usage: coder model remove <name>`});let a=m(e,r.workspace);return i(a,e=>d(e,n)),{removed:n,file:a}}function B(e,n,i,a={}){I(n,`alias`,P);let s=h(e),c=s.models?.[n];if(c&&r(c))throw new t(`invalid-option`,`"${n}" is a custom model name; pick another alias name.`);if(!i)throw new t(`invalid-option`,`Missing alias spec.`,{hint:P});let l;try{l=f(i,s)}catch(e){throw new t(`invalid-option`,e instanceof Error?e.message:String(e),{hint:P})}if(!l||!l.model)throw new t(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:P});if(C.has(n)&&l.engine!==n)throw new t(`invalid-option`,`The ${n} alias names a ${n} model.`,{hint:P});if(l.engine===`custom`&&n!==`custom`)throw new t(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let u=o(i),d=[l.engine,u.model??l.model,u.effort].filter(Boolean).join(`/`),p=m(e,a.workspace);return D(p,e=>{e[n]=d}),{alias:n,model:d,file:p}}function V(e,n,r={}){let a=n?h(e).models?.[n]:void 0;if(!n||!a||!g(a))throw new t(`invalid-option`,n?`No alias named "${n}".`:`Missing alias name.`,{hint:n?F:`Usage: coder model unalias <name>`});let o=m(e,r.workspace);return i(o,e=>d(e,n)),{unaliased:n,file:o}}function H(e,r,i,a={}){if(!r)throw new t(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${i?`disable`:`enable`} <name>`});let o=m(e,a.workspace);return D(o,e=>n(e,r,i)),{name:r,disabled:i,file:o}}const U={add:(e,t)=>L(b.resolve(t.cwd??`.`),e,t),update:(e,t)=>t.server===void 0?R(b.resolve(t.cwd??`.`),e,t):_({server:t.server}).models.update(e,{...t.baseUrl?{baseUrl:t.baseUrl}:{},...t.model?{model:t.model}:{},...t.envKey?{envKey:t.envKey}:{},...t.contextWindow?{contextWindow:t.contextWindow}:{}}),remove:(e,t={})=>z(b.resolve(t.cwd??`.`),e,t),list:({cwd:e,workspace:t,...n}={})=>A(b.resolve(e??`.`),n.server===void 0?void 0:{...n,organization:n.organization??t}),alias:(e,t,n={})=>n.server===void 0?B(b.resolve(n.cwd??`.`),e,t,n):_({server:n.server}).models.alias(e,t),unalias:(e,t={})=>V(b.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!0,t):_({server:t.server}).models.disable(e),enable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!1,t):_({server:t.server}).models.enable(e)};async function W(e,t,n){let r=e.envKey?x.env[e.envKey]:void 0,i=!1;for(let a of c(e.baseUrl,t))try{let e=await fetch(a,{method:`POST`,headers:{"content-type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify(n),signal:AbortSignal.timeout(5e3)});if(i=!0,e.status!==404&&e.status!==405&&e.status!==501)return{baseUrl:a.slice(0,-(t.length+1))}}catch{}return{reachable:i}}async function G(e){let t=await W(e,`responses`,{model:e.model,input:[],stream:!1});if(`baseUrl`in t)return{wireApi:`responses`,baseUrl:t.baseUrl};let n=await W(e,`chat/completions`,{model:e.model,messages:[],stream:!1});return`baseUrl`in n?{wireApi:`chat`,baseUrl:n.baseUrl}:t.reachable||n.reachable?{wireApi:`chat`}:null}export{w as i,U as n,S as r,G as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{B as n,C as r,G as i,O as a,R as o,S as s,b as c,c as l,f as u,j as d,k as f,r as p,v as m,w as h,x as g}from"./config-_32PHl9g.js";import{n as _}from"./remote-CY-qYX2C.js";import{M as v,O as y}from"./dispatch-BkoIU4GU.js";import b from"node:path";import x from"node:process";var S=e({detectWireApi:()=>G,models:()=>U,probeEndpoint:()=>w});const C=new Set([`codex`,`claude`,`custom`]);async function w(e,t={}){let n=`key`in t?t.key:e.envKey?x.env[e.envKey]:void 0,r=t.fetch??fetch,i=c(e.baseUrl,`models`),a=null;for(let t of i)try{let i=await r(t,{headers:n?{Authorization:`Bearer ${n}`}:{},signal:AbortSignal.timeout(5e3)});if(!i.ok){a=i.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${t} -> HTTP ${i.status}`};continue}let o=await i.json().catch(()=>null),s=Array.isArray(o?.data)?o.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};let c=Object.fromEntries(o.data.flatMap(e=>{let t=T(e.context_window??e.context_length??e.max_model_len);return typeof e.id==`string`&&t?[[e.id,t]]:[]})),l=Object.keys(c).length?c:await E(e.baseUrl,e.model?[e.model]:s,n,r),u=Object.keys(l).length?{contextWindows:l}:{};if(!e.model)return{reachable:!0,modelListed:null,models:s,...u,detail:`endpoint reachable; ${s.length} models listed`};let d=s.includes(e.model);return{reachable:!0,modelListed:d,models:s,...u,detail:d?`endpoint reachable; model "${e.model}" listed`:`endpoint reachable, but "${e.model}" is not in its model list`}}catch(e){a={reachable:!1,modelListed:null,models:null,detail:`${t} unreachable (${e instanceof Error?e.message:String(e)})`}}return a}const T=e=>Number.isInteger(e)&&e>0?e:void 0;async function E(e,t,n,r){let i=`${a(e).replace(/\/v1$/,``)}/api/show`,o=async e=>{let t=await r(i,{method:`POST`,headers:{"content-type":`application/json`,...n?{Authorization:`Bearer ${n}`}:{}},body:JSON.stringify({model:e}),signal:AbortSignal.timeout(5e3)}).catch(()=>null),a=(t?.ok?await t.json().catch(()=>null):null)?.model_info??{},o=Object.keys(a).find(e=>e.endsWith(`.context_length`));return o?T(a[o]):void 0},[s,...c]=t,l=s?await o(s):void 0;if(!l)return{};let u=await Promise.all(c.map(async e=>[e,await o(e)]));return Object.fromEntries([[s,l],...u].filter(e=>!!e[1]))}function D(e,t){i(e,e=>{e.models=e.models??{},t(e.models)})}const O=(e,t=p)=>Object.fromEntries(Object.entries(t).flatMap(([t,n])=>{let[r,i]=n.split(`/`);return r===e&&i?[[t,i]]:[]}));function k(e){let t=e.models??{},n=Object.entries(t).filter(e=>r(e[1])),i=Object.entries(t).filter(e=>g(e[1])).map(([t,n])=>{let r=u(n,e),i=O(r.engine),a=(r.model&&i[r.model])??r.model,o=()=>[r.engine,r.model,r.effort].filter(Boolean).join(`/`),c=s(t)?t:Object.entries(i).find(([,e])=>e===a)?.[0];return{name:t,spec:o(),replaces:c,disabled:!1}}),a=new Map;for(let e of i)e.replaces&&(e.name===e.replaces||!a.has(e.replaces))&&a.get(e.replaces)?.name!==e.replaces&&a.set(e.replaces,e);let o=e=>t[e]===!1,c=i.filter(e=>![...a.values()].some(t=>t.name===e.name));return{models:t,endpoints:n,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=a.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:o(e)}}),...c.filter(t=>t.spec.startsWith(`${e}/`)).map(({name:e,spec:t,disabled:n})=>({alias:e,spec:t,disabled:n}))],toggledSlugs:Object.entries(t).filter(([e,t])=>t===!1&&!s(e)).map(([e])=>({name:e,disabled:!0})),disabled:o}}async function A(e,t){let n=t?await _(t).models.list():void 0,{endpoints:r,providerRows:i,toggledSlugs:a}=k(n?{models:n.models}:h(e)),o=await Promise.all(r.map(async([e,t])=>({name:e,...t,...n?{}:{probe:await w(t)}})));return{codex:i(`codex`,O(`codex`,n?.builtin)),claude:i(`claude`,O(`claude`,n?.builtin)),custom:o,...a.length?{toggles:a}:{}}}async function j(e,t,n,r){let i=await G(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi;let o=await w(t),s=o.contextWindows?.[t.model];!t.contextWindow&&s&&(t.contextWindow=s),D(n,n=>{n[e]=t});let c=y(v(r)),l=v(r);return{name:e,entry:t,file:n,probe:o,codex:l,install:c,nativeResponses:a,keyMissing:!!(t.envKey&&!x.env[t.envKey]),ready:o.reachable&&l.available}}const M=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR] [--context-window <tokens>]`,N=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR] [--context-window <tokens>]`,P=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex/luna)`,F=`List them: coder model list`;function I(e,n,r){if(!e)throw new t(`invalid-option`,`Missing model name.`,{hint:r});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new t(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(l.has(e)||n===`model`&&(C.has(e)||s(e)))throw new t(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function L(e,n,i){I(n,`model`,M);let o=h(e).models?.[n];if(o)throw new t(`invalid-option`,r(o)?`Custom model "${n}" already exists.`:`"${n}" is already configured as an ${g(o)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${n} [--base-url|--model|--env-key], or remove it first.`});if(!i.baseUrl||!i.model)throw new t(`invalid-option`,`Missing --base-url or --model.`,{hint:M});return j(n,{baseUrl:a(i.baseUrl),model:i.model,...i.envKey?{envKey:i.envKey}:{},...i.contextWindow?{contextWindow:i.contextWindow}:{}},m(e,i.workspace),e)}async function R(e,n,i){let o=n?h(e).models?.[n]:void 0,s=o&&r(o)?o:void 0;if(!n||!s)throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:N});if(!i.baseUrl&&!i.model&&!i.envKey&&!i.contextWindow)throw new t(`invalid-option`,`Nothing to update: pass --base-url, --model, --env-key, or --context-window.`,{hint:N});let c={...s,...i.baseUrl?{baseUrl:a(i.baseUrl)}:{},...i.model?{model:i.model}:{},...i.envKey?{envKey:i.envKey}:{}};return i.contextWindow?c.contextWindow=i.contextWindow:(c.model!==s.model||c.baseUrl!==s.baseUrl)&&delete c.contextWindow,j(n,c,m(e,i.workspace),e)}function z(e,n,r={}){if(!n||!h(e).models?.[n])throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:`Usage: coder model remove <name>`});let a=m(e,r.workspace);return i(a,e=>d(e,n)),{removed:n,file:a}}function B(e,n,i,a={}){I(n,`alias`,P);let s=h(e),c=s.models?.[n];if(c&&r(c))throw new t(`invalid-option`,`"${n}" is a custom model name; pick another alias name.`);if(!i)throw new t(`invalid-option`,`Missing alias spec.`,{hint:P});let l;try{l=f(i,s)}catch(e){throw new t(`invalid-option`,e instanceof Error?e.message:String(e),{hint:P})}if(!l||!l.model)throw new t(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:P});if(C.has(n)&&l.engine!==n)throw new t(`invalid-option`,`The ${n} alias names a ${n} model.`,{hint:P});if(l.engine===`custom`&&n!==`custom`)throw new t(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let u=o(i),d=[l.engine,u.model??l.model,u.effort].filter(Boolean).join(`/`),p=m(e,a.workspace);return D(p,e=>{e[n]=d}),{alias:n,model:d,file:p}}function V(e,n,r={}){let a=n?h(e).models?.[n]:void 0;if(!n||!a||!g(a))throw new t(`invalid-option`,n?`No alias named "${n}".`:`Missing alias name.`,{hint:n?F:`Usage: coder model unalias <name>`});let o=m(e,r.workspace);return i(o,e=>d(e,n)),{unaliased:n,file:o}}function H(e,r,i,a={}){if(!r)throw new t(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${i?`disable`:`enable`} <name>`});let o=m(e,a.workspace);return D(o,e=>n(e,r,i)),{name:r,disabled:i,file:o}}const U={add:(e,t)=>L(b.resolve(t.cwd??`.`),e,t),update:(e,t)=>t.server===void 0?R(b.resolve(t.cwd??`.`),e,t):_({server:t.server}).models.update(e,{...t.baseUrl?{baseUrl:t.baseUrl}:{},...t.model?{model:t.model}:{},...t.envKey?{envKey:t.envKey}:{},...t.contextWindow?{contextWindow:t.contextWindow}:{}}),remove:(e,t={})=>z(b.resolve(t.cwd??`.`),e,t),list:({cwd:e,workspace:t,...n}={})=>A(b.resolve(e??`.`),n.server===void 0?void 0:{...n,organization:n.organization??t}),alias:(e,t,n={})=>n.server===void 0?B(b.resolve(n.cwd??`.`),e,t,n):_({server:n.server}).models.alias(e,t),unalias:(e,t={})=>V(b.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!0,t):_({server:t.server}).models.disable(e),enable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!1,t):_({server:t.server}).models.enable(e)};async function W(e,t,n){let r=e.envKey?x.env[e.envKey]:void 0,i=!1;for(let a of c(e.baseUrl,t))try{let e=await fetch(a,{method:`POST`,headers:{"content-type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify(n),signal:AbortSignal.timeout(5e3)});if(i=!0,e.status!==404&&e.status!==405&&e.status!==501)return{baseUrl:a.slice(0,-(t.length+1))}}catch{}return{reachable:i}}async function G(e){let t=await W(e,`responses`,{model:e.model,input:[],stream:!1});if(`baseUrl`in t)return{wireApi:`responses`,baseUrl:t.baseUrl};let n=await W(e,`chat/completions`,{model:e.model,messages:[],stream:!1});return`baseUrl`in n?{wireApi:`chat`,baseUrl:n.baseUrl}:t.reachable||n.reachable?{wireApi:`chat`}:null}export{w as i,U as n,S as r,G as t};
@@ -1 +1 @@
1
- import{V as e,bt as t,gt as n,o as r}from"./state-Br-Fuaxg.js";import{c as i,r as a}from"./approvals-CRwkc9vB.js";import o from"node:path";function s(e,t,n){let i=String(n.tool_name??``),o=n.input??n.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return r(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,n,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,n),o):void 0;return s?(r(t,n,{kind:`approval-decision`,method:`Bash`,decision:`accept`,approvalId:s.id,summary:`run command: ${o.trim()}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`allow`,permissionDecisionReason:`Coder: approved action ${s.id}`,updatedInput:a.tool_input}}):null}async function l(i,a,s,c){let l=String(s.tool_name??``);if(!c||!l.startsWith(`mcp__`))return null;let[{claudeToolName:u},{listServerTools:d}]=await Promise.all([import(`./dispatch-BaW2X6Sc.js`).then(e=>e.v),import(`./mcp-BGam3G_B.js`)]),f=n(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&n(p)?.[f.name],h=`This task is read-only.`;if(f&&!m)try{m=(await d(f)).filter(e=>e.annotations?.readOnlyHint===!0).map(e=>e.name),t(p,{...n(p),[f.name]:m})}catch(e){h=`This task is read-only, and MCP server "${f.name}" did not list its tools (${e instanceof Error?e.message:String(e)}).`}return f&&m?.some(e=>u(f.name,e)===l)?null:(r(i,a,{kind:`approval-decision`,method:l,decision:`decline`,reason:h,summary:`${l}: ${JSON.stringify(s.tool_input??{}).slice(0,200)}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`deny`,permissionDecisionReason:h}})}export{s as n,l as r,c as t};
1
+ import{V as e,bt as t,gt as n,o as r}from"./state-CxAUec80.js";import{c as i,r as a}from"./approvals-C8XV7CK2.js";import o from"node:path";function s(e,t,n){let i=String(n.tool_name??``),o=n.input??n.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return r(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,n,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,n),o):void 0;return s?(r(t,n,{kind:`approval-decision`,method:`Bash`,decision:`accept`,approvalId:s.id,summary:`run command: ${o.trim()}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`allow`,permissionDecisionReason:`Coder: approved action ${s.id}`,updatedInput:a.tool_input}}):null}async function l(i,a,s,c){let l=String(s.tool_name??``);if(!c||!l.startsWith(`mcp__`))return null;let[{claudeToolName:u},{listServerTools:d}]=await Promise.all([import(`./dispatch-BkoIU4GU.js`).then(e=>e.v),import(`./mcp-Caq72REF.js`)]),f=n(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&n(p)?.[f.name],h=`This task is read-only.`;if(f&&!m)try{m=(await d(f)).filter(e=>e.annotations?.readOnlyHint===!0).map(e=>e.name),t(p,{...n(p),[f.name]:m})}catch(e){h=`This task is read-only, and MCP server "${f.name}" did not list its tools (${e instanceof Error?e.message:String(e)}).`}return f&&m?.some(e=>u(f.name,e)===l)?null:(r(i,a,{kind:`approval-decision`,method:l,decision:`decline`,reason:h,summary:`${l}: ${JSON.stringify(s.tool_input??{}).slice(0,200)}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`deny`,permissionDecisionReason:h}})}export{s as n,l as r,c as t};
@@ -0,0 +1,11 @@
1
+ function e(e,t,n){return{from:`cloud`,coder:new URL(e).origin,...n===void 0?{}:{images:n},...t?{task:t}:{}}}const t=(e,t,n)=>`<picture><source media="(prefers-color-scheme: dark)" srcset="${e}/${t}-dark.svg"><img align="absmiddle" alt="${n}" src="${e}/${t}-light.svg"></picture>`,n=e=>e[0].toUpperCase()+e.slice(1),r=e=>e.replace(/<([A-Za-z/!?])/g,`<​$1`).replace(/\]\(/g,`]​(`).replace(/\]:/g,`]​:`).replace(/!\[/g,`!​[`).replace(/&([#A-Za-z])/g,`&​$1`).replace(/@([\w-])/g,`@​$1`).replace(/(https?):\/\//gi,`$1​://`).replace(/www\./gi,`www​.`),i=e=>r(e.trim()),a=/[!-/:-@[-`{-~]/,o=e=>{let t=r(e.replace(/\s+/g,` `).trim()),n=``;for(let e=0;e<t.length;){let r=t[e];if(r===`\\`){let r=t[e+1],i=r!==void 0&&a.test(r);n+=i?`\\${r}`:`\\\\`,e+=i?2:1}else if(r==="`"){let r=t.slice(e).match(/^`+/)[0],i=/`+/g;i.lastIndex=e+r.length;let a;for(;(a=i.exec(t))&&a[0].length!==r.length;);n+=a?t.slice(e,i.lastIndex):r.replace(/`/g,"\\`"),e=a?i.lastIndex:e+r.length}else n+=r===`[`||r===`]`?`\\${r}`:r,e+=1}return n},s=e=>{let t=e.replace(/[\r\n]+/g,` `),n="`".repeat(Math.max(0,...(t.match(/`+/g)??[]).map(e=>e.length))+1),r=/^`|`$/.test(t)?` `:``;return`${n}${r}${t}${r}${n}`};function c(e,t,r,i){let a=o(e),c=[a.length>200?`${a.slice(0,199)}…`:a],l=`[View the review](${r})${i?` · [View task](${i})`:``}`,u=c[0].length+1+l.length;for(let[e,r]of t.entries()){let i=`- ${n(r.severity)} ${o(r.summary)} ${s(`${r.file}:${r.start_line?`${r.start_line}-`:``}${r.line}`)}`,a=t.length-e-1,l=a?`and ${a} more`:``;if(u+1+i.length+(l?1+l.length:0)>65e3){c.push(`and ${t.length-e} more`);break}c.push(i),u+=1+i.length}return[...c,l].join(`
2
+ `)}const l=(e,t)=>`<a href="https://github.com/${e}/commit/${t}"><code>${t.slice(0,7)}</code></a>`,u=e=>e.since?`<a href="https://github.com/${e.repo}/compare/${e.since}..${e.headSha}"><code>${e.since.slice(0,7)}..${e.headSha.slice(0,7)}</code></a>`:l(e.repo,e.headSha);function d(e){return e.images===void 0?`<sub>Posted by [coder ${e.from}](${e.coder})${e.task?` · [View task](${e.task})`:``}</sub>`:[`<a href="${e.coder}">${t(e.images,`btn-${e.from}`,`Posted by coder ${e.from}`)}</a>`,...e.task?[`<a href="${e.task}">${t(e.images,`btn-task`,`View task`)}</a>`]:[]].join(` `)}function f(e,r=new Map){let{target:a,findings:c,links:l}=e,f=e.title?.replace(/\s+/g,` `).trim()??``,p=f.length>200?`${f.slice(0,199)}…`:f,m=`Reviewed ${u(a)}`,h=e=>e.inline===!1?void 0:r.get(e.fingerprint),g=c.map(e=>{let r=h(e),a=o(e.summary),c=r?`[${a}](${r})`:a,u=r?e.file.split(`/`).pop():e.file,d=r?``:`\n\n ${i(e.failure_scenario).replace(/\n/g,`
3
+ `)}`;return`- ${l.images===void 0?`**${n(e.severity)}**`:t(l.images,`sev-${e.severity}`,n(e.severity))} ${c} <sub>${s(`${u}:${e.start_line?`${e.start_line}-`:``}${e.line}`)}</sub>${d}`}),_=c.length?[`<details open>`,`<summary>${m}: <b>${c.length} issue${c.length===1?``:`s`}</b></summary>`,``,g.join(c.some(e=>!h(e))?`
4
+
5
+ `:`
6
+ `),``,`</details>`].join(`
7
+ `):``;return[o(p)||(!e.body.trim()&&!c.length?`Nothing to report.`:``),i(e.body),a.forcePushed&&a.since?`> [!WARNING]\n> The branch no longer contains <code>${a.since.slice(0,7)}</code> after a force-push. This review covers lines changed since it.`:``,_||m,d(l),`<!-- coder-review head=${a.headSha} -->`].filter(Boolean).join(`
8
+
9
+ `)}function p(e,r){return[`### ${o(e.summary)}`,r===void 0?`**${n(e.severity)}**`:t(r,`sev-${e.severity}`,n(e.severity)),i(e.failure_scenario),`<!-- coder-review:fp=${e.fingerprint} -->`].join(`
10
+
11
+ `)}async function m(e,t,n,r,i=()=>!1){let{target:a}=t,o=await e.threads(a,n,r);if(i())throw Error(`The review was stopped before posting.`);let s=t.findings.filter(e=>e.inline!==!1&&!o.has(e.fingerprint)),c=s.map(e=>({file:e.file,line:e.line,...e.start_line?{startLine:e.start_line}:{},body:p(e,t.links.images)}));try{return{url:(await e.post(a,{comments:c,body:e=>f(t,new Map([...o,...e]))},n,r)).url,posted:s.length}}catch(s){if(!c.length)throw s;if(i())throw Error(`The review was stopped before posting.`);return console.error(`coder review: posting ${a.repo}#${a.number} again without inline comments`,s),{url:(await e.post(a,{comments:[],body:()=>f(t,o)},n,r)).url,posted:0}}}export{c as n,e as r,m as t};
@@ -1 +1 @@
1
- import{ma as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{a as n}from"./update-check-UyRob3yy.js";const r=t({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>n(e())});export{r as commandRefreshUpdate};
1
+ import{ma as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{a as n}from"./update-check-Bap3dwaj.js";const r=t({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>n(e())});export{r as commandRefreshUpdate};
@@ -1,2 +1,2 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{i as t,ot as n}from"./state-Br-Fuaxg.js";import{R as r}from"./config-D_RuO6gX.js";import{a as i}from"./definition-4on4SG5J.js";import{t as a}from"./approvals-CRwkc9vB.js";import{l as o}from"./view-D-rbQ1Kz.js";var s=e({iso:()=>c,remoteAnswer:()=>h,remoteApprovals:()=>p,remoteInspection:()=>_,remoteResult:()=>d,remoteStep:()=>g,remoteTask:()=>f});const c=e=>e===void 0?void 0:new Date(e).toISOString();function l(e){let t=(e??``).trim().split(`
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{i as t,ot as n}from"./state-CxAUec80.js";import{R as r}from"./config-_32PHl9g.js";import{a as i}from"./definition-D0OpQfGX.js";import{t as a}from"./approvals-C8XV7CK2.js";import{l as o}from"./view-D-rbQ1Kz.js";var s=e({iso:()=>c,remoteAnswer:()=>h,remoteApprovals:()=>p,remoteInspection:()=>_,remoteResult:()=>d,remoteStep:()=>g,remoteTask:()=>f});const c=e=>e===void 0?void 0:new Date(e).toISOString();function l(e){let t=(e??``).trim().split(`
2
2
  `);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n.startsWith(`{`))try{let e=JSON.parse(n).reply;return typeof e==`string`?e:void 0}catch{return}}}function u(e,t,n,r){if(e?.trimStart().startsWith(`{`))try{let t=JSON.parse(e);if(t&&typeof t.status==`number`&&`threadId`in t)return{...t,error:t.error??(n?{message:n}:null),tokens:t.tokens??r??null}}catch{}let i=l(e)??e;return{status:+!t,threadId:null,...i?{finalMessage:i}:{},error:n?{message:n}:null,tokens:r??null}}function d(e){return e.result?u(e.result.output,e.result.ok,e.error,e.tokens):null}function f(e){let{task:t}=e,n=i(t);return{id:t.id,createdAt:c(e.createdAt),updatedAt:c(e.updatedAt),status:e.status===`waiting`?`running`:e.status,name:t.name??null,engine:n.engine??(t.models?.[0]?r(t.models[0].model).engine:void 0),prompt:t.prompt??t.event?.text,model:t.usage?.resolvedModel??d(e)?.model??n.model??e.model??null,effort:n.effort??null,...t.access?{access:t.access}:{},...t.cwd?{cwd:t.cwd}:{},...t.appendSystem?{appendSystem:t.appendSystem}:{},...t.addDirs?.length?{addDirs:t.addDirs}:{},...e.finishedAt===void 0?{}:{completedAt:c(e.finishedAt)},...e.error?{error:e.error}:{},archived:e.archivedAt!==void 0,...e.archivedAt===void 0?{}:{archivedAt:c(e.archivedAt)},agentId:t.agent,source:t.source}}function p(e){let t=e.approval;return(e.approvals??(t?.id?[t]:[])).map(e=>{let t=e.change?.scope;return{id:e.id,reason:e.reason,actions:e.actions,createdAt:e.createdAt,answered:e.response?.decision??null,deniedReason:e.response?.decision===`decline`?e.response.reason??null:null,...t?{scope:t,approvers:a[t]}:{}}})}function m(e){return(e.turns??[]).filter(e=>e.finishedAt!==void 0).map(e=>{let t=typeof e.result==`string`?{ok:!0,output:e.result}:e.result;return{at:c(e.finishedAt),prompt:e.prompt,...u(t?.output,t?.ok??!e.error,e.error,void 0)}})}function h(e){let t=f(e),n=d(e);return{taskId:t.id,name:t.name??null,status:e.status,engine:t.engine??null,model:t.model??null,finalMessage:n?.finalMessage??null,error:n?.error?.message??t.error??null,tokens:n?.tokens??null,pendingApprovals:p(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n}))}}function g(e){return{...e.entry??o(e.line)??{kind:e.level===`err`?`error`:`info`,message:e.line},at:e.entry?.at??new Date(e.at).toISOString()}}function _(e,r){let i=f(e),a=p(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n})),o=n.includes(i.status),s=c(e.lastActivityAt??e.updatedAt),l=t(s);return{taskId:i.id,status:o&&a.length?`waiting-approval`:i.status,task:i,result:d(e),steps:r,turns:m(e),pendingApprovals:a,...o?{idleMs:l,lastActivityAt:s??null,stalled:a.length===0&&l>6e5,liveTokens:null}:{}}}export{g as a,d as i,p as n,f as o,_ as r,s,c as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{c as n,o as r}from"./load-PqaDHiHX.js";import{a as i,i as a,n as o,o as s,r as c}from"./http-615JJgHo.js";import{i as l,n as u,r as d,s as f,t as p}from"./session-Dtje9y-r.js";import m from"node:path";import h from"node:process";import g from"node:http";import _ from"node:fs/promises";import{Readable as v}from"node:stream";var y=class extends t{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};const b=new Set([`completed`,`failed`,`cancelled`]);var x=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,n,r={}){if(this.cookie=`cookie`in n,this.url=e?s(e):``,!this.cookie&&!this.url)throw new t(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in n?n.token:void 0,this.fetchImpl=r.fetch??((e,t)=>fetch(e,t)),this.organization=r.organization,this.renewal=r.renewal,this.onError=r.onError}request(e,t={}){let n=this.read(e,t);return n.catch(()=>{}),n}async read(e,n){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,n);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,n));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new t(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(r.status===202&&a.pending){let{approval:e,reason:n,changes:r}=a;throw new t(`approval-pending`,n,{approval:{id:e,reason:n,actions:r}})}if(!r.ok){let e=new y(r.status,a.error??a.message??o??`The server answered ${r.status}.`,r.headers.get(`www-authenticate`)??``,a.hint,a.needs===`key`?a.needs:void 0);throw this.onError?.(e),e}return a}send(e,n){let r=new Headers(n.headers);return n.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.token&&r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...n,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof t||e.name===`AbortError`?e:new t(`server`,this.url?`No Coder server answers at ${this.url}: ${e.message}`:`The server did not answer. Check the connection and try again.`)})}post(e,t){return this.request(e,{method:`POST`,...t===void 0?{}:{body:JSON.stringify(t)}})}me(){return this.request(`/me`)}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(c(`/admin/agents`,e??{})),get:(e,t)=>this.request(c(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{},...t?.installations?{installations:1}:{}})),versions:(e,t={})=>this.request(c(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(c(`/admin/agents/import`,{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)}).then(t=>({id:e,version:t.version,unchanged:t.unchanged,...t.apps?.length?{apps:t.apps}:{}})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:`PATCH`,body:JSON.stringify(t)}),import:(e,t,n)=>this.post(`/admin/agents/import`,{repo:e,ref:t,...n?{agents:n}:{}})};composer(){return this.request(`/admin/composer`)}folders={list:()=>this.request(`/admin/folders`),check:e=>this.post(`/admin/folders/check`,{path:e}),clone:e=>this.post(`/admin/folders/clone`,{url:e}),pick:()=>this.post(`/admin/folders/pick`,{})};tasks={list:e=>this.request(c(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{},...e?.approvals?{approvals:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(c(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:n})),stream:(e,t=-1,n)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:`text/event-stream`},signal:n}),events:(e,t,n)=>this.send(c(`/admin/events`,{tasks:e}),{headers:{accept:`text/event-stream`,...t?{"last-event-id":t}:{}},signal:n}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...n}),ask:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t,...n}),approve:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n,...r}),request:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/requests/${encodeURIComponent(t)}`,{decision:n,...r}),pendingApprovals:()=>this.request(`/admin/approvals/pending`),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:`DELETE`}),create:e=>this.post(`/admin/tasks`,e),wait:async(e,n={})=>{let r=-1;for(;;){let i=new AbortController,o=await this.tasks.stream(e,r,i.signal);if(!o.ok||!o.body){let n=await this.tasks.get(e);if(b.has(n.status))return n;if(o.status===401)continue;throw new t(`server`,`The task stream answered ${o.status}.`)}let s=!1;for await(let e of a(o.body))if(e.event===`log`){let t=JSON.parse(e.data);r=t.seq,n.onLog?.(t)}else if(e.event===`end`||e.event===`approval`){s=!0;break}if(s)return this.tasks.get(e)}}};credentials={list:e=>this.request(c(`/admin/credentials`,e??{})),add:e=>this.post(`/admin/credentials`,e),remove:(e,{workspace:t}={})=>this.request(`/admin/credentials/${encodeURIComponent(e)}${t?`?workspace`:``}`,{method:`DELETE`}),login:e=>this.post(`/admin/logins`,{engine:e}),loginStatus:(e,t)=>this.request(`/admin/logins/${encodeURIComponent(e)}${t?`?state=${encodeURIComponent(t)}`:``}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:`DELETE`})};runners={list:()=>this.request(`/admin/runners`),add:e=>this.post(`/admin/runners`,e),pair:e=>this.post(`/admin/runners/pair`,e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`DELETE`})};integrations={list:e=>this.request(c(`/admin/integrations`,{agent:e}))};repositories={list:()=>this.request(`/admin/repositories`),refresh:()=>this.post(`/admin/repositories/refresh`,{})};engines={status:()=>this.request(`/admin/engines/status`),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(c(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(c(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t})),remove:e=>this.request(`/admin/apps/${encodeURIComponent(e)}`,{method:`DELETE`}),update:e=>this.post(`/admin/apps/${encodeURIComponent(e)}/update`,{}),drift:e=>this.request(`/admin/apps/${encodeURIComponent(e)}/drift`),create:(e,t)=>this.post(`/admin/apps/create/${encodeURIComponent(e)}`,t),start:(e,t)=>this.post(c(`/create/${encodeURIComponent(e)}`,t)),finish:(e,t)=>this.request(`/create/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)})};operator={apps:()=>this.request(`/admin/operator/apps`),setUp:(e,t)=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}`,t),audit:()=>this.request(`/admin/operator/audit`),drift:e=>this.request(`/admin/operator/apps/${encodeURIComponent(e)}/drift`),update:e=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}/update`,{})};installations={list:(e,t={})=>this.request(c(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}})),uninstall:e=>this.request(`/admin/installations/${encodeURIComponent(e)}`,{method:`DELETE`})};connections={list:(e,t)=>this.request(c(`/admin/connections`,{authorization:e,wait:t})),add:e=>this.post(`/admin/connections`,e),update:(e,t)=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),remove:e=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),authorize:e=>this.post(`/admin/connections/${encodeURIComponent(e)}/authorize`)};config={get:()=>this.request(`/admin/config`),patch:e=>this.request(`/admin/config`,{method:`PATCH`,headers:{"content-type":`application/merge-patch+json`},body:JSON.stringify(e)})};models={list:()=>this.request(`/admin/models`),add:e=>this.post(`/admin/models`,e),probe:e=>this.post(`/admin/models/probe`,e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`DELETE`}),update:(e,t)=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={search:e=>this.request(c(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(c(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(c(`/admin/pulls`,{repo:e}))};review(e){return this.post(`/admin/review`,e)}usage(e={}){return this.request(c(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(c(`/admin/usage`,{installation:e}))}},S=e({addCredential:()=>j,coderClient:()=>T,connect:()=>w,credentials:()=>N,loginCredential:()=>M,pushAgents:()=>D,serverFor:()=>C});function C(e={}){let n=f(e.server);if(!p(n)){if(!e.yes)throw new t(`invalid-option`,`First use of Coder server ${new URL(n).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});u(n)}return n}function w(e={}){let t=C(e);return T(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function T(e,{token:n,missingHint:r,organization:a}={}){let s=f(e),c=i();if(c&&s===`unix:${c}`)return new x(`http://localhost`,{},{fetch:E(c),organization:a});let u=l(s),p=u?.token,m=h.env.ADMIN_TOKEN,g=h.env.CODER_MCP_MODE===`cloud`?h.env.CODER_TASK_TOKEN:void 0,_=n??g??p??m;if(_&&_===m&&!o(s))throw new t(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!_)throw new t(`login-failed`,`Not signed in to ${s}.`,{...r?{hint:r}:{}});return new x(s,{token:_},{organization:a??u?.organization?.slug,renewal:u&&_===p?d(s,u):void 0})}function E(e){return async(t,n={})=>{let r=new URL(String(t)),i=n.body?Buffer.from(await new Response(n.body).arrayBuffer()):void 0;return new Promise((t,a)=>{let o=g.request({socketPath:e,path:`${r.pathname}${r.search}`,method:n.method??`GET`,headers:Object.fromEntries(new Headers(n.headers)),signal:n.signal??void 0},e=>{let r=new Headers;for(let t=0;t<e.rawHeaders.length;t+=2)r.append(e.rawHeaders[t],e.rawHeaders[t+1]);let i=e.statusCode??502,a=i===204||i===304||n.method===`HEAD`;a&&e.resume(),t(new Response(a?null:v.toWeb(e),{status:i,headers:r}))});o.on(`error`,a),o.end(i)})}}async function D(e,i,a){let{INTEGRATIONS:o}=await import(`./integrations-BVmsk64f.js`).then(e=>e.r),s=(await n(i,o)).filter(e=>!e.builtin),c=a?s.filter(e=>e.id===a):s;if(a&&!c.length)throw new t(`invalid-option`,`No workspace agent named "${a}".`);let l=[];for(let t of c)l.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await _.readFile(m.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await r(t.dir),name:t.name,description:t.definition.description}));return l}const O=/^[A-Z_][A-Z0-9_]*$/,k=(e,n)=>new t(`invalid-option`,e,n?{hint:n}:{});async function A(){let e=``;for await(let t of h.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function j(e){let t=e.env;if(!t)throw k(`Missing required --env NAME.`,`Like --env ANTHROPIC_API_KEY`);if(!O.test(t))throw k(`Invalid environment variable name ${JSON.stringify(t)}.`);let n=e.value===`-`?await A():e.value??h.env[t];if(!n)throw k(`Environment variable ${t} is not set.`);return w(e).credentials.add({env:{[t]:n},workspace:e.workspace,noCheck:e.noCheck})}async function M(e,t={}){if(e!==`claude`&&e!==`codex`)throw k(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=w(t).credentials,r=await n.login(e);t.onStart?.(()=>n.cancelLogin(r.id));let i=async e=>{for(;!e(r.state);)r=await n.loginStatus(r.id,r.state)};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}const N={list:(e={})=>w(e).credentials.list(),add:j,remove:(e,t={})=>w(t).credentials.remove(e,t),login:M};export{S as a,D as i,w as n,C as o,N as r,T as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{c as n,o as r}from"./load-BtIDghgd.js";import{a as i,i as a,n as o,o as s,r as c}from"./http-615JJgHo.js";import{a as l,c as u,i as d,n as f,r as p}from"./session-D7eeJIaH.js";import m from"node:path";import h from"node:process";import g from"node:http";import _ from"node:fs/promises";import{Readable as v}from"node:stream";var y=class extends t{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};const b=new Set([`completed`,`failed`,`cancelled`]);var x=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,n,r={}){if(this.cookie=`cookie`in n,this.url=e?s(e):``,!this.cookie&&!this.url)throw new t(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in n?n.token:void 0,this.fetchImpl=r.fetch??((e,t)=>fetch(e,t)),this.organization=r.organization,this.renewal=r.renewal,this.onError=r.onError}request(e,t={}){let n=this.read(e,t);return n.catch(()=>{}),n}async read(e,n){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,n);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,n));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new t(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(r.status===202&&a.pending){let{approval:e,reason:n,changes:r}=a;throw new t(`approval-pending`,n,{approval:{id:e,reason:n,actions:r}})}if(!r.ok){let e=new y(r.status,a.error??a.message??o??`The server answered ${r.status}.`,r.headers.get(`www-authenticate`)??``,a.hint,a.needs===`key`?a.needs:void 0);throw this.onError?.(e),e}return a}send(e,n){let r=new Headers(n.headers);return n.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.token&&r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...n,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof t||e.name===`AbortError`?e:new t(`server`,this.url?`No Coder server answers at ${this.url}: ${e.message}`:`The server did not answer. Check the connection and try again.`)})}post(e,t){return this.request(e,{method:`POST`,...t===void 0?{}:{body:JSON.stringify(t)}})}me(){return this.request(`/me`)}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(c(`/admin/agents`,e??{})),get:(e,t)=>this.request(c(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{},...t?.installations?{installations:1}:{}})),versions:(e,t={})=>this.request(c(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(c(`/admin/agents/import`,{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)}).then(t=>({id:e,version:t.version,unchanged:t.unchanged,...t.apps?.length?{apps:t.apps}:{}})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:`PATCH`,body:JSON.stringify(t)}),import:(e,t,n)=>this.post(`/admin/agents/import`,{repo:e,ref:t,...n?{agents:n}:{}})};composer(){return this.request(`/admin/composer`)}folders={list:()=>this.request(`/admin/folders`),check:e=>this.post(`/admin/folders/check`,{path:e}),clone:e=>this.post(`/admin/folders/clone`,{url:e}),pick:()=>this.post(`/admin/folders/pick`,{})};tasks={list:e=>this.request(c(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{},...e?.approvals?{approvals:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(c(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:n})),stream:(e,t=-1,n)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:`text/event-stream`},signal:n}),events:(e,t,n)=>this.send(c(`/admin/events`,{tasks:e}),{headers:{accept:`text/event-stream`,...t?{"last-event-id":t}:{}},signal:n}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...n}),ask:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t,...n}),approve:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n,...r}),request:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/requests/${encodeURIComponent(t)}`,{decision:n,...r}),pendingApprovals:()=>this.request(`/admin/approvals/pending`),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:`DELETE`}),create:e=>this.post(`/admin/tasks`,e),wait:async(e,n={})=>{let r=-1;for(;;){let i=new AbortController,o=await this.tasks.stream(e,r,i.signal);if(!o.ok||!o.body){let n=await this.tasks.get(e);if(b.has(n.status))return n;if(o.status===401)continue;throw new t(`server`,`The task stream answered ${o.status}.`)}let s=!1;for await(let e of a(o.body))if(e.event===`log`){let t=JSON.parse(e.data);r=t.seq,n.onLog?.(t)}else if(e.event===`end`||e.event===`approval`){s=!0;break}if(s)return this.tasks.get(e)}}};credentials={list:e=>this.request(c(`/admin/credentials`,e??{})),add:e=>this.post(`/admin/credentials`,e),remove:(e,{workspace:t}={})=>this.request(`/admin/credentials/${encodeURIComponent(e)}${t?`?workspace`:``}`,{method:`DELETE`}),login:e=>this.post(`/admin/logins`,{engine:e}),loginStatus:(e,t)=>this.request(`/admin/logins/${encodeURIComponent(e)}${t?`?state=${encodeURIComponent(t)}`:``}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:`DELETE`})};runners={list:()=>this.request(`/admin/runners`),add:e=>this.post(`/admin/runners`,e),pair:e=>this.post(`/admin/runners/pair`,e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`DELETE`})};integrations={list:e=>this.request(c(`/admin/integrations`,{agent:e}))};repositories={list:()=>this.request(`/admin/repositories`),refresh:()=>this.post(`/admin/repositories/refresh`,{})};engines={status:()=>this.request(`/admin/engines/status`),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(c(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(c(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t})),remove:e=>this.request(`/admin/apps/${encodeURIComponent(e)}`,{method:`DELETE`}),update:e=>this.post(`/admin/apps/${encodeURIComponent(e)}/update`,{}),drift:e=>this.request(`/admin/apps/${encodeURIComponent(e)}/drift`),create:(e,t)=>this.post(`/admin/apps/create/${encodeURIComponent(e)}`,t),start:(e,t)=>this.post(c(`/create/${encodeURIComponent(e)}`,t)),finish:(e,t)=>this.request(`/create/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)})};operator={apps:()=>this.request(`/admin/operator/apps`),setUp:(e,t)=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}`,t),audit:()=>this.request(`/admin/operator/audit`),drift:e=>this.request(`/admin/operator/apps/${encodeURIComponent(e)}/drift`),update:e=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}/update`,{})};installations={list:(e,t={})=>this.request(c(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}})),uninstall:e=>this.request(`/admin/installations/${encodeURIComponent(e)}`,{method:`DELETE`})};connections={list:(e,t)=>this.request(c(`/admin/connections`,{authorization:e,wait:t})),add:e=>this.post(`/admin/connections`,e),update:(e,t)=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),remove:e=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),authorize:e=>this.post(`/admin/connections/${encodeURIComponent(e)}/authorize`)};config={get:()=>this.request(`/admin/config`),patch:e=>this.request(`/admin/config`,{method:`PATCH`,headers:{"content-type":`application/merge-patch+json`},body:JSON.stringify(e)})};models={list:()=>this.request(`/admin/models`),add:e=>this.post(`/admin/models`,e),probe:e=>this.post(`/admin/models/probe`,e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`DELETE`}),update:(e,t)=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={search:e=>this.request(c(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(c(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(c(`/admin/pulls`,{repo:e}))};usage(e={}){return this.request(c(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(c(`/admin/usage`,{installation:e}))}},S=e({addCredential:()=>j,coderClient:()=>T,connect:()=>w,credentials:()=>N,loginCredential:()=>M,pushAgents:()=>D,serverFor:()=>C});function C(e={}){let n=u(e.server);if(!f(n)){if(!e.yes)throw new t(`invalid-option`,`First use of Coder server ${new URL(n).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});p(n)}return n}function w(e={}){let t=C(e);return T(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function T(e,{token:n,missingHint:r,organization:a}={}){let s=u(e),c=i();if(c&&s===`unix:${c}`)return new x(`http://localhost`,{},{fetch:E(c),organization:a});let f=l(s),p=f?.token,m=h.env.ADMIN_TOKEN,g=h.env.CODER_MCP_MODE===`cloud`?h.env.CODER_TASK_TOKEN:void 0,_=n??g??p??m;if(_&&_===m&&!o(s))throw new t(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!_)throw new t(`login-failed`,`Not signed in to ${s}.`,{...r?{hint:r}:{}});return new x(s,{token:_},{organization:a??f?.organization?.slug,renewal:f&&_===p?d(s,f):void 0})}function E(e){return async(t,n={})=>{let r=new URL(String(t)),i=n.body?Buffer.from(await new Response(n.body).arrayBuffer()):void 0;return new Promise((t,a)=>{let o=g.request({socketPath:e,path:`${r.pathname}${r.search}`,method:n.method??`GET`,headers:Object.fromEntries(new Headers(n.headers)),signal:n.signal??void 0},e=>{let r=new Headers;for(let t=0;t<e.rawHeaders.length;t+=2)r.append(e.rawHeaders[t],e.rawHeaders[t+1]);let i=e.statusCode??502,a=i===204||i===304||n.method===`HEAD`;a&&e.resume(),t(new Response(a?null:v.toWeb(e),{status:i,headers:r}))});o.on(`error`,a),o.end(i)})}}async function D(e,i,a){let{INTEGRATIONS:o}=await import(`./integrations-DSZSa8Rc.js`).then(e=>e.r),s=(await n(i,o)).filter(e=>!e.builtin),c=a?s.filter(e=>e.id===a):s;if(a&&!c.length)throw new t(`invalid-option`,`No workspace agent named "${a}".`);let l=[];for(let t of c)l.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await _.readFile(m.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await r(t.dir),name:t.name,description:t.definition.description}));return l}const O=/^[A-Z_][A-Z0-9_]*$/,k=(e,n)=>new t(`invalid-option`,e,n?{hint:n}:{});async function A(){let e=``;for await(let t of h.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function j(e){let t=e.env;if(!t)throw k(`Missing required --env NAME.`,`Like --env ANTHROPIC_API_KEY`);if(!O.test(t))throw k(`Invalid environment variable name ${JSON.stringify(t)}.`);let n=e.value===`-`?await A():e.value??h.env[t];if(!n)throw k(`Environment variable ${t} is not set.`);return w(e).credentials.add({env:{[t]:n},workspace:e.workspace,noCheck:e.noCheck})}async function M(e,t={}){if(e!==`claude`&&e!==`codex`)throw k(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=w(t).credentials,r=await n.login(e);t.onStart?.(()=>n.cancelLogin(r.id));let i=async e=>{for(;!e(r.state);)r=await n.loginStatus(r.id,r.state)};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}const N={list:(e={})=>w(e).credentials.list(),add:j,remove:(e,t={})=>w(t).credentials.remove(e,t),login:M};export{S as a,D as i,w as n,C as o,N as r,T as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{n}from"./remote-BbXx6S9P.js";import{t as r}from"./serve-B-5rDiZm.js";import i from"node:process";var a=e({addRunnerFields:()=>p,listRunners:()=>s,removeRunner:()=>f,runAssignedTask:()=>o,runners:()=>m,testRunner:()=>d});async function o(e,t){if(i.env.CODER_LOGIN)return(await import(`./login-BDKTNynK.js`)).runLogin(e,t);let{prepareRepo:n,runTask:r}=await import(`./task-N0qhnKpK.js`).then(e=>e.l);return i.env.CODER_PREPARE?n(e,t):r(e,t)}const s=(e={})=>n(e).runners.list(),c=(e,t={})=>n(t).runners.add(e),l=(e,t={})=>n(t).runners.pair(e),u=(e,t,r={})=>n(r).runners.update(e,t),d=(e,t={})=>n(t).runners.test(e),f=(e,t={})=>n(t).runners.remove(e);async function p(e,r){let a=n(r),{catalog:o}=await a.runners.list(),s=o.find(t=>t.kind===e);if(!s)throw new t(`invalid-option`,`Unknown runner kind.`);if(!s.available)throw new t(`invalid-option`,s.reason??`Runner unavailable.`);let c={};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),a=e.slice(n+1),o=s.fields.find(e=>e.key===r);if(!o)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(o.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(a)||!i.env[a.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);c[r]=i.env[a.slice(4)]}else c[r]=a}let l=r.scope??((await a.me()).user?`personal`:`workspace`);if(l!==`personal`&&l!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return s.connect===`pair`?a.runners.pair({name:r.name,scope:l}):a.runners.add({kind:s.kind,name:r.name??s.name,scope:l,config:c})}const m={list:s,add:c,pair:l,update:u,default:(e,t={})=>u(e,{default:!0},t),test:d,rename:(e,t,n={})=>u(e,{name:t},n),remove:f,serve:r};export{m as n,a as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{n}from"./remote-CY-qYX2C.js";import{t as r}from"./serve-YlU04KO7.js";import i from"node:process";var a=e({addRunnerFields:()=>p,listRunners:()=>s,removeRunner:()=>f,runAssignedTask:()=>o,runners:()=>m,testRunner:()=>d});async function o(e,t){if(i.env.CODER_LOGIN)return(await import(`./login-LlZrIlxb.js`)).runLogin(e,t);let{prepareRepo:n,runTask:r}=await import(`./task-DN4assR8.js`).then(e=>e.l);return i.env.CODER_PREPARE?n(e,t):r(e,t)}const s=(e={})=>n(e).runners.list(),c=(e,t={})=>n(t).runners.add(e),l=(e,t={})=>n(t).runners.pair(e),u=(e,t,r={})=>n(r).runners.update(e,t),d=(e,t={})=>n(t).runners.test(e),f=(e,t={})=>n(t).runners.remove(e);async function p(e,r){let a=n(r),{catalog:o}=await a.runners.list(),s=o.find(t=>t.kind===e);if(!s)throw new t(`invalid-option`,`Unknown runner kind.`);if(!s.available)throw new t(`invalid-option`,s.reason??`Runner unavailable.`);let c={};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),a=e.slice(n+1),o=s.fields.find(e=>e.key===r);if(!o)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(o.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(a)||!i.env[a.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);c[r]=i.env[a.slice(4)]}else c[r]=a}let l=r.scope??((await a.me()).user?`personal`:`workspace`);if(l!==`personal`&&l!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return s.connect===`pair`?a.runners.pair({name:r.name,scope:l}):a.runners.add({kind:s.kind,name:r.name??s.name,scope:l,config:c})}const m={list:s,add:c,pair:l,update:u,default:(e,t={})=>u(e,{default:!0},t),test:d,rename:(e,t,n={})=>u(e,{name:t},n),remove:f,serve:r};export{m as n,a as t};
package/dist/runner.json CHANGED
@@ -1 +1 @@
1
- {"hash":"161df6f24645c03e860cfa4646292388b9a9ac6b01e2a55984097a316b6f37fc"}
1
+ {"hash":"17ce0bfa42ca50cb465b0d7a6f8a1a5eca17d88422de992377c6c3884940bcaf"}
package/dist/runner.tgz CHANGED
Binary file