@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 +1 @@
1
- import{$0A as S,$0n as E,$0y as M}from"./shared-init-926144b364908b3c.js";import{$2Q as r}from"./shared-init-926144b364908b3c.js";import{$3c as L,$3h as u,$3k as $,$3l as d,$3n as C}from"./shared-init-9b28886f3cbe0ed3-2.js";var H=50;function F({label:m,name:D,class:I,options:g,placeholder:O,value:f,onChange:k,onOpen:y}){let[T,o]=u(!1),[A,a]=u(!1),[l,c]=u(0),h=d(null),p=d(null),i=C(),w=A?f.trim().toLowerCase():"",s=(w?g.filter(e=>e.toLowerCase().includes(w)):g).slice(0,H),n=T&&s.length>0,b=e=>{let t=s[e];t&&k(t),o(!1),a(!1)},v=M(h,p,n,360,[s.length]);return $(()=>{n&&p.current?.querySelector(`[data-index="${l}"]`)?.scrollIntoView({block:"nearest"})},[n,l,v]),r(L,{children:[r("input",{ref:h,name:D,class:I,role:"combobox","aria-label":m,"aria-autocomplete":"list","aria-expanded":n,"aria-controls":`${i}-list`,"aria-activedescendant":n?`${i}-${l}`:void 0,autocomplete:"off",placeholder:O,value:f,onInput:e=>{k(e.currentTarget.value),a(!0),c(0),o(!0)},onFocus:()=>{a(!1),o(!0),y?.()},onClick:()=>{o(!0),y?.()},onBlur:()=>{o(!1),a(!1)},onKeyDown:e=>{if(n){if(e.key==="ArrowDown")c((l+1)%s.length);else if(e.key==="ArrowUp")c((l-1+s.length)%s.length);else if(e.key==="Enter")b(l);else if(e.key==="Escape")o(!1);else return;e.preventDefault()}}}),n?r(S,{id:i,label:m,listRef:p,place:v,children:s.map((e,t)=>r(E,{id:`${i}-${t}`,"data-index":t,active:t===l,selected:e===f,check:!0,onPointerMove:()=>t!==l&&c(t),onClick:()=>b(t),children:e},e))}):null]})}export{F as a};
1
+ import{$0A as S,$0n as E,$0y as M}from"./shared-init-abd7653140f37a0c.js";import{$3Q as r}from"./shared-init-abd7653140f37a0c.js";import{$2c as L,$2h as u,$2k as $,$2l as d,$2n as C}from"./shared-init-3fcac605fffcc273-2.js";var H=50;function F({label:m,name:D,class:I,options:g,placeholder:O,value:f,onChange:k,onOpen:y}){let[T,o]=u(!1),[A,a]=u(!1),[l,c]=u(0),h=d(null),p=d(null),i=C(),w=A?f.trim().toLowerCase():"",s=(w?g.filter(e=>e.toLowerCase().includes(w)):g).slice(0,H),n=T&&s.length>0,b=e=>{let t=s[e];t&&k(t),o(!1),a(!1)},v=M(h,p,n,360,[s.length]);return $(()=>{n&&p.current?.querySelector(`[data-index="${l}"]`)?.scrollIntoView({block:"nearest"})},[n,l,v]),r(L,{children:[r("input",{ref:h,name:D,class:I,role:"combobox","aria-label":m,"aria-autocomplete":"list","aria-expanded":n,"aria-controls":`${i}-list`,"aria-activedescendant":n?`${i}-${l}`:void 0,autocomplete:"off",placeholder:O,value:f,onInput:e=>{k(e.currentTarget.value),a(!0),c(0),o(!0)},onFocus:()=>{a(!1),o(!0),y?.()},onClick:()=>{o(!0),y?.()},onBlur:()=>{o(!1),a(!1)},onKeyDown:e=>{if(n){if(e.key==="ArrowDown")c((l+1)%s.length);else if(e.key==="ArrowUp")c((l-1+s.length)%s.length);else if(e.key==="Enter")b(l);else if(e.key==="Escape")o(!1);else return;e.preventDefault()}}}),n?r(S,{id:i,label:m,listRef:p,place:v,children:s.map((e,t)=>r(E,{id:`${i}-${t}`,"data-index":t,active:t===l,selected:e===f,check:!0,onPointerMove:()=>t!==l&&c(t),onClick:()=>b(t),children:e},e))}):null]})}export{F as a};
@@ -0,0 +1 @@
1
+ import{a as ne,b as ze,c as We,d as Je,f as Xe}from"./composer-data-b05f3d93fdc472d7.js";import{m as qe}from"./task-396d849e58e50d59.js";import{a as Ie}from"./connect-repositories-5118edc019fc7890.js";import{$1a as Ge}from"./shared-init-96cde32cd50254c0.js";import{$0a as Ke,$0b as Ue}from"./shared-init-96cde32cd50254c0.js";import{c as He,d as je,h as oe}from"./model-options-5e07b3318d69d218.js";import{$0a as H,$0b as Fe}from"./shared-init-96225b8c7758de9d.js";import{$1h as $}from"./shared-init-96225b8c7758de9d.js";import{a as Qe}from"./back-ba5e4340a9f8bbd2.js";import{$2o as Be}from"./shared-init-abd7653140f37a0c.js";import{$0D as De,$0a as ve,$0c as Me,$0k as Te,$0m as ee,$0n as Ae,$0o as E,$0p as Ne,$0r as Pe,$0s as I,$0z as te}from"./shared-init-abd7653140f37a0c.js";import{$1c as b,$1r as xe}from"./shared-init-abd7653140f37a0c.js";import{$3B as Re,$3G as Le,$3J as $e,$3P as Oe,$3Q as t,$3R as F,$3S as _,$3U as Se,$3i as Ce,$3v as Ee}from"./shared-init-abd7653140f37a0c.js";import{$2c as y,$2h as f,$2j as B,$2k as ye,$2l as w,$2n as Z}from"./shared-init-3fcac605fffcc273-2.js";var ht=(a,r)=>[...a.split("/").filter(s=>!He.some(([l])=>l===s)),r].join("/"),j="coder:draft",Ve="+connect",Ye="+refresh",re="+other",se="+pick",ie="+clone",bt=/^\/(flow)(?:\s+(\S+))?\s*([\s\S]*)$/,wt=(a,r,s)=>[["",a],...[...new Set([r,...s])].filter(Boolean).map(l=>[l,l])],Ze=(a,r,s)=>{let l=[...a.recent,...r].map(u=>u.path);return[["","No folder"],...[...new Set([...l,s])].filter(u=>u&&u!==a.current.path).map(u=>[u,qe(u)]),a.picker?[se,"Choose\u2026"]:[re,"Type a path\u2026"],[ie,"Repository\u2026"]]};function _e({label:a,options:r,value:s,onPick:l}){let u=`${Z()}-pick`;return t(Pe,{children:[t(Te,{title:r.find(([d])=>d===s)?.[1]??r[0]?.[1],"aria-label":a,"data-keep":!0,popovertarget:u}),t("button",{type:"button",class:"pop-chev","data-keep":!0,popovertarget:u,"aria-label":`${a} options`,children:t(F,{d:Ce})}),t(I,{id:u,class:"pop-flyout",popover:"auto",role:"group","aria-label":a,onBeforeToggle:Ue,children:r.map(([d,m])=>t(ee,{on:d===s,onPick:()=>l(d),children:m},d))})]})}function kt(a){let r=a.currentTarget,s=document.querySelector(`[popovertarget="${r.id}"]`)?.getBoundingClientRect();if(a.newState!=="open"||!s)return;let l=Math.round(s.bottom+6);r.style.top=`${l}px`,r.style.right=`${Math.round(document.documentElement.clientWidth-s.right)}px`,r.style.maxHeight=`${Math.max(160,window.innerHeight-l-16)}px`}function yt(a){return Object.fromEntries(a.split(/\s+/).filter(Boolean).map(r=>{let s=r.indexOf("="),l=s<0?"true":r.slice(s+1);try{return[s<0?r:r.slice(0,s),JSON.parse(l)]}catch{return[r.slice(0,s),l]}}))}function vt({id:a,entries:r,active:s,selected:l,onActive:u}){return t(y,{children:r.flatMap((d,m)=>[d.head?t(E,{role:"presentation",children:d.head},`h:${d.key}`):null,t(Ae,{id:`${a}-${m}`,active:m===s,selected:l===void 0?m===s:d.key===l,check:l!==void 0,end:d.hint?t("small",{children:d.hint}):null,onMouseDown:i=>i.preventDefault(),onPointerMove:()=>m!==s&&u(m),onClick:d.pick,children:d.label},d.key)])})}var Mt=(a,r,s,l)=>{let u={ArrowDown:1,ArrowUp:-1}[a.key];return!u||!s?!1:(a.preventDefault(),l((r+u+s)%s),!0)};function Ct({reason:a,label:r}){return t(Ge,{tone:"warning",slim:!0,children:[t(F,{d:$e}),t("span",{class:"grow",children:a||"Tasks need a model credential to run."}),t(Qe,{variant:"outline",size:"sm",label:r,children:"Add credential"})]})}function Et({initial:a,data:r,defaults:s,missing:l,connectLabel:u}){let d=ve(),m=De(),[i,K]=f(()=>We({...ze,...a},r)),[c,R]=f(r),g=w(),[U,ae]=f(!1),[le,et]=f(),[O,q]=f(""),[tt,v]=f(!1),[ot,A]=f(0),[z,nt]=f([]),[M,S]=f(""),[L,ce]=f(!1),ue=w(null),h=w(null),de=w(null),pe=w(null),C=Z();B(()=>void(M&&pe.current?.focus()),[M]),B(()=>{let e=localStorage.getItem(j);e&&h.current&&!h.current.value&&(h.current.value=e),q(h.current?.value??""),N(h.current?.value??""),h.current?.focus(),v(!0)},[]);let N=(e,o=i.repo)=>{!e.startsWith("/")||!o||g.current===o||(g.current=o,b.flows.list(o).then(n=>R(Q=>({...Q,flows:n.map(D=>D.name)}))).catch(n=>console.error("coder dashboard: flows",n)))},W=w(!!r.repos),rt=()=>{W.current||(W.current=!0,b.repositories.list().catch(e=>(console.error("coder dashboard: repositories",e),[])).then(e=>R(o=>({...o,repos:e.map(n=>n.repo)}))))},fe=Fe(),me=!!fe.pending,st=()=>{W.current=!0,fe.run("refresh",async()=>{let e=await b.repositories.refresh();R(o=>({...o,repos:e.map(n=>n.repo)}))})},J=(e,o)=>{if(o===re)return S("path");if(o===ie)return S("url");if(o===se)return void at();if(o===Ye)return me?void 0:st();if(o===Ve)return void Ie(`/dash/${m}/tasks`).catch(H);x({[e]:o}),(e==="repo"||e==="cwd")&&h.current?.focus({preventScroll:!0})},x=e=>{let o={...i,...e};K(o),N(O,o.repo),document.cookie=`compose=${encodeURIComponent(JSON.stringify(o))}; path=/; max-age=31536000; samesite=lax`},X=e=>{if(!e.ok)return H(e.detail);S(""),nt(o=>[...o.filter(n=>n.path!==e.folder.path),e.folder]),J("cwd",e.folder.path===c.folders?.current.path?"":e.folder.path)},it=async e=>{e.trim()&&X(await b.folders.check(e.trim()).catch(o=>({ok:!1,detail:$(o)})))},at=async()=>{document.body.style.cursor="progress";let e=await b.folders.pick().catch(o=>({ok:!1,detail:$(o)}));document.body.style.cursor="",(e.ok||e.detail)&&X(e)},lt=async e=>{if(!e.trim())return;ce(!0),document.body.style.cursor="progress";let o=await b.folders.clone(e.trim()).catch(n=>({ok:!1,detail:$(n)}));document.body.style.cursor="",ce(!1),X(o)},ge=e=>{let o=h.current;o.value=e,localStorage.setItem(j,e),q(e),N(e),A(0),v(!1),o.focus(),o.setSelectionRange(e.length,e.length)},G=async()=>{let e=h.current?.value.trim()??"";if(U||L||c.agentsOff||!e)return;let[,o,n="",Q=""]=bt.exec(e)??[];if(o&&!n)return void v(!1);let{agent:D,model:dt,effort:V,access:we,runner:pt}=i,[ft,mt]=c.folders?["",i.cwd]:[i.repo,""],Y=dt||(V?s.chain[0]:""),ke=Object.fromEntries(Object.entries({repo:ft,cwd:mt,model:Y&&V?ht(Y,V):Y,access:we==="auto"?"":we,runner:pt}).filter(([,k])=>k));ae(!0);try{let k=o==="flow"?await b.flows.run(n,{...ke,agent:D,args:yt(Q)}):await b.tasks.create({...ke,agent:D,prompt:e});localStorage.removeItem(j),Be(k.task.id,"queued",e),d.push("/dash/[org]/tasks/[id]",{params:{org:m,id:k.task.id}})}catch(k){ae(!1),k.status===409?et($(k)):H(k)}},p=(()=>{let e=/^\/(\S*)$/.exec(O)?.[1]?.toLowerCase();if(e!==void 0)return{label:"Commands",entries:[...c.flows.map(n=>({key:`flow ${n}`,label:`/flow ${n}`,hint:`Run the ${n} flow`,pick:()=>ge(`/flow ${n} `)}))].filter(n=>n.key.includes(e)),note:"No command matches."};let o=/^\/flow\s+(\S*)$/.exec(O)?.[1];if(o!==void 0)return{label:"Flows",entries:c.flows.filter(n=>n.includes(o)).map(n=>({key:n,label:n,hint:`Run the ${n} flow`,pick:()=>n===o?void G():ge(`/flow ${n} `)})),note:"No flow matches."}})(),T=!!(p&&!tt),P=p?Math.min(ot,Math.max(0,p.entries.length-1)):0;ye(()=>{let e=de.current;if(!e)return;if(!T)return void(e.matches(":popover-open")&&e.hidePopover());let o=()=>{let n=ue.current.getBoundingClientRect();e.style.top=`${Math.round(n.bottom+6)}px`,e.style.left=`${Math.round(n.left)}px`,e.style.width=`${Math.round(Math.min(n.width,460))}px`};return o(),e.matches(":popover-open")||e.showPopover(),addEventListener("scroll",o,!0),addEventListener("resize",o),()=>{removeEventListener("scroll",o,!0),removeEventListener("resize",o)}},[T,O]);let ct=s.chain[0]??"",he=c.agents.some(([e])=>e===i.agent)?c.agents:[...c.agents,[i.agent,i.agent]],ut=[[i.model||oe(ct,s.builtin),!!i.model],[i.effort,!!i.effort],[i.access,i.access!=="auto"]].filter(([e])=>e),be=[i.agent!==c.defaultAgent&&i.agent,i.runner&&(c.runners.find(([e])=>e===i.runner)?.[1]??i.runner)].filter(Boolean).join(" \xB7 ");return t(y,{children:[t("form",{ref:ue,class:"composer",onSubmit:e=>{e.preventDefault(),G()},children:[t("textarea",{ref:h,name:"prompt",rows:1,role:"combobox","aria-label":"What should the agent do?","aria-autocomplete":"list","aria-expanded":T,"aria-controls":`${C}-slash`,"aria-activedescendant":T&&p?.entries.length?`${C}-slash-${P}`:void 0,placeholder:ne,autofocus:!0,onFocus:()=>v(!1),onBlur:()=>v(!0),onInput:e=>{let o=e.currentTarget.value;localStorage.setItem(j,o),q(o),N(o),A(0),v(!1)},onKeyDown:e=>{if(!e.isComposing){if(T&&p){if(Mt(e,P,p.entries.length,A))return;if(e.key==="Escape")return e.preventDefault(),v(!0);if(p.entries.length&&(e.key==="Enter"&&!e.shiftKey||e.key==="Tab"))return e.preventDefault(),p.entries[P].pick()}e.key!=="Enter"||e.shiftKey||(e.preventDefault(),G())}}}),t("div",{class:"composer-line",children:[c.folders?M?t(y,{children:[t("input",{class:"folder-path","aria-label":M==="url"?"Repository URL":"Folder path",ref:pe,placeholder:M==="url"?"https://github.com/owner/repo":"Absolute path or ~/\u2026",readOnly:L,"aria-busy":L,onKeyDown:e=>{if(L)return e.preventDefault();if(e.key==="Escape")return e.preventDefault(),S("");e.key!=="Enter"||e.isComposing||(e.preventDefault(),(M==="url"?lt:it)(e.currentTarget.value))},onBlur:e=>!L&&!e.currentTarget.value.trim()&&S("")}),L?t("span",{class:"folder-busy",children:"Cloning\u2026"}):null]}):t("span",{class:"folder",title:i.cwd||c.folders.current.path,children:t(te,{label:"Folder",value:i.cwd,options:Ze(c.folders,z,i.cwd),subs:Object.fromEntries(Ze(c.folders,z,i.cwd).flatMap(([e])=>e&&e!==re&&e!==se&&e!==ie?[[e,z.find(o=>o.path===e)?.url??e]]:[])),onChange:e=>J("cwd",e)})}):t(te,{label:"Repository",value:i.repo,options:[...wt("No repository",i.repo,c.repos??[]),[Ye,me?"Refreshing repositories\u2026":"Refresh repositories"],[Ve,u]],onChange:e=>J("repo",e),onFocus:rt}),t("button",{type:"button",class:"quiet",popovertarget:`${C}-settings`,"aria-label":"Run options",title:"Model, effort, access and more",children:[t(F,{d:Oe}),t("span",{class:"run-picks",children:ut.map(([e,o],n)=>t("span",{class:o?void 0:"dim",children:n?` \xB7 ${e}`:e},n))}),be?t("span",{children:be}):null]}),t(_,{type:"submit",size:"sm",class:"send",leftIcon:Le,disabled:!O.trim()||c.agentsOff,loading:U,"aria-label":U?"Starting task":"Start task",title:"Start task (Enter)"})]}),c.agentsOff?t("small",{class:"folder-hint",children:"Every agent here is disabled. Enable one in its settings to start tasks."}):null,M==="url"?t("small",{class:"folder-hint",children:"Uses this machine's git logins"}):null,t(I,{id:`${C}-settings`,class:"composer-settings",popover:"auto",onBeforeToggle:kt,children:[t(E,{children:"Model"}),t(Ke,{groups:c.models,first:{label:`Default: ${s.chain.map(e=>oe(e,s.builtin)).join(", then ")}`,efforts:!0},model:i.model,effort:i.effort,onPick:(e,o)=>{x({model:e,effort:o}),document.getElementById(`${C}-settings`)?.hidePopover()}}),t(E,{children:"Access"}),t("div",{role:"group","aria-label":"Access",children:je.map(([e,o])=>t(ee,{on:i.access===e,onPick:()=>x({access:e}),children:o},e))}),he.length>1?t(y,{children:[t(E,{children:"Agent"}),t(_e,{label:"Agent",options:he,value:i.agent,onPick:e=>x({agent:e})})]}):null,c.runners.length>1?t(y,{children:[t(E,{children:"Runs on"}),t(_e,{label:"Runs on",options:c.runners,value:i.runner,onPick:e=>x({runner:e})})]}):null]}),t(I,{panelRef:de,id:`${C}-slash`,class:"composer-slash",popover:"manual",role:"listbox","aria-label":p?.label??"Commands",children:p?t(y,{children:[t(E,{children:p.label}),t(vt,{id:`${C}-slash`,entries:p.entries,active:P,onActive:A}),p.note==="loading"?t(xe,{label:"Loading pull requests",inline:!0}):p.note&&!p.entries.length?t(Ne,{children:p.note}):null]}):null})]}),le===void 0||l?null:t(Ct,{reason:le})]})}function Rt(){return t("div",{class:"composer","aria-hidden":"true",children:[t("textarea",{rows:1,disabled:!0,tabIndex:-1,placeholder:ne}),t("div",{class:"composer-line"})]})}function Yt({agent:a}){let r=w(null),[s,l]=f(),[u,d]=f(""),[m,i]=f(!1),K=w(),c=()=>{i(!0),r.current?.showModal(),K.current??=Xe(b).then(l,g=>d($(g)))},R=Me().has("new");return B(()=>{if(!R)return;let g=new URL(location.href);g.searchParams.delete("new"),history.replaceState(history.state,"",g),c()},[R]),t(y,{children:[t(_,{class:"new-task",leftIcon:Re,onClick:c,children:"New task"}),t("dialog",{ref:r,class:"compose-dialog","aria-label":a?`New task for ${a}`:"New task",onClose:()=>i(!1),onClick:g=>g.target===g.currentTarget&&r.current?.close(),children:[t("header",{children:[t("h2",{children:"New task"}),a?t("span",{class:"sub",children:a}):null,t(Se,{icon:Ee,label:"Close",onClick:()=>r.current?.close()})]}),m?s?t(Et,{...s,initial:{...Je(document.cookie),...a?{agent:a}:{}}}):u?t("p",{class:"flash err",role:"alert",children:u}):t(Rt,{}):null]})]})}export{ht as a,Ct as b,Yt as c};
@@ -0,0 +1 @@
1
+ "use client";import{a,b,c}from"./composer-198b844da57b82a3.js";import"./composer-data-b05f3d93fdc472d7.js";import"./task-396d849e58e50d59.js";import"./connect-repositories-5118edc019fc7890.js";import"./shared-init-96cde32cd50254c0.js";import"./shared-init-96cde32cd50254c0.js";import"./model-options-5e07b3318d69d218.js";import"./types-3eca2c7f47c46054.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./back-ba5e4340a9f8bbd2.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";export{b as NeedsCredential,c as NewTaskButton,a as withEffort};
@@ -1 +1 @@
1
- import{g as s}from"./model-options-d29e934a3de20ab4.js";var p="What should the agent do? Type / for flows and reviews.",g={repo:"",cwd:"",agent:"",model:"",effort:"",access:"auto",runner:""};function h(n,e){let t=e.agents.map(([r])=>r);return!t.length||t.includes(n.agent)?n:{...n,agent:e.defaultAgent??t[0]}}function C(n){let e=n.match(/(?:^|; )compose=([^;]*)/)?.[1];try{return e?JSON.parse(decodeURIComponent(e)):{}}catch{return{}}}var c=n=>[...n].sort((e,t)=>Number(t.default)-Number(e.default)||e.name.localeCompare(t.name)),l=n=>{let e=n.find(t=>t.default);return[["",e?`Default \xB7 ${e.name}`:"Default"],...c(n).filter(t=>t!==e).map(t=>[t.id,t.name])]};async function w(n){let e=await n.composer(),t=e.agents.find(o=>o.default)?.id,r={agents:e.agents.map(({id:o,name:i})=>[o,i]),...t?{defaultAgent:t}:{},...e.agents.length?{}:{agentsOff:!0},models:s(e.models),runners:l(e.runners),flows:e.flows,folders:e.folders},a={chain:e.chain,builtin:e.models.builtin};return{data:r,defaults:a,connectLabel:e.connectLabel??"Connect repositories"}}export{p as a,g as b,h as c,C as d,c as e,w as f};
1
+ import{g as s}from"./model-options-5e07b3318d69d218.js";var p="What should the agent do? Type / for flows and reviews.",g={repo:"",cwd:"",agent:"",model:"",effort:"",access:"auto",runner:""};function h(n,e){let t=e.agents.map(([r])=>r);return!t.length||t.includes(n.agent)?n:{...n,agent:e.defaultAgent??t[0]}}function C(n){let e=n.match(/(?:^|; )compose=([^;]*)/)?.[1];try{return e?JSON.parse(decodeURIComponent(e)):{}}catch{return{}}}var c=n=>[...n].sort((e,t)=>Number(t.default)-Number(e.default)||e.name.localeCompare(t.name)),l=n=>{let e=n.find(t=>t.default);return[["",e?`Default \xB7 ${e.name}`:"Default"],...c(n).filter(t=>t!==e).map(t=>[t.id,t.name])]};async function w(n){let e=await n.composer(),t=e.agents.find(o=>o.default)?.id,r={agents:e.agents.map(({id:o,name:i})=>[o,i]),...t?{defaultAgent:t}:{},...e.agents.length?{}:{agentsOff:!0},models:s(e.models),runners:l(e.runners),flows:e.flows,folders:e.folders},a={chain:e.chain,builtin:e.models.builtin};return{data:r,defaults:a,connectLabel:e.connectLabel??"Connect repositories"}}export{p as a,g as b,h as c,C as d,c as e,w as f};
@@ -1 +1 @@
1
- import{$1a as r}from"./shared-init-926144b364908b3c.js";import{$2Q as o,$2S as i,$2x as e}from"./shared-init-926144b364908b3c.js";function b({open:l,title:m,body:n,confirmLabel:p,onConfirm:a,onClose:f,busy:t}){return o(r,{open:l,class:"confirm",title:m,busy:t,onSubmit:C=>{C.preventDefault(),a()},onClose:f,actions:o(i,{type:"submit",danger:!0,leftIcon:e,loading:t,children:p}),children:n?o("p",{children:n}):null})}export{b as a};
1
+ import{$4a as r}from"./shared-init-abd7653140f37a0c.js";import{$3Q as o,$3S as i,$3x as e}from"./shared-init-abd7653140f37a0c.js";function b({open:l,title:m,body:n,confirmLabel:p,onConfirm:a,onClose:f,busy:t}){return o(r,{open:l,class:"confirm",title:m,busy:t,onSubmit:C=>{C.preventDefault(),a()},onClose:f,actions:o(i,{type:"submit",danger:!0,leftIcon:e,loading:t,children:p}),children:n?o("p",{children:n}):null})}export{b as a};
@@ -1 +1 @@
1
- import{$3c as i}from"./shared-init-926144b364908b3c.js";async function u(o){let[a,n]=await Promise.all([i.apps.list(),i.integrations.list()]),r=new Set(n.filter(t=>t.repositories).map(t=>t.id)),e=a.map(t=>t.value).sort((t,l)=>+!!l.builtin-+!!t.builtin).find(t=>r.has(t.integration));if(!e)throw new Error("No app here can reach repositories yet.");let{url:s}=await i.apps.install(e.id,o);location.href=s}export{u as a};
1
+ import{$1c as i}from"./shared-init-abd7653140f37a0c.js";async function u(o){let[a,n]=await Promise.all([i.apps.list(),i.integrations.list()]),r=new Set(n.filter(t=>t.repositories).map(t=>t.id)),e=a.map(t=>t.value).sort((t,l)=>+!!l.builtin-+!!t.builtin).find(t=>r.has(t.integration));if(!e)throw new Error("No app here can reach repositories yet.");let{url:s}=await i.apps.install(e.id,o);location.href=s}export{u as a};
@@ -1 +1 @@
1
- "use client";import{a as on}from"./platform-step-5881a8be1e761e00.js";import{a as K}from"./agent-pills-9f6fa120182db948.js";import{d as pn}from"./model-options-d29e934a3de20ab4.js";import{b as Fn,c as $n}from"./list-16247e39898cd20e.js";import"./platform-actions-08e9b3816dcd62b1.js";import{a as Mn}from"./segmented-f646bfa8aa0aa449.js";import"./copy-294c6052b3b69424.js";import"./confirm-d6b2c5b1deccd1e8.js";import"./outcome-dialog-755fc581cbc2836e.js";import{a as E}from"./field-4d374d5ed3f43d7e.js";import{$1a as Bn,$1b as X}from"./shared-init-953965859f7bf6b9.js";import{$0h as Pn}from"./shared-init-953965859f7bf6b9.js";import"./shared-init-926144b364908b3c.js";import{$0D as tn,$0c as G,$0k as _,$0v as Rn,$0z as An}from"./shared-init-926144b364908b3c.js";import{$3c as N,$3f as vn,$3k as H,$3o as Cn,$3q as Sn,$3r as In}from"./shared-init-926144b364908b3c.js";import"./wular-pnext-9b28886f3cbe0ed3-0.js";import{$1a as Z}from"./shared-init-926144b364908b3c.js";import{$2A as bn,$2B as J,$2Q as n,$2R as j,$2S as F,$2U as wn,$2c as gn,$2g as hn,$2m as yn,$2o as kn}from"./shared-init-926144b364908b3c.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import{$3c as S,$3h as A,$3j as fn,$3l as Y}from"./shared-init-9b28886f3cbe0ed3-2.js";var Dn=e=>(e.match(/"[^"]*"|'[^']*'|(?:\{[^}]+\}|[^\s])+/g)??[]).map(a=>a.replace(/^(["'])(.*)\1$/,"$2")),un=e=>/^https?:\/\//.test(e.trim()),En=e=>e.url??[e.command,...(e.args??[]).map(a=>a.replace(/\{((?:runtime|package):[^}]+)\}/g,(i,c)=>`{${e.argumentInputs?.find(r=>r.name===c)?.label??c}}`))].join(" ").trim(),Nn=e=>e.split("/")[0].split(".").reverse().join("."),Un=e=>[...e?.headers??[],...e?.env??[]].filter(a=>a.secret),Ln=e=>e.map(a=>a.name).join(", "),jn=[["workspace","Workspace"],["personal","Personal"]];function sn(e){let a=new URL(e,location.origin);return a.origin===location.origin&&a.pathname.startsWith("/connect/")&&a.searchParams.set("return",location.pathname),a.href}function an(e){let a=X({leaves:!0}),i=(r,m)=>void a.run("add",async()=>{let{authorize:u,...l}=await N.connections.add(r).catch(g=>{throw m?.(g),g});if(u)return location.assign(sn(u));e(l)}),c=r=>void a.run("add",async()=>location.assign(sn((await N.connections.authorize(r)).url)));return{busy:!!a.pending,add:i,signIn:c}}function mn({kind:e,list:a}){return n(S,{children:a.map(i=>n(E,{label:n("span",{class:"mono",children:i.label??i.name}),hint:i.description??(i.required?"required":"optional"),children:n("input",{name:`${e}:${i.name}`,placeholder:i.placeholder,defaultValue:e==="arg"?i.placeholder:void 0,autocomplete:"off",required:i.required})},i.name))})}function xn({platforms:e,onPick:a}){let[i,c]=A(""),[r,m]=A(),u=Y(),l=i.trim(),g=un(l)||/\s/.test(l),I=s=>{m(h=>h?.q===s?h:{q:s}),N.mcp.search(s).then(h=>m(v=>v?.q===s?{q:s,items:h}:v)).catch(h=>m(v=>v?.q===s?{q:s,error:Pn(h)}:v))},f=s=>{if(c(s),clearTimeout(u.current),!s.trim()||un(s)||/\s/.test(s.trim()))return m(void 0);m({q:s.trim()}),u.current=setTimeout(()=>I(s.trim()),250)},w=e.filter(s=>s.name.toLowerCase().includes(l.toLowerCase()));return n("div",{class:"conn-find",children:[n(Rn,{value:i,label:"Search platforms and MCP servers, or paste an MCP server URL",onInput:f,autofocus:!0}),n("div",{class:"conn-hits",role:"listbox","aria-label":"Services","aria-busy":!!(r&&!r.items),children:[g?n(_,{icon:J,title:"Use as an MCP server",sub:n("span",{class:"mono",children:l}),onClick:()=>a({kind:"mcp",target:l})}):null,g?null:w.map(s=>n(_,{icon:n(K,{brand:s.brand}),title:s.name,end:n("small",{class:"dim",children:"platform"}),onClick:()=>a({kind:"platform",info:s})},s.id)),g?null:r?.error?n("p",{class:"registry-note err",role:"alert",children:r.error}):r?r.items?r.items.length?n(S,{children:r.items.map(s=>n(_,{title:n(S,{children:[s.title,s.verified?n(H,{tone:"ok",children:["by ",Nn(s.name)]}):null]}),sub:s.description||s.name,end:n("small",{class:"dim",children:"MCP"}),onClick:()=>a({kind:"mcp",server:s})},s.name))}):l&&!w.length?n("p",{class:"registry-note",children:"Nothing matches. Paste the server's URL or command."}):null:n("p",{class:"registry-note",children:n(In,{label:"Searching MCP servers",inline:!0,dots:!0})}):null]})]})}function Hn({info:e,rows:a,scope:i,operator:c,builtin:r,onAdded:m}){let u=tn(),{busy:l,add:g,signIn:I}=an(m),f=a.find(h=>h.provider===e.id&&h.asker),w=r?.steps[e.id],s=w?n("div",{class:"conn-step",children:n(on,{step:w,info:e,org:u,agent:r.id,builtin:!0,operator:c})}):null;return i==="workspace"?{busy:l,status:null,hint:"The agent's app. Every turn.",notice:s?null:n("p",{class:"muted",children:["No agent here uses ",e.name,"."]}),submit:()=>{},actions:s}:{busy:l,status:e.connectable?f?n(H,{tone:f.status==="needs-auth"?"warn":"ok",children:f.status==="needs-auth"?"needs sign-in":f.account??"connected"}):n(H,{children:"not connected"}):null,hint:"The member\u2019s own account. Their turns only.",notice:null,submit:()=>{if(e.connectable){if(f)return I(f.id);g({name:e.name,provider:e.id})}},actions:e.connectable?n(F,{type:"submit",loading:l,children:[n(K,{brand:e.brand}),f?"Sign in again":`Sign in to ${e.name}`]}):s}}function _n({server:e,target:a,name:i,scope:c,onAdded:r}){let m=G(),[u,l]=A(i??e?.title??m.get("add")??""),[g,I]=A(e?En(e):a??""),[f,w]=A(!1),[s,h]=A(m.get("access")??"auto"),{busy:v,add:B}=an(r),P=Y(null),k=!g.trim()||un(g),$=Un(e),rn=!k||f||$.length>0,U=k?s:"auto",T=$.find(d=>d.required)??$[0],W=$.filter(d=>d!==T),L=W.some(d=>d.required),V=[...e?.argumentInputs??[],...e?.env??[],...e?.headers??[]].some(d=>!d.secret),nn=d=>{let x=[...new FormData(d)].map(([y,R])=>[y,String(R).trim()]),q=y=>x.find(([R])=>R===y)?.[1]??"",Q=y=>Object.fromEntries(x.filter(([R,D])=>R.startsWith(y)&&D).map(([R,D])=>[R.slice(y.length),D])),z=g.trim();if(!u.trim()||!z||L)return;let cn=e?.command?En(e):void 0,ln=e&&z===cn?[e.command,...e.args??[]]:Dn(z),[dn,...t]=ln.map(y=>y.replace(/\{([^}]+)\}/g,(R,D)=>{let M=e?.argumentInputs?.find(en=>en.name===D||en.label===D);return M?q(`arg:${M.name}`):R})),p=Q("env:"),o=Q("header:"),C=k?{url:z,...e?.url===z?{type:e.type}:{},...Object.keys(o).length?{headers:o}:{}}:{command:dn,...t.length?{args:t}:{},...Object.keys(p).length?{env:p}:{}};e?.description&&(C.description=e.description);let b=q("key");B({name:u.trim(),provider:"mcp",...c==="personal"?{scope:"personal"}:{},...U==="auto"?{}:{access:U},endpoint:C,...b?{auth:"key",key:b,keyIn:k?{header:q("header")}:{env:q("env")}}:k?{}:{auth:"none"}},y=>{y.needs==="key"&&(w(!0),requestAnimationFrame(()=>P.current?.querySelector("input[name=key]")?.focus()))})},O=n("div",{ref:P,class:"add-form",children:[e?.description?n("p",{class:"muted",children:e.description}):null,n("div",{class:"add-grid",children:[n(E,{label:"Name",children:n("input",{name:"name",value:u,onInput:d=>l(d.currentTarget.value),placeholder:"Acme docs",autocomplete:"off",required:!0})}),n(E,{label:"URL or command",children:n("input",{name:"target",class:"mono",value:g,onInput:d=>I(d.currentTarget.value),placeholder:"https://mcp.acme.dev/mcp",autocomplete:"off",spellcheck:!1,required:!0})})]}),V?n("div",{class:"add-grid",children:[n(mn,{kind:"arg",list:e?.argumentInputs??[]}),n(mn,{kind:"env",list:(e?.env??[]).filter(d=>!d.secret)}),n(mn,{kind:"header",list:(e?.headers??[]).filter(d=>!d.secret)})]}):null,W.length?n("p",{class:"muted",role:"note",children:L?`This server needs ${Ln($.filter(d=>d.required))}, and a connection holds one key. Add it in the server's own config instead.`:`A connection holds one key, sent as ${T.name}. Add ${Ln(W)} in the server's own config when needed.`}):null,rn?n("div",{class:"add-grid",children:[n(E,{label:"API key",hint:k?void 0:"optional",children:n("input",{name:"key",type:"password",placeholder:"acme_live_4f9a\u2026",autocomplete:"off",required:!!k},e?.name)}),k?n(E,{label:"Header",children:n("input",{name:"header",class:"mono",defaultValue:T?.name??"Authorization",placeholder:"Authorization",autocomplete:"off",required:!0},`header:${T?.name}`)}):n(E,{label:"Environment variable",children:n("input",{name:"env",class:"mono",defaultValue:T?.name,placeholder:"ACME_API_KEY",autocomplete:"off"},`env:${T?.name}`)})]}):null,n("details",{class:"add-more",children:[n("summary",{children:"More options"}),n("div",{class:"add-grid",children:n(E,{label:"Access",hint:"read-only keeps only its read-only tools",group:!0,children:n(An,{label:"Access",options:k?pn:pn.filter(([d])=>d==="auto"),value:U,onChange:h})})})]})]});return{busy:v,body:O,submit:nn,actions:n(F,{type:"submit",disabled:L,loading:v,children:"Add connection"})}}function Kn({pick:e,rows:a,local:i,admin:c,operator:r,builtin:m,scope:u,onBack:l,onAdded:g,onClose:I}){let f=e.kind==="platform",[w,s]=A(i?"workspace":u??(f||!c?"personal":"workspace")),h=f?Hn({info:e.info,rows:a,scope:w,operator:r,builtin:m,onAdded:g}):void 0,v=f?void 0:_n({...e,scope:w,onAdded:g}),B=h??v,P=f?e.info.name:e.server?.title??"MCP server";return n(Z,{class:"add-modal",title:n("span",{class:"conn-title",children:[l?n(wn,{label:"Back",onClick:l,children:n(j,{d:hn})}):null,f?n(K,{brand:e.info.brand}):null,P]}),dismiss:!0,busy:B.busy,onSubmit:k=>{k.preventDefault(),B.submit(k.currentTarget)},onClose:I,actions:B.actions,children:[i?null:n("div",{class:"conn-scope",children:[n(E,{label:"Acts as",group:!0,children:f||c?n(Mn,{label:"Acts as",options:jn,value:w,onChange:k=>s(k)}):n("p",{class:"muted",children:"Personal. Admins add workspace servers."})}),h?n("p",{class:"conn-state",children:[h.status,n("span",{class:"muted",children:h.hint})]}):n("p",{class:"muted",children:w==="workspace"?"An admin\u2019s account. Every turn.":"The member\u2019s own account. Their turns only."})]}),h?.notice??null,v?.body??null]})}function On({catalog:e,rows:a,local:i,admin:c,operator:r,builtin:m,start:u,onAdded:l,onClose:g}){let I=G(),f=I.get("add"),w=e.find(P=>P.id===f),[s,h]=A(u?.pick??(w?{kind:"platform",info:w}:I.has("url")?{kind:"mcp",target:I.get("url")??"",name:f??void 0}:void 0)),v=u?.scope??I.get("scope")??void 0,B=e.filter(P=>P.personal||a.some(k=>k.agent&&k.provider===P.id));return s?n(Kn,{pick:s,rows:a,local:i,admin:c,operator:r,builtin:m,scope:v,onBack:u?void 0:()=>h(void 0),onAdded:l,onClose:g},s.kind==="platform"?s.info.id:s.server?.name??s.target):n(Z,{class:"add-modal",title:"Add a connection",dismiss:!0,onClose:g,children:n(xn,{platforms:B,onPick:h})})}var Wn=e=>e.url?URL.canParse(e.url)?new URL(e.url).host:e.url:e.command;function Vn(e,a){let i=new Map;for(let c of a.filter(r=>r.personal))i.set(c.id,{key:c.id,name:c.name,info:c,rows:[]});for(let c of e){let r=a.find(l=>l.id===c.provider),m=r?r.id:`mcp:${c.name.replace(/-user$/,"")}`,u=i.get(m)??{key:m,name:r?.name??c.name.replace(/-user$/,""),info:r,where:r?void 0:Wn(c),rows:[]};u.rows.push(c),i.set(m,u)}return[...i.values()]}function qn({row:e,label:a,onReconnect:i,busy:c}){let r=e.status==="needs-auth";return n(S,{children:[n("i",{class:r?"conn-dot warn":e.status==="disabled"?"conn-dot off":"conn-dot"}),n("span",{class:"conn-name",children:r?"needs sign-in":a??e.account??e.name}),e.access==="read-only"?n("span",{class:"dim",title:"Read-only",children:n(j,{d:yn})}):null,r&&i?n(F,{variant:"ghost",size:"sm",loading:c,onClick:i,children:"Reconnect"}):null]})}function zn({row:e,onReconnect:a,onRemoved:i}){let c=Fn({title:`Remove ${e.name}?`,body:"Tasks stop using it, and its key or sign-in is deleted.",link:e.name,onRemove:()=>N.connections.remove(e.id).then(i,Bn)});return n(S,{children:[n(vn,{button:"icon",label:`${e.name} actions`,summary:n(j,{d:bn}),children:[n(_,{title:e.auth==="key"?"New key":"Sign in again",onClick:a}),c.item]}),c.dialog]})}function De({first:e,catalog:a,local:i,admin:c,operator:r,viewer:m,agents:u,builtins:l}){let[g,I]=A(e.filter(t=>t.provider!=="env")),f=G(),w=f.get("reconnect"),s=f.get("connect"),[h,v]=A(g.find(t=>t.name===w&&t.auth==="key")),B=$n("Add connection",["url","access","tools","scope"]),[P,k]=A(),$=X({leaves:!0}),rn=tn(),U=t=>I(p=>p.some(o=>o.id===t.id)?p.map(o=>o.id===t.id?t:o):[...p,t]),T=t=>I(p=>p.filter(o=>o.id!==t.id)),{add:W}=an(U),L=t=>{if(t.auth==="key")return v(t);$.run(t.id,async()=>location.assign(sn((await N.connections.authorize(t.id)).url)))},V=Vn(g,a),nn=()=>{k(void 0),B.close()},O=l[0],[d,x]=A(),q=({step:t,info:p,agent:o=O.id,quiet:C})=>n(on,{step:t,info:p,org:rn,agent:o,builtin:!0,operator:r,unreachable:a.some(b=>b.unreachable),quiet:C}),Q=({accounts:t,title:p})=>n(S,{children:[n("i",{class:"conn-dot"}),n("span",{class:"conn-name",title:p,children:[...new Set(t.filter(Boolean))].join(", ")||"installed"}),n("span",{class:"grow"})]}),z=({info:t})=>{let p=l.flatMap(o=>(o.steps[t.id]?.live??[]).map(C=>({agent:o.name,account:C.account})));return p.length?n(S,{children:[n(Q,{accounts:p.map(o=>o.account),title:p.map(o=>`${o.agent} in ${o.account??t.name}`).join(", ")}),n(F,{size:"sm",variant:"ghost",onClick:()=>x(t),children:"Manage"})]}):n(S,{children:[n(H,{children:"not set up"}),n(F,{size:"sm",onClick:()=>x(t),children:["Set up ",t.name]})]})},cn=t=>{let p=t.rows.filter(b=>b.agent),o=t.rows.find(b=>!b.owner&&!b.agent);if(t.info?.builtinApp==="own"&&l.some(b=>b.steps[t.info.id]))return n("div",{class:"conn-cell",children:n(z,{info:t.info})});if(t.info){let b=t.info,y=O?.steps[b.id],R=[...new Set(p.map(M=>M.agent))].filter(M=>M!==O?.id),D=M=>u.find(en=>en.id===M)?.name??M;return n("div",{class:"conn-cell",children:[y?.live.length?n(Q,{accounts:y.live.map(M=>M.account)}):null,R.length?n("span",{class:"conn-others",title:`Their own ${b.name} apps: ${R.map(D).join(", ")}`,children:[n(j,{d:gn}),R.length]}):null,y?n(q,{step:y,info:b,quiet:!0}):null,y||R.length?null:n("span",{class:"dim",children:"\u2014"})]})}if(o)return n("div",{class:"conn-cell",children:[n(qn,{row:o,label:o.name,busy:$.pending===o.id,onReconnect:c?()=>L(o):void 0}),n("span",{class:"grow"}),c?n(zn,{row:o,onReconnect:()=>L(o),onRemoved:()=>T(o)}):null]});let C=t.rows[0];return c&&C?n(F,{variant:"ghost",size:"sm",leftIcon:J,onClick:()=>k({pick:{kind:"mcp",target:C.url??C.command,name:t.name},scope:"workspace"}),children:"Connect"}):n("span",{class:"dim",children:"\u2014"})},ln=t=>{let p=t.rows.find(y=>y.asker),o=t.rows.filter(y=>y.owner&&!y.asker),C=t.rows[0],b=o.length?n("span",{class:"conn-others",title:o.map(y=>y.owner?.name??"A member").join(", "),children:[n(j,{d:kn}),o.length]}):null;return n("div",{class:"conn-cell",children:p?n(S,{children:[n(qn,{row:p,busy:$.pending===p.id,onReconnect:()=>L(p)}),n("span",{class:"grow"}),b,n(zn,{row:p,onReconnect:()=>L(p),onRemoved:()=>T(p)})]}):t.info&&!t.info.connectable?n(S,{children:[n("span",{class:"dim grow",children:"\u2014"}),b]}):n(S,{children:[n(F,{variant:"ghost",size:"sm",leftIcon:J,autoFocus:t.key===s,onClick:()=>t.info?W({name:t.info.name,provider:t.info.id}):k({pick:{kind:"mcp",target:C?.url??C?.command,name:t.name},scope:"personal"}),children:"Connect"}),n("span",{class:"grow"}),b]})})},dn=[["Platforms",V.filter(t=>t.info)],["MCP servers",V.filter(t=>!t.info)]].filter(([,t])=>t.length);return n(S,{children:[n(Cn,{look:"filled",title:"Connections",actions:B.button,children:[V.length?n(S,{children:[n("div",{class:"table-scroll",children:n("table",{class:"conns",children:[n("colgroup",{children:[n("col",{class:"conns-svc"}),n("col",{}),i?null:n("col",{})]}),n("thead",{children:n("tr",{children:[n("th",{children:"Service"}),n("th",{children:"Workspace"}),i?null:n("th",{children:m?`Personal \xB7 ${m}`:"Personal"})]})}),dn.map(([t,p])=>n("tbody",{children:[n("tr",{class:"conns-group",children:n("th",{colSpan:i?2:3,children:t})}),p.map(o=>n("tr",{class:o.key===s?"conns-marked":void 0,children:[n("td",{children:n("span",{class:"conn-svc",title:o.where,children:[o.info?n(K,{brand:o.info.brand}):n("span",{class:"conn-mark",children:o.name[0]}),n("b",{children:o.name})]})}),o.info&&!o.info.connectable&&!o.rows.length&&!l.some(C=>C.steps[o.info.id]?.live.length)?n("td",{colSpan:i?1:2,children:n("div",{class:"conn-cell",children:o.info.builtinApp==="own"&&l.some(C=>C.steps[o.info.id])?n(z,{info:o.info}):O?.steps[o.info.id]?n(q,{step:O.steps[o.info.id],info:o.info}):n("span",{class:"dim",children:"\u2014"})})}):n(S,{children:[n("td",{children:cn(o)}),i?null:n("td",{children:ln(o)})]})]},o.key))]},t))]})}),i?null:n("p",{class:"conns-hint",children:"Personal accounts run only on their owner's turns."})]}):n(Sn,{title:"No connections yet",children:"Add one so tasks can use another service, like an issue tracker or a database."}),h?n(Qn,{row:h,onSaved:t=>{U(t),v(void 0)},onClose:()=>v(void 0)}):null]}),d?n(Z,{title:`${d.name} apps`,dismiss:!0,onClose:()=>x(void 0),children:[n("p",{class:"muted",children:["Each agent has its own ",d.name," app, so each answers as its own @name in"," ",d.name,". Set one up for every built-in agent that should work there."]}),n("div",{class:"agent-apps",children:l.filter(t=>t.steps[d.id]).map(t=>n("div",{class:"agent-app",children:[n("b",{children:t.name}),n(q,{step:t.steps[d.id],info:d,agent:t.id})]},t.id))}),n("p",{class:"muted",children:"Other agents set theirs up on their own Platforms tab."})]}):null,B.open||P?n(On,{catalog:a,rows:g,local:i,admin:c,operator:r,builtin:O,start:P,onAdded:t=>{U(t),nn()},onClose:nn}):null]})}function Qn({row:e,onSaved:a,onClose:i}){let c=X({leaves:!0}),r=!!c.pending,m=Y(null);return fn(()=>m.current?.focus(),[]),n("form",{class:"add-row conn-key",method:"post",onSubmit:u=>{u.preventDefault();let l=String(new FormData(u.currentTarget).get("key")??"").trim();l&&c.run("save",async()=>a(await N.connections.update(e.id,{key:l})))},children:[n("input",{name:"key",type:"password","aria-label":`New key for ${e.name}`,placeholder:`New key for ${e.name}, then Enter`,ref:m,autocomplete:"off",required:!0}),n(F,{type:"submit",loading:r,children:"Save key"}),n(F,{variant:"ghost",disabled:r,onClick:i,children:"Cancel"})]})}export{De as ConnectionsList};
1
+ "use client";import{a as on}from"./platform-step-5454b6c0a19caefd.js";import{a as K}from"./agent-pills-54564413a57d7fa7.js";import{d as pn}from"./model-options-5e07b3318d69d218.js";import{b as Fn,c as $n}from"./list-662f042656857c82.js";import"./platform-actions-f3979ab69a6ceb53.js";import"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import{a as Mn}from"./segmented-66a8c77c6294fec3.js";import"./outcome-dialog-fd86ded4c44c2de7.js";import{a as E}from"./field-adcb6e6a5f9b7131.js";import{$0a as Bn,$0b as X}from"./shared-init-96225b8c7758de9d.js";import{$1h as Pn}from"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import{$0D as tn,$0c as G,$0k as _,$0v as Rn,$0z as An}from"./shared-init-abd7653140f37a0c.js";import{$1c as N,$1f as vn,$1k as H,$1o as Cn,$1q as Sn,$1r as In}from"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import{$4a as Z}from"./shared-init-abd7653140f37a0c.js";import{$3A as bn,$3B as J,$3Q as n,$3R as j,$3S as F,$3U as wn,$3c as gn,$3g as hn,$3m as yn,$3o as kn}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2c as S,$2h as A,$2j as fn,$2l as Y}from"./shared-init-3fcac605fffcc273-2.js";var Dn=e=>(e.match(/"[^"]*"|'[^']*'|(?:\{[^}]+\}|[^\s])+/g)??[]).map(a=>a.replace(/^(["'])(.*)\1$/,"$2")),un=e=>/^https?:\/\//.test(e.trim()),En=e=>e.url??[e.command,...(e.args??[]).map(a=>a.replace(/\{((?:runtime|package):[^}]+)\}/g,(i,c)=>`{${e.argumentInputs?.find(r=>r.name===c)?.label??c}}`))].join(" ").trim(),Nn=e=>e.split("/")[0].split(".").reverse().join("."),Un=e=>[...e?.headers??[],...e?.env??[]].filter(a=>a.secret),Ln=e=>e.map(a=>a.name).join(", "),jn=[["workspace","Workspace"],["personal","Personal"]];function sn(e){let a=new URL(e,location.origin);return a.origin===location.origin&&a.pathname.startsWith("/connect/")&&a.searchParams.set("return",location.pathname),a.href}function an(e){let a=X({leaves:!0}),i=(r,m)=>void a.run("add",async()=>{let{authorize:u,...l}=await N.connections.add(r).catch(g=>{throw m?.(g),g});if(u)return location.assign(sn(u));e(l)}),c=r=>void a.run("add",async()=>location.assign(sn((await N.connections.authorize(r)).url)));return{busy:!!a.pending,add:i,signIn:c}}function mn({kind:e,list:a}){return n(S,{children:a.map(i=>n(E,{label:n("span",{class:"mono",children:i.label??i.name}),hint:i.description??(i.required?"required":"optional"),children:n("input",{name:`${e}:${i.name}`,placeholder:i.placeholder,defaultValue:e==="arg"?i.placeholder:void 0,autocomplete:"off",required:i.required})},i.name))})}function xn({platforms:e,onPick:a}){let[i,c]=A(""),[r,m]=A(),u=Y(),l=i.trim(),g=un(l)||/\s/.test(l),I=s=>{m(h=>h?.q===s?h:{q:s}),N.mcp.search(s).then(h=>m(v=>v?.q===s?{q:s,items:h}:v)).catch(h=>m(v=>v?.q===s?{q:s,error:Pn(h)}:v))},f=s=>{if(c(s),clearTimeout(u.current),!s.trim()||un(s)||/\s/.test(s.trim()))return m(void 0);m({q:s.trim()}),u.current=setTimeout(()=>I(s.trim()),250)},w=e.filter(s=>s.name.toLowerCase().includes(l.toLowerCase()));return n("div",{class:"conn-find",children:[n(Rn,{value:i,label:"Search platforms and MCP servers, or paste an MCP server URL",onInput:f,autofocus:!0}),n("div",{class:"conn-hits",role:"listbox","aria-label":"Services","aria-busy":!!(r&&!r.items),children:[g?n(_,{icon:J,title:"Use as an MCP server",sub:n("span",{class:"mono",children:l}),onClick:()=>a({kind:"mcp",target:l})}):null,g?null:w.map(s=>n(_,{icon:n(K,{brand:s.brand}),title:s.name,end:n("small",{class:"dim",children:"platform"}),onClick:()=>a({kind:"platform",info:s})},s.id)),g?null:r?.error?n("p",{class:"registry-note err",role:"alert",children:r.error}):r?r.items?r.items.length?n(S,{children:r.items.map(s=>n(_,{title:n(S,{children:[s.title,s.verified?n(H,{tone:"ok",children:["by ",Nn(s.name)]}):null]}),sub:s.description||s.name,end:n("small",{class:"dim",children:"MCP"}),onClick:()=>a({kind:"mcp",server:s})},s.name))}):l&&!w.length?n("p",{class:"registry-note",children:"Nothing matches. Paste the server's URL or command."}):null:n("p",{class:"registry-note",children:n(In,{label:"Searching MCP servers",inline:!0,dots:!0})}):null]})]})}function Hn({info:e,rows:a,scope:i,operator:c,builtin:r,onAdded:m}){let u=tn(),{busy:l,add:g,signIn:I}=an(m),f=a.find(h=>h.provider===e.id&&h.asker),w=r?.steps[e.id],s=w?n("div",{class:"conn-step",children:n(on,{step:w,info:e,org:u,agent:r.id,builtin:!0,operator:c})}):null;return i==="workspace"?{busy:l,status:null,hint:"The agent's app. Every turn.",notice:s?null:n("p",{class:"muted",children:["No agent here uses ",e.name,"."]}),submit:()=>{},actions:s}:{busy:l,status:e.connectable?f?n(H,{tone:f.status==="needs-auth"?"warn":"ok",children:f.status==="needs-auth"?"needs sign-in":f.account??"connected"}):n(H,{children:"not connected"}):null,hint:"The member\u2019s own account. Their turns only.",notice:null,submit:()=>{if(e.connectable){if(f)return I(f.id);g({name:e.name,provider:e.id})}},actions:e.connectable?n(F,{type:"submit",loading:l,children:[n(K,{brand:e.brand}),f?"Sign in again":`Sign in to ${e.name}`]}):s}}function _n({server:e,target:a,name:i,scope:c,onAdded:r}){let m=G(),[u,l]=A(i??e?.title??m.get("add")??""),[g,I]=A(e?En(e):a??""),[f,w]=A(!1),[s,h]=A(m.get("access")??"auto"),{busy:v,add:B}=an(r),P=Y(null),k=!g.trim()||un(g),$=Un(e),rn=!k||f||$.length>0,U=k?s:"auto",T=$.find(d=>d.required)??$[0],W=$.filter(d=>d!==T),L=W.some(d=>d.required),V=[...e?.argumentInputs??[],...e?.env??[],...e?.headers??[]].some(d=>!d.secret),nn=d=>{let x=[...new FormData(d)].map(([y,R])=>[y,String(R).trim()]),q=y=>x.find(([R])=>R===y)?.[1]??"",Q=y=>Object.fromEntries(x.filter(([R,D])=>R.startsWith(y)&&D).map(([R,D])=>[R.slice(y.length),D])),z=g.trim();if(!u.trim()||!z||L)return;let cn=e?.command?En(e):void 0,ln=e&&z===cn?[e.command,...e.args??[]]:Dn(z),[dn,...t]=ln.map(y=>y.replace(/\{([^}]+)\}/g,(R,D)=>{let M=e?.argumentInputs?.find(en=>en.name===D||en.label===D);return M?q(`arg:${M.name}`):R})),p=Q("env:"),o=Q("header:"),C=k?{url:z,...e?.url===z?{type:e.type}:{},...Object.keys(o).length?{headers:o}:{}}:{command:dn,...t.length?{args:t}:{},...Object.keys(p).length?{env:p}:{}};e?.description&&(C.description=e.description);let b=q("key");B({name:u.trim(),provider:"mcp",...c==="personal"?{scope:"personal"}:{},...U==="auto"?{}:{access:U},endpoint:C,...b?{auth:"key",key:b,keyIn:k?{header:q("header")}:{env:q("env")}}:k?{}:{auth:"none"}},y=>{y.needs==="key"&&(w(!0),requestAnimationFrame(()=>P.current?.querySelector("input[name=key]")?.focus()))})},O=n("div",{ref:P,class:"add-form",children:[e?.description?n("p",{class:"muted",children:e.description}):null,n("div",{class:"add-grid",children:[n(E,{label:"Name",children:n("input",{name:"name",value:u,onInput:d=>l(d.currentTarget.value),placeholder:"Acme docs",autocomplete:"off",required:!0})}),n(E,{label:"URL or command",children:n("input",{name:"target",class:"mono",value:g,onInput:d=>I(d.currentTarget.value),placeholder:"https://mcp.acme.dev/mcp",autocomplete:"off",spellcheck:!1,required:!0})})]}),V?n("div",{class:"add-grid",children:[n(mn,{kind:"arg",list:e?.argumentInputs??[]}),n(mn,{kind:"env",list:(e?.env??[]).filter(d=>!d.secret)}),n(mn,{kind:"header",list:(e?.headers??[]).filter(d=>!d.secret)})]}):null,W.length?n("p",{class:"muted",role:"note",children:L?`This server needs ${Ln($.filter(d=>d.required))}, and a connection holds one key. Add it in the server's own config instead.`:`A connection holds one key, sent as ${T.name}. Add ${Ln(W)} in the server's own config when needed.`}):null,rn?n("div",{class:"add-grid",children:[n(E,{label:"API key",hint:k?void 0:"optional",children:n("input",{name:"key",type:"password",placeholder:"acme_live_4f9a\u2026",autocomplete:"off",required:!!k},e?.name)}),k?n(E,{label:"Header",children:n("input",{name:"header",class:"mono",defaultValue:T?.name??"Authorization",placeholder:"Authorization",autocomplete:"off",required:!0},`header:${T?.name}`)}):n(E,{label:"Environment variable",children:n("input",{name:"env",class:"mono",defaultValue:T?.name,placeholder:"ACME_API_KEY",autocomplete:"off"},`env:${T?.name}`)})]}):null,n("details",{class:"add-more",children:[n("summary",{children:"More options"}),n("div",{class:"add-grid",children:n(E,{label:"Access",hint:"read-only keeps only its read-only tools",group:!0,children:n(An,{label:"Access",options:k?pn:pn.filter(([d])=>d==="auto"),value:U,onChange:h})})})]})]});return{busy:v,body:O,submit:nn,actions:n(F,{type:"submit",disabled:L,loading:v,children:"Add connection"})}}function Kn({pick:e,rows:a,local:i,admin:c,operator:r,builtin:m,scope:u,onBack:l,onAdded:g,onClose:I}){let f=e.kind==="platform",[w,s]=A(i?"workspace":u??(f||!c?"personal":"workspace")),h=f?Hn({info:e.info,rows:a,scope:w,operator:r,builtin:m,onAdded:g}):void 0,v=f?void 0:_n({...e,scope:w,onAdded:g}),B=h??v,P=f?e.info.name:e.server?.title??"MCP server";return n(Z,{class:"add-modal",title:n("span",{class:"conn-title",children:[l?n(wn,{label:"Back",onClick:l,children:n(j,{d:hn})}):null,f?n(K,{brand:e.info.brand}):null,P]}),dismiss:!0,busy:B.busy,onSubmit:k=>{k.preventDefault(),B.submit(k.currentTarget)},onClose:I,actions:B.actions,children:[i?null:n("div",{class:"conn-scope",children:[n(E,{label:"Acts as",group:!0,children:f||c?n(Mn,{label:"Acts as",options:jn,value:w,onChange:k=>s(k)}):n("p",{class:"muted",children:"Personal. Admins add workspace servers."})}),h?n("p",{class:"conn-state",children:[h.status,n("span",{class:"muted",children:h.hint})]}):n("p",{class:"muted",children:w==="workspace"?"An admin\u2019s account. Every turn.":"The member\u2019s own account. Their turns only."})]}),h?.notice??null,v?.body??null]})}function On({catalog:e,rows:a,local:i,admin:c,operator:r,builtin:m,start:u,onAdded:l,onClose:g}){let I=G(),f=I.get("add"),w=e.find(P=>P.id===f),[s,h]=A(u?.pick??(w?{kind:"platform",info:w}:I.has("url")?{kind:"mcp",target:I.get("url")??"",name:f??void 0}:void 0)),v=u?.scope??I.get("scope")??void 0,B=e.filter(P=>P.personal||a.some(k=>k.agent&&k.provider===P.id));return s?n(Kn,{pick:s,rows:a,local:i,admin:c,operator:r,builtin:m,scope:v,onBack:u?void 0:()=>h(void 0),onAdded:l,onClose:g},s.kind==="platform"?s.info.id:s.server?.name??s.target):n(Z,{class:"add-modal",title:"Add a connection",dismiss:!0,onClose:g,children:n(xn,{platforms:B,onPick:h})})}var Wn=e=>e.url?URL.canParse(e.url)?new URL(e.url).host:e.url:e.command;function Vn(e,a){let i=new Map;for(let c of a.filter(r=>r.personal))i.set(c.id,{key:c.id,name:c.name,info:c,rows:[]});for(let c of e){let r=a.find(l=>l.id===c.provider),m=r?r.id:`mcp:${c.name.replace(/-user$/,"")}`,u=i.get(m)??{key:m,name:r?.name??c.name.replace(/-user$/,""),info:r,where:r?void 0:Wn(c),rows:[]};u.rows.push(c),i.set(m,u)}return[...i.values()]}function qn({row:e,label:a,onReconnect:i,busy:c}){let r=e.status==="needs-auth";return n(S,{children:[n("i",{class:r?"conn-dot warn":e.status==="disabled"?"conn-dot off":"conn-dot"}),n("span",{class:"conn-name",children:r?"needs sign-in":a??e.account??e.name}),e.access==="read-only"?n("span",{class:"dim",title:"Read-only",children:n(j,{d:yn})}):null,r&&i?n(F,{variant:"ghost",size:"sm",loading:c,onClick:i,children:"Reconnect"}):null]})}function zn({row:e,onReconnect:a,onRemoved:i}){let c=Fn({title:`Remove ${e.name}?`,body:"Tasks stop using it, and its key or sign-in is deleted.",link:e.name,onRemove:()=>N.connections.remove(e.id).then(i,Bn)});return n(S,{children:[n(vn,{button:"icon",label:`${e.name} actions`,summary:n(j,{d:bn}),children:[n(_,{title:e.auth==="key"?"New key":"Sign in again",onClick:a}),c.item]}),c.dialog]})}function De({first:e,catalog:a,local:i,admin:c,operator:r,viewer:m,agents:u,builtins:l}){let[g,I]=A(e.filter(t=>t.provider!=="env")),f=G(),w=f.get("reconnect"),s=f.get("connect"),[h,v]=A(g.find(t=>t.name===w&&t.auth==="key")),B=$n("Add connection",["url","access","tools","scope"]),[P,k]=A(),$=X({leaves:!0}),rn=tn(),U=t=>I(p=>p.some(o=>o.id===t.id)?p.map(o=>o.id===t.id?t:o):[...p,t]),T=t=>I(p=>p.filter(o=>o.id!==t.id)),{add:W}=an(U),L=t=>{if(t.auth==="key")return v(t);$.run(t.id,async()=>location.assign(sn((await N.connections.authorize(t.id)).url)))},V=Vn(g,a),nn=()=>{k(void 0),B.close()},O=l[0],[d,x]=A(),q=({step:t,info:p,agent:o=O.id,quiet:C})=>n(on,{step:t,info:p,org:rn,agent:o,builtin:!0,operator:r,unreachable:a.some(b=>b.unreachable),quiet:C}),Q=({accounts:t,title:p})=>n(S,{children:[n("i",{class:"conn-dot"}),n("span",{class:"conn-name",title:p,children:[...new Set(t.filter(Boolean))].join(", ")||"installed"}),n("span",{class:"grow"})]}),z=({info:t})=>{let p=l.flatMap(o=>(o.steps[t.id]?.live??[]).map(C=>({agent:o.name,account:C.account})));return p.length?n(S,{children:[n(Q,{accounts:p.map(o=>o.account),title:p.map(o=>`${o.agent} in ${o.account??t.name}`).join(", ")}),n(F,{size:"sm",variant:"ghost",onClick:()=>x(t),children:"Manage"})]}):n(S,{children:[n(H,{children:"not set up"}),n(F,{size:"sm",onClick:()=>x(t),children:["Set up ",t.name]})]})},cn=t=>{let p=t.rows.filter(b=>b.agent),o=t.rows.find(b=>!b.owner&&!b.agent);if(t.info?.builtinApp==="own"&&l.some(b=>b.steps[t.info.id]))return n("div",{class:"conn-cell",children:n(z,{info:t.info})});if(t.info){let b=t.info,y=O?.steps[b.id],R=[...new Set(p.map(M=>M.agent))].filter(M=>M!==O?.id),D=M=>u.find(en=>en.id===M)?.name??M;return n("div",{class:"conn-cell",children:[y?.live.length?n(Q,{accounts:y.live.map(M=>M.account)}):null,R.length?n("span",{class:"conn-others",title:`Their own ${b.name} apps: ${R.map(D).join(", ")}`,children:[n(j,{d:gn}),R.length]}):null,y?n(q,{step:y,info:b,quiet:!0}):null,y||R.length?null:n("span",{class:"dim",children:"\u2014"})]})}if(o)return n("div",{class:"conn-cell",children:[n(qn,{row:o,label:o.name,busy:$.pending===o.id,onReconnect:c?()=>L(o):void 0}),n("span",{class:"grow"}),c?n(zn,{row:o,onReconnect:()=>L(o),onRemoved:()=>T(o)}):null]});let C=t.rows[0];return c&&C?n(F,{variant:"ghost",size:"sm",leftIcon:J,onClick:()=>k({pick:{kind:"mcp",target:C.url??C.command,name:t.name},scope:"workspace"}),children:"Connect"}):n("span",{class:"dim",children:"\u2014"})},ln=t=>{let p=t.rows.find(y=>y.asker),o=t.rows.filter(y=>y.owner&&!y.asker),C=t.rows[0],b=o.length?n("span",{class:"conn-others",title:o.map(y=>y.owner?.name??"A member").join(", "),children:[n(j,{d:kn}),o.length]}):null;return n("div",{class:"conn-cell",children:p?n(S,{children:[n(qn,{row:p,busy:$.pending===p.id,onReconnect:()=>L(p)}),n("span",{class:"grow"}),b,n(zn,{row:p,onReconnect:()=>L(p),onRemoved:()=>T(p)})]}):t.info&&!t.info.connectable?n(S,{children:[n("span",{class:"dim grow",children:"\u2014"}),b]}):n(S,{children:[n(F,{variant:"ghost",size:"sm",leftIcon:J,autoFocus:t.key===s,onClick:()=>t.info?W({name:t.info.name,provider:t.info.id}):k({pick:{kind:"mcp",target:C?.url??C?.command,name:t.name},scope:"personal"}),children:"Connect"}),n("span",{class:"grow"}),b]})})},dn=[["Platforms",V.filter(t=>t.info)],["MCP servers",V.filter(t=>!t.info)]].filter(([,t])=>t.length);return n(S,{children:[n(Cn,{look:"filled",title:"Connections",actions:B.button,children:[V.length?n(S,{children:[n("div",{class:"table-scroll",children:n("table",{class:"conns",children:[n("colgroup",{children:[n("col",{class:"conns-svc"}),n("col",{}),i?null:n("col",{})]}),n("thead",{children:n("tr",{children:[n("th",{children:"Service"}),n("th",{children:"Workspace"}),i?null:n("th",{children:m?`Personal \xB7 ${m}`:"Personal"})]})}),dn.map(([t,p])=>n("tbody",{children:[n("tr",{class:"conns-group",children:n("th",{colSpan:i?2:3,children:t})}),p.map(o=>n("tr",{class:o.key===s?"conns-marked":void 0,children:[n("td",{children:n("span",{class:"conn-svc",title:o.where,children:[o.info?n(K,{brand:o.info.brand}):n("span",{class:"conn-mark",children:o.name[0]}),n("b",{children:o.name})]})}),o.info&&!o.info.connectable&&!o.rows.length&&!l.some(C=>C.steps[o.info.id]?.live.length)?n("td",{colSpan:i?1:2,children:n("div",{class:"conn-cell",children:o.info.builtinApp==="own"&&l.some(C=>C.steps[o.info.id])?n(z,{info:o.info}):O?.steps[o.info.id]?n(q,{step:O.steps[o.info.id],info:o.info}):n("span",{class:"dim",children:"\u2014"})})}):n(S,{children:[n("td",{children:cn(o)}),i?null:n("td",{children:ln(o)})]})]},o.key))]},t))]})}),i?null:n("p",{class:"conns-hint",children:"Personal accounts run only on their owner's turns."})]}):n(Sn,{title:"No connections yet",children:"Add one so tasks can use another service, like an issue tracker or a database."}),h?n(Qn,{row:h,onSaved:t=>{U(t),v(void 0)},onClose:()=>v(void 0)}):null]}),d?n(Z,{title:`${d.name} apps`,dismiss:!0,onClose:()=>x(void 0),children:[n("p",{class:"muted",children:["Each agent has its own ",d.name," app, so each answers as its own @name in"," ",d.name,". Set one up for every built-in agent that should work there."]}),n("div",{class:"agent-apps",children:l.filter(t=>t.steps[d.id]).map(t=>n("div",{class:"agent-app",children:[n("b",{children:t.name}),n(q,{step:t.steps[d.id],info:d,agent:t.id})]},t.id))}),n("p",{class:"muted",children:"Other agents set theirs up on their own Platforms tab."})]}):null,B.open||P?n(On,{catalog:a,rows:g,local:i,admin:c,operator:r,builtin:O,start:P,onAdded:t=>{U(t),nn()},onClose:nn}):null]})}function Qn({row:e,onSaved:a,onClose:i}){let c=X({leaves:!0}),r=!!c.pending,m=Y(null);return fn(()=>m.current?.focus(),[]),n("form",{class:"add-row conn-key",method:"post",onSubmit:u=>{u.preventDefault();let l=String(new FormData(u.currentTarget).get("key")??"").trim();l&&c.run("save",async()=>a(await N.connections.update(e.id,{key:l})))},children:[n("input",{name:"key",type:"password","aria-label":`New key for ${e.name}`,placeholder:`New key for ${e.name}, then Enter`,ref:m,autocomplete:"off",required:!0}),n(F,{type:"submit",loading:r,children:"Save key"}),n(F,{variant:"ghost",disabled:r,onClick:i,children:"Cancel"})]})}export{De as ConnectionsList};
@@ -1 +1 @@
1
- import{$2O as l,$2Q as e,$2U as c,$2w as r}from"./shared-init-926144b364908b3c.js";import{$3h as n}from"./shared-init-9b28886f3cbe0ed3-2.js";function p({value:o,label:i="Copy"}){let[t,d]=n(!1);return e(c,{icon:t?r:l,label:t?"Copied":i,class:t?"copied":void 0,onClick:()=>void navigator.clipboard.writeText(o).then(()=>d(!0))})}function g({value:o,label:i="Copy command",link:t}){return e("div",{class:"copy-line",children:[t?e("a",{href:o,target:"_blank",rel:"noreferrer",children:e("code",{children:o})}):e("code",{children:o}),e(p,{value:o,label:i})]})}export{p as a,g as b};
1
+ import{$3O as l,$3Q as e,$3U as c,$3w as r}from"./shared-init-abd7653140f37a0c.js";import{$2h as n}from"./shared-init-3fcac605fffcc273-2.js";function p({value:o,label:i="Copy"}){let[t,d]=n(!1);return e(c,{icon:t?r:l,label:t?"Copied":i,class:t?"copied":void 0,onClick:()=>void navigator.clipboard.writeText(o).then(()=>d(!0))})}function g({value:o,label:i="Copy command",link:t}){return e("div",{class:"copy-line",children:[t?e("a",{href:o,target:"_blank",rel:"noreferrer",children:e("code",{children:o})}):e("code",{children:o}),e(p,{value:o,label:i})]})}export{p as a,g as b};
@@ -0,0 +1 @@
1
+ "use client";import{a as u,e as g}from"./platform-actions-f3979ab69a6ceb53.js";import"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import"./segmented-66a8c77c6294fec3.js";import"./outcome-dialog-fd86ded4c44c2de7.js";import"./field-adcb6e6a5f9b7131.js";import{$0a as l}from"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import{$1c as c,$1r as f}from"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import{$3Q as e,$3S as m}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2h as t,$2j as p}from"./shared-init-3fcac605fffcc273-2.js";function v({integration:r,state:i,info:o}){let[d,C]=t(!1),[b,a]=t(!0),[n,h]=t(),s=()=>c.apps.start(r,i);return p(()=>{u(o?.create,i,s).then(h).catch(y=>{C(!0),l(y)})},[]),d?null:n?b?e(g,{integration:r,step:n,start:s,unreachable:o?.unreachable,onClose:()=>a(!1)}):e(m,{onClick:()=>a(!0),children:n.submit}):e(f,{label:`Opening ${o?.name??r}`})}export{v as CreateLink};
@@ -1 +1 @@
1
- "use client";import{a as te}from"./combo-cb2c62fe580a8903.js";import{e as Z,n as Q}from"./model-options-d29e934a3de20ab4.js";import{a as X}from"./types-3eca2c7f47c46054.js";import{d as ee,e as ne,f as Y}from"./list-16247e39898cd20e.js";import{a as F}from"./copy-294c6052b3b69424.js";import"./confirm-d6b2c5b1deccd1e8.js";import{$1a as E,$1b as O}from"./shared-init-953965859f7bf6b9.js";import{$0h as M}from"./shared-init-953965859f7bf6b9.js";import"./shared-init-926144b364908b3c.js";import{$0D as J,$0a as z,$0k as K,$0z as q}from"./shared-init-926144b364908b3c.js";import{$3c as g,$3e as N,$3k as W,$3o as A,$3r as L}from"./shared-init-926144b364908b3c.js";import"./wular-pnext-9b28886f3cbe0ed3-0.js";import{$1a as V}from"./shared-init-926144b364908b3c.js";import{$2Q as e,$2R as _,$2S as S,$2w as D}from"./shared-init-926144b364908b3c.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import{$3c as k,$3h as C,$3j as B,$3l as $}from"./shared-init-9b28886f3cbe0ed3-2.js";var P=[{id:"claude",name:"Claude",key:"ANTHROPIC_API_KEY",signIn:"Claude"},{id:"codex",name:"Codex",key:"OPENAI_API_KEY",signIn:"ChatGPT"}],ie=[...P.map(t=>t.key),...Q.flatMap(t=>t.envKey||[])],se=(t,u)=>ie.find(l=>l!==u&&!t.some(f=>f.name===l))??"";function re({keys:t,admin:u,focus:l,ask:f}){let[c,h]=C(P.find(p=>p.id===l)?.key??(/^[A-Z][A-Z0-9_]*$/.test(l)?l:se(t))),[m,y]=C(u?"workspace":"personal"),o=$(null),d=O({toast:"Not saved",refresh:!0});return B(()=>{l&&o.current?.focus()},[]),e("form",{class:"cred-add",method:"post",onSubmit:p=>{p.preventDefault();let a=p.currentTarget,s=c.trim(),b=String(new FormData(a).get("key")??"").trim();if(!s||!b)return;let I=()=>void d.run("add",async()=>{await g.credentials.add({env:{[s]:b},...m==="workspace"?{workspace:!0}:{}}),a.reset(),h(se(t,s))});t.some(w=>w.name===s&&w.scope===m)?f(ee(s,m),I):I()},children:[e(te,{label:"Variable",name:"name",class:"mono cred-var",options:ie,placeholder:"OPENAI_API_KEY",value:c,onChange:h}),e("input",{type:"password",name:"key",autocomplete:"off","aria-label":"API key",placeholder:"API key",ref:o,"aria-busy":!!d.pending,required:!0}),u?e(q,{label:"Who can use this key",options:Z,value:m,onChange:y}):null,e(S,{type:"submit",loading:!!d.pending,children:"Add"})]})}function de({login:t,engine:u,onChange:l,onDone:f,onError:c,onCancel:h}){let[m,y]=C();N(t.id&&t.state!=="done"&&t.state!=="failed"?a=>g.credentials.loginStatus(t.id).then(s=>{if(!a.aborted){if(s.state==="done")return f();if(s.state==="failed")return c(s.error??"Sign-in failed. Try again.");t.state==="verifying"&&s.state==="open"&&s.url===m||l(s)}}).catch(s=>{if(a.aborted)return;let b=s.status;if(b===void 0||b>=500)return console.error("coder dashboard: sign-in status",s);c(M(s))}):void 0,800,[t.id]);let o=a=>{y(t.url),l({...t,state:"verifying"}),g.credentials.loginCode(t.id,a).catch(s=>c(M(s)))},d=t.state==="verifying",p=!!m&&t.state==="open"&&t.url!==m;return e(V,{class:"sign-in",title:`Sign in with ${u.signIn}`,cancelDanger:!0,onClose:h,children:[e("p",{class:"muted",children:"Coder signs in on a private machine and keeps the sign-in for your tasks."}),e("div",{class:"sign-link",children:t.url?e(k,{children:[e(S,{href:t.url,external:!0,autoFocus:!0,children:["Open ",new URL(t.url).host]}),e(F,{value:t.url,label:"Copy link"})]}):e(L,{label:"Starting the sign-in machine\u2026",inline:!0})}),e("ol",{class:"steps-list sign-steps",role:"status",children:t.engine==="codex"?e(k,{children:[e("li",{children:["Open the sign-in page and enter this code.",t.code?e("span",{class:"code-box",children:[t.code,e(F,{value:t.code,label:"Copy code"})]}):null]}),e("li",{children:t.url?e(L,{label:"Waiting for your approval on the sign-in page\u2026",inline:!0}):"Approve it there."})]}):e(k,{children:[e("li",{children:["Open the ",u.signIn," sign-in and approve it."]}),e("li",{children:[p?e("span",{class:"rejected",role:"alert",children:"That code did not work. Open the sign-in again and paste the new code."}):"Paste the code it shows.",e("input",{class:"mono",autocomplete:"off","aria-label":`Code from the ${u.signIn} sign-in page`,placeholder:"Paste the code from the sign-in page",disabled:t.state!=="open",onPaste:a=>{let s=a.clipboardData?.getData("text").trim();s&&(a.preventDefault(),a.currentTarget.value=s,o(s))},onKeyDown:a=>{let s=a.currentTarget.value.trim();a.key==="Enter"&&s&&o(s)}},t.url),d?e(L,{label:"Checking the code\u2026",inline:!0}):null]})]})})]})}function Te({status:t}){let[u,l]=C(t),f=O(),[c,h]=C(),m=f.pending??(c?`${c.engine}:login`:"");N(c?async o=>{let d=await g.engines.status();o.aborted||(l(d),(d[c.engine]?.signedIn||Date.now()>c.until)&&h(void 0))}:void 0,2e3,[c]);let y=(o,d)=>void f.run(`${o}:${d}`,async()=>{l(await g.engines[d](o)),d==="login"&&h({engine:o,until:Date.now()+5*6e4})});return e(k,{children:[P.map(o=>{let d=u[o.id],p=m===`${o.id}:login`;return e(A,{look:"filled",title:o.name,children:e("div",{class:"cred-new",children:[d?.signedIn?e("span",{class:"signed grow",children:[e(_,{d:D}),"Signed in to ",o.name]}):p?e("span",{class:"grow muted",children:["Finish signing in in the window ",o.name," opened."]}):e("span",{class:"grow muted",children:"Not signed in on this machine."}),d?.signedIn?e(S,{variant:"secondary",danger:!0,size:"sm",loading:m===`${o.id}:logout`,onClick:()=>y(o.id,"logout"),children:"Sign out"}):e(S,{variant:"secondary",size:"sm",loading:p,disabled:!!m,onClick:()=>y(o.id,"login"),children:"Sign in"}),p?e(S,{variant:"ghost",size:"sm",onClick:()=>h(void 0),children:"Cancel"}):null]})},o.id)}),e("p",{class:"muted",children:"On the local server, custom models read their key variable from this machine's environment."})]})}function Be({rows:t,me:u,focus:l}){let f=z(),c=J(),[h,m]=C({}),[y,o]=C(!1),d=X(u),p=P.filter(n=>u.user&&u.server?.subscriptions?.[n.id]),a=t.filter(n=>!n.subscription),s=O({refresh:!0}),b=ne(),I=`coder-logins:${c}`,w=()=>{try{return JSON.parse(sessionStorage.getItem(I)??"{}")}catch{return{}}},v=(n,i)=>{m(r=>({...r,[n]:i}));try{let r={...w(),[n]:i?.id||void 0};sessionStorage.setItem(I,JSON.stringify(r))}catch{}},R=$(new Set);B(()=>{for(let[n,i]of Object.entries(w()))g.credentials.loginStatus(i).then(r=>{if(!R.current.has(n)){if(r.state==="done")return x(n);if(r.state==="failed")return v(n),E(r.error??"Sign-in failed. Try again.");v(n,r)}}).catch(()=>{R.current.has(n)||v(n)})},[]);let x=n=>{v(n),f.refresh()},U=n=>{R.current.add(n),v(n,{id:"",engine:n,state:"starting"}),g.credentials.login(n).then(i=>v(n,i)).catch(i=>{v(n),E(i)})},G=n=>t.find(i=>i.subscription&&i.name===n),H=(n,i)=>G(n.id)?b.ask(`Replace the personal ${n.name} subscription?`,i):i(),j=n=>s.run(`remove:${n.scope}/${n.name}`,()=>g.credentials.remove(n.name,{workspace:n.scope==="workspace"}));return e(k,{children:[p.length?e(A,{look:"filled",title:"Subscriptions",children:e("div",{class:"cred-engine",children:[e("p",{class:"muted cred-note",children:["Personal: each member signs in with their own. A subscription runs its owner's tasks, and platform turns from accounts connected on"," ",e("a",{class:"link",href:`/dash/${c}/settings/connections`,children:"Connections"}),"."]}),e("table",{class:"rows creds",children:e("tbody",{children:p.map(n=>{let i=G(n.id),r=h[n.id],oe=[i?.account?.email,i?.account?.plan];return e(Y,{title:n.name,sub:i?oe.filter(Boolean).join(" \xB7 "):void 0,actions:e(k,{children:[i?e("span",{class:"signed",children:[e(_,{d:D}),"Connected"]}):e(S,{autoFocus:l===n.id,disabled:!!r,onClick:()=>U(n.id),children:["Sign in with ",n.signIn]}),r?e(de,{login:r,engine:n,onChange:T=>v(r.engine,T),onDone:()=>x(r.engine),onError:T=>{v(r.engine),E(T)},onCancel:()=>{v(r.engine),r.id&&g.credentials.cancelLogin(r.id).catch(E)}}):null]}),alignMenu:!0,menu:i||n.id==="claude"?e(k,{children:[i?e(K,{title:"Sign in again",disabled:!!r,onClick:()=>H(n,()=>U(n.id))}):null,n.id==="claude"?e(K,{title:"Paste a setup token",onClick:()=>o(!0)}):null]}):void 0,remove:i?{label:"Sign out",title:`Sign out of ${n.name}?`,body:"Tasks that use it stop running.",onRemove:()=>j(i)}:void 0},n.id)})})}),y?e("div",{class:"cred-new",children:e("form",{class:"cred-add",method:"post",onSubmit:n=>{n.preventDefault();let i=String(new FormData(n.currentTarget).get("token")??"");i.trim()&&H(P[0],()=>void s.run("token",async()=>{await g.credentials.add({env:{CLAUDE_CODE_OAUTH_TOKEN:i.trim()}}),o(!1)}))},children:[e("input",{type:"password",name:"token",autocomplete:"off","aria-label":"Your claude setup-token",placeholder:"Paste a claude setup-token",ref:n=>n?.focus(),required:!0}),e(S,{type:"submit",loading:s.pending==="token",children:"Add"})]})}):null]})}):null,e(A,{look:"filled",title:"API keys",count:a.length||void 0,children:e("div",{class:"cred-engine",children:[e("p",{class:"muted cred-note",children:["Tasks read each key as its variable. Claude uses ANTHROPIC_API_KEY, Codex uses OPENAI_API_KEY, and a"," ",e("a",{class:"link",href:`/dash/${c}/settings/models`,children:"custom model"})," ","uses the one it names."]}),a.length?e("table",{class:"rows creds",children:e("tbody",{children:a.map(n=>e(Y,{title:n.name,badges:e(W,{children:n.scope}),sub:n.masked,remove:n.scope==="personal"||d?{title:`Remove ${n.name}?`,body:"Tasks that use it stop running.",link:n.name,onRemove:()=>j(n)}:void 0},`${n.scope}/${n.name}`))})}):null,e("div",{class:"cred-new",children:e(re,{keys:a,admin:d,focus:p.some(n=>n.id===l)?"":l,ask:b.ask})})]})}),b.dialog]})}export{Be as CredentialsList,Te as EngineLogins};
1
+ "use client";import{a as te}from"./combo-6df61e8a1cc31037.js";import{e as Z,n as Q}from"./model-options-5e07b3318d69d218.js";import{a as X}from"./types-3eca2c7f47c46054.js";import{d as ee,e as ne,f as Y}from"./list-662f042656857c82.js";import{a as F}from"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import{$0a as E,$0b as O}from"./shared-init-96225b8c7758de9d.js";import{$1h as M}from"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import{$0D as J,$0a as z,$0k as K,$0z as q}from"./shared-init-abd7653140f37a0c.js";import{$1c as g,$1e as N,$1k as W,$1o as A,$1r as L}from"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import{$4a as V}from"./shared-init-abd7653140f37a0c.js";import{$3Q as e,$3R as _,$3S as S,$3w as D}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2c as k,$2h as C,$2j as B,$2l as $}from"./shared-init-3fcac605fffcc273-2.js";var P=[{id:"claude",name:"Claude",key:"ANTHROPIC_API_KEY",signIn:"Claude"},{id:"codex",name:"Codex",key:"OPENAI_API_KEY",signIn:"ChatGPT"}],ie=[...P.map(t=>t.key),...Q.flatMap(t=>t.envKey||[])],se=(t,u)=>ie.find(l=>l!==u&&!t.some(f=>f.name===l))??"";function re({keys:t,admin:u,focus:l,ask:f}){let[c,h]=C(P.find(p=>p.id===l)?.key??(/^[A-Z][A-Z0-9_]*$/.test(l)?l:se(t))),[m,y]=C(u?"workspace":"personal"),o=$(null),d=O({toast:"Not saved",refresh:!0});return B(()=>{l&&o.current?.focus()},[]),e("form",{class:"cred-add",method:"post",onSubmit:p=>{p.preventDefault();let a=p.currentTarget,s=c.trim(),b=String(new FormData(a).get("key")??"").trim();if(!s||!b)return;let I=()=>void d.run("add",async()=>{await g.credentials.add({env:{[s]:b},...m==="workspace"?{workspace:!0}:{}}),a.reset(),h(se(t,s))});t.some(w=>w.name===s&&w.scope===m)?f(ee(s,m),I):I()},children:[e(te,{label:"Variable",name:"name",class:"mono cred-var",options:ie,placeholder:"OPENAI_API_KEY",value:c,onChange:h}),e("input",{type:"password",name:"key",autocomplete:"off","aria-label":"API key",placeholder:"API key",ref:o,"aria-busy":!!d.pending,required:!0}),u?e(q,{label:"Who can use this key",options:Z,value:m,onChange:y}):null,e(S,{type:"submit",loading:!!d.pending,children:"Add"})]})}function de({login:t,engine:u,onChange:l,onDone:f,onError:c,onCancel:h}){let[m,y]=C();N(t.id&&t.state!=="done"&&t.state!=="failed"?a=>g.credentials.loginStatus(t.id).then(s=>{if(!a.aborted){if(s.state==="done")return f();if(s.state==="failed")return c(s.error??"Sign-in failed. Try again.");t.state==="verifying"&&s.state==="open"&&s.url===m||l(s)}}).catch(s=>{if(a.aborted)return;let b=s.status;if(b===void 0||b>=500)return console.error("coder dashboard: sign-in status",s);c(M(s))}):void 0,800,[t.id]);let o=a=>{y(t.url),l({...t,state:"verifying"}),g.credentials.loginCode(t.id,a).catch(s=>c(M(s)))},d=t.state==="verifying",p=!!m&&t.state==="open"&&t.url!==m;return e(V,{class:"sign-in",title:`Sign in with ${u.signIn}`,cancelDanger:!0,onClose:h,children:[e("p",{class:"muted",children:"Coder signs in on a private machine and keeps the sign-in for your tasks."}),e("div",{class:"sign-link",children:t.url?e(k,{children:[e(S,{href:t.url,external:!0,autoFocus:!0,children:["Open ",new URL(t.url).host]}),e(F,{value:t.url,label:"Copy link"})]}):e(L,{label:"Starting the sign-in machine\u2026",inline:!0})}),e("ol",{class:"steps-list sign-steps",role:"status",children:t.engine==="codex"?e(k,{children:[e("li",{children:["Open the sign-in page and enter this code.",t.code?e("span",{class:"code-box",children:[t.code,e(F,{value:t.code,label:"Copy code"})]}):null]}),e("li",{children:t.url?e(L,{label:"Waiting for your approval on the sign-in page\u2026",inline:!0}):"Approve it there."})]}):e(k,{children:[e("li",{children:["Open the ",u.signIn," sign-in and approve it."]}),e("li",{children:[p?e("span",{class:"rejected",role:"alert",children:"That code did not work. Open the sign-in again and paste the new code."}):"Paste the code it shows.",e("input",{class:"mono",autocomplete:"off","aria-label":`Code from the ${u.signIn} sign-in page`,placeholder:"Paste the code from the sign-in page",disabled:t.state!=="open",onPaste:a=>{let s=a.clipboardData?.getData("text").trim();s&&(a.preventDefault(),a.currentTarget.value=s,o(s))},onKeyDown:a=>{let s=a.currentTarget.value.trim();a.key==="Enter"&&s&&o(s)}},t.url),d?e(L,{label:"Checking the code\u2026",inline:!0}):null]})]})})]})}function Te({status:t}){let[u,l]=C(t),f=O(),[c,h]=C(),m=f.pending??(c?`${c.engine}:login`:"");N(c?async o=>{let d=await g.engines.status();o.aborted||(l(d),(d[c.engine]?.signedIn||Date.now()>c.until)&&h(void 0))}:void 0,2e3,[c]);let y=(o,d)=>void f.run(`${o}:${d}`,async()=>{l(await g.engines[d](o)),d==="login"&&h({engine:o,until:Date.now()+5*6e4})});return e(k,{children:[P.map(o=>{let d=u[o.id],p=m===`${o.id}:login`;return e(A,{look:"filled",title:o.name,children:e("div",{class:"cred-new",children:[d?.signedIn?e("span",{class:"signed grow",children:[e(_,{d:D}),"Signed in to ",o.name]}):p?e("span",{class:"grow muted",children:["Finish signing in in the window ",o.name," opened."]}):e("span",{class:"grow muted",children:"Not signed in on this machine."}),d?.signedIn?e(S,{variant:"secondary",danger:!0,size:"sm",loading:m===`${o.id}:logout`,onClick:()=>y(o.id,"logout"),children:"Sign out"}):e(S,{variant:"secondary",size:"sm",loading:p,disabled:!!m,onClick:()=>y(o.id,"login"),children:"Sign in"}),p?e(S,{variant:"ghost",size:"sm",onClick:()=>h(void 0),children:"Cancel"}):null]})},o.id)}),e("p",{class:"muted",children:"On the local server, custom models read their key variable from this machine's environment."})]})}function Be({rows:t,me:u,focus:l}){let f=z(),c=J(),[h,m]=C({}),[y,o]=C(!1),d=X(u),p=P.filter(n=>u.user&&u.server?.subscriptions?.[n.id]),a=t.filter(n=>!n.subscription),s=O({refresh:!0}),b=ne(),I=`coder-logins:${c}`,w=()=>{try{return JSON.parse(sessionStorage.getItem(I)??"{}")}catch{return{}}},v=(n,i)=>{m(r=>({...r,[n]:i}));try{let r={...w(),[n]:i?.id||void 0};sessionStorage.setItem(I,JSON.stringify(r))}catch{}},R=$(new Set);B(()=>{for(let[n,i]of Object.entries(w()))g.credentials.loginStatus(i).then(r=>{if(!R.current.has(n)){if(r.state==="done")return x(n);if(r.state==="failed")return v(n),E(r.error??"Sign-in failed. Try again.");v(n,r)}}).catch(()=>{R.current.has(n)||v(n)})},[]);let x=n=>{v(n),f.refresh()},U=n=>{R.current.add(n),v(n,{id:"",engine:n,state:"starting"}),g.credentials.login(n).then(i=>v(n,i)).catch(i=>{v(n),E(i)})},G=n=>t.find(i=>i.subscription&&i.name===n),H=(n,i)=>G(n.id)?b.ask(`Replace the personal ${n.name} subscription?`,i):i(),j=n=>s.run(`remove:${n.scope}/${n.name}`,()=>g.credentials.remove(n.name,{workspace:n.scope==="workspace"}));return e(k,{children:[p.length?e(A,{look:"filled",title:"Subscriptions",children:e("div",{class:"cred-engine",children:[e("p",{class:"muted cred-note",children:["Personal: each member signs in with their own. A subscription runs its owner's tasks, and platform turns from accounts connected on"," ",e("a",{class:"link",href:`/dash/${c}/settings/connections`,children:"Connections"}),"."]}),e("table",{class:"rows creds",children:e("tbody",{children:p.map(n=>{let i=G(n.id),r=h[n.id],oe=[i?.account?.email,i?.account?.plan];return e(Y,{title:n.name,sub:i?oe.filter(Boolean).join(" \xB7 "):void 0,actions:e(k,{children:[i?e("span",{class:"signed",children:[e(_,{d:D}),"Connected"]}):e(S,{autoFocus:l===n.id,disabled:!!r,onClick:()=>U(n.id),children:["Sign in with ",n.signIn]}),r?e(de,{login:r,engine:n,onChange:T=>v(r.engine,T),onDone:()=>x(r.engine),onError:T=>{v(r.engine),E(T)},onCancel:()=>{v(r.engine),r.id&&g.credentials.cancelLogin(r.id).catch(E)}}):null]}),alignMenu:!0,menu:i||n.id==="claude"?e(k,{children:[i?e(K,{title:"Sign in again",disabled:!!r,onClick:()=>H(n,()=>U(n.id))}):null,n.id==="claude"?e(K,{title:"Paste a setup token",onClick:()=>o(!0)}):null]}):void 0,remove:i?{label:"Sign out",title:`Sign out of ${n.name}?`,body:"Tasks that use it stop running.",onRemove:()=>j(i)}:void 0},n.id)})})}),y?e("div",{class:"cred-new",children:e("form",{class:"cred-add",method:"post",onSubmit:n=>{n.preventDefault();let i=String(new FormData(n.currentTarget).get("token")??"");i.trim()&&H(P[0],()=>void s.run("token",async()=>{await g.credentials.add({env:{CLAUDE_CODE_OAUTH_TOKEN:i.trim()}}),o(!1)}))},children:[e("input",{type:"password",name:"token",autocomplete:"off","aria-label":"Your claude setup-token",placeholder:"Paste a claude setup-token",ref:n=>n?.focus(),required:!0}),e(S,{type:"submit",loading:s.pending==="token",children:"Add"})]})}):null]})}):null,e(A,{look:"filled",title:"API keys",count:a.length||void 0,children:e("div",{class:"cred-engine",children:[e("p",{class:"muted cred-note",children:["Tasks read each key as its variable. Claude uses ANTHROPIC_API_KEY, Codex uses OPENAI_API_KEY, and a"," ",e("a",{class:"link",href:`/dash/${c}/settings/models`,children:"custom model"})," ","uses the one it names."]}),a.length?e("table",{class:"rows creds",children:e("tbody",{children:a.map(n=>e(Y,{title:n.name,badges:e(W,{children:n.scope}),sub:n.masked,remove:n.scope==="personal"||d?{title:`Remove ${n.name}?`,body:"Tasks that use it stop running.",link:n.name,onRemove:()=>j(n)}:void 0},`${n.scope}/${n.name}`))})}):null,e("div",{class:"cred-new",children:e(re,{keys:a,admin:d,focus:p.some(n=>n.id===l)?"":l,ask:b.ask})})]})}),b.dialog]})}export{Be as CredentialsList,Te as EngineLogins};
@@ -1 +1 @@
1
- import{a as e}from"./field-4d374d5ed3f43d7e.js";import{$0a as s,$0f as f,$0h as c}from"./shared-init-926144b364908b3c.js";import{$3f as p}from"./shared-init-926144b364908b3c.js";import{$2Q as t,$2R as u,$2S as l,$2h as i}from"./shared-init-926144b364908b3c.js";import{$3c as n}from"./shared-init-9b28886f3cbe0ed3-2.js";function x({page:o,from:d,to:g,today:m,on:h}){let y=s();return t(p,{class:h?"custom on":"custom",align:"left",summary:t(n,{children:["Custom",t(u,{d:i})]}),children:t("form",{class:"date-pop",onSubmit:r=>{r.preventDefault();let a=new FormData(r.currentTarget),[S,T]=[String(a.get("from")),String(a.get("to"))].sort();r.currentTarget.closest("[popover]")?.hidePopover(),y.push(o.href,{params:f(o).params,search:c(o.search,{from:String(S),to:String(T)}),scroll:!1})},children:[t(e,{label:"From",children:t("input",{type:"date",name:"from",defaultValue:d,max:m,required:!0})}),t(e,{label:"To",children:t("input",{type:"date",name:"to",defaultValue:g,max:m,required:!0})}),t(l,{type:"submit",size:"sm","data-keep":!0,children:"Apply"})]})})}export{x as a};
1
+ import{a as e}from"./field-adcb6e6a5f9b7131.js";import{$0a as s,$0f as f,$0h as c}from"./shared-init-abd7653140f37a0c.js";import{$1f as p}from"./shared-init-abd7653140f37a0c.js";import{$3Q as t,$3R as u,$3S as l,$3h as i}from"./shared-init-abd7653140f37a0c.js";import{$2c as n}from"./shared-init-3fcac605fffcc273-2.js";function x({page:o,from:d,to:g,today:m,on:h}){let y=s();return t(p,{class:h?"custom on":"custom",align:"left",summary:t(n,{children:["Custom",t(u,{d:i})]}),children:t("form",{class:"date-pop",onSubmit:r=>{r.preventDefault();let a=new FormData(r.currentTarget),[S,T]=[String(a.get("from")),String(a.get("to"))].sort();r.currentTarget.closest("[popover]")?.hidePopover(),y.push(o.href,{params:f(o).params,search:c(o.search,{from:String(S),to:String(T)}),scroll:!1})},children:[t(e,{label:"From",children:t("input",{type:"date",name:"from",defaultValue:d,max:m,required:!0})}),t(e,{label:"To",children:t("input",{type:"date",name:"to",defaultValue:g,max:m,required:!0})}),t(l,{type:"submit",size:"sm","data-keep":!0,children:"Apply"})]})})}export{x as a};
@@ -1,6 +1,6 @@
1
- "use client";import{a as Je}from"./chain-hint-53675e299a865420.js";import{a as ze,b as Ue,c as Ge,d as Ve}from"./agent-pills-9f6fa120182db948.js";import{b as Ye}from"./instructions-d3dc01b2f90820db.js";import{a as Qe}from"./agent-toggle-521136f20a71400d.js";import{a as Fe}from"./connect-repositories-226bf70aa81c29d8.js";import{$0a as j}from"./shared-init-b42d2c06c25d1e2b.js";import{$1c as We}from"./shared-init-b42d2c06c25d1e2b.js";import{a as je,d as qe,h as He,l as _e}from"./model-options-d29e934a3de20ab4.js";import{b as Ke}from"./types-3eca2c7f47c46054.js";import{a as Me}from"./segmented-f646bfa8aa0aa449.js";import{a as F}from"./field-4d374d5ed3f43d7e.js";import{$1a as V,$1b as Q}from"./shared-init-953965859f7bf6b9.js";import{$0g as G}from"./shared-init-953965859f7bf6b9.js";import{$4m as xe,$4n as ne}from"./shared-init-926144b364908b3c.js";import{$0B as te,$0C as $e,$0D as U,$0a as W,$0i as Ee,$0j as Be,$0k as ee,$0p as Ne,$0v as z,$0z as Oe}from"./shared-init-926144b364908b3c.js";import{$3c as N,$3g as Re,$3h as X,$3k as M,$3l as Ae,$3m as Te,$3n as Le,$3p as De,$3r as Z}from"./shared-init-926144b364908b3c.js";import"./wular-pnext-9b28886f3cbe0ed3-0.js";import{$2B as Ie,$2H as Se,$2J as J,$2Q as e,$2R as O,$2S as R,$2T as Pe,$2b as ye,$2h as ke,$2t as K,$2y as Ce}from"./shared-init-926144b364908b3c.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import{$3c as P,$3h as I,$3j as _,$3l as we}from"./shared-init-9b28886f3cbe0ed3-2.js";var Y=2,Xe=({name:n,platform:o})=>e("li",{children:[e("b",{children:["@",n]})," on ",o]},`${o} ${n}`);function Ze({agent:n,actions:o,back:u}){return e(P,{children:[e(Be,{}),e("header",{class:"hero",children:[e("span",{class:"hero-mark",children:G(n.name)}),e("div",{class:"grow",children:[u,e("div",{class:"title-row",children:[e("h1",{children:n.name}),e(Ve,{agent:n}),n.settings?.disabled?e(Qe,{agent:n,link:!0}):null]}),e("p",{class:"lead",children:n.description??"No description yet."})]}),o||n.handles?.length?e("div",{class:"hero-side",children:[o?e("div",{class:"actions",children:o}):null,n.handles?.length?e("ul",{class:"handles",title:"Mention it on its platforms by these names",children:[n.handles.slice(0,Y).map(Xe),n.handles.length>Y?e("li",{children:e(Re,{label:`+${n.handles.length-Y} more`,children:e("ul",{class:"handles",children:n.handles.slice(Y).map(Xe)})})}):null]}):null]}):null]})]})}function et({port:n}){return e(De,{title:"Receive platform events",note:`Expose port ${n} so platforms can reach this server`,open:"Show",children:e("div",{class:"guide",children:[e("p",{children:["Platforms reach this server through a public address. Expose port ",n," with one of these."]}),e("ul",{class:"steps-list",children:[e("li",{children:e("code",{children:["ngrok http ",n]})}),e("li",{children:e("code",{children:["cloudflared tunnel --url http://localhost:",n]})}),e("li",{children:"VS Code's Ports panel, with the port's visibility set to Public"})]}),e("p",{children:["Then restart with ",e("code",{children:"PUBLIC_URL=<tunnel URL> coder server serve"}),". The tunnel serves only webhooks and app setup, never this dashboard."]})]})})}var tt=/^[\w.-]+\/[\w.-]+$/,St=n=>/^[0-9a-f]{12,}$/i.test(n)?n.slice(0,7):n;function Pt({preview:n,onDone:o}){let[u,p]=I(new Set),h=Q({leaves:!0});if(n.failed)return null;if(!n.agents)return e(Z,{label:`Reading ${n.repo}`,h:180,late:!0});if(!n.agents.length)return e("p",{class:"muted",children:[n.repo," has no agents yet. Add a folder per agent under ",e("code",{children:".coder/agents"}),", with an ",e("code",{children:"agent.json"})," and a ",e("code",{children:"system.md"}),"."]});let a=n.agents.filter(i=>!i.taken&&!u.has(i.id)).map(i=>i.id);return e("form",{class:"import-agents",onSubmit:async i=>{i.preventDefault(),a.length&&await h.run("import",async()=>o((await N.agents.import(n.repo,void 0,a)).imported))},children:[e("ul",{class:"picks-list",children:n.agents.map(i=>e("li",{children:e("label",{class:"check",children:[e("input",{type:"checkbox",checked:!i.taken&&!u.has(i.id),disabled:i.taken,onChange:l=>{let r=new Set(u);l.currentTarget.checked?r.delete(i.id):r.add(i.id),p(r)}}),e("span",{children:[e("b",{children:i.name})," ",e(Le,{value:i.id}),i.version?e(M,{children:["v",i.version,i.commit?` \xB7 ${St(i.commit)}`:""]}):null,e("small",{children:i.taken?"An agent with this id already exists here.":i.description??"No description."}),i.warnings?.map(l=>e("small",{role:"status",children:l},l))]})]})},i.id))}),e("p",{class:"muted",children:["Each push to ",n.repo," that changes an agent publishes its new version here."]}),e("div",{class:"form-actions end",children:e(R,{type:"submit",disabled:!!h.pending||!a.length,children:["Import ",a.length===1?"1 agent":`${a.length} agents`]})})]})}function nt({connected:n,connectLabel:o,tunnel:u,port:p}){let h=W(),a=U(),[i,l]=I(),[r,b]=I(""),[w,B]=I(),L=we("");_(()=>{n&&N.repositories.list().then(s=>l(s.map(k=>k.repo))).catch(s=>{l([]),V(s)})},[]);let y=s=>{L.current=s,B({repo:s}),N.agents.preview(s).then(({agents:k})=>L.current===s&&B({repo:s,agents:k})).catch(k=>{L.current===s&&(B({repo:s,failed:!0}),V(k))})},g=s=>s.length===1?h.push("/dash/[org]/agents/[slug]",{params:{org:a,slug:s[0]}}):h.push("/dash/[org]/agents",{params:{org:a}}),D=r.trim().toLowerCase(),q=(i??[]).filter(s=>s.toLowerCase().includes(D)),A=tt.test(r.trim())&&!i?.includes(r.trim())?r.trim():"";return e("div",{class:"import",children:[e("div",{class:"import-repos",children:[n?e(z,{value:r,label:"Search repositories or type owner/repo",onInput:b}):e(P,{children:[e(j,{children:[e(O,{d:K}),e("span",{class:"grow",children:"Connect to list your repositories here."}),e(R,{variant:"outline",size:"sm",onClick:()=>void Fe(`/dash/${a}/agents/new?template=import`).catch(V),children:o})]}),e("form",{class:"with-btn",onSubmit:s=>{s.preventDefault(),tt.test(r.trim())&&y(r.trim())},children:[e("input",{class:"mono","aria-label":"Repository",placeholder:"owner/repo",autocomplete:"off",value:r,onInput:s=>b(s.currentTarget.value)}),e(R,{type:"submit",variant:"outline",children:"Look up"})]})]}),n?e("div",{class:"repo-list scroll-box",role:"list",children:i?e(P,{children:[A?e(ee,{"aria-pressed":w?.repo===A,icon:K,title:A,onClick:()=>y(A)}):null,q.map(s=>e(ee,{"aria-pressed":w?.repo===s,icon:K,title:s,onClick:()=>y(s)},s)),!q.length&&!A?e(Ne,{children:"No repository matches. Type owner/repo to use another."}):null]}):e(Z,{label:"Loading repositories",h:240,late:!0})}):null,!n&&u?e(et,{port:p}):null]}),e("div",{class:"import-preview",children:w?e(P,{children:[e("h3",{children:["Agents in ",w.repo]}),e(Pt,{preview:w,onDone:g},w.repo)]}):e("p",{class:"muted",children:"Pick a repository to see the agents in its .coder/agents folder."})})]})}var st=[["Brisk","Calm","Clever","Keen","Nimble","Quiet","Steady","Swift","Tidy","Bright","Patient","Lucky"],["Heron","Otter","Falcon","Lynx","Badger","Relay","Beacon","Compass","Lantern","Pilot","Sparrow","Harbor"]],ot=n=>n[Math.floor(Math.random()*n.length)],it=()=>`${ot(st[0])} ${ot(st[1])}`;var rt={auto:"Changes things too, like opening pull requests; the engine reviews what leaves the sandbox.","read-only":"Reads files, platforms and connections; replies and reacts in the conversation."},Rt={name:"agent-name",description:"agent-name",integrations:"agent-platforms",engine:"agent-run",model:"agent-run",effort:"agent-run",access:"agent-run",permissions:"agent-run",runner:"agent-run"},at=n=>Rt[n.split(/[\s:.]/)[0]],At=[["blank","Blank","start from nothing"],["helper","Slack helper","answers questions in chat"],["reviewer","GitHub reviewer","reviews pull requests"]],Tt=6,Lt=`You review this team's pull requests.
1
+ "use client";import{a as Je}from"./chain-hint-491eb09a20a15702.js";import{a as ze,b as Ue,c as Ge,d as Ve}from"./agent-pills-54564413a57d7fa7.js";import{b as Ye}from"./instructions-7b274685ceb26457.js";import{a as Qe}from"./agent-toggle-b5dcc4ea6292fb3d.js";import{a as Fe}from"./connect-repositories-5118edc019fc7890.js";import{$1a as j}from"./shared-init-96cde32cd50254c0.js";import{$0c as We}from"./shared-init-96cde32cd50254c0.js";import{a as je,d as qe,h as He,l as _e}from"./model-options-5e07b3318d69d218.js";import{b as Ke}from"./types-3eca2c7f47c46054.js";import{a as Me}from"./segmented-66a8c77c6294fec3.js";import{a as F}from"./field-adcb6e6a5f9b7131.js";import{$0a as V,$0b as Q}from"./shared-init-96225b8c7758de9d.js";import{$1g as G}from"./shared-init-96225b8c7758de9d.js";import{$2m as xe,$2n as ne}from"./shared-init-abd7653140f37a0c.js";import{$0B as te,$0C as $e,$0D as U,$0a as W,$0i as Ee,$0j as Be,$0k as ee,$0p as Ne,$0v as z,$0z as Oe}from"./shared-init-abd7653140f37a0c.js";import{$1c as N,$1g as Re,$1h as X,$1k as M,$1l as Ae,$1m as Te,$1n as Le,$1p as De,$1r as Z}from"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import{$3B as Ie,$3H as Se,$3J as J,$3Q as e,$3R as O,$3S as R,$3T as Pe,$3b as ye,$3h as ke,$3t as K,$3y as Ce}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2c as P,$2h as I,$2j as _,$2l as we}from"./shared-init-3fcac605fffcc273-2.js";var Y=2,Xe=({name:n,platform:o})=>e("li",{children:[e("b",{children:["@",n]})," on ",o]},`${o} ${n}`);function Ze({agent:n,actions:o,back:u}){return e(P,{children:[e(Be,{}),e("header",{class:"hero",children:[e("span",{class:"hero-mark",children:G(n.name)}),e("div",{class:"grow",children:[u,e("div",{class:"title-row",children:[e("h1",{children:n.name}),e(Ve,{agent:n}),n.settings?.disabled?e(Qe,{agent:n,link:!0}):null]}),e("p",{class:"lead",children:n.description??"No description yet."})]}),o||n.handles?.length?e("div",{class:"hero-side",children:[o?e("div",{class:"actions",children:o}):null,n.handles?.length?e("ul",{class:"handles",title:"Mention it on its platforms by these names",children:[n.handles.slice(0,Y).map(Xe),n.handles.length>Y?e("li",{children:e(Re,{label:`+${n.handles.length-Y} more`,children:e("ul",{class:"handles",children:n.handles.slice(Y).map(Xe)})})}):null]}):null]}):null]})]})}function et({port:n}){return e(De,{title:"Receive platform events",note:`Expose port ${n} so platforms can reach this server`,open:"Show",children:e("div",{class:"guide",children:[e("p",{children:["Platforms reach this server through a public address. Expose port ",n," with one of these."]}),e("ul",{class:"steps-list",children:[e("li",{children:e("code",{children:["ngrok http ",n]})}),e("li",{children:e("code",{children:["cloudflared tunnel --url http://localhost:",n]})}),e("li",{children:"VS Code's Ports panel, with the port's visibility set to Public"})]}),e("p",{children:["Then restart with ",e("code",{children:"PUBLIC_URL=<tunnel URL> coder server serve"}),". The tunnel serves only webhooks and app setup, never this dashboard."]})]})})}var tt=/^[\w.-]+\/[\w.-]+$/,St=n=>/^[0-9a-f]{12,}$/i.test(n)?n.slice(0,7):n;function Pt({preview:n,onDone:o}){let[u,p]=I(new Set),g=Q({leaves:!0});if(n.failed)return null;if(!n.agents)return e(Z,{label:`Reading ${n.repo}`,h:180,late:!0});if(!n.agents.length)return e("p",{class:"muted",children:[n.repo," has no agents yet. Add a folder per agent under ",e("code",{children:".coder/agents"}),", with an ",e("code",{children:"agent.json"})," and a ",e("code",{children:"system.md"}),"."]});let l=n.agents.filter(i=>!i.taken&&!u.has(i.id)).map(i=>i.id);return e("form",{class:"import-agents",onSubmit:async i=>{i.preventDefault(),l.length&&await g.run("import",async()=>o((await N.agents.import(n.repo,void 0,l)).imported))},children:[e("ul",{class:"picks-list",children:n.agents.map(i=>e("li",{children:e("label",{class:"check",children:[e("input",{type:"checkbox",checked:!i.taken&&!u.has(i.id),disabled:i.taken,onChange:a=>{let r=new Set(u);a.currentTarget.checked?r.delete(i.id):r.add(i.id),p(r)}}),e("span",{children:[e("b",{children:i.name})," ",e(Le,{value:i.id}),i.version?e(M,{children:["v",i.version,i.commit?` \xB7 ${St(i.commit)}`:""]}):null,e("small",{children:i.taken?"An agent with this id already exists here.":i.description??"No description."}),i.warnings?.map(a=>e("small",{role:"status",children:a},a))]})]})},i.id))}),e("p",{class:"muted",children:["Each push to ",n.repo," that changes an agent publishes its new version here."]}),e("div",{class:"form-actions end",children:e(R,{type:"submit",disabled:!!g.pending||!l.length,children:["Import ",l.length===1?"1 agent":`${l.length} agents`]})})]})}function nt({connected:n,connectLabel:o,tunnel:u,port:p}){let g=W(),l=U(),[i,a]=I(),[r,b]=I(""),[w,B]=I(),L=we("");_(()=>{n&&N.repositories.list().then(s=>a(s.map(k=>k.repo))).catch(s=>{a([]),V(s)})},[]);let y=s=>{L.current=s,B({repo:s}),N.agents.preview(s).then(({agents:k})=>L.current===s&&B({repo:s,agents:k})).catch(k=>{L.current===s&&(B({repo:s,failed:!0}),V(k))})},h=s=>s.length===1?g.push("/dash/[org]/agents/[slug]",{params:{org:l,slug:s[0]}}):g.push("/dash/[org]/agents",{params:{org:l}}),D=r.trim().toLowerCase(),q=(i??[]).filter(s=>s.toLowerCase().includes(D)),A=tt.test(r.trim())&&!i?.includes(r.trim())?r.trim():"";return e("div",{class:"import",children:[e("div",{class:"import-repos",children:[n?e(z,{value:r,label:"Search repositories or type owner/repo",onInput:b}):e(P,{children:[e(j,{children:[e(O,{d:K}),e("span",{class:"grow",children:"Connect to list your repositories here."}),e(R,{variant:"outline",size:"sm",onClick:()=>void Fe(`/dash/${l}/agents/new?template=import`).catch(V),children:o})]}),e("form",{class:"with-btn",onSubmit:s=>{s.preventDefault(),tt.test(r.trim())&&y(r.trim())},children:[e("input",{class:"mono","aria-label":"Repository",placeholder:"owner/repo",autocomplete:"off",value:r,onInput:s=>b(s.currentTarget.value)}),e(R,{type:"submit",variant:"outline",children:"Look up"})]})]}),n?e("div",{class:"repo-list scroll-box",role:"list",children:i?e(P,{children:[A?e(ee,{"aria-pressed":w?.repo===A,icon:K,title:A,onClick:()=>y(A)}):null,q.map(s=>e(ee,{"aria-pressed":w?.repo===s,icon:K,title:s,onClick:()=>y(s)},s)),!q.length&&!A?e(Ne,{children:"No repository matches. Type owner/repo to use another."}):null]}):e(Z,{label:"Loading repositories",h:240,late:!0})}):null,!n&&u?e(et,{port:p}):null]}),e("div",{class:"import-preview",children:w?e(P,{children:[e("h3",{children:["Agents in ",w.repo]}),e(Pt,{preview:w,onDone:h},w.repo)]}):e("p",{class:"muted",children:"Pick a repository to see the agents in its .coder/agents folder."})})]})}var st=[["Brisk","Calm","Clever","Keen","Nimble","Quiet","Steady","Swift","Tidy","Bright","Patient","Lucky"],["Heron","Otter","Falcon","Lynx","Badger","Relay","Beacon","Compass","Lantern","Pilot","Sparrow","Harbor"]],ot=n=>n[Math.floor(Math.random()*n.length)],it=()=>`${ot(st[0])} ${ot(st[1])}`;var rt={auto:"Changes things too, like opening pull requests; the engine reviews what leaves the sandbox.","read-only":"Reads files, platforms and connections; replies and reacts in the conversation."},Rt={name:"agent-name",description:"agent-name",integrations:"agent-platforms",engine:"agent-run",model:"agent-run",effort:"agent-run",access:"agent-run",permissions:"agent-run",runner:"agent-run"},at=n=>Rt[n.split(/[\s:.]/)[0]],At=[["blank","Blank","start from nothing"],["helper","Slack helper","answers questions in chat"],["reviewer","GitHub reviewer","reviews pull requests"]],Tt=6,Lt=`You review this team's pull requests.
2
2
  Point at what matters, skip nits, keep it short.
3
3
  When mentioned, answer plainly and cite the code.`,Et=`You are the team's helper in Slack.
4
4
  Be warm, brief and direct. Say when you are unsure.
5
- When asked for work, say what you will do, do it, and link what you made.`,ct=n=>n.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);function Bt(n,o,u){let p=n?.definition,h=p?.permissions,a={name:n?.name??o,id:n?.id??ct(o),description:n?.description??p?.description??"",platforms:[],events:{},match:{},access:h==="read-only"?"read-only":p?.access??"auto",systemPrompt:n?.systemPrompt??"",model:p?.model??""};for(let[i,l]of Object.entries(p?.integrations??{}))if(u.some(r=>r.id===i)&&(a.platforms.push(i),a.events[i]=Ke(l.events),a.match[i]={},l.events&&!Array.isArray(l.events)))for(let[r,b]of Object.entries(l.events))b&&typeof b=="object"&&"match"in b&&(a.match[i][r]=String(b.match));return a}var se=n=>Object.entries(n?.events??{}).filter(([,o])=>!o.noisy).map(([o])=>o);function lt(n,o){let u=p=>{let h=o.filter(p).map(a=>a.id);return{platforms:h,events:Object.fromEntries(h.map(a=>[a,se(o.find(i=>i.id===a))])),match:{}}};return n==="reviewer"?{...u(p=>"pull_request"in p.events),description:"Reviews pull requests and answers questions about the code.",systemPrompt:Lt}:n==="helper"?{...u(p=>p.id==="slack"),description:"Answers the team's questions in chat.",systemPrompt:Et}:{platforms:[],events:{},match:{},description:"",systemPrompt:""}}function Dt(n,o){let u=l=>(n[l]??"").split(",").map(r=>r.trim()).filter(Boolean),p=u("integrations").filter(l=>o.some(r=>r.id===l)),h=u("events"),a=Object.fromEntries(u("match").flatMap(l=>{let r=l.indexOf("=");return r>0?[[l.slice(0,r),l.slice(r+1)]]:[]})),i=l=>{let r=o.find(w=>w.id===l),b=h.filter(w=>w in(r?.events??{}));return b.length?b:se(r)};return{id:n.create,name:n.name||n.create,...n.description?{description:n.description}:{},...n.access==="read-only"||n.access==="auto"?{access:n.access}:{},...p.length?{platforms:p,events:Object.fromEntries(p.map(l=>[l,i(l)])),match:Object.fromEntries(p.map(l=>[l,a]))}:{}}}function Nt(n,o,u){let p=n?.events&&!Array.isArray(n.events)?n.events:{},h=Object.fromEntries(o.map(a=>{let i=p[a],l=u[a]?.trim(),r=i&&typeof i=="object"?{...i}:{};return l?r.match=l:delete r.match,Object.keys(r).length?[a,r]:[a,i===void 0||typeof i=="object"?!0:i]}));return Object.values(h).every(a=>a===!0)?o:h}function ss({catalog:n,agent:o,suggested:u="",section:p,shape:h=je,defaults:a={chain:[]},template:i,connected:l=!1,connectLabel:r="Connect",tunnel:b=!1,port:w="",asked:B}){let L=W(),y=U(),g=!o,[D,q]=I(i??"blank"),A=g&&B?.create?Dt(B,n):void 0,[s,k]=I(()=>({...Bt(o,u,n),...g?lt(i??"blank",n):{},...A})),[dt,pt]=I(!!A),oe=Object.entries(o?.stale?.renamed??{}),[ie,mt]=I([]),H=(o?.stale?.unknown??[]).filter(t=>!ie.includes(t)),[re,ut]=I("write"),[ae,ft]=I(""),le=Q({toast:g?"Agent not created":"Not published",leaves:!0}),ht=!!le.pending,$=(t,c)=>k(f=>({...f,[t]:c})),gt=He(a.chain[0]??"",h.builtin),vt=g?"changeable later in its settings":s.model||`Default, ${gt}`;_(()=>{if(!p)return;let t=document.getElementById(`agent-${p}`);t?.scrollIntoView({block:"start"}),t?.querySelector("input, textarea, button")?.focus({preventScroll:!0})},[]);let ce=t=>{q(t),t!=="import"&&k(c=>({...c,...lt(t,n)}))},de=t=>k(c=>({...c,name:t,...g&&!dt?{id:ct(t)}:{}})),bt=(t,c)=>k(f=>({...f,platforms:c?n.map(d=>d.id).filter(d=>d===t||f.platforms.includes(d)):f.platforms.filter(d=>d!==t),events:c&&!f.events[t]?.length?{...f.events,[t]:se(n.find(d=>d.id===t))}:f.events})),wt=(t,c,f)=>k(d=>{let m=d.events[t]??[],C=f?d.match:{...d.match,[t]:{...d.match[t],[c]:""}};return{...d,events:{...d.events,[t]:f?[...new Set([...m,c])]:m.filter(E=>E!==c)},match:C}}),yt=(t,c,f)=>k(d=>({...d,match:{...d.match,[t]:{...d.match[t],[c]:f}}})),kt=async()=>{let t=s.platforms.find(v=>!s.events[v]?.length);if(t)return ne("Not published",`Pick at least one event on ${t}, or turn ${t} off.`);let c={};for(let v of s.platforms)c[v]={events:Nt(o?.definition?.integrations?.[v],s.events[v]??[],s.match[v]??{})};let f=[...Object.keys(o?.stale?.renamed??{}),...ie],d={...Object.fromEntries(Object.entries(o?.definition??{}).filter(([v])=>!f.includes(v))),integrations:c,access:s.access};for(let v of["name","description"]){let x=s[v].trim();x?d[v]=x:delete d[v]}let m=s.model.trim();m?d.model=m:delete d.model;let C=g?s.id:o.id,E=s.name.trim();await le.run("publish",async()=>{let v=o?.files,{apps:x=[]}=await N.agents.put(C,{definition:d,...v?{files:v}:{},systemPrompt:s.systemPrompt,...E?{name:E}:{},...s.description.trim()?{description:s.description.trim()}:{}});for(let S of x){let be=n.find(It=>It.id===S.integration)?.name??S.integration;S.updated&&xe(`${be} app updated`,`${S.name} now matches the agent.`,"success"),S.error&&ne(`${be} app not updated`,S.error)}let ve=x.filter(S=>S.drift).map(S=>S.id);ve.length?L.push("/dash/[org]/agents/[slug]/platforms",{params:{org:y,slug:C},search:{update:ve.join(",")}}):g&&s.platforms.length?L.push("/dash/[org]/agents/[slug]/platforms",{params:{org:y,slug:C}}):L.push("/dash/[org]/agents/[slug]",{params:{org:y,slug:C}})})},pe=e(P,{children:[g?e(R,{variant:"outline","aria-pressed":D==="import",onClick:()=>ce("import"),children:"Import from repo"}):null,g?null:e(Pe,{variant:"ghost",href:"/dash/[org]/agents/[slug]",params:{org:y,slug:o.id},children:"Cancel"}),e(R,{type:"submit",leftIcon:g?Ie:Ce,disabled:!s.name.trim()||D==="import"||H.length>0,title:H.length?"Remove the settings Coder no longer reads first":void 0,loading:ht,children:g?"Create agent":"Publish new version"})]}),me=g?e($e,{...Ee.newAgent,back:e(te,{href:"/dash/[org]/agents",params:{org:y},label:"Agents"}),actions:pe}):e(Ze,{agent:o,back:e(te,{href:"/dash/[org]/agents/[slug]",params:{org:y,slug:o.id},label:o.name}),actions:pe}),ue=g?e("div",{class:"templates",role:"radiogroup","aria-label":"Start from",children:At.map(([t,c,f])=>e("button",{type:"button",role:"radio","aria-checked":D===t,class:"tile",onClick:()=>ce(t),children:[e("b",{children:c}),e("small",{children:f})]},t))}):null;if(D==="import"&&g)return e("div",{class:"agent-new",children:[me,ue,e(nt,{connected:l,connectLabel:r,tunnel:b,port:w})]});let Ct=ae.trim().toLowerCase(),fe=n.filter(t=>`${t.id} ${t.description}`.toLowerCase().includes(Ct)),he=t=>!!t.featured||s.platforms.includes(t.id),ge=[...fe.filter(he),...fe.filter(t=>!he(t))];return e("form",{class:"agent-new",onSubmit:t=>{t.preventDefault(),kt()},children:[me,ue,oe.length||H.length?e(j,{tone:"warning",children:[e(O,{d:J}),e("span",{class:"grow stale",children:[oe.map(([t,c])=>e("span",{children:[t," is now ",c,", set to ",String(s[c]??""),"."]},t)),H.map(t=>e("span",{children:[t," is not an agent setting, so publishing waits until it is removed.",e(R,{variant:"secondary",size:"sm",onClick:()=>mt(c=>[...c,t]),children:"Remove"})]},t))]})]}):o?.problems?.length?e(j,{tone:"error",children:[e(O,{d:J}),e("span",{class:"grow",children:["Fix these before publishing.",o.problems.map(t=>e(P,{children:[e("br",{}),at(t)?e("a",{class:"link",href:`#${at(t)}`,children:t}):t]},t))]})]}):null,e("div",{class:"agent-form",children:[e("div",{class:"agent-main",children:[e("section",{id:"agent-name",class:"form-part",children:[e("div",{class:"part-head",children:[e("h2",{children:"Name and description"}),e(X,{label:"About these fields",children:[e("p",{children:[e("b",{children:"Name"}),": its handle on every platform."]}),e("p",{children:[e("b",{children:"Id"}),": the folder and command name, fixed once created."]}),e("p",{children:[e("b",{children:"Description"}),": optional; shown in lists and added to the prompt."]})]})]}),e("div",{class:"fields",children:[e(F,{label:"Name",children:e("span",{class:"with-btn",children:[e("input",{name:"name",required:!0,value:s.name,onInput:t=>de(t.currentTarget.value)}),g?e(R,{variant:"outline",leftIcon:Se,title:"Suggest another name",onClick:()=>de(it()),children:"Suggest"}):null]})}),g?e(F,{label:"Id",children:e("input",{class:"mono",name:"id",required:!0,pattern:"[a-z0-9][a-z0-9_\\-]*",autocomplete:"off",value:s.id,onInput:t=>{pt(!0),$("id",t.currentTarget.value)}})}):e("div",{class:"field",children:[e("span",{children:"Id"}),e("p",{class:"fixed mono",children:o.id})]})]}),e(F,{label:"Description",children:e("input",{name:"description",maxLength:240,placeholder:"Answers engineering questions about acme/app.",value:s.description,onInput:t=>$("description",t.currentTarget.value)})})]}),e("section",{id:"agent-instructions",class:"form-part",children:[e("div",{class:"part-head",children:[e("h2",{children:"Instructions"}),e(Me,{label:"Instructions view",options:[["write","Write"],["preview","Preview"]],value:re,onChange:ut})]}),re==="write"?e("textarea",{name:"systemPrompt",rows:10,"aria-label":"Instructions",placeholder:`Markdown. The system prompt every task starts from.
6
- You answer questions about acme/app from its source. Cite file paths.`,value:s.systemPrompt,onInput:t=>$("systemPrompt",t.currentTarget.value)}):e("div",{class:"body md md-preview",children:s.systemPrompt.trim()?Ye(s.systemPrompt):e("p",{class:"muted",children:"Nothing written yet."})})]}),e("section",{id:"agent-platforms",class:"form-part",children:[e("div",{class:"part-head",onKeyDown:t=>t.key==="Enter"&&t.preventDefault(),children:[e("h2",{children:"Handles"}),n.length>Tt?e(z,{value:ae,label:"Search platforms",onInput:ft}):null]}),e("p",{class:"muted",children:["Each platform becomes the agent's handle there: its own app, set up on the next page, where ",e("span",{class:"semi",children:"@mentions"})," and events start tasks. The dashboard, the CLI and the SDK can always start it."]}),e("p",{class:"muted",children:[e("b",{children:"Connections"})," are separate and shared by all agents: add as many as tasks need, like an API key, an MCP server or a member's own account, in"," ",e(ye,{class:"link",href:"/dash/[org]/settings/[tab]",params:{org:y,tab:"connections"},children:"Settings"}),"."]}),e("ul",{class:"listen",children:[ge.map(t=>{let c=s.platforms.includes(t.id),f=s.events[t.id]??[],d=Object.entries(t.events);return e("li",{class:c?"on":void 0,children:[e("label",{class:"listen-row",children:[e("span",{class:"pf-mark","aria-hidden":"true",children:e(ze,{brand:t.brand})}),e("span",{class:"grow",children:[e("b",{children:t.name}),e("small",{title:t.description,children:t.description})]}),e("input",{type:"checkbox",role:"switch",class:"switch",name:"platform",value:t.id,checked:c,onChange:m=>bt(t.id,m.currentTarget.checked)})]}),c?e("div",{class:"events",children:[e(Te,{label:`What wakes it on ${t.id}`,children:d.map(([m,C])=>{let E=f.includes(m);return e(Ae,{"aria-pressed":E,title:C.description,onClick:()=>wt(t.id,m,!E),children:m.replace(/_/g," ")},m)})}),d.filter(([m,C])=>C.noisy&&f.includes(m)).map(([m])=>e("label",{class:"match",children:[e("span",{children:m.replace(/_/g," ")}),e("input",{class:"mono",name:`match:${t.id}:${m}`,placeholder:"only when the text matches, like ^help\\b","aria-label":`Text filter for ${m} on ${t.id}`,value:s.match[t.id]?.[m]??"",onInput:C=>yt(t.id,m,C.currentTarget.value)})]},m))]}):null]},t.id)}),ge.length?null:e("li",{class:"listen-none muted",children:"No platform matches."})]}),e("div",{class:"setting-row",children:[e("div",{class:"grow setting-name",children:[e("b",{children:"Access"}),e(X,{label:"About access",children:[e("p",{children:[e("b",{children:"Auto"}),": ",rt.auto]}),e("p",{children:[e("b",{children:"Read-only"}),": ",rt["read-only"]]})]})]}),e(Oe,{label:"Access",options:qe,value:s.access,onChange:t=>$("access",t)})]})]}),e("details",{id:"agent-run",class:"form-part run",open:p==="run",children:[e("summary",{children:[e("h2",{children:"Run settings"}),e("span",{class:"grow muted",children:vt}),e(O,{d:ke})]}),e("div",{class:"run-body",children:e("div",{class:"fields",children:e(F,{label:"Model",hint:e(Je,{org:y}),group:!0,children:e(We,{shape:h,name:"model",empty:_e(a.chain,h),value:s.model,onChange:t=>$("model",t)})})})})]})]}),e("aside",{class:"agent-side","aria-label":"Preview",children:[e("span",{class:"side-label",children:"Preview"}),e("div",{class:"agent-card preview",children:[e("div",{class:"bc-head",children:[e("span",{class:"mark",children:G(s.name)}),e("div",{class:"grow",children:[e("h3",{children:s.name.trim()||"Unnamed agent"}),e("span",{class:"pills",children:[e(M,{children:"dashboard"}),o?.local?null:e(M,{children:["v",g?1:o.currentVersion+1]}),o?.settings?.disabled?e(Ge,{}):null]})]})]}),e("div",{class:"lead-clamp",children:e("span",{children:s.description.trim()||"No description yet."})}),s.platforms.length?e(Ue,{platforms:s.platforms.map(t=>({id:t,state:"none"})),catalog:n}):e("span",{class:"pfs muted",children:"No handles yet"})]})]})]})]})}export{ss as AgentEditor};
5
+ When asked for work, say what you will do, do it, and link what you made.`,ct=n=>n.toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);function Bt(n,o,u){let p=n?.definition,g=p?.permissions,l={name:n?.name??o,id:n?.id??ct(o),description:n?.description??p?.description??"",platforms:[],events:{},match:{},access:g==="read-only"?"read-only":p?.access??"auto",systemPrompt:n?.systemPrompt??"",model:p?.model??""};for(let[i,a]of Object.entries(p?.integrations??{}))if(u.some(r=>r.id===i)&&(l.platforms.push(i),l.events[i]=Ke(a.events),l.match[i]={},a.events&&!Array.isArray(a.events)))for(let[r,b]of Object.entries(a.events))b&&typeof b=="object"&&"match"in b&&(l.match[i][r]=String(b.match));return l}var se=n=>Object.entries(n?.events??{}).filter(([,o])=>!o.noisy).map(([o])=>o);function lt(n,o){let u=p=>{let g=o.filter(p).map(l=>l.id);return{platforms:g,events:Object.fromEntries(g.map(l=>[l,se(o.find(i=>i.id===l))])),match:{}}};return n==="reviewer"?{...u(p=>"pull_request"in p.events),description:"Reviews pull requests and answers questions about the code.",systemPrompt:Lt}:n==="helper"?{...u(p=>p.id==="slack"),description:"Answers the team's questions in chat.",systemPrompt:Et}:{platforms:[],events:{},match:{},description:"",systemPrompt:""}}function Dt(n,o){let u=a=>(n[a]??"").split(",").map(r=>r.trim()).filter(Boolean),p=u("integrations").filter(a=>o.some(r=>r.id===a)),g=u("events"),l=Object.fromEntries(u("match").flatMap(a=>{let r=a.indexOf("=");return r>0?[[a.slice(0,r),a.slice(r+1)]]:[]})),i=a=>{let r=o.find(w=>w.id===a),b=g.filter(w=>w in(r?.events??{}));return b.length?b:se(r)};return{id:n.create,name:n.name||n.create,...n.description?{description:n.description}:{},...n.access==="read-only"||n.access==="auto"?{access:n.access}:{},...p.length?{platforms:p,events:Object.fromEntries(p.map(a=>[a,i(a)])),match:Object.fromEntries(p.map(a=>[a,l]))}:{}}}function Nt(n,o,u){let p=n?.events&&!Array.isArray(n.events)?n.events:{},g=Object.fromEntries(o.map(l=>{let i=p[l],a=u[l]?.trim(),r=i&&typeof i=="object"?{...i}:{};return a?r.match=a:delete r.match,Object.keys(r).length?[l,r]:[l,i===void 0||typeof i=="object"?!0:i]}));return Object.values(g).every(l=>l===!0)?o:g}function ss({catalog:n,agent:o,suggested:u="",section:p,shape:g=je,defaults:l={chain:[]},template:i,connected:a=!1,connectLabel:r="Connect",tunnel:b=!1,port:w="",asked:B}){let L=W(),y=U(),h=!o,[D,q]=I(i??"blank"),A=h&&B?.create?Dt(B,n):void 0,[s,k]=I(()=>({...Bt(o,u,n),...h?lt(i??"blank",n):{},...A})),[dt,pt]=I(!!A),oe=Object.entries(o?.stale?.renamed??{}),[ie,mt]=I([]),H=(o?.stale?.unknown??[]).filter(t=>!ie.includes(t)),[re,ut]=I("write"),[ae,ft]=I(""),le=Q({toast:h?"Agent not created":"Not published",leaves:!0}),ht=!!le.pending,$=(t,c)=>k(f=>({...f,[t]:c})),gt=He(l.chain[0]??"",g.builtin),vt=h?"changeable later in its settings":s.model||`Default, ${gt}`;_(()=>{if(!p)return;let t=document.getElementById(`agent-${p}`);t?.scrollIntoView({block:"start"}),t?.querySelector("input, textarea, button")?.focus({preventScroll:!0})},[]);let ce=t=>{q(t),t!=="import"&&k(c=>({...c,...lt(t,n)}))},de=t=>k(c=>({...c,name:t,...h&&!dt?{id:ct(t)}:{}})),bt=(t,c)=>k(f=>({...f,platforms:c?n.map(d=>d.id).filter(d=>d===t||f.platforms.includes(d)):f.platforms.filter(d=>d!==t),events:c&&!f.events[t]?.length?{...f.events,[t]:se(n.find(d=>d.id===t))}:f.events})),wt=(t,c,f)=>k(d=>{let m=d.events[t]??[],C=f?d.match:{...d.match,[t]:{...d.match[t],[c]:""}};return{...d,events:{...d.events,[t]:f?[...new Set([...m,c])]:m.filter(E=>E!==c)},match:C}}),yt=(t,c,f)=>k(d=>({...d,match:{...d.match,[t]:{...d.match[t],[c]:f}}})),kt=async()=>{let t=s.platforms.find(v=>!s.events[v]?.length);if(t)return ne("Not published",`Pick at least one event on ${t}, or turn ${t} off.`);let c={};for(let v of s.platforms)c[v]={events:Nt(o?.definition?.integrations?.[v],s.events[v]??[],s.match[v]??{})};let f=[...Object.keys(o?.stale?.renamed??{}),...ie],d={...Object.fromEntries(Object.entries(o?.definition??{}).filter(([v])=>!f.includes(v))),integrations:c,access:s.access};for(let v of["name","description"]){let x=s[v].trim();x?d[v]=x:delete d[v]}let m=s.model.trim();m?d.model=m:delete d.model;let C=h?s.id:o.id,E=s.name.trim();await le.run("publish",async()=>{let v=o?.files,{apps:x=[]}=await N.agents.put(C,{definition:d,...v?{files:v}:{},systemPrompt:s.systemPrompt,...E?{name:E}:{},...s.description.trim()?{description:s.description.trim()}:{}});for(let S of x){let be=n.find(It=>It.id===S.integration)?.name??S.integration;S.updated&&xe(`${be} app updated`,`${S.name} now matches the agent.`,"success"),S.error&&ne(`${be} app not updated`,S.error)}let ve=x.filter(S=>S.drift).map(S=>S.id);ve.length?L.push("/dash/[org]/agents/[slug]/platforms",{params:{org:y,slug:C},search:{update:ve.join(",")}}):h&&s.platforms.length?L.push("/dash/[org]/agents/[slug]/platforms",{params:{org:y,slug:C}}):L.push("/dash/[org]/agents/[slug]",{params:{org:y,slug:C}})})},pe=e(P,{children:[h?e(R,{variant:"outline","aria-pressed":D==="import",onClick:()=>ce("import"),children:"Import from repo"}):null,h?null:e(Pe,{variant:"ghost",href:"/dash/[org]/agents/[slug]",params:{org:y,slug:o.id},children:"Cancel"}),e(R,{type:"submit",leftIcon:h?Ie:Ce,disabled:!s.name.trim()||D==="import"||H.length>0,title:H.length?"Remove the settings Coder no longer reads first":void 0,loading:ht,children:h?"Create agent":"Publish new version"})]}),me=h?e($e,{...Ee.newAgent,back:e(te,{href:"/dash/[org]/agents",params:{org:y},label:"Agents"}),actions:pe}):e(Ze,{agent:o,back:e(te,{href:"/dash/[org]/agents/[slug]",params:{org:y,slug:o.id},label:o.name}),actions:pe}),ue=h?e("div",{class:"templates",role:"radiogroup","aria-label":"Start from",children:At.map(([t,c,f])=>e("button",{type:"button",role:"radio","aria-checked":D===t,class:"tile",onClick:()=>ce(t),children:[e("b",{children:c}),e("small",{children:f})]},t))}):null;if(D==="import"&&h)return e("div",{class:"agent-new",children:[me,ue,e(nt,{connected:a,connectLabel:r,tunnel:b,port:w})]});let Ct=ae.trim().toLowerCase(),fe=n.filter(t=>`${t.id} ${t.description}`.toLowerCase().includes(Ct)),he=t=>!!t.featured||s.platforms.includes(t.id),ge=[...fe.filter(he),...fe.filter(t=>!he(t))];return e("form",{class:"agent-new",onSubmit:t=>{t.preventDefault(),kt()},children:[me,ue,oe.length||H.length?e(j,{tone:"warning",children:[e(O,{d:J}),e("span",{class:"grow stale",children:[oe.map(([t,c])=>e("span",{children:[t," is now ",c,", set to ",String(s[c]??""),"."]},t)),H.map(t=>e("span",{children:[t," is not an agent setting, so publishing waits until it is removed.",e(R,{variant:"secondary",size:"sm",onClick:()=>mt(c=>[...c,t]),children:"Remove"})]},t))]})]}):o?.problems?.length?e(j,{tone:"error",children:[e(O,{d:J}),e("span",{class:"grow",children:["Fix these before publishing.",o.problems.map(t=>e(P,{children:[e("br",{}),at(t)?e("a",{class:"link",href:`#${at(t)}`,children:t}):t]},t))]})]}):null,e("div",{class:"agent-form",children:[e("div",{class:"agent-main",children:[e("section",{id:"agent-name",class:"form-part",children:[e("div",{class:"part-head",children:[e("h2",{children:"Name and description"}),e(X,{label:"About these fields",children:[e("p",{children:[e("b",{children:"Name"}),": its handle on every platform."]}),e("p",{children:[e("b",{children:"Id"}),": the folder and command name, fixed once created."]}),e("p",{children:[e("b",{children:"Description"}),": optional; shown in lists and added to the prompt."]})]})]}),e("div",{class:"fields",children:[e(F,{label:"Name",children:e("span",{class:"with-btn",children:[e("input",{name:"name",required:!0,value:s.name,onInput:t=>de(t.currentTarget.value)}),h?e(R,{variant:"outline",leftIcon:Se,title:"Suggest another name",onClick:()=>de(it()),children:"Suggest"}):null]})}),h?e(F,{label:"Id",children:e("input",{class:"mono",name:"id",required:!0,pattern:"[a-z0-9][a-z0-9_\\-]*",autocomplete:"off",value:s.id,onInput:t=>{pt(!0),$("id",t.currentTarget.value)}})}):e("div",{class:"field",children:[e("span",{children:"Id"}),e("p",{class:"fixed mono",children:o.id})]})]}),e(F,{label:"Description",children:e("input",{name:"description",maxLength:240,placeholder:"Answers engineering questions about acme/app.",value:s.description,onInput:t=>$("description",t.currentTarget.value)})})]}),e("section",{id:"agent-instructions",class:"form-part",children:[e("div",{class:"part-head",children:[e("h2",{children:"Instructions"}),e(Me,{label:"Instructions view",options:[["write","Write"],["preview","Preview"]],value:re,onChange:ut})]}),re==="write"?e("textarea",{name:"systemPrompt",rows:10,"aria-label":"Instructions",placeholder:`Markdown. The system prompt every task starts from.
6
+ You answer questions about acme/app from its source. Cite file paths.`,value:s.systemPrompt,onInput:t=>$("systemPrompt",t.currentTarget.value)}):e("div",{class:"body md md-preview",children:s.systemPrompt.trim()?Ye(s.systemPrompt):e("p",{class:"muted",children:"Nothing written yet."})})]}),e("section",{id:"agent-platforms",class:"form-part",children:[e("div",{class:"part-head",onKeyDown:t=>t.key==="Enter"&&t.preventDefault(),children:[e("h2",{children:"Handles"}),n.length>Tt?e(z,{value:ae,label:"Search platforms",onInput:ft}):null]}),e("p",{class:"muted",children:["Each platform becomes the agent's handle there: its own app, set up on the next page, where ",e("span",{class:"semi",children:"@mentions"})," and events start tasks. The dashboard, the CLI and the SDK can always start it."]}),e("p",{class:"muted",children:[e("b",{children:"Connections"})," are separate and shared by all agents: add as many as tasks need, like an API key, an MCP server or a member's own account, in"," ",e(ye,{class:"link",href:"/dash/[org]/settings/[tab]",params:{org:y,tab:"connections"},children:"Settings"}),"."]}),e("ul",{class:"listen",children:[ge.map(t=>{let c=s.platforms.includes(t.id),f=s.events[t.id]??[],d=Object.entries(t.events);return e("li",{class:c?"on":void 0,children:[e("label",{class:"listen-row",children:[e("span",{class:"pf-mark","aria-hidden":"true",children:e(ze,{brand:t.brand})}),e("span",{class:"grow",children:[e("b",{children:t.name}),e("small",{title:t.description,children:t.description})]}),e("input",{type:"checkbox",role:"switch",class:"switch",name:"platform",value:t.id,checked:c,onChange:m=>bt(t.id,m.currentTarget.checked)})]}),c?e("div",{class:"events",children:[e(Te,{label:`What wakes it on ${t.id}`,children:d.map(([m,C])=>{let E=f.includes(m);return e(Ae,{"aria-pressed":E,title:C.description,onClick:()=>wt(t.id,m,!E),children:m.replace(/_/g," ")},m)})}),d.filter(([m,C])=>C.noisy&&f.includes(m)).map(([m])=>e("label",{class:"match",children:[e("span",{children:m.replace(/_/g," ")}),e("input",{class:"mono",name:`match:${t.id}:${m}`,placeholder:"only when the text matches, like ^help\\b","aria-label":`Text filter for ${m} on ${t.id}`,value:s.match[t.id]?.[m]??"",onInput:C=>yt(t.id,m,C.currentTarget.value)})]},m))]}):null]},t.id)}),ge.length?null:e("li",{class:"listen-none muted",children:"No platform matches."})]}),e("div",{class:"setting-row",children:[e("div",{class:"grow setting-name",children:[e("b",{children:"Access"}),e(X,{label:"About access",children:[e("p",{children:[e("b",{children:"Auto"}),": ",rt.auto]}),e("p",{children:[e("b",{children:"Read-only"}),": ",rt["read-only"]]})]})]}),e(Oe,{label:"Access",options:qe,value:s.access,onChange:t=>$("access",t)})]})]}),e("details",{id:"agent-run",class:"form-part run",open:p==="run",children:[e("summary",{children:[e("h2",{children:"Run settings"}),e("span",{class:"grow muted",children:vt}),e(O,{d:ke})]}),e("div",{class:"run-body",children:e("div",{class:"fields",children:e(F,{label:"Model",hint:e(Je,{org:y}),group:!0,children:e(We,{shape:g,name:"model",empty:_e(),value:s.model,onChange:t=>$("model",t)})})})})]})]}),e("aside",{class:"agent-side","aria-label":"Preview",children:[e("span",{class:"side-label",children:"Preview"}),e("div",{class:"agent-card preview",children:[e("div",{class:"bc-head",children:[e("span",{class:"mark",children:G(s.name)}),e("div",{class:"grow",children:[e("h3",{children:s.name.trim()||"Unnamed agent"}),e("span",{class:"pills",children:[e(M,{children:"dashboard"}),o?.local?null:e(M,{children:["v",h?1:o.currentVersion+1]}),o?.settings?.disabled?e(Ge,{}):null]})]})]}),e("div",{class:"lead-clamp",children:e("span",{children:s.description.trim()||"No description yet."})}),s.platforms.length?e(Ue,{platforms:s.platforms.map(t=>({id:t,state:"none"})),catalog:n}):e("span",{class:"pfs muted",children:"No handles yet"})]})]})]})]})}export{ss as AgentEditor};
@@ -1 +1 @@
1
- import{$2Q as n}from"./shared-init-926144b364908b3c.js";function m({label:l,hint:e,group:o,children:a}){return n(o?"div":"label",{class:"field",children:[n("span",{children:[l,e?n("small",{children:e}):null]}),a]})}export{m as a};
1
+ import{$3Q as n}from"./shared-init-abd7653140f37a0c.js";function m({label:l,hint:e,group:o,children:a}){return n(o?"div":"label",{class:"field",children:[n("span",{children:[l,e?n("small",{children:e}):null]}),a]})}export{m as a};
@@ -0,0 +1 @@
1
+ "use client";import{b as a,c as b}from"./instructions-7b274685ceb26457.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";export{b as Instructions,a as markdown};
@@ -1,2 +1,2 @@
1
- import{$2Q as e,$2S as x}from"./shared-init-926144b364908b3c.js";import{$3b as g,$3h as m,$3k as b,$3l as C}from"./shared-init-9b28886f3cbe0ed3-2.js";function v({lines:c=10,class:t,children:l}){let s=C(null),[p,h]=m(!1),[r,d]=m(!1);return b(()=>{let n=s.current,o=()=>h(r||n.scrollHeight>n.clientHeight+1);o();let i=new ResizeObserver(o);i.observe(n);let u=new MutationObserver(o);return u.observe(n,{childList:!0,subtree:!0,characterData:!0}),()=>{i.disconnect(),u.disconnect()}},[r]),e("div",{class:`collapse${p?" long":""}${r?" open":""}`,style:`--lines:${c}`,children:[e("div",{class:t?`collapse-box ${t}`:"collapse-box",ref:s,children:l}),p?e(x,{variant:"ghost",size:"sm",class:"more-toggle","aria-expanded":r,onClick:()=>d(!r),children:r?"Show less":"Show more"}):null]})}var $=/`([^`\n]+)`|\*\*(.+?)\*\*|__(.+?)__|\*(\S(?:.*?\S)?)\*|(?<!\w)_(\S(?:.*?\S)?)_(?!\w)|\[([^\]\n]+)\]\(([^)\s]+)\)/g,w=/^(?:https?:|mailto:)/i,L=/^\s*(```|~~~)/,S=/^(#{1,6})\s+(.*?)(?:\s+#+)?\s*$/,E=/^\s*(?:([-*+])|\d+[.)])\s+(.*)$/,y=/^\s*(?:#{1,6}\s|```|~~~|[-*+]\s|\d+[.)]\s|\|)/,I=/^\s*\|?\s*:?-+:?\s*(?:\|\s*:?-+:?\s*)*\|?\s*$/;function a(c){let t=[],l=0;for(let s of c.matchAll($)){let[p,h,r,d,n,o,i,u]=s;s.index>l&&t.push(c.slice(l,s.index)),h?t.push(e("code",{children:h})):r||d?t.push(e("strong",{children:a(r||d)})):n||o?t.push(e("em",{children:a(n||o)})):w.test(u)?t.push(e("a",{class:"link",href:u,target:"_blank",rel:"noopener noreferrer",children:a(i)})):t.push(...a(i)),l=s.index+p.length}return l<c.length&&t.push(c.slice(l)),t}var _=c=>c.trim().replace(/^\||\|$/g,"").split("|").map(t=>a(t.trim()));function k(c){let t=c.split(/\r?\n/),l=[];for(let s=0;s<t.length;){let p=t[s],h=L.exec(p),r=S.exec(p),d=E.exec(p);if(h){let n=t.findIndex((i,u)=>u>s&&i.trim().startsWith(h[1])),o=n<0?t.length:n;l.push(e("pre",{children:e("code",{children:t.slice(s+1,o).join(`
1
+ import{$3Q as e,$3S as x}from"./shared-init-abd7653140f37a0c.js";import{$2b as g,$2h as m,$2k as b,$2l as C}from"./shared-init-3fcac605fffcc273-2.js";function v({lines:c=10,class:t,children:l}){let s=C(null),[p,h]=m(!1),[r,d]=m(!1);return b(()=>{let n=s.current,o=()=>h(r||n.scrollHeight>n.clientHeight+1);o();let i=new ResizeObserver(o);i.observe(n);let u=new MutationObserver(o);return u.observe(n,{childList:!0,subtree:!0,characterData:!0}),()=>{i.disconnect(),u.disconnect()}},[r]),e("div",{class:`collapse${p?" long":""}${r?" open":""}`,style:`--lines:${c}`,children:[e("div",{class:t?`collapse-box ${t}`:"collapse-box",ref:s,children:l}),p?e(x,{variant:"ghost",size:"sm",class:"more-toggle","aria-expanded":r,onClick:()=>d(!r),children:r?"Show less":"Show more"}):null]})}var $=/`([^`\n]+)`|\*\*(.+?)\*\*|__(.+?)__|\*(\S(?:.*?\S)?)\*|(?<!\w)_(\S(?:.*?\S)?)_(?!\w)|\[([^\]\n]+)\]\(([^)\s]+)\)/g,w=/^(?:https?:|mailto:)/i,L=/^\s*(```|~~~)/,S=/^(#{1,6})\s+(.*?)(?:\s+#+)?\s*$/,E=/^\s*(?:([-*+])|\d+[.)])\s+(.*)$/,y=/^\s*(?:#{1,6}\s|```|~~~|[-*+]\s|\d+[.)]\s|\|)/,I=/^\s*\|?\s*:?-+:?\s*(?:\|\s*:?-+:?\s*)*\|?\s*$/;function a(c){let t=[],l=0;for(let s of c.matchAll($)){let[p,h,r,d,n,o,i,u]=s;s.index>l&&t.push(c.slice(l,s.index)),h?t.push(e("code",{children:h})):r||d?t.push(e("strong",{children:a(r||d)})):n||o?t.push(e("em",{children:a(n||o)})):w.test(u)?t.push(e("a",{class:"link",href:u,target:"_blank",rel:"noopener noreferrer",children:a(i)})):t.push(...a(i)),l=s.index+p.length}return l<c.length&&t.push(c.slice(l)),t}var _=c=>c.trim().replace(/^\||\|$/g,"").split("|").map(t=>a(t.trim()));function k(c){let t=c.split(/\r?\n/),l=[];for(let s=0;s<t.length;){let p=t[s],h=L.exec(p),r=S.exec(p),d=E.exec(p);if(h){let n=t.findIndex((i,u)=>u>s&&i.trim().startsWith(h[1])),o=n<0?t.length:n;l.push(e("pre",{children:e("code",{children:t.slice(s+1,o).join(`
2
2
  `)})})),s=o+1}else if(r)l.push(g(`h${Math.min(r[1].length+2,6)}`,null,a(r[2]))),s++;else if(p.trim().startsWith("|")&&I.test(t[s+1]??"")){let n=[];for(s+=2;t[s]?.trim().startsWith("|");s++)n.push(t[s]);l.push(e("div",{class:"table",children:e("table",{children:[e("thead",{children:e("tr",{children:_(p).map(o=>e("th",{children:o}))})}),e("tbody",{children:n.map(o=>e("tr",{children:_(o).map(i=>e("td",{children:i}))}))})]})}))}else if(d){let n=!d[1],o=[];for(let i;(i=E.exec(t[s]??""))&&!i[1]===n;s++)o.push(e("li",{children:a(i[2])}));l.push(n?e("ol",{children:o}):e("ul",{children:o}))}else if(!p.trim())s++;else{let n=[];for(;t[s]?.trim()&&(!n.length||!y.test(t[s]));s++)n.length&&n.push(e("br",{})),n.push(...a(t[s]));l.push(e("p",{children:n}))}}return l}function K({text:c}){return e(v,{class:"body md",children:k(c)})}export{v as a,k as b,K as c};
@@ -1 +1 @@
1
- import{a as p}from"./confirm-d6b2c5b1deccd1e8.js";import{$1a as S}from"./shared-init-953965859f7bf6b9.js";import{$0c as g,$0k as x}from"./shared-init-926144b364908b3c.js";import{$3c as y,$3f as w,$3o as A}from"./shared-init-926144b364908b3c.js";import{$2A as k,$2B as h,$2Q as o,$2R as C,$2S as v}from"./shared-init-926144b364908b3c.js";import{$3h as d,$3l as u}from"./shared-init-9b28886f3cbe0ed3-2.js";function m(e,t){if(!t||typeof t!="object"||Array.isArray(t))return t;let r=e&&typeof e=="object"&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):{};for(let[n,i]of Object.entries(t))i===null?delete r[n]:Object.defineProperty(r,n,{value:m(Object.hasOwn(r,n)?r[n]:void 0,i),writable:!0,enumerable:!0,configurable:!0});return r}function $(e){let[t,r]=d(e),n=u(0),i=u(e);return{value:t,patch:l=>{let c=++n.current;return r(s=>m(s,l)),y.config.patch(l).then(s=>(i.current=s,c===n.current&&r(s),s),s=>{c===n.current&&(r(i.current),S(s))})}}}function E(e){let t=g().get("delete"),[r,n]=d(!!(e?.link&&e.link===t)),[i,a]=d(!1);if(!e)return{};let{title:l,body:c,label:s="Remove",icon:P,onRemove:R}=e,f=()=>{if(n(!1),e.link&&e.link===t){let b=new URL(location.href);b.searchParams.delete("delete"),history.replaceState(history.state,"",b)}};return{item:o(x,{icon:P,title:s,danger:!0,onClick:()=>n(!0)}),dialog:r?o(p,{open:!0,title:l,body:c,confirmLabel:s,busy:i,onClose:f,onConfirm:()=>{a(!0),R().finally(()=>{a(!1),f()})}}):null}}function z(e,t){let[r,n]=d(g().has("add"));return{open:r,show:()=>n(!0),close:()=>{n(!1);let a=new URL(location.href);for(let l of["add",...t])a.searchParams.delete(l);history.replaceState(history.state,"",a)},button:o(v,{size:"sm",leftIcon:h,onClick:()=>n(!0),children:e})}}var G=(e,t)=>t==="workspace"?`Replace ${e} for the workspace?`:`Replace the personal ${e}?`;function J(){let[e,t]=d();return{ask:(r,n)=>t({title:r,run:n}),dialog:e?o(p,{open:!0,title:e.title,body:"Tasks use the new one from now on.",confirmLabel:"Replace",onClose:()=>t(void 0),onConfirm:()=>{t(void 0),e.run()}}):null}}function Q({title:e,badges:t,sub:r,actions:n,menu:i,alignMenu:a,remove:l,muted:c}){let s=E(l);return o("tr",{class:c?"muted":void 0,children:[o("td",{children:[o("span",{class:"row-title",children:[o("b",{children:e}),t]}),r?o("span",{class:"sub mono",children:r}):null]}),o("td",{class:"acts",children:[n,i||s.item||a?o(w,{button:"icon",label:"Actions",summary:o(C,{d:k}),children:[i,s.item,i||s.item?null:o("p",{class:"menu-none",children:"No options"})]}):null,s.dialog]})]})}function X({title:e,count:t,actions:r,help:n,children:i,add:a,look:l}){return o(A,{title:e,count:t,actions:r,look:l,children:[n?o("p",{class:"body muted",children:n}):null,o("div",{class:"table-scroll",children:o("table",{class:"rows settings",children:o("tbody",{children:i})})}),a]})}export{$ as a,E as b,z as c,G as d,J as e,Q as f,X as g};
1
+ import{a as g}from"./confirm-14d018653fbe50fc.js";import{$0a as S}from"./shared-init-96225b8c7758de9d.js";import{$0c as p,$0k as x}from"./shared-init-abd7653140f37a0c.js";import{$1c as y,$1f as w,$1o as A}from"./shared-init-abd7653140f37a0c.js";import{$3A as k,$3B as h,$3Q as o,$3R as C,$3S as v}from"./shared-init-abd7653140f37a0c.js";import{$2h as u,$2l as d}from"./shared-init-3fcac605fffcc273-2.js";function m(e,t){if(!t||typeof t!="object"||Array.isArray(t))return t;let r=e&&typeof e=="object"&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):{};for(let[n,i]of Object.entries(t))i===null?delete r[n]:Object.defineProperty(r,n,{value:m(Object.hasOwn(r,n)?r[n]:void 0,i),writable:!0,enumerable:!0,configurable:!0});return r}function $(e){let[t,r]=u(e),n=d(0),i=d(e);return{value:t,patch:l=>{let c=++n.current;return r(s=>m(s,l)),y.config.patch(l).then(s=>(i.current=s,c===n.current&&r(s),s),s=>{c===n.current&&(r(i.current),S(s))})}}}function E(e){let t=p().get("delete"),[r,n]=u(!!(e?.link&&e.link===t)),[i,a]=u(!1);if(!e)return{};let{title:l,body:c,label:s="Remove",icon:P,onRemove:R}=e,f=()=>{if(n(!1),e.link&&e.link===t){let b=new URL(location.href);b.searchParams.delete("delete"),history.replaceState(history.state,"",b)}};return{item:o(x,{icon:P,title:s,danger:!0,onClick:()=>n(!0)}),dialog:r?o(g,{open:!0,title:l,body:c,confirmLabel:s,busy:i,onClose:f,onConfirm:()=>{a(!0),R().finally(()=>{a(!1),f()})}}):null}}function z(e,t){let[r,n]=u(p().has("add"));return{open:r,show:()=>n(!0),close:()=>{n(!1);let a=new URL(location.href);for(let l of["add",...t])a.searchParams.delete(l);history.replaceState(history.state,"",a)},button:o(v,{size:"sm",leftIcon:h,onClick:()=>n(!0),children:e})}}var G=(e,t)=>t==="workspace"?`Replace ${e} for the workspace?`:`Replace the personal ${e}?`;function J(){let[e,t]=u();return{ask:(r,n)=>t({title:r,run:n}),dialog:e?o(g,{open:!0,title:e.title,body:"Tasks use the new one from now on.",confirmLabel:"Replace",onClose:()=>t(void 0),onConfirm:()=>{t(void 0),e.run()}}):null}}function Q({title:e,badges:t,sub:r,actions:n,menu:i,alignMenu:a,remove:l,muted:c}){let s=E(l);return o("tr",{class:c?"muted":void 0,children:[o("td",{children:[o("span",{class:"row-title",children:[o("b",{children:e}),t]}),r?o("span",{class:"sub mono",children:r}):null]}),o("td",{class:"acts",children:[n,i||s.item||a?o(w,{button:"icon",label:"Actions",summary:o(C,{d:k}),children:[i,s.item,i||s.item?null:o("p",{class:"menu-none",children:"No options"})]}):null,s.dialog]})]})}function X({title:e,count:t,actions:r,help:n,children:i,add:a,look:l}){return o(A,{title:e,count:t,actions:r,look:l,children:[n?o("p",{class:"body muted",children:n}):null,o("div",{class:"table-scroll",children:o("table",{class:"rows settings",children:o("tbody",{children:i})})}),a]})}export{$ as a,E as b,z as c,G as d,J as e,Q as f,X as g};
@@ -0,0 +1 @@
1
+ var b={builtin:{},models:{}},c=["claude","codex","custom"],u=[["low","Low"],["medium","Medium"],["high","High"]],x=[["auto","Auto"],["read-only","Read-only"]],E=[["personal","Personal"],["workspace","Workspace"]],m={claude:"Claude",codex:"Codex",custom:"Custom"};function y(t,e){let o=e in t.models?t.models[e]:t.builtin[e];if(o&&typeof o=="object")return"custom";let n=typeof o=="string"?o.split("/")[0]:"";if(c.includes(n))return n;let s=n!==e?t.builtin[n]:void 0;return s?s.split("/")[0]:"codex"}function f(t){let e=[...new Set([...Object.keys(t.builtin),...Object.keys(t.models)])].filter(o=>t.models[o]!==!1);return Object.fromEntries(c.map(o=>[o,e.filter(n=>y(t,n)===o)]))}function p(t,e){let[o="",n]=t.split("/"),s=n&&!u.some(([r])=>r===n)?n:void 0;if(c.includes(o)&&s)return Object.keys(e).find(r=>!c.includes(r)&&e[r]===`${o}/${s}`)??s;let i=c.includes(o)?e[o]:void 0;return i?p(i,e):o}var g=t=>u.some(([e])=>e===t);function A(t,e){let o=t.split("/").filter(Boolean),n=o.length>1&&g(o.at(-1))?o.pop():"",s=o.join("/");return{model:s in e.builtin||s in e.models||!s.includes("/")?s:p(s,e.builtin),effort:n}}var K=(t,e,o)=>t&&e&&e!==h(t,o)?`${t}/${e}`:t;function h(t,e){let o=e.models[t]??e.builtin[t],n=typeof o=="string"?o.split("/").at(-1):"";return g(n)?n:"medium"}var O=()=>({label:"Default chain"});function v(t,e=""){let o=f(t),n=[],s={},i={};for(let r of["codex","claude","custom"]){let a=o[r]??[];a[0]&&(s[a[0]]=m[r]);for(let l of a){let d=t.models[l]??t.builtin[l];n.push([l,l]),i[l]=typeof d=="object"&&d?d.model:String(d??"")}}return e&&!n.some(([r])=>r===e)&&n.unshift([e,e]),{options:n,headings:s,subs:i}}var M=[{id:"openrouter",name:"OpenRouter",baseUrl:"https://openrouter.ai/api/v1",envKey:"OPENROUTER_API_KEY",keyUrl:"https://openrouter.ai/keys",needsKey:!0},{id:"vercel",name:"Vercel AI Gateway",baseUrl:"https://ai-gateway.vercel.sh/v1",envKey:"AI_GATEWAY_API_KEY",keyUrl:"https://vercel.com/d?to=%2F%5Bteam%5D%2F~%2Fai-gateway%2Fapi-keys&title=AI+Gateway+API+Keys",needsKey:!0},{id:"groq",name:"Groq",baseUrl:"https://api.groq.com/openai/v1",envKey:"GROQ_API_KEY",keyUrl:"https://console.groq.com/keys",needsKey:!0},{id:"together",name:"Together AI",baseUrl:"https://api.together.xyz/v1",envKey:"TOGETHER_API_KEY",keyUrl:"https://api.together.ai/settings/api-keys",needsKey:!0},{id:"ollama",name:"Ollama",baseUrl:"http://localhost:11434/v1",envKey:"",needsKey:!1},{id:"other",name:"Other",baseUrl:"",envKey:"",needsKey:!0}];export{b as a,c as b,u as c,x as d,E as e,m as f,f as g,p as h,A as i,K as j,h as k,O as l,v as m,M as n};
@@ -1 +1 @@
1
- "use client";import{a as Ie}from"./combo-cb2c62fe580a8903.js";import{$0a as Se}from"./shared-init-b42d2c06c25d1e2b.js";import{$1c as H}from"./shared-init-b42d2c06c25d1e2b.js";import{e as Ce,i as Me,m as Ae,n as Pe}from"./model-options-d29e934a3de20ab4.js";import{a as Re,c as Oe,d as Te,e as Ue,f as te,g as $e}from"./list-16247e39898cd20e.js";import"./confirm-d6b2c5b1deccd1e8.js";import{a as P}from"./field-4d374d5ed3f43d7e.js";import{$1b as we}from"./shared-init-953965859f7bf6b9.js";import{$0h as ke}from"./shared-init-953965859f7bf6b9.js";import{$4n as ye}from"./shared-init-926144b364908b3c.js";import{$0D as ve,$0c as ae,$0k as A,$0o as be,$0q as ge,$0z as X}from"./shared-init-926144b364908b3c.js";import{$3c as R,$3f as J,$3k as x,$3o as Q,$3r as he}from"./shared-init-926144b364908b3c.js";import"./wular-pnext-9b28886f3cbe0ed3-0.js";import{$1a as ee}from"./shared-init-926144b364908b3c.js";import{$2A as ue,$2B as z,$2C as Z,$2D as me,$2E as G,$2J as pe,$2Q as e,$2R as j,$2S as W,$2T as fe,$2f as ie,$2g as re,$2i as de,$2w as ce,$2x as V}from"./shared-init-926144b364908b3c.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import"./shared-init-9b28886f3cbe0ed3-2.js";import{$3c as M,$3h as g,$3l as _}from"./shared-init-9b28886f3cbe0ed3-2.js";var D=Pe,ne=D.at(-1),Ke=f=>f.split("/").pop().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");function Le({credentials:f,admin:d,onAdd:a,onClose:u}){let[n,y]=g(!1),m=Ue(),h=async o=>{y(!0);let C=await a(async()=>{let i=o.envKey||"OPENAI_API_KEY";return o.key&&await R.credentials.add({env:{[i]:o.key},workspace:o.scope==="workspace"}),R.models.add({name:o.name,baseUrl:o.baseUrl,model:o.model,envKey:i,...o.contextWindow?{contextWindow:Number(o.contextWindow)}:{}})});y(!1),C&&u()};return e(M,{children:[e(ee,{class:"add-modal",title:"Add a model",dismiss:!0,busy:n,onSubmit:o=>{o.preventDefault();let C=o.currentTarget,i=Object.fromEntries([...new FormData(C)].map(([p,v])=>[p,String(v).trim()]));if(i.name||(i.name=Ke(i.model??"")),!i.name||!i.model||!i.baseUrl)return;let c=i.envKey||"OPENAI_API_KEY",k=i.scope||"personal";if(i.key&&f?.some(p=>p.name===c&&p.scope===k))return m.ask(Te(c,k),()=>void h(i));h(i)},onClose:u,actions:e(W,{type:"submit",loading:n,children:"Add model"}),children:e("div",{class:"add-form",children:e(Ne,{credentials:f,admin:d})})}),m.dialog]})}function Ne({credentials:f,admin:d}){let a=ae(),u=a.get("base-url")??"",[n,y]=g(u?D.find(l=>l.baseUrl===u)??ne:D[0]??ne),[m,h]=g(u||n.baseUrl),[o,C]=g(a.get("env-key")??n.envKey),[i,c]=g(""),[k,p]=g(d?"workspace":"personal"),[v,O]=g(null),B=_(0),$=_(""),[I,F]=g(a.get("model")??""),[E,K]=g(a.get("context-window")),U=v?.contextWindows?.[I],t=(l,b)=>!!l&&!!f?.some(S=>S.name===l&&S.scope===b),s=(l,b=k)=>t(l,b)?b:!d&&t(l,"workspace")?"workspace":void 0,r=s(o,d?"workspace":"personal"),w=l=>l==="workspace"?"the workspace's":"the personal",[L,oe]=g(!1),se=_(),Y=(l,b,S)=>{let Be=++B.current;if(!l.trim())return O(null);oe(!0),R.models.probe({baseUrl:l.trim(),...b.trim()?{envKey:b.trim()}:{},...S.trim()?{key:S.trim()}:{}}).catch(T=>({reachable:!1,modelListed:null,models:null,detail:ke(T)})).then(T=>{if(Be!==B.current)return;oe(!1),O(T.models?{...T,models:[...T.models].sort()}:T);let N=T.reachable?"":/HTTP 40[13]/.test(T.detail)?"The API key was rejected.":`${l.trim()} isn't reachable.`;N&&N!==$.current&&ye("Models not listed",N),$.current=N})},le=(l,b,S)=>{clearTimeout(se.current),se.current=setTimeout(()=>Y(l,b,S),250)},De=v?.models?`${v.models.length} listed`:void 0,q=n.needsKey&&f?e("div",{class:"add-grid",children:[e(P,{label:"API key",hint:e(M,{children:[s(o)?`uses ${w(s(o))} saved ${o}; enter one to replace it`:`a new key, stored as ${o}`,n.keyUrl?e(M,{children:[", ",e("a",{class:"link",href:n.keyUrl,target:"_blank",rel:"noopener noreferrer",children:"get a key"})]}):null]}),children:e("input",{name:"key",type:"password",autocomplete:"off",placeholder:s(o)?"Leave empty to use the saved key":`${n.name} API key`,value:i,onInput:l=>{c(l.currentTarget.value),le(m,o,l.currentTarget.value)}})}),d?e(P,{label:"Scope",group:!0,children:e(X,{label:"Scope",name:"scope",options:Ce,value:k,onChange:p})}):null]}):null;return e(M,{children:[e("div",{class:"add-grid",children:[e(P,{label:"Provider",group:!0,children:e(X,{label:"Provider",name:"provider",options:D.map(l=>[l.id,l.name]),value:n.id,onChange:l=>{let b=D.find(S=>S.id===l)??ne;y(b),h(b.baseUrl),C(b.envKey),F(""),K(null),c(""),O(null),(s(b.envKey)||!b.needsKey)&&Y(b.baseUrl,b.envKey,"")}})}),e(P,{label:"Model id",group:!0,hint:L?e(he,{label:"Fetching models",inline:!0,dots:!0}):De,children:e(Ie,{label:"Model id",onOpen:()=>{!v&&!L&&Y(m,o,i)},name:"model",options:v?.models??[],placeholder:v?.models?.[0]??"qwen3-coder",value:I,onChange:l=>{F(l),K(null)}})}),e(P,{label:"Short name",hint:"used as --model; defaults to the model id",children:e("input",{name:"name",defaultValue:a.get("add")??void 0,placeholder:Ke(I)||"kimi",autocomplete:"off",pattern:"[a-z0-9][a-z0-9\\-]*"})})]}),q&&r?e("details",{class:"add-more",children:[e("summary",{children:["API key \xB7 uses ",w(r)," saved ",o]}),q]},o):q,e("details",{class:"add-more",open:n.id==="other"||void 0,children:[e("summary",{children:"Advanced"}),e("div",{class:"add-grid",children:[e(P,{label:"Base URL",children:e("input",{name:"baseUrl",type:"url",placeholder:"http://localhost:11434/v1",autocomplete:"off",value:m,onInput:l=>{h(l.currentTarget.value),le(l.currentTarget.value,o,i)}})}),e(P,{label:"Key variable",children:e("input",{name:"envKey",class:"mono",placeholder:"OPENAI_API_KEY",autocomplete:"off",pattern:"[A-Za-z_][A-Za-z0-9_]*",value:o,onInput:l=>C(l.currentTarget.value)})}),e(P,{label:"Context window",hint:"tokens; empty uses Codex's default, 272000",children:e("input",{name:"contextWindow",type:"number",min:"1",step:"1",placeholder:"272000",autocomplete:"off",value:E??(U?String(U):""),onInput:l=>K(l.currentTarget.value)})})]})]})]})}function _e({shape:f,editing:d,onSave:a,onClose:u}){let n=d?f.models[d]:void 0,[y,m]=g(d??""),[h,o]=g(typeof n=="string"?n:n===!1?"":"sol"),[C,i]=g(!1),c=f.builtin[y.trim()],k=y.trim()||"name";return e(ee,{title:d?`Edit ${d}`:"Add alias",dismiss:!0,busy:C,onSubmit:async p=>{p.preventDefault();let v=y.trim();if(!v)return;i(!0);let O=await a(()=>h?R.models.alias(v,h):R.models.disable(v));i(!1),O&&u()},onClose:u,actions:e(W,{type:"submit",loading:C,children:"Save"}),children:[e(P,{label:"Name",hint:c?`replaces the built-in, ${c}`:"used as --model",children:e("input",{name:"name",value:y,onInput:p=>m(p.currentTarget.value),placeholder:"fast",autocomplete:"off",spellcheck:!1,pattern:"[a-z0-9][a-z0-9\\-]*",readOnly:!!d,required:!0})}),e(P,{label:"Model",group:!0,children:e(H,{shape:f,value:h,onChange:o,empty:c?{label:"Off",sub:"can't be picked or fallen back to"}:void 0})}),e("p",{class:"muted mono",children:h?`${k} = ${h}`:`${k} can't be picked or fallen back to`})]})}function ze({shape:f,spec:d,index:a,count:u,runsOn:n,onChange:y,onMove:m,onRemove:h,onDrop:o,onAdd:C}){let i=n?.includes("no credential");return e("span",{class:"chain-item chain-chip",draggable:!0,onDragStart:c=>c.dataTransfer?.setData("text/plain",String(a)),onDragOver:c=>c.preventDefault(),onDrop:c=>{c.preventDefault(),o(Number(c.dataTransfer?.getData("text/plain")))},children:[e(H,{shape:f,value:d,onChange:y,onAdd:C,compact:!0}),e(J,{button:"icon",class:"chain-more",label:`${d} actions`,summary:e(j,{d:ue}),children:[e(ge,{icon:e("span",{class:"chain-n",children:a+1}),title:a?d:`${d}, the default`,sub:n??""}),a>0?e(A,{icon:ie,title:"Make default",onClick:()=>m(0)}):null,a>0?e(A,{icon:re,title:"Move earlier",onClick:()=>m(a-1)}):null,a<u-1?e(A,{icon:de,title:"Move later",onClick:()=>m(a+1)}):null,u>1?e(A,{icon:V,title:"Remove from chain",danger:!0,onClick:h}):null]}),i?e("i",{class:"chain-dot",title:n}):null]})}function Fe(f,d){let a=f.models[d];return a===!1?f.builtin[d]??"":typeof a=="object"&&a?`${a.model} \xB7 ${URL.canParse(a.baseUrl)?new URL(a.baseUrl).host:a.baseUrl}`:String(a??"")}function ft({first:f,config:d,credentials:a,admin:u}){let[n,y]=g(f),m=Oe("Add model",["base-url","model","env-key","context-window"]),[h,o]=g(),C=we(),i=Re(d.config),c=(t,s)=>C.run("send",async()=>{let r=await t();y(w=>({...w,models:r.models??{},runsOn:r.runsOn}))},{toast:s}),k=async t=>{let s=await i.patch(t);s&&y(r=>({...r,runsOn:s.runsOn}))},p=i.value.chain??d.effective.chain??[],v=i.value.reviewModel??d.effective.reviewModel??"",O=(t,s)=>{if(t===s||Number.isNaN(t))return;let r=[...p];r.splice(s,0,...r.splice(t,1)),k({chain:r})},{options:B,headings:$}=Ae(n),I=B.filter(([t])=>!p.some(s=>Me(s,n).model===t)),F=Object.keys(n.models),E=Object.keys(n.builtin).filter(t=>!(t in n.models)),K=ve(),U=p.filter(t=>n.runsOn?.[t]?.includes("no credential"));return e(M,{children:[e(Q,{look:"filled",title:"Chain",children:[e("p",{class:"body muted",children:"Tasks try these in order; drag a model to move it."}),U.length?e(Se,{tone:"warning",slim:!0,children:[e(j,{d:pe}),e("span",{class:"grow",children:[U.join(", ")," ",U.length>1?"have":"has"," no credential, so tasks skip ",U.length>1?"them":"it","."]}),e(fe,{variant:"outline",size:"sm",href:"/dash/[org]/settings/[tab]",params:{org:K,tab:"credentials"},children:"Add credential"})]}):null,e("div",{class:"chain",children:[p.map((t,s)=>e(M,{children:[s?e("span",{class:"chain-arrow","aria-hidden":"true",children:"\u2192"}):null,e(ze,{shape:n,spec:t,index:s,count:p.length,runsOn:n.runsOn?.[t],onChange:r=>k({chain:p.map((w,L)=>L===s?r:w)}),onMove:r=>O(s,r),onRemove:()=>k({chain:p.filter((r,w)=>w!==s)}),onDrop:r=>O(r,s),onAdd:m.show})]},`${s}:${t}`)),u?e(J,{class:"chain-add",label:"Add to the chain",summary:e(M,{children:[e(j,{d:z}),"Add"]}),summaryClass:"chain-add-btn",children:[I.map(([t])=>e(M,{children:[$[t]?e(be,{children:$[t]}):null,e(A,{title:t,end:e("small",{class:"muted",children:Fe(n,t)||n.builtin[t]}),onClick:()=>k({chain:[...p,t]})})]},t)),e(A,{icon:z,title:"Add a model",onClick:m.show})]}):null]})]}),e(Q,{look:"filled",title:"Review",children:[e("p",{class:"body muted",children:"coder review and the review tool run this model, then the chain."}),e("div",{class:"chain",title:n.runsOn?.[v],children:e(H,{shape:n,value:v,onChange:t=>k({reviewModel:t}),onAdd:m.show,compact:!0})})]}),e($e,{look:"filled",title:"Models",count:F.length+E.length,actions:u?e(M,{children:[e(W,{size:"sm",variant:"secondary",leftIcon:z,onClick:()=>o(!0),children:"Add alias"}),m.button]}):void 0,children:[F.map(t=>{let s=n.models[t],r=s===!1||typeof s=="object"&&s?.disabled,w=typeof s=="string"&&t in n.builtin;return e(te,{title:t,actions:r?e(x,{children:"off"}):w?e(x,{tone:"acc",children:"replaces built-in"}):null,sub:Fe(n,t),menu:u?e(M,{children:[typeof s=="string"||s===!1?e(A,{icon:G,title:"Edit",onClick:()=>o(t)}):null,typeof s=="object"&&s?e(A,{icon:r?ce:Z,title:r?"Enable":"Disable",onClick:()=>void c(()=>R.models[r?"enable":"disable"](t))}):null]}):void 0,remove:u?{title:w||r?`Reset ${t}?`:`Remove ${t}?`,body:w||r?`${t} runs the built-in ${n.builtin[t]} again.`:"Tasks that ask for it stop running.",label:w||r?"Reset":"Remove",icon:w||r?me:V,link:t,onRemove:()=>c(()=>R.models.remove(t))}:void 0},t)}),E.map(t=>e(te,{title:t,actions:e(x,{children:"built-in"}),sub:n.builtin[t],menu:u?e(M,{children:[e(A,{icon:G,title:"Override",onClick:()=>o(t)}),e(A,{icon:Z,title:"Disable",onClick:()=>void c(()=>R.models.disable(t))})]}):void 0},t))]}),h?e(_e,{shape:n,editing:h===!0?void 0:h,onSave:t=>c(t,"Not saved"),onClose:()=>o(void 0)}):null,m.open?e(Le,{credentials:a,admin:u,onAdd:t=>c(t,"Not saved"),onClose:m.close}):null]})}export{ft as ModelsList};
1
+ "use client";import{a as Ie}from"./combo-6df61e8a1cc31037.js";import{$1a as Se}from"./shared-init-96cde32cd50254c0.js";import{$0c as H}from"./shared-init-96cde32cd50254c0.js";import{e as Ce,i as Me,m as Ae,n as Pe}from"./model-options-5e07b3318d69d218.js";import{a as Re,c as Oe,d as Te,e as Ue,f as te,g as $e}from"./list-662f042656857c82.js";import"./confirm-14d018653fbe50fc.js";import{a as P}from"./field-adcb6e6a5f9b7131.js";import{$0b as we}from"./shared-init-96225b8c7758de9d.js";import{$1h as ke}from"./shared-init-96225b8c7758de9d.js";import{$2n as ye}from"./shared-init-abd7653140f37a0c.js";import{$0D as ve,$0c as ae,$0k as A,$0o as be,$0q as ge,$0z as X}from"./shared-init-abd7653140f37a0c.js";import{$1c as R,$1f as J,$1k as x,$1o as Q,$1r as he}from"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import{$4a as ee}from"./shared-init-abd7653140f37a0c.js";import{$3A as ue,$3B as z,$3C as Z,$3D as me,$3E as G,$3J as pe,$3Q as e,$3R as j,$3S as W,$3T as fe,$3f as ie,$3g as re,$3i as de,$3w as ce,$3x as V}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2c as M,$2h as g,$2l as _}from"./shared-init-3fcac605fffcc273-2.js";var D=Pe,ne=D.at(-1),Ke=f=>f.split("/").pop().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");function Le({credentials:f,admin:d,onAdd:a,onClose:u}){let[n,y]=g(!1),m=Ue(),h=async o=>{y(!0);let C=await a(async()=>{let i=o.envKey||"OPENAI_API_KEY";return o.key&&await R.credentials.add({env:{[i]:o.key},workspace:o.scope==="workspace"}),R.models.add({name:o.name,baseUrl:o.baseUrl,model:o.model,envKey:i,...o.contextWindow?{contextWindow:Number(o.contextWindow)}:{}})});y(!1),C&&u()};return e(M,{children:[e(ee,{class:"add-modal",title:"Add a model",dismiss:!0,busy:n,onSubmit:o=>{o.preventDefault();let C=o.currentTarget,i=Object.fromEntries([...new FormData(C)].map(([p,v])=>[p,String(v).trim()]));if(i.name||(i.name=Ke(i.model??"")),!i.name||!i.model||!i.baseUrl)return;let c=i.envKey||"OPENAI_API_KEY",k=i.scope||"personal";if(i.key&&f?.some(p=>p.name===c&&p.scope===k))return m.ask(Te(c,k),()=>void h(i));h(i)},onClose:u,actions:e(W,{type:"submit",loading:n,children:"Add model"}),children:e("div",{class:"add-form",children:e(Ne,{credentials:f,admin:d})})}),m.dialog]})}function Ne({credentials:f,admin:d}){let a=ae(),u=a.get("base-url")??"",[n,y]=g(u?D.find(l=>l.baseUrl===u)??ne:D[0]??ne),[m,h]=g(u||n.baseUrl),[o,C]=g(a.get("env-key")??n.envKey),[i,c]=g(""),[k,p]=g(d?"workspace":"personal"),[v,O]=g(null),B=_(0),$=_(""),[I,F]=g(a.get("model")??""),[E,K]=g(a.get("context-window")),U=v?.contextWindows?.[I],t=(l,b)=>!!l&&!!f?.some(S=>S.name===l&&S.scope===b),s=(l,b=k)=>t(l,b)?b:!d&&t(l,"workspace")?"workspace":void 0,r=s(o,d?"workspace":"personal"),w=l=>l==="workspace"?"the workspace's":"the personal",[L,oe]=g(!1),se=_(),Y=(l,b,S)=>{let Be=++B.current;if(!l.trim())return O(null);oe(!0),R.models.probe({baseUrl:l.trim(),...b.trim()?{envKey:b.trim()}:{},...S.trim()?{key:S.trim()}:{}}).catch(T=>({reachable:!1,modelListed:null,models:null,detail:ke(T)})).then(T=>{if(Be!==B.current)return;oe(!1),O(T.models?{...T,models:[...T.models].sort()}:T);let N=T.reachable?"":/HTTP 40[13]/.test(T.detail)?"The API key was rejected.":`${l.trim()} isn't reachable.`;N&&N!==$.current&&ye("Models not listed",N),$.current=N})},le=(l,b,S)=>{clearTimeout(se.current),se.current=setTimeout(()=>Y(l,b,S),250)},De=v?.models?`${v.models.length} listed`:void 0,q=n.needsKey&&f?e("div",{class:"add-grid",children:[e(P,{label:"API key",hint:e(M,{children:[s(o)?`uses ${w(s(o))} saved ${o}; enter one to replace it`:`a new key, stored as ${o}`,n.keyUrl?e(M,{children:[", ",e("a",{class:"link",href:n.keyUrl,target:"_blank",rel:"noopener noreferrer",children:"get a key"})]}):null]}),children:e("input",{name:"key",type:"password",autocomplete:"off",placeholder:s(o)?"Leave empty to use the saved key":`${n.name} API key`,value:i,onInput:l=>{c(l.currentTarget.value),le(m,o,l.currentTarget.value)}})}),d?e(P,{label:"Scope",group:!0,children:e(X,{label:"Scope",name:"scope",options:Ce,value:k,onChange:p})}):null]}):null;return e(M,{children:[e("div",{class:"add-grid",children:[e(P,{label:"Provider",group:!0,children:e(X,{label:"Provider",name:"provider",options:D.map(l=>[l.id,l.name]),value:n.id,onChange:l=>{let b=D.find(S=>S.id===l)??ne;y(b),h(b.baseUrl),C(b.envKey),F(""),K(null),c(""),O(null),(s(b.envKey)||!b.needsKey)&&Y(b.baseUrl,b.envKey,"")}})}),e(P,{label:"Model id",group:!0,hint:L?e(he,{label:"Fetching models",inline:!0,dots:!0}):De,children:e(Ie,{label:"Model id",onOpen:()=>{!v&&!L&&Y(m,o,i)},name:"model",options:v?.models??[],placeholder:v?.models?.[0]??"qwen3-coder",value:I,onChange:l=>{F(l),K(null)}})}),e(P,{label:"Short name",hint:"used as --model; defaults to the model id",children:e("input",{name:"name",defaultValue:a.get("add")??void 0,placeholder:Ke(I)||"kimi",autocomplete:"off",pattern:"[a-z0-9][a-z0-9\\-]*"})})]}),q&&r?e("details",{class:"add-more",children:[e("summary",{children:["API key \xB7 uses ",w(r)," saved ",o]}),q]},o):q,e("details",{class:"add-more",open:n.id==="other"||void 0,children:[e("summary",{children:"Advanced"}),e("div",{class:"add-grid",children:[e(P,{label:"Base URL",children:e("input",{name:"baseUrl",type:"url",placeholder:"http://localhost:11434/v1",autocomplete:"off",value:m,onInput:l=>{h(l.currentTarget.value),le(l.currentTarget.value,o,i)}})}),e(P,{label:"Key variable",children:e("input",{name:"envKey",class:"mono",placeholder:"OPENAI_API_KEY",autocomplete:"off",pattern:"[A-Za-z_][A-Za-z0-9_]*",value:o,onInput:l=>C(l.currentTarget.value)})}),e(P,{label:"Context window",hint:"tokens; empty uses Codex's default, 272000",children:e("input",{name:"contextWindow",type:"number",min:"1",step:"1",placeholder:"272000",autocomplete:"off",value:E??(U?String(U):""),onInput:l=>K(l.currentTarget.value)})})]})]})]})}function _e({shape:f,editing:d,onSave:a,onClose:u}){let n=d?f.models[d]:void 0,[y,m]=g(d??""),[h,o]=g(typeof n=="string"?n:n===!1?"":"sol"),[C,i]=g(!1),c=f.builtin[y.trim()],k=y.trim()||"name";return e(ee,{title:d?`Edit ${d}`:"Add alias",dismiss:!0,busy:C,onSubmit:async p=>{p.preventDefault();let v=y.trim();if(!v)return;i(!0);let O=await a(()=>h?R.models.alias(v,h):R.models.disable(v));i(!1),O&&u()},onClose:u,actions:e(W,{type:"submit",loading:C,children:"Save"}),children:[e(P,{label:"Name",hint:c?`replaces the built-in, ${c}`:"used as --model",children:e("input",{name:"name",value:y,onInput:p=>m(p.currentTarget.value),placeholder:"fast",autocomplete:"off",spellcheck:!1,pattern:"[a-z0-9][a-z0-9\\-]*",readOnly:!!d,required:!0})}),e(P,{label:"Model",group:!0,children:e(H,{shape:f,value:h,onChange:o,empty:c?{label:"Off",sub:"can't be picked or fallen back to"}:void 0})}),e("p",{class:"muted mono",children:h?`${k} = ${h}`:`${k} can't be picked or fallen back to`})]})}function ze({shape:f,spec:d,index:a,count:u,runsOn:n,onChange:y,onMove:m,onRemove:h,onDrop:o,onAdd:C}){let i=n?.includes("no credential");return e("span",{class:"chain-item chain-chip",draggable:!0,onDragStart:c=>c.dataTransfer?.setData("text/plain",String(a)),onDragOver:c=>c.preventDefault(),onDrop:c=>{c.preventDefault(),o(Number(c.dataTransfer?.getData("text/plain")))},children:[e(H,{shape:f,value:d,onChange:y,onAdd:C,compact:!0}),e(J,{button:"icon",class:"chain-more",label:`${d} actions`,summary:e(j,{d:ue}),children:[e(ge,{icon:e("span",{class:"chain-n",children:a+1}),title:a?d:`${d}, the default`,sub:n??""}),a>0?e(A,{icon:ie,title:"Make default",onClick:()=>m(0)}):null,a>0?e(A,{icon:re,title:"Move earlier",onClick:()=>m(a-1)}):null,a<u-1?e(A,{icon:de,title:"Move later",onClick:()=>m(a+1)}):null,u>1?e(A,{icon:V,title:"Remove from chain",danger:!0,onClick:h}):null]}),i?e("i",{class:"chain-dot",title:n}):null]})}function Fe(f,d){let a=f.models[d];return a===!1?f.builtin[d]??"":typeof a=="object"&&a?`${a.model} \xB7 ${URL.canParse(a.baseUrl)?new URL(a.baseUrl).host:a.baseUrl}`:String(a??"")}function ft({first:f,config:d,credentials:a,admin:u}){let[n,y]=g(f),m=Oe("Add model",["base-url","model","env-key","context-window"]),[h,o]=g(),C=we(),i=Re(d.config),c=(t,s)=>C.run("send",async()=>{let r=await t();y(w=>({...w,models:r.models??{},runsOn:r.runsOn}))},{toast:s}),k=async t=>{let s=await i.patch(t);s&&y(r=>({...r,runsOn:s.runsOn}))},p=i.value.chain??d.effective.chain??[],v=i.value.reviewModel??d.effective.reviewModel??"",O=(t,s)=>{if(t===s||Number.isNaN(t))return;let r=[...p];r.splice(s,0,...r.splice(t,1)),k({chain:r})},{options:B,headings:$}=Ae(n),I=B.filter(([t])=>!p.some(s=>Me(s,n).model===t)),F=Object.keys(n.models),E=Object.keys(n.builtin).filter(t=>!(t in n.models)),K=ve(),U=p.filter(t=>n.runsOn?.[t]?.includes("no credential"));return e(M,{children:[e(Q,{look:"filled",title:"Chain",children:[e("p",{class:"body muted",children:"Tasks try these in order; drag a model to move it."}),U.length?e(Se,{tone:"warning",slim:!0,children:[e(j,{d:pe}),e("span",{class:"grow",children:[U.join(", ")," ",U.length>1?"have":"has"," no credential, so tasks skip ",U.length>1?"them":"it","."]}),e(fe,{variant:"outline",size:"sm",href:"/dash/[org]/settings/[tab]",params:{org:K,tab:"credentials"},children:"Add credential"})]}):null,e("div",{class:"chain",children:[p.map((t,s)=>e(M,{children:[s?e("span",{class:"chain-arrow","aria-hidden":"true",children:"\u2192"}):null,e(ze,{shape:n,spec:t,index:s,count:p.length,runsOn:n.runsOn?.[t],onChange:r=>k({chain:p.map((w,L)=>L===s?r:w)}),onMove:r=>O(s,r),onRemove:()=>k({chain:p.filter((r,w)=>w!==s)}),onDrop:r=>O(r,s),onAdd:m.show})]},`${s}:${t}`)),u?e(J,{class:"chain-add",label:"Add to the chain",summary:e(M,{children:[e(j,{d:z}),"Add"]}),summaryClass:"chain-add-btn",children:[I.map(([t])=>e(M,{children:[$[t]?e(be,{children:$[t]}):null,e(A,{title:t,end:e("small",{class:"muted",children:Fe(n,t)||n.builtin[t]}),onClick:()=>k({chain:[...p,t]})})]},t)),e(A,{icon:z,title:"Add a model",onClick:m.show})]}):null]})]}),e(Q,{look:"filled",title:"Review",children:[e("p",{class:"body muted",children:"coder review and the review tool run this model, then the chain."}),e("div",{class:"chain",title:n.runsOn?.[v],children:e(H,{shape:n,value:v,onChange:t=>k({reviewModel:t}),onAdd:m.show,compact:!0})})]}),e($e,{look:"filled",title:"Models",count:F.length+E.length,actions:u?e(M,{children:[e(W,{size:"sm",variant:"secondary",leftIcon:z,onClick:()=>o(!0),children:"Add alias"}),m.button]}):void 0,children:[F.map(t=>{let s=n.models[t],r=s===!1||typeof s=="object"&&s?.disabled,w=typeof s=="string"&&t in n.builtin;return e(te,{title:t,actions:r?e(x,{children:"off"}):w?e(x,{tone:"acc",children:"replaces built-in"}):null,sub:Fe(n,t),menu:u?e(M,{children:[typeof s=="string"||s===!1?e(A,{icon:G,title:"Edit",onClick:()=>o(t)}):null,typeof s=="object"&&s?e(A,{icon:r?ce:Z,title:r?"Enable":"Disable",onClick:()=>void c(()=>R.models[r?"enable":"disable"](t))}):null]}):void 0,remove:u?{title:w||r?`Reset ${t}?`:`Remove ${t}?`,body:w||r?`${t} runs the built-in ${n.builtin[t]} again.`:"Tasks that ask for it stop running.",label:w||r?"Reset":"Remove",icon:w||r?me:V,link:t,onRemove:()=>c(()=>R.models.remove(t))}:void 0},t)}),E.map(t=>e(te,{title:t,actions:e(x,{children:"built-in"}),sub:n.builtin[t],menu:u?e(M,{children:[e(A,{icon:G,title:"Override",onClick:()=>o(t)}),e(A,{icon:Z,title:"Disable",onClick:()=>void c(()=>R.models.disable(t))})]}):void 0},t))]}),h?e(_e,{shape:n,editing:h===!0?void 0:h,onSave:t=>c(t,"Not saved"),onClose:()=>o(void 0)}):null,m.open?e(Le,{credentials:a,admin:u,onAdd:t=>c(t,"Not saved"),onClose:m.close}):null]})}export{ft as ModelsList};
@@ -0,0 +1 @@
1
+ "use client";import{a}from"./outcome-dialog-fd86ded4c44c2de7.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";export{a as OutcomeDialog};
@@ -1 +1 @@
1
- import{$1a as m}from"./shared-init-926144b364908b3c.js";import{$2J as p,$2Q as o,$2S as u,$2w as c}from"./shared-init-926144b364908b3c.js";import{$3c as l,$3e as a}from"./shared-init-9b28886f3cbe0ed3-2.js";function B({ok:t,title:e,text:n,issues:r,cancel:h="Close",focus:d,children:f}){let i=a(f),s=!t&&r?o(u,{variant:"outline",href:`${r}?${new URLSearchParams({title:e,body:n})}`,external:!0,children:"Report issue"}):null;return o(m,{class:"outcome-dialog",tone:t?"success":"error",title:e,icon:t?c:p,cancel:h,focus:d,actions:s||i.length?o(l,{children:[s,i]}):void 0,onClose:()=>history.replaceState(history.state,"",location.pathname),children:o("p",{role:"status",children:n})})}export{B as a};
1
+ import{$4a as m}from"./shared-init-abd7653140f37a0c.js";import{$3J as p,$3Q as o,$3S as u,$3w as c}from"./shared-init-abd7653140f37a0c.js";import{$2c as l,$2e as a}from"./shared-init-3fcac605fffcc273-2.js";function B({ok:t,title:e,text:n,issues:r,cancel:h="Close",focus:d,children:f}){let i=a(f),s=!t&&r?o(u,{variant:"outline",href:`${r}?${new URLSearchParams({title:e,body:n})}`,external:!0,children:"Report issue"}):null;return o(m,{class:"outcome-dialog",tone:t?"success":"error",title:e,icon:t?c:p,cancel:h,focus:d,actions:s||i.length?o(l,{children:[s,i]}):void 0,onClose:()=>history.replaceState(history.state,"",location.pathname),children:o("p",{role:"status",children:n})})}export{B as a};
@@ -0,0 +1 @@
1
+ "use client";import{$2m as s,$2n as a}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2j as r}from"./shared-init-3fcac605fffcc273-2.js";var u=["status","platform","account","app","appId","error","outcome"];function p({ok:c,title:t,text:o}){return r(()=>{c?s(t,o,"success"):a(t,o);let e=new URL(location.href);for(let n of u)e.searchParams.delete(n);history.replaceState(history.state,"",e)},[]),null}export{p as OutcomeToast};
@@ -0,0 +1 @@
1
+ "use client";import{a,b,c,d,e,f,g,h,i,j}from"./platform-actions-f3979ab69a6ceb53.js";import"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import"./segmented-66a8c77c6294fec3.js";import"./outcome-dialog-fd86ded4c44c2de7.js";import"./field-adcb6e6a5f9b7131.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";export{i as CreateButton,e as CreateDialog,h as DriftQueue,b as InstallButton,j as PlatformActions,d as RemoveButton,c as UninstallButton,g as UpdateButton,f as UpdateDialog,a as createForm};