@wular/coder 0.4.12 → 0.5.0

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 (528) hide show
  1. package/README.md +3 -3
  2. package/dist/actions-CkMAM1Km.js +3 -0
  3. package/dist/agent-Bi5nbUhA.js +1 -0
  4. package/dist/app-server-BTpa5GBV.js +6 -0
  5. package/dist/approvals-CRwkc9vB.js +5 -0
  6. package/dist/apps-B6mUToTa.js +18 -0
  7. package/dist/args-CJsHYWbt.js +66 -0
  8. package/dist/async-CNhQ4wyZ.js +3 -0
  9. package/dist/auth-oCvlHitk.js +1 -0
  10. package/dist/builtin/coder/agent.json +6 -7
  11. package/dist/builtin/coder/system.md +5 -6
  12. package/dist/chat-4AiZEqKh.js +13 -0
  13. package/dist/{chat-bwKd3y6V.js → chat-Bfu9XKRa.js} +1 -1
  14. package/dist/cli.js +16 -11
  15. package/dist/{client-C4QCT6cG.js → client-nBo9Mhsr.js} +4 -4
  16. package/dist/cmd-Cu3OquA_.js +122 -0
  17. package/dist/config-D_RuO6gX.js +5 -0
  18. package/dist/connection-BXjn7gCC.js +1 -0
  19. package/dist/connections-Cswv7r8Z.js +2 -0
  20. package/dist/context-CFrDYenS.js +6 -0
  21. package/dist/crypto-Ittsv-m4.js +1 -0
  22. package/dist/dash/standalone/server/build-index.json +1 -1
  23. package/dist/dash/standalone/server/manifest.json +1686 -1428
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/event-json.856d33f567e58d0e.js +30 -0
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/http.e78b470f4ecf125b.js +58 -0
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.0de14cb4e30bd70d.js → index.54c45900f2153d34.js} +57 -77
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.60308a11f7001eb7.js → view.e20379d8f741754a.js} +78 -48
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/types.5bf5a41cedb54154.js +37 -0
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.be791a5eaf328738.js → load.252f972b42c690e2.js} +18 -11
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.70913bd4075da914.js → page.11efd0e175db9053.js} +24 -4
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.e348ec45e9ed951b.js → loading.56c14183236be231.js} +2 -2
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.61aab176baeefebd.js → notify.59ae138dc182d7c3.js} +1 -1
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.815371ed0d5dd4fa.js → page.e9386951cedea737.js} +9 -9
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.1d6af804f9ec043d.js → sign-out.713d3ec10951fde5.js} +4 -4
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.2ed0e66d131fc148.js → agent-menu.5c780867b82081b1.js} +3 -3
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f43bcc1148ce3650.js → agents-grid.f989d6f2d9ece6e4.js} +9 -9
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.fac1132ad9c4248e.js → loading.0130f8533d8f1b1e.js} +4 -4
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.0f88720e52db99a2.js +48 -0
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.a795379254982121.js → layout.8d2f0997462fc958.js} +90 -33
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{loading.388aeaf0c2edf8f8.js → loading.90bf37c903ce6f0d.js} +1 -1
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.a2cb6d1f1714259a.js → page.bc93891522c8120d.js} +22 -88
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.4da9e2ba3fea937f.js → loading.d56ef50b0694f975.js} +2 -2
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.996172c951739b35.js → page.cf5cf9afe38ab0e4.js} +51 -111
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.8e7ca54dd1821e98.js → platform-actions.c44c7df7841719f2.js} +235 -109
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-state.6b6132518ca61635.js +21 -0
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.6e90cbfe308f28a0.js +82 -0
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.aa9e157d141481d7.js → agent-settings-form.61de585104c2be10.js} +44 -66
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.ad1a4c9b000d269a.js → loading.2800c65e45a4a1d9.js} +1 -1
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.44d886e60ae04303.js → page.4d06f759984a63b3.js} +11 -11
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.521c9e7b8d77f557.js → loading.ea2925eab1d2e594.js} +1 -1
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.828cfb8112404792.js → page.fb069bf82b727d27.js} +1 -1
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.8f998a9c511e1fb3.js → loading.3a615597ca648452.js} +4 -4
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.45e18b6dc3019af4.js → page.0a472a0e269b8c01.js} +6 -6
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.c8d76988c734dda2.js → versions-list.7ef7dfd5d8f5de43.js} +3 -3
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.b1367e864b4fb406.js → loading.007326a04f05d46c.js} +5 -5
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.dd11f2618e08becd.js → page.a26aa7bc6ab655f0.js} +10 -10
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.361918fe58349aa1.js +142 -0
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/loading.f0d91d48e2b79e50.js +14 -0
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/page.3f60cf67517d0d31.js +99 -0
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.f987c12bcbc5c850.js → agent-pills.1012e04bfbc7bffd.js} +5 -5
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.1579dc8acbaacf92.js → agent-toggle.ffbf9a8b8b2fbde7.js} +3 -3
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.ad5cc342db794e5d.js → hero.0ae015a4fbe6321e.js} +6 -6
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{instructions.85b1cd986a9edbb5.js → instructions.1b8c9189961c5a4f.js} +13 -4
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.43b4b28f194ea842.js → connect-repositories.9abe365f0098d358.js} +1 -1
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.776856fe1ed1a642.js → editor.6548f8f757578f90.js} +164 -116
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.eafa5b41a2ed571f.js → import-picker.577b1d84c7ab84e1.js} +11 -11
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.ee001af7a96e3972.js → loading.9b65a8c1cdc8346f.js} +5 -5
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.7d84ef2b178b34d2.js → page.2b326d00ccef5544.js} +9 -8
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.393cf7429eea189e.js → layout.45a09107b19f0a7e.js} +89 -26
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.f8d679f2d06b0ebc.js +155 -0
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.980adfb7c5714752.js → page.5aa3ddc669366703.js} +37 -10
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.24a1987405ed7b17.js → page.5a5188f0fc75dcd2.js} +1 -1
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/advanced-list.73cdadb2968a39d2.js +63 -0
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connection-add.353ec01fbb814f78.js +526 -0
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.cf4061ae909272c3.js +439 -0
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.683476f62a9ecde7.js → credentials-list.fc4cff0289267551.js} +120 -103
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.b43dd3d97c536c2a.js → credentials.db01de2581ac65f3.js} +9 -9
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.e7d6a422f6a869ea.js +201 -0
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{loading.7ca95dcb4fb3362b.js → loading.71ca4f6c99a8a9d5.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.acb92b39cab1d11c.js +635 -0
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.dfed4ae6ffc74434.js → page.95fe939e36e5be55.js} +67 -41
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.3afa989490bbe77c.js → runners-list.5764eac3307d67cc.js} +42 -37
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.0d175ee815b22cd7.js → secrets-list.d316bb157f747f6c.js} +19 -17
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/chain-hint.65c4cc04c78e8bfd.js +18 -0
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.3e8289f888fa444c.js → layout.4eb70f2de8674f93.js} +7 -7
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.dc630cb6e2cbf83a.js +150 -0
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-pick.a143e77f5ed5f9d3.js +160 -0
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.06feaa5fbb06f1e6.js → page.70cad0e981c33fa5.js} +1 -1
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.bbc7ced8dd5491eb.js → settings-head.004ced21e02ffa48.js} +5 -5
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{tunnel-guide.29eee1a0b1852168.js → tunnel-guide.1bc6bff9d8019098.js} +1 -1
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.ff95e4b6977d0474.js → create-link.18bd2b92cd23b73f.js} +5 -5
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.894c73f9abee3ce1.js → outcome-dialog.a74e686aaed0c584.js} +3 -3
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-toast.95f7be49430248eb.js +24 -0
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome.cbbc8cd1bbbee01b.js → outcome.22a83d756e4020a7.js} +3 -6
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.f06fda0df59beeb5.js → page.e39ee9236664d043.js} +8 -8
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.3c79cf14feff12bf.js → activity.441e82ab00344fb2.js} +12 -6
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.47cbb34ea8d2e33f.js → loading.779ecdd9c9d2ff09.js} +6 -6
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.abed2a8424ef3da0.js → page.24e121ea6eb578ba.js} +16 -9
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.4a4052a38db4bad3.js +408 -0
  100. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-missing.33ec27a4a5eafefe.js +27 -0
  101. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.dc294bb94b7437e1.js → task-view.0cd3ec2655f44cc7.js} +53 -44
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.309a194fc7fa34be.js → composer-data.73225456d60d63e3.js} +4 -6
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.5072aacdce127689.js → composer.ee326fbf5e526fb1.js} +114 -121
  104. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/pending-approvals.7607998094780fdd.js +40 -0
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/status.d2c05c397780b833.js +25 -0
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.0a1b5878dccd3b37.js → task.a25847399a4dfb30.js} +14 -18
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.1162926f7498c732.js → tasks-list.e486cbd16ea3e963.js} +62 -39
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.1d687c986db53a73.js → tasks-section.01510523d1556d59.js} +16 -10
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.d5d8cb5033823c9c.js → page.ede64f82388f9480.js} +5 -5
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{custom-range.2e21c7f891966c15.js → custom-range.fe91164d7a311356.js} +3 -3
  111. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{day-chart.261b6651df2d3966.js → day-chart.20faaaf57c81ad9e.js} +1 -1
  112. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.97d277dbab9c15cf.js → loading.5b973a8bb29197d5.js} +3 -3
  113. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.fb21ebe90d49dac1.js → page.0499098badd3f5f8.js} +7 -7
  114. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.2197d8f43216d104.js → range-bar.0b9038e9df707843.js} +5 -5
  115. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{top-agents.18fc469e781e2305.js → top-agents.93c916167299ffb6.js} +2 -2
  116. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.185dbc99875e208a.js → layout.94ea3908b03bede6.js} +2 -2
  117. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.a82be2fd23e9ac67.js → page.4827d64c71c0690a.js} +2 -2
  118. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.d3e61538dbc8ec39.js → drawer.1a08ff611df7fe38.js} +2 -2
  119. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.1f4217895ff1e835.js → foreign-link.1d4f63a0379cbd1d.js} +3 -3
  120. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.cc76fc9708142525.js → loading-card.77bea8c5870b5d3c.js} +5 -5
  121. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.85f15db7b648d48c.js → page-head.2eb1e0213eb50349.js} +5 -4
  122. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e2915852cf82c86b.js → stream.e3800e736f832124.js} +2 -2
  123. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.0ed8ccaae81b9d53.js → task-toasts.3b7eeee29fc327de.js} +29 -19
  124. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.85100ed66d6f9200.js → theme-choices.fc86071c1b634176.js} +2 -2
  125. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.180765bdadf6d602.js → back.7aa0ae82dbec38cd.js} +3 -3
  126. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.572ad93c7707ab27.js → org.853d173b55368728.js} +1 -1
  127. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.489faf1a259479f7.js → side-toggle.be7d2a7529557435.js} +2 -2
  128. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{badge.c0bc352791a95fd6.js → badge.9f63fd615cf0ee22.js} +2 -2
  129. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{button.ce9e6cdb08ca86db.js → button.b62fa52e18fa338b.js} +2 -2
  130. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.9f0d45b73bc78b4f.js → card.c0030eafd76587e3.js} +21 -9
  131. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.93e4d1b20c2873ed.js → collapse.eb578fdf42029754.js} +1 -1
  132. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.54270c0251466fda.js → combo.e4e08287494081a3.js} +2 -2
  133. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.c1281f9b12854210.js → confirm.e21b7f5e486dafb8.js} +3 -3
  134. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.bd6fc1577a393965.js → copy.043e0695c08c72f9.js} +2 -2
  135. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.3a452a262f040973.js → filter.0730dccad6332327.js} +6 -6
  136. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.e36c72f54750663a.js → icons.f769275420d072ce.js} +4 -0
  137. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu-items.1d082ac4dae8f3d4.js → menu-items.759a1b1f7c5ee365.js} +2 -2
  138. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.ee45bace979944b6.js → menu.7f558c7c6f6345d5.js} +3 -3
  139. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.25d53e5b41b9c4e5.js → modal.08ac85d31f4c76c1.js} +8 -7
  140. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/modal.a533234c7c831be4.css.pnext-asset.js +0 -0
  141. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.a08dc08338d080e9.js → segmented.633abe26ff760e37.js} +1 -1
  142. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/segmented.c6f30b839fd27f35.css.pnext-asset.js +0 -0
  143. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.2eb33e5bea28d804.js → select.0ee9e8f04ddd8b47.js} +9 -6
  144. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.17cffebfc3103b9f.js → sentinel.0ddf515b8f09ef9f.js} +1 -1
  145. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/sentinel.d17e2bfcbeb9df31.css.pnext-asset.js +0 -0
  146. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/tabs.025b532d6cc51736.css.pnext-asset.js +0 -0
  147. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.66b2e54963f6901b.js → tabs.1600a0b563a5c7dd.js} +1 -1
  148. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.04132db0c5033d4f.js → tail.7eb303330802ac18.js} +2 -2
  149. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.cdbd0357f2c5e1fe.css.pnext-asset.js +0 -0
  150. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.24036899654de6df.js → toolbar.ff8367c641d28c1e.js} +3 -3
  151. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.b9a5c37272250e82.js → action.f22057e7dfac40fe.js} +1 -1
  152. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.a3928fa2dcd27b75.js → client.c8d7efefb6194d7d.js} +1 -1
  153. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/routes/http.394704f4f12ada08.js +165 -0
  154. package/dist/dash/standalone/server/modules-server-server-react-server/src/utils/crypto.24a6439ff8d10d3d.js +11 -0
  155. package/dist/dash/standalone/static/assets/chunks/advanced-list-850a950afe4f6996.js +1 -0
  156. package/dist/dash/standalone/static/assets/chunks/agent-pills-9f6fa120182db948.js +2 -0
  157. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +1 -0
  158. package/dist/dash/standalone/static/assets/chunks/agent-toggle-521136f20a71400d.js +1 -0
  159. package/dist/dash/standalone/static/assets/chunks/agents-grid-bcd13cd7a46224a6.js +1 -0
  160. package/dist/dash/standalone/static/assets/chunks/{back-fa9d6e37f9828093.js → back-2d67134b122334f4.js} +1 -1
  161. package/dist/dash/standalone/static/assets/chunks/chain-hint-53675e299a865420.js +1 -0
  162. package/dist/dash/standalone/static/assets/chunks/{combo-86f3e11d1f6f6cee.js → combo-cb2c62fe580a8903.js} +1 -1
  163. package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +1 -0
  164. package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +1 -0
  165. package/dist/dash/standalone/static/assets/chunks/composer-data-890f71bade4f0616.js +1 -0
  166. package/dist/dash/standalone/static/assets/chunks/{confirm-c29a1db0130638d2.js → confirm-d6b2c5b1deccd1e8.js} +1 -1
  167. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-0de82daaf654b1d3.js → connect-repositories-226bf70aa81c29d8.js} +1 -1
  168. package/dist/dash/standalone/static/assets/chunks/connections-list-a33d6637e2d52fcf.js +1 -0
  169. package/dist/dash/standalone/static/assets/chunks/{copy-445c11202f136275.js → copy-294c6052b3b69424.js} +1 -1
  170. package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +1 -0
  171. package/dist/dash/standalone/static/assets/chunks/credentials-list-90fc1c6d202e1461.js +1 -0
  172. package/dist/dash/standalone/static/assets/chunks/custom-range-efa1b6a71ba84597.js +1 -0
  173. package/dist/dash/standalone/static/assets/chunks/editor-53a3e1a893644fff.js +6 -0
  174. package/dist/dash/standalone/static/assets/chunks/{field-b82a0f895266791c.js → field-4d374d5ed3f43d7e.js} +1 -1
  175. package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +1 -0
  176. package/dist/dash/standalone/static/assets/chunks/instructions-d3dc01b2f90820db.js +2 -0
  177. package/dist/dash/standalone/static/assets/chunks/list-16247e39898cd20e.js +1 -0
  178. package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +1 -0
  179. package/dist/dash/standalone/static/assets/chunks/models-list-6d93523660503dfb.js +1 -0
  180. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-5cf575a5e6921a5d.js → outcome-dialog-755fc581cbc2836e.js} +1 -1
  181. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +1 -0
  182. package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +1 -0
  183. package/dist/dash/standalone/static/assets/chunks/platform-actions-08e9b3816dcd62b1.js +1 -0
  184. package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +1 -0
  185. package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +1 -0
  186. package/dist/dash/standalone/static/assets/chunks/platform-step-5881a8be1e761e00.js +1 -0
  187. package/dist/dash/standalone/static/assets/chunks/runners-list-dd759d408c643a29.js +1 -0
  188. package/dist/dash/standalone/static/assets/chunks/{runtime-6e12333f12903a62-1.js → runtime-9b28886f3cbe0ed3-1.js} +1 -1
  189. package/dist/dash/standalone/static/assets/chunks/secrets-list-be1f634a1b077baa.js +1 -0
  190. package/dist/dash/standalone/static/assets/chunks/segmented-f646bfa8aa0aa449.js +1 -0
  191. package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +9 -0
  192. package/dist/dash/standalone/static/assets/chunks/shared-init-953965859f7bf6b9.js +1 -0
  193. package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +1 -0
  194. package/dist/dash/standalone/static/assets/chunks/shared-init-b42d2c06c25d1e2b.js +1 -0
  195. package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +1 -0
  196. package/dist/dash/standalone/static/assets/chunks/{tail-b1c46587301ef397.js → tail-d13c4cc0cf11ffd1.js} +1 -1
  197. package/dist/dash/standalone/static/assets/chunks/task-423e6a3f2527f534.js +1 -0
  198. package/dist/dash/standalone/static/assets/chunks/task-actions-5917357eac6504ca.js +3 -0
  199. package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +3 -0
  200. package/dist/dash/standalone/static/assets/chunks/tasks-list-2c5ce592e00fda45.js +1 -0
  201. package/dist/dash/standalone/static/assets/chunks/versions-list-177ae397ad64dcea.js +1 -0
  202. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-6e12333f12903a62-0.js → wular-pnext-9b28886f3cbe0ed3-0.js} +1 -1
  203. package/dist/dash/standalone/static/assets/create-param-id-2c72f3e32e7f8b8d.css +1 -0
  204. package/dist/dash/standalone/static/assets/dash-param-org-a7f30a8c5a6fa651.css +1 -0
  205. package/dist/dash/standalone/static/assets/dash-param-org-account-76fffb9337b633f2.css +1 -0
  206. package/dist/dash/standalone/static/assets/dash-param-org-agents-cc5d59edfc3cf0b1.css +1 -0
  207. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-170499c849114150.css +1 -0
  208. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-00243b34eb094b95.css +1 -0
  209. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-199a9991de1bf2d9.css +1 -0
  210. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +1 -0
  211. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-param-app-a6d559f0e26bd01b.css +1 -0
  212. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css +1 -0
  213. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css +1 -0
  214. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css +1 -0
  215. package/dist/dash/standalone/static/assets/dash-param-org-operator-8d5ef55834d8deba.css +1 -0
  216. package/dist/dash/standalone/static/assets/dash-param-org-settings-7138821f5422d087.css +1 -0
  217. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-586fec34f285e9cb.css +1 -0
  218. package/dist/dash/standalone/static/assets/dash-param-org-setup-67679c1f84f352cf.css +1 -0
  219. package/dist/dash/standalone/static/assets/dash-param-org-tasks-8a44e171984d32a1.css +1 -0
  220. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css +1 -0
  221. package/dist/dash/standalone/static/assets/dash-param-org-usage-c534db20ce538fd2.css +1 -0
  222. package/dist/dash/standalone/static/assets/global-df2c26ad15039e8a.css +1 -0
  223. package/dist/dash/standalone/static/assets/{login-9760b85feae40270.css → login-148795638d6ff5d4.css} +1 -1
  224. package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +1 -0
  225. package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +1 -0
  226. package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +1 -0
  227. package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +1 -0
  228. package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +1 -0
  229. package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +1 -0
  230. package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +1 -0
  231. package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +1 -0
  232. package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +1 -0
  233. package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +1 -0
  234. package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +1 -0
  235. package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +1 -0
  236. package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +1 -0
  237. package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +1 -0
  238. package/dist/dash/standalone/static/assets/pnext-client-7ecbd7a0cbe4e231.js +1 -0
  239. package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +1 -0
  240. package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +1 -0
  241. package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +1 -0
  242. package/dist/dash/standalone/static/assets/pnext-client-ed31510d4615a5a5.js +1 -0
  243. package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +1 -0
  244. package/dist/definition-4on4SG5J.js +1 -0
  245. package/dist/discover-DvzAbQvU.js +1 -0
  246. package/dist/dispatch-BaW2X6Sc.js +12 -0
  247. package/dist/{dist-DAnSqY1s.js → dist-B5qUdWUG.js} +35 -35
  248. package/dist/{dist-B2jiMMxZ.js → dist-Clxdruuu.js} +3 -3
  249. package/dist/{dist-ClCNj65n.js → dist-CymLGfHl.js} +4 -4
  250. package/dist/{adapter-CVd5klMH.js → dist-DX0JzVC6.js} +990 -990
  251. package/dist/{adapter-CU9H4g6c.js → dist-DfD9WmV8.js} +39 -39
  252. package/dist/dist-node-B8VIVzUc.js +20 -0
  253. package/dist/docs-CbgaMPvq.js +2 -0
  254. package/dist/drive-Tk6JvQK5.js +1 -0
  255. package/dist/drizzle-orm-CYU7WOQS.js +2 -0
  256. package/dist/emit-BgeqsCkC.js +11 -0
  257. package/dist/env-_AxrvBXP.js +1 -0
  258. package/dist/errors-DK_trCff.js +1 -0
  259. package/dist/exec-CAaYFJD1.js +3 -0
  260. package/dist/executor-Chc0zawh.js +11 -0
  261. package/dist/flow/builtin/review/index.d.ts +2 -2
  262. package/dist/flow/builtin/review/index.js +9 -9
  263. package/dist/flow/index.d.ts +1 -1
  264. package/dist/flow/index.js +1 -1
  265. package/dist/github-actions-2RjyRseX.js +36 -0
  266. package/dist/hook-COWDSO4a.js +1 -0
  267. package/dist/http-615JJgHo.js +5 -0
  268. package/dist/http-DRk8cDjf.js +1 -0
  269. package/dist/{index-BdkdNI1v.d.ts → index-ezhbF5wC.d.ts} +369 -413
  270. package/dist/integrations-BVmsk64f.js +9 -0
  271. package/dist/lib/broker.js +2 -2
  272. package/dist/load-PqaDHiHX.js +2 -0
  273. package/dist/local-BMGcCk8N.js +1 -0
  274. package/dist/local-BzZuOwgI.js +5 -0
  275. package/dist/login-BDKTNynK.js +8 -0
  276. package/dist/maintenance-d43Ml540.js +1 -0
  277. package/dist/mcp-BGam3G_B.js +1 -0
  278. package/dist/mcp-BGx48pyR.js +25 -0
  279. package/dist/mcp-BNz_l5TV2.js +1 -0
  280. package/dist/metadata-D_bBfr3H.js +1 -0
  281. package/dist/models-D1NXi6ni.js +1 -0
  282. package/dist/output-BKeyLbvt.js +5 -0
  283. package/dist/permission-BkYxjiFR.js +1 -0
  284. package/dist/prompt-CpwbsEWM.js +4 -0
  285. package/dist/refresh-yfEi5SQs.js +1 -0
  286. package/dist/remote-BbXx6S9P.js +1 -0
  287. package/dist/remote-rArUa01V.js +2 -0
  288. package/dist/runner-DG9jrX5H.js +1 -0
  289. package/dist/runner.json +1 -1
  290. package/dist/runner.tgz +0 -0
  291. package/dist/schema.d.ts +2 -2
  292. package/dist/schema.js +2 -3
  293. package/dist/sdk.d.ts +3264 -1601
  294. package/dist/sdk.js +1 -1
  295. package/dist/serve-B-5rDiZm.js +1 -0
  296. package/dist/serve-CvnrGAj7.js +12 -0
  297. package/dist/serve-DoYbHm_k.js +5 -0
  298. package/dist/session-Dtje9y-r.js +1 -0
  299. package/dist/sessions-DIz9fyRN.js +1 -0
  300. package/dist/shared--aE4olIO.js +1 -0
  301. package/dist/sign-in-wWkyaq5X.js +3 -0
  302. package/dist/state-Br-Fuaxg.js +6 -0
  303. package/dist/store-CzQLgCzt.js +352 -0
  304. package/dist/task-CFt85vTy.js +1 -0
  305. package/dist/task-N0qhnKpK.js +7 -0
  306. package/dist/tool-search-BkdgVolu.js +6 -0
  307. package/dist/tools-DNgEptor.js +1 -0
  308. package/dist/tools-oQvFAnh5.js +1 -0
  309. package/dist/tools-search-D1zArRyJ.js +1 -0
  310. package/dist/turn-Cc-v-eSy.js +3 -0
  311. package/dist/types-DHBqXFE2.js +1 -0
  312. package/dist/update-check-UyRob3yy.js +1 -0
  313. package/dist/view-D-rbQ1Kz.js +4 -0
  314. package/dist/views-3TxH367C.js +2 -0
  315. package/dist/worker-BMuKKiIa.js +1 -0
  316. package/dist/worker-CIHY9L42.js +7 -0
  317. package/dist/zod-_-snqfdO.js +1 -0
  318. package/dist/zod.js +65 -1
  319. package/docs/agents/coder.md +5 -12
  320. package/docs/agents/index.md +53 -82
  321. package/docs/approvals.md +47 -0
  322. package/docs/cli/agent.md +40 -19
  323. package/docs/cli/auth.md +1 -1
  324. package/docs/cli/connection.md +27 -26
  325. package/docs/cli/flow.md +9 -9
  326. package/docs/cli/index.md +17 -15
  327. package/docs/cli/model.md +23 -21
  328. package/docs/cli/runner.md +1 -1
  329. package/docs/cli/server.md +2 -2
  330. package/docs/cli/task.md +50 -50
  331. package/docs/config.md +37 -75
  332. package/docs/connections.md +80 -0
  333. package/docs/dash.md +23 -19
  334. package/docs/flows.md +46 -213
  335. package/docs/models.md +48 -77
  336. package/docs/review.md +20 -17
  337. package/docs/runners.md +49 -0
  338. package/docs/sdk.md +49 -73
  339. package/docs/self-host.md +79 -81
  340. package/package.json +4 -5
  341. package/plugins/agents/skills/coder/SKILL.md +3 -3
  342. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  343. package/plugins/claude/skills/dispatch/SKILL.md +3 -3
  344. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  345. package/plugins/cursor/README.md +3 -3
  346. package/plugins/cursor/skills/coder/SKILL.md +3 -3
  347. package/dist/actions-BT7_eKXm.js +0 -10
  348. package/dist/adapter-BT8ECcRG.js +0 -1
  349. package/dist/agent-BA6xr8QY.js +0 -8
  350. package/dist/apps-D-v5sQJk.js +0 -367
  351. package/dist/args-CbO_Ck9Z.js +0 -11
  352. package/dist/async-XNO3nqum.js +0 -3
  353. package/dist/auth-DuXnSNf9.js +0 -1
  354. package/dist/base64url-CsVsW4Id.js +0 -1
  355. package/dist/chat-CgQdDRhs.js +0 -13
  356. package/dist/cmd-DX5ByXo3.js +0 -119
  357. package/dist/connection-DNxi2btM.js +0 -1
  358. package/dist/context-65bOofts.js +0 -7
  359. package/dist/conversation-DT-35cEt.js +0 -1
  360. package/dist/core-DwsAMCnL.js +0 -65
  361. package/dist/dash/standalone/node_modules/contextjsx/dist/index.mjs +0 -1
  362. package/dist/dash/standalone/node_modules/contextjsx/dist/jsx-runtime.mjs +0 -1
  363. package/dist/dash/standalone/node_modules/contextjsx/dist/src-BJ0QFeB8.mjs +0 -2
  364. package/dist/dash/standalone/node_modules/contextjsx/package.json +0 -70
  365. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/turn.dac8eb211c500271.js +0 -141
  366. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.1b615366c56838a1.js +0 -57
  367. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/auth/sign-in.661b3a4139af5bd7.js +0 -11
  368. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/page.0fbfdba5254f7ae5.js +0 -26
  369. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.f3af8cc8540719d7.js +0 -36
  370. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.c6efd5432c1a4a75.js +0 -65
  371. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a244f3199e7cf09c.js +0 -144
  372. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.21ec9dc73ce68656.js +0 -642
  373. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/engines-list.9e116751bd34e2cc.js +0 -73
  374. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.083f5c665df04b1b.js +0 -156
  375. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.537f63f8e5dd085d.js +0 -410
  376. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.a96c11d11674f598.js +0 -100
  377. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.587da79d68ab8d14.js +0 -151
  378. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/status.16190fdd5fd7daad.js +0 -16
  379. package/dist/dash/standalone/static/assets/chunks/action-71685b2d5ad9f359.js +0 -1
  380. package/dist/dash/standalone/static/assets/chunks/agent-pills-15da36c2cb81991b.js +0 -2
  381. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-6e6a87d6e673daa8.js +0 -1
  382. package/dist/dash/standalone/static/assets/chunks/agent-toggle-ca98586e3b4ce9ae.js +0 -1
  383. package/dist/dash/standalone/static/assets/chunks/agents-grid-29c399e46b4e9e2b.js +0 -1
  384. package/dist/dash/standalone/static/assets/chunks/composer-85e0ec7163ae18b7.js +0 -1
  385. package/dist/dash/standalone/static/assets/chunks/composer-910bb87127972f62.js +0 -1
  386. package/dist/dash/standalone/static/assets/chunks/composer-data-5fed6c271a4791ca.js +0 -1
  387. package/dist/dash/standalone/static/assets/chunks/connect-apps-b73490e04ae6398d.js +0 -1
  388. package/dist/dash/standalone/static/assets/chunks/connections-list-c50f58b4b28d10bb.js +0 -1
  389. package/dist/dash/standalone/static/assets/chunks/create-link-6d64a2d5f9ce6de0.js +0 -1
  390. package/dist/dash/standalone/static/assets/chunks/credentials-list-bee95799b2319b3b.js +0 -1
  391. package/dist/dash/standalone/static/assets/chunks/custom-range-a0630599f907b30e.js +0 -1
  392. package/dist/dash/standalone/static/assets/chunks/defaults-52f30e83d7666f7a.js +0 -1
  393. package/dist/dash/standalone/static/assets/chunks/editor-b9951819f21b2e43.js +0 -6
  394. package/dist/dash/standalone/static/assets/chunks/engines-list-2720c3e8fa12b2f7.js +0 -1
  395. package/dist/dash/standalone/static/assets/chunks/format-a27067f0186e78ac.js +0 -1
  396. package/dist/dash/standalone/static/assets/chunks/instructions-affaaeff366b1725.js +0 -2
  397. package/dist/dash/standalone/static/assets/chunks/instructions-fd7402ac5aa8b50e.js +0 -1
  398. package/dist/dash/standalone/static/assets/chunks/list-d918f79562d497eb.js +0 -1
  399. package/dist/dash/standalone/static/assets/chunks/model-options-8d2170eebe0d061d.js +0 -1
  400. package/dist/dash/standalone/static/assets/chunks/models-list-12bc7aceaa52f5b0.js +0 -1
  401. package/dist/dash/standalone/static/assets/chunks/notice-57db7a1f05b7308c.js +0 -1
  402. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-b219595be320108a.js +0 -1
  403. package/dist/dash/standalone/static/assets/chunks/platform-actions-1d27d2ba7eee9ff1.js +0 -1
  404. package/dist/dash/standalone/static/assets/chunks/platform-actions-dba96dcb0f6513db.js +0 -1
  405. package/dist/dash/standalone/static/assets/chunks/runners-list-36f8c5ecfcf8e9ae.js +0 -1
  406. package/dist/dash/standalone/static/assets/chunks/secrets-list-d7dbafd24dd18481.js +0 -1
  407. package/dist/dash/standalone/static/assets/chunks/segmented-8f809ebe712e92a7.js +0 -1
  408. package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +0 -1
  409. package/dist/dash/standalone/static/assets/chunks/shared-init-cc13a835f3508618.js +0 -2
  410. package/dist/dash/standalone/static/assets/chunks/shared-init-f475017dd5811e33.js +0 -5
  411. package/dist/dash/standalone/static/assets/chunks/side-toggle-0aa237eba3dfe9c1.js +0 -1
  412. package/dist/dash/standalone/static/assets/chunks/task-681061023bdf0a49.js +0 -5
  413. package/dist/dash/standalone/static/assets/chunks/task-actions-c9e46e81604e85c5.js +0 -1
  414. package/dist/dash/standalone/static/assets/chunks/task-view-134186a544917ceb.js +0 -5
  415. package/dist/dash/standalone/static/assets/chunks/tasks-list-352a3222d878de0f.js +0 -1
  416. package/dist/dash/standalone/static/assets/chunks/versions-list-21cb854e6a7108a7.js +0 -1
  417. package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +0 -1
  418. package/dist/dash/standalone/static/assets/create-param-id-da3f7e20689fe51a.css +0 -1
  419. package/dist/dash/standalone/static/assets/dash-param-org-account-9471bec93c444232.css +0 -1
  420. package/dist/dash/standalone/static/assets/dash-param-org-agents-64500e78caae32df.css +0 -1
  421. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-c067c22928a2d7cc.css +0 -1
  422. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-9dec87710e04f949.css +0 -1
  423. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-779c474301e04440.css +0 -1
  424. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-c7d594b5232630c2.css +0 -1
  425. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-a80e62570716fdb9.css +0 -1
  426. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-ce278252012297b9.css +0 -1
  427. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-d3b6d701eb8e1403.css +0 -1
  428. package/dist/dash/standalone/static/assets/dash-param-org-bcfa3de29341d5ba.css +0 -1
  429. package/dist/dash/standalone/static/assets/dash-param-org-operator-b7bc6447cc27c9ce.css +0 -1
  430. package/dist/dash/standalone/static/assets/dash-param-org-settings-6d6902345d88a687.css +0 -1
  431. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-85c7af9a89eef06e.css +0 -1
  432. package/dist/dash/standalone/static/assets/dash-param-org-setup-173efecd7b990c2e.css +0 -1
  433. package/dist/dash/standalone/static/assets/dash-param-org-tasks-ae0bc03f468e63cc.css +0 -1
  434. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-7325d8cff5be3592.css +0 -1
  435. package/dist/dash/standalone/static/assets/dash-param-org-usage-517b2a7ae462ac57.css +0 -1
  436. package/dist/dash/standalone/static/assets/global-87e1762113874559.css +0 -1
  437. package/dist/dash/standalone/static/assets/pnext-client-05df74b071ddb0b3.js +0 -1
  438. package/dist/dash/standalone/static/assets/pnext-client-2c19cca257f78ae6.js +0 -1
  439. package/dist/dash/standalone/static/assets/pnext-client-2db05dfa62642a65.js +0 -1
  440. package/dist/dash/standalone/static/assets/pnext-client-36b0d6085a073880.js +0 -1
  441. package/dist/dash/standalone/static/assets/pnext-client-576c06599e241231.js +0 -1
  442. package/dist/dash/standalone/static/assets/pnext-client-6aa0f19a30d58d63.js +0 -1
  443. package/dist/dash/standalone/static/assets/pnext-client-6b30b71f452f2f07.js +0 -1
  444. package/dist/dash/standalone/static/assets/pnext-client-6ccb4d4fff812db3.js +0 -1
  445. package/dist/dash/standalone/static/assets/pnext-client-74eb465defba421e.js +0 -1
  446. package/dist/dash/standalone/static/assets/pnext-client-8c692d12b2fd90d6.js +0 -1
  447. package/dist/dash/standalone/static/assets/pnext-client-92e17d39063a9ced.js +0 -1
  448. package/dist/dash/standalone/static/assets/pnext-client-93246aea268c2682.js +0 -1
  449. package/dist/dash/standalone/static/assets/pnext-client-9954dcbc0c579e0d.js +0 -1
  450. package/dist/dash/standalone/static/assets/pnext-client-c0dfa1cdde9a9855.js +0 -1
  451. package/dist/dash/standalone/static/assets/pnext-client-c28d38d4aafd4af6.js +0 -1
  452. package/dist/dash/standalone/static/assets/pnext-client-c2c30dcb6dc31d60.js +0 -1
  453. package/dist/dash/standalone/static/assets/pnext-client-dbf741073e11eac0.js +0 -1
  454. package/dist/dash/standalone/static/assets/pnext-client-e29194a27280333f.js +0 -1
  455. package/dist/dash/standalone/static/assets/pnext-client-f8a7e692b27caad9.js +0 -1
  456. package/dist/dash/standalone/static/assets/pnext-client-fc5b8cfcba2a9f63.js +0 -1
  457. package/dist/discover-CPZdprlQ.js +0 -1
  458. package/dist/dist-node-Bv1kCqyi.js +0 -20
  459. package/dist/docs-x-l7gjFE.js +0 -2
  460. package/dist/drive-Y-ZlgiUW.js +0 -1
  461. package/dist/env-B9JG6gwo.js +0 -1
  462. package/dist/errors-XBA-Ls4n.js +0 -10
  463. package/dist/exec-iFssTO5V.js +0 -3
  464. package/dist/executor-Dt2FFT-y.js +0 -11
  465. package/dist/http-BZfjbiov.js +0 -1
  466. package/dist/integrations-DyInAa5g.js +0 -2
  467. package/dist/load-zhcrwSRF.js +0 -2
  468. package/dist/local-D55UkW93.js +0 -5
  469. package/dist/log-view-CL3_S0IQ.js +0 -3
  470. package/dist/maintenance-BfxcatXH.js +0 -1
  471. package/dist/match-Bq4sDuCy.js +0 -1
  472. package/dist/mcp-Bta09QCU.js +0 -13
  473. package/dist/mcp-CUITALl1.js +0 -1
  474. package/dist/models-C1O2DrXx.js +0 -1
  475. package/dist/output-D95NoAA9.js +0 -16
  476. package/dist/prompt-onpyIyXK.js +0 -8
  477. package/dist/prompts-B8pKhMcu.js +0 -4
  478. package/dist/refresh-D-0K9fo3.js +0 -1
  479. package/dist/remote-CDm0YUU3.js +0 -3
  480. package/dist/runner-CTFTuaz_.js +0 -1
  481. package/dist/runners-CYTicTb7.js +0 -36
  482. package/dist/serve-Bzs_lEg-.js +0 -1
  483. package/dist/serve-CWtLyyTz.js +0 -12
  484. package/dist/serve-DE6A-rBk.js +0 -4
  485. package/dist/slack-Bo5l13Rs.js +0 -5
  486. package/dist/task-BU1JEK9X.js +0 -7
  487. package/dist/task-CPzBITsp.js +0 -1
  488. package/dist/tools-BMaKWTa6.js +0 -1
  489. package/dist/tools-CM4UCsId.js +0 -1
  490. package/dist/turn-DMvPfhb5.js +0 -3
  491. package/dist/types-D_xnfP7m.js +0 -1
  492. package/dist/views-DEdKqLm_.js +0 -5
  493. package/dist/wire-JMNPv8f6.js +0 -1
  494. package/dist/worker-BuP_Lem1.js +0 -9
  495. package/dist/worker-C1tuzq5n.js +0 -1
  496. package/dist/zod-BoqHoRCH.js +0 -1
  497. package/docs/mcp.md +0 -54
  498. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.0a735590a5412ea6.js → errors.200335e62a9d9564.js} +0 -0
  499. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.061f6006f2685f5e.css.pnext-asset.js → page.abe7a6d16eb15c41.css.pnext-asset.js} +0 -0
  500. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.c811938ae8a8f1df.css.pnext-asset.js → page.1c7947d6f79d6447.css.pnext-asset.js} +0 -0
  501. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{settings/agent-settings-form.ca926c58d15044aa.css.pnext-asset.js → platforms/platform-step.a722e3b8539a0f85.css.pnext-asset.js} +0 -0
  502. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{agent/hero.1bef5dca89b5942c.css.pnext-asset.js → [slug]/(tabs)/settings/agent-settings-form.bf5430862c505c55.css.pnext-asset.js} +0 -0
  503. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{agent/instructions.446bccc375f30eeb.css.pnext-asset.js → [slug]/platforms/[app]/@/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.db05694ed4113dab.css.pnext-asset.js} +0 -0
  504. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{editor/editor.c496247a81ed832c.css.pnext-asset.js → [slug]/platforms/[app]/app-cards.d2f5c8d620066e05.css.pnext-asset.js} +0 -0
  505. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.a4efa8d807fe5416.css.pnext-asset.js → agents/agent/hero.243d85cac1f22df2.css.pnext-asset.js} +0 -0
  506. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/@/app/dash/[org]/setup/outcome.3ad5f7ec67e5238d.css.pnext-asset.js → agents/agent/instructions.4c31196fcbf9846c.css.pnext-asset.js} +0 -0
  507. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/connections-list.46786fe36b121a43.css.pnext-asset.js → agents/editor/editor.6b9a1d5c0a490153.css.pnext-asset.js} +0 -0
  508. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/credentials-list.f7c27f170ec1e868.css.pnext-asset.js → layout.52abe52dcfa736d7.css.pnext-asset.js} +0 -0
  509. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.9927d602ebe9e7fc.css.pnext-asset.js → advanced-list.819e410e4178b328.css.pnext-asset.js} +0 -0
  510. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.8cbee173a5aff98d.css.pnext-asset.js → connections-list.87962937438296f1.css.pnext-asset.js} +0 -0
  511. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.53c7ea80b6fb734c.css.pnext-asset.js → credentials-list.973f91751525bcb6.css.pnext-asset.js} +0 -0
  512. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/[id]/task-view.57990cfd2bdf5c11.css.pnext-asset.js → settings/[tab]/list.69d1b62c4066015b.css.pnext-asset.js} +0 -0
  513. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/composer.5b8687662e1629fa.css.pnext-asset.js → settings/[tab]/models-list.efd3f5781314c1d9.css.pnext-asset.js} +0 -0
  514. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/list/tasks-list.abbbc9ace4d866e5.css.pnext-asset.js → settings/[tab]/runners-list.df35d33aba0c8b07.css.pnext-asset.js} +0 -0
  515. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.c8fd2b8b01e7077b.css.pnext-asset.js → dash/[org]/settings/model-pick.74fababc0cc0bba7.css.pnext-asset.js} +0 -0
  516. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{responsive.ebc5f7d77b4b86a0.css.pnext-asset.js → dash/[org]/tasks/[id]/task-view.aae9fa481b9015d1.css.pnext-asset.js} +0 -0
  517. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/page-head.364ec93a8e7857b3.css.pnext-asset.js → app/dash/[org]/tasks/composer.33d49ad218253703.css.pnext-asset.js} +0 -0
  518. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/task-toasts.d13d9f628e530552.css.pnext-asset.js → app/dash/[org]/tasks/list/pending-approvals.07e59a9cae7ccf29.css.pnext-asset.js} +0 -0
  519. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/badge.0cb1513f8b077560.css.pnext-asset.js → app/dash/[org]/tasks/list/tasks-list.f3737549b4696cc8.css.pnext-asset.js} +0 -0
  520. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/button.d7f4433f4e7faa80.css.pnext-asset.js → app/globals.3b53a3feaa1d72e1.css.pnext-asset.js} +0 -0
  521. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.f80288cc42f9bcae.css.pnext-asset.js → app/responsive.2979ffa0161a5afd.css.pnext-asset.js} +0 -0
  522. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/filter.b53f21acc3e2cfef.css.pnext-asset.js → frame/page-head.9fcc49ddf7119d75.css.pnext-asset.js} +0 -0
  523. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/menu.25b184f68cba7b46.css.pnext-asset.js → frame/task-toasts.682322f6f729b33e.css.pnext-asset.js} +0 -0
  524. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.9db07d368dcf5981.css.pnext-asset.js → badge.8e2a9842b28f44a6.css.pnext-asset.js} +0 -0
  525. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.0bd8652fdbc05eb0.css.pnext-asset.js → button.2b18ba19ae01e2bb.css.pnext-asset.js} +0 -0
  526. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.1e3ec9bd6008d811.css.pnext-asset.js → card.4ab7ad42a0770726.css.pnext-asset.js} +0 -0
  527. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.ca13e40ff54128d0.css.pnext-asset.js → filter.6fdff1e7355aaa0e.css.pnext-asset.js} +0 -0
  528. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.19e1ce5224a23acf.css.pnext-asset.js → menu.cd96fa0495fe0fde.css.pnext-asset.js} +0 -0
@@ -0,0 +1,9 @@
1
+ import{Ea as e,N as t,P as n,S as r,T as i,_ as a,g as o,h as s,j as c,w as l,x as u}from"./args-CJsHYWbt.js";import{n as d}from"./types-DHBqXFE2.js";import{r as f}from"./crypto-Ittsv-m4.js";import{createHash as ee,createHmac as p,randomUUID as te}from"node:crypto";const m=`https://api.github.com`;function h(e,t=`application/vnd.github+json`){return{accept:t,...e?{authorization:`Bearer ${e}`}:{},"user-agent":`coder`,"x-github-api-version":`2022-11-28`}}function ne(e,t){return e.hook.before(`request`,e=>{e.request={...e.request,fetch:t}}),e}async function g(e,t=fetch){let[{createGitHubAdapter:n},{ConsoleLogger:r}]=await Promise.all([import(`./dist-Clxdruuu.js`),import(`./dist-B5qUdWUG.js`)]);return ne(n({...typeof e==`string`?{installationToken:e}:e,apiUrl:m,webhookVerifier:()=>!1,logger:new r(`error`)}).octokit,t)}const _=e=>t=>{if(!e.includes(t.status??0))throw t},v=e=>{let[t=``,n=``]=e.split(`/`);return{owner:t,repo:n}};async function re(e,t,n,r){let i=await(await g(n)).repos.getContent({...v(e),path:t,...r?{ref:r}:{},mediaType:{format:`raw`}}).catch(_([404]));return typeof i?.data==`string`?i.data:void 0}async function ie(e,t,n,r){let i=new URL(`${m}/repos/${e}/contents/${t}`);r.ref&&i.searchParams.set(`ref`,r.ref);let a=await r.fetch(i,{headers:{...h(n),...r.etag?{"if-none-match":r.etag}:{}}});if(a.status===304)return`unchanged`;let o=a.headers.get(`etag`)??void 0;if(a.status===404)return o?{etag:o}:{};if(!a.ok)throw Error(`GitHub answered ${a.status} reading ${e}/${t}`);let s=await a.json(),c=s.type===`file`&&s.encoding===`base64`?Buffer.from(s.content??``,`base64`).toString():void 0;return{...c===void 0?{}:{text:c},...o?{etag:o}:{}}}async function ae(e,t,n){let r=await(await g(n)).repos.getCommit({...v(e),ref:t,mediaType:{format:`sha`}}).catch(_([404,422]));return r?String(r.data).trim():void 0}async function oe(e,t,n,r=`HEAD`){let i=await g(n),a=v(e),o=`${t}/`,s=await i.git.getTree({...a,tree_sha:r,recursive:`1`}).catch(_([404]));if(!s)return[];let c=[],l=e=>e.startsWith(o)&&e.slice(o.length).split(`/`).length<=22;if(!s.data.truncated)return s.data.tree.flatMap(e=>e.type===`blob`&&e.path&&l(e.path)?[e.path.slice(o.length)]:[]);let u=async(e,t=``)=>{let{data:n}=await i.git.getTree({...a,tree_sha:e});await Promise.all(n.tree.map(async e=>{let n=t?`${t}/${e.path}`:e.path;n&&(e.type===`blob`&&l(n)?c.push(n.slice(o.length)):e.type===`tree`&&e.sha&&(o.startsWith(`${n}/`)||n.startsWith(o)&&l(n))&&await u(e.sha,n))}))};return await u(r),c.sort()}async function se(e,t,n,r){let i=await(await g(n)).repos.getContent({...v(e),path:t,...r?{ref:r}:{}}).catch(_([404]));return Array.isArray(i?.data)?i.data.map(e=>e.name):[]}async function ce(e,t=fetch){let n=[];for(let r=1;;r++){let i=await t(`${m}/installation/repositories?per_page=100&page=${r}`,{headers:{...h(e),authorization:`token ${e}`},signal:AbortSignal.timeout(1e4)});if(!i.ok)throw Error(`GitHub repositories failed: ${i.status}`);let a=await i.json();if(n.push(...a.repositories.map(e=>e.full_name)),n.length>=a.total_count||a.repositories.length<100)break}return[...new Set(n)]}async function le(e,t){let{data:n}=await(await g(t)).pulls.list({...v(e),state:`open`,sort:`created`,direction:`desc`,per_page:50});return n.map(e=>({number:e.number,title:e.title,author:e.user?.login,createdAt:e.created_at}))}async function ue(e,t){let{data:n}=await(await g(t)).repos.get(v(e));return{owner:n.owner.login,name:n.name,cloneUrl:n.clone_url,defaultBranch:n.default_branch}}async function de(e,t,n,r){let i=await(await g(n,r)).repos.getCollaboratorPermissionLevel({...v(e),username:t}).catch(()=>void 0);return[`admin`,`maintain`,`write`].includes(i?.data.permission??``)}async function fe(e,t,n,r){let i=await g(t,n),a=await i.paginate(i.repos.listCollaborators,{...v(e),affiliation:`all`,per_page:100}).catch(e=>{if(e.status!==403||!r)throw e});if(a)return a.map(e=>String(e.id));let o=[];for(let{id:t,login:n}of await r()){let r=n??(await i.request(`GET /user/{account_id}`,{account_id:Number(t)}).catch(_([404])))?.data.login,a=r&&await i.repos.getCollaboratorPermissionLevel({...v(e),username:r}).catch(_([404]));a&&a.data.permission!==`none`&&String(a.data.user?.id)===t&&o.push(t)}return o}async function pe(e,t,n){let r=await g(t,n),[i=``,a=``]=e.split(`/`);return(await r.paginate(r.teams.listReposInOrg,{org:i,team_slug:a,per_page:100})).map(e=>e.full_name)}function me(e,t,n){let r=`https://github.com/${e}`;return t?`${r}/tree/${n??`HEAD`}/${t}`:r}const y={"read-only":[`read`],auto:[`read`,`write`]};function he(e,t,n,r){return{name:`github`,command:`github-mcp-server`,args:[`stdio`,`--toolsets=all`,...e.includes(`write`)?[]:[`--read-only`]],env:{GITHUB_PERSONAL_ACCESS_TOKEN:n},description:r?`On the user's token; acts as the user, in repositories both the user and this agent's GitHub App can access.`:`On the installation token; the repositories the app is installed on.`,instructions:[`issue_read reads an issue with its comments.`,`pull_request_read reads a pull request: get, get_diff, get_files, get_comments, get_reviews, get_review_comments.`].join(` `)}}function ge(e,{name:t,description:n,permissions:r,events:i,isPublic:a=!1}){let o=e.replace(/\/$/,``);return{name:t,...n?{description:n}:{},url:o,hook_attributes:{url:`${o}/hooks/github`,active:!0},redirect_url:`${o}/create/github/callback`,callback_urls:[`${o}/install/github/callback`,`${o}/connect/github/callback`],request_oauth_on_install:!0,public:a,default_permissions:r,default_events:[...new Set([...i,`repository`])]}}function _e(e,t){let n=e?`https://github.com/organizations/${encodeURIComponent(e)}/settings/apps/new`:`https://github.com/settings/apps/new`;return t?`${n}?state=${encodeURIComponent(t)}`:n}async function ve(e,t=fetch){let n=await t(`${m}/app-manifests/${encodeURIComponent(e)}/conversions`,{method:`POST`,headers:h()});if(!n.ok)throw Error(`GitHub App manifest conversion failed: ${n.status}`);let r=await n.json(),i=r.app_id??r.id;if(!i||!r.slug||!r.pem||!r.webhook_secret||!r.client_id||!r.client_secret)throw Error(`GitHub App manifest conversion response was incomplete`);return{appId:String(i),slug:r.slug,privateKey:r.pem,webhookSecret:r.webhook_secret,clientId:r.client_id,clientSecret:r.client_secret,...r.owner?.login?{owner:{login:r.owner.login,type:r.owner.type}}:{}}}const b=`https://github.com/login/oauth`,ye=e=>`${e.replace(/\/$/,``)}/install/github/callback`;function x(e){let{clientId:t,clientSecret:n}=e;if(!t||!n)throw Error(`This GitHub App has no OAuth client; create it again`);return{clientId:t,clientSecret:n}}async function be(e,t,n,r){let{clientId:i,clientSecret:a}=x(e),o=await n(`${b}/access_token`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({client_id:i,client_secret:a,...t})}),s=await o.json().catch(()=>({}));if(!o.ok||!s.access_token)throw new d(`platform-error`,s.error??String(o.status),`GitHub authorization failed: ${s.error_description??s.error??o.status}`);return{accessToken:s.access_token,...s.refresh_token?{refreshToken:s.refresh_token}:{},...s.expires_in?{expiresAt:r+s.expires_in*1e3}:{}}}async function xe(e,t){let n=await t(`${m}/user`,{headers:h(e)}),r=await n.json().catch(()=>({}));if(!n.ok||!r.id||!r.login)throw Error(`GitHub user lookup failed: ${n.status}`);return{id:r.id,login:r.login}}async function Se(e,t,n,r=fetch){for(let i=1;i<=10;i++){let a=await r(`${m}/user/installations?per_page=100&page=${i}`,{headers:h(e)});if(!a.ok)throw Error(`GitHub installation check failed: ${a.status}`);let o=(await a.json()).installations??[],s=o.find(e=>String(e.id)===n&&String(e.app_id)===t);if(s)return{login:s.account?.login??`unknown`,...s.account?.type?{type:s.account.type}:{}};if(o.length<100)return}}async function S(e){let{createAppAuth:t}=await import(`./dist-node-B8VIVzUc.js`),{token:n}=await t({appId:e.appId,privateKey:e.privateKey})({type:`app`});return n}async function Ce(e,t,n=fetch){let r=await S(e),i=await n(`${m}/app/installations/${encodeURIComponent(t)}`,{headers:h(r)});if(i.status===404)return!1;if(!i.ok)throw Error(`GitHub installation lookup failed: ${i.status}`);return!0}async function we(e,t,n,r){let i=new URL(e.url).searchParams.get(`code`);if(!i)throw new d(`missing-code`);let a=await be(t,{code:i,...n?{redirect_uri:n}:{}},r,Date.now()),o=await xe(a.accessToken,r);return{id:String(o.id),login:o.login,token:JSON.stringify(a),accessToken:a.accessToken}}const Te={authorizeUrl(e,{publicUrl:t,state:n}){let r=new URLSearchParams({client_id:x(e).clientId,redirect_uri:`${t.replace(/\/$/,``)}/connect/github/callback`,state:n});return`${b}/authorize?${r}`},async exchange(e,t,{publicUrl:n,fetch:r}){let{accessToken:i,...a}=await we(e,t,`${n.replace(/\/$/,``)}/connect/github/callback`,r);return a},async access(e,t,{fetch:n,now:r,force:i}){let a=JSON.parse(e);if(!a.refreshToken){if(i)throw new d(`platform-error`,`invalid_token`,`The refused token has no refresh token`);return{accessToken:a.accessToken}}if(!i&&(!a.expiresAt||a.expiresAt-3e5>r))return{accessToken:a.accessToken};let o=await be(t,{grant_type:`refresh_token`,refresh_token:a.refreshToken},n,r);return{accessToken:o.accessToken,refreshed:JSON.stringify(o)}}};function Ee(e){return Array.isArray(e)?e.every(e=>y[`read-only`].includes(e))?`read-only`:`auto`:e}const De={"read-only":{metadata:`read`,contents:`read`,pull_requests:`write`,issues:`write`},auto:{metadata:`read`,contents:`write`,pull_requests:`write`,issues:`write`}};function C(e=`auto`){return{...De[Ee(e)]}}const w={pull_request:[`pull_request`],issue:[`issues`],comment:[`issue_comment`,`pull_request_review_comment`],mention:[`issue_comment`,`pull_request_review_comment`]},Oe=[`member`,`membership`,`organization`,`team`];function ke(e){return[...new Set([...e.flatMap(e=>w[e]??[]),`push`,`repository`,...Oe])]}function T(e,t,n){let{events:r}=t;return ge(e,{name:t.name,description:t.description,permissions:{...C(t.access),...r.some(e=>Object.hasOwn(w,e))?{issues:`write`,pull_requests:`write`}:{},members:`read`},events:ke(r),isPublic:n})}const E=(e,t)=>t?.type===`Organization`?`https://github.com/organizations/${encodeURIComponent(t.login)}/settings/apps/${e}`:`https://github.com/settings/apps/${e}`,Ae={read:1,write:2,admin:3},je={read:`Read-only`,write:`Read and write`,admin:`Admin`},D=e=>e[0].toUpperCase()+e.slice(1).replaceAll(`_`,` `);async function Me(e,t,{publicUrl:n,spec:r,fetch:i}){let a=await i(`${m}/app`,{headers:h(await S(t))});if(!a.ok)throw Error(`GitHub app lookup failed: ${a.status}`);let o=await a.json(),s=T(n,r),c=new Set(o.events??[]),l=o.permissions??{},u=[],d=s.description??``;d!==(o.description??``)&&u.push(d?{text:`Set the **Description**`,copy:d}:{text:`Clear the **Description**`});for(let[e,t]of Object.entries(s.default_permissions))(Ae[l[e]??``]??0)<(Ae[t]??0)&&u.push({text:`Set **${D(e)}** to **${je[t]??t}**`});for(let e of s.default_events)c.has(e)||u.push({text:`Check the **${D(e)}** event`});for(let e of c)s.default_events.includes(e)||u.push({text:`Uncheck the **${D(e)}** event`});let f=o.owner?.login?{login:o.owner.login,type:o.owner.type}:t.owner;return{url:`${E(o.slug??t.slug,f)}/permissions`,label:`Open app settings`,lines:u}}const Ne={shareable:!0,postOrigins:[`https://github.com`],createPost({publicUrl:e,spec:t,state:n,owner:r,public:i}){let a=T(e,t,i===!0);return{url:_e(r,n),fields:{manifest:JSON.stringify(a)}}},async createCallback(e,{fetch:t}){let n=new URL(e.url).searchParams.get(`code`);if(!n)throw new d(`missing-code`);let r=await ve(n,t),i={appId:r.appId,slug:r.slug,privateKey:r.privateKey,webhookSecret:r.webhookSecret,clientId:r.clientId,clientSecret:r.clientSecret,...r.owner?{owner:r.owner}:{}};return{platformAppId:r.appId,name:r.slug,credentials:i}},accountUrl:({login:e})=>`https://github.com/${encodeURIComponent(e)}`,async uninstall(e,t,{fetch:n}){let r=e.id.split(`:`).pop(),i=await n(`${m}/app/installations/${encodeURIComponent(r)}`,{method:`DELETE`,headers:h(await S(t))});if(!i.ok)throw Error(`GitHub answered ${i.status} to the uninstall`)},installationUrl:({id:e,account:t})=>t.type===`Organization`?`https://github.com/organizations/${encodeURIComponent(t.login)}/settings/installations/${e.split(`:`).pop()}`:`https://github.com/settings/installations/${e.split(`:`).pop()}`,settingsUrl(e,t){let{slug:n,owner:r}=t;return r?E(n,r):void 0},drift:(e,t,n)=>Me(e,t,n),installUrl(e,t,{publicUrl:n,state:r,installation:i}){let{slug:a}=t;if(!i)return`https://github.com/apps/${a}/installations/new?state=${encodeURIComponent(r)}`;let o=new URLSearchParams({client_id:x(t).clientId,redirect_uri:ye(n),state:r});return`${b}/authorize?${o}`},async installedApp(e,{apps:t,fetch:n}){let r=new URL(e.url).searchParams.get(`installation_id`);if(!(!r||!/^\d+$/.test(r))){for(let{app:e,credentials:i}of t)if(await Ce(i,r,n).catch(t=>(console.error(`asking GitHub whether ${e.id} owns installation ${r} failed`,t),!1)))return{app:e,installation:r}}},async installCallback(e,{credentials:t,publicUrl:n,fetch:r,installation:i}){let a=i??new URL(e.url).searchParams.get(`installation_id`);if(!a)throw new d(`missing-code`);let{accessToken:o,...s}=await we(e,t,i?ye(n):void 0,r),c=await Se(o,t.appId,a,r);if(!c)throw new d(`not-yours`);return{platformInstallId:a,account:c,installer:s.id,user:s}}};async function Pe(e,t,n={},r){let{token:i,expiresAt:a}=await(await g({appId:e.appId,privateKey:e.privateKey,installationId:Number(t)},r)).auth({type:`installation`,installationId:t,...n.permissions?{permissions:n.permissions}:{}});return{token:i,expiresAt:Date.parse(a)}}function Fe(e,t){let{appId:n,privateKey:r}=e,{permissions:i}=Ie(t);return ee(`sha256`).update(JSON.stringify([n,r,i?Object.entries(i).sort():null])).digest(`base64url`)}function Ie(e={}){return e.tools?{permissions:C(e.tools)}:{}}const Le=async(e,t,n,{fetch:r,hold:i}={})=>{let a=()=>Pe(t,e.id.split(`:`).pop(),Ie(n),r);return i?i(Fe(t,n),a):(await a()).token};function O(e){return e&&typeof e==`object`?e:{}}function k(e){return e?.agent===!0||e?.type===`Bot`||e?.login?.endsWith(`[bot]`)===!0}function Re(e,t){return[e,t].filter(e=>!!e).join(`
2
+
3
+ `)}const ze=(e,t)=>RegExp(`(^|[^\\w-])@${t}(?![\\w-])`,`i`).test(e),Be=[`OWNER`,`MEMBER`],Ve=[`issue_comment`,`pull_request_review_comment`],He=[...Ve,`ping`];function A(e){try{return JSON.parse(e)}catch{return}}function Ue(e,t,n){if(!n||!t?.startsWith(`sha256=`))return!1;let r=Buffer.from(p(`sha256`,n).update(e).digest(`hex`),`hex`);return f(Buffer.from(t.slice(7),`hex`),r)}function We(e,t,n,r,i){let a=n.installation?.id,o=M(n),s=i.user??n.sender;if(a===void 0||!o||!i.number)return;let c=s?.author_association;return{integration:`github`,type:r,appId:t.id,installationId:String(a),deliveryId:e.headers.get(`x-github-delivery`)??``,actor:{id:String(s?.id??s?.login??``),...s?.login?{login:s.login}:{},...c?{role:c}:{},...k(s)?{agent:!0}:{}},text:i.body??``,...ze(i.body??``,i.slug)?{mentioned:!0}:{},repo:o,space:j(n),chat:{thread:N(`${o.owner}/${o.name}`,i.number,i.kind===`pull`)}}}function j(e){let t=e.repository;if(!(!t?.owner?.login||!t.name))return{kind:`repository`,id:`${t.owner.login}/${t.name}`,...typeof t.private==`boolean`?{private:t.private}:{}}}function Ge(e){let t=e,n=j(t),r=t.installation?.id;if(!(!n||r===void 0)&&(t.action===`privatized`||t.action===`publicized`))return{installation:String(r),space:{...n,private:t.action===`privatized`}}}function Ke(e){let t=O(e),n=j(t),r=t.installation?.id,i=t.member?.id;if(!(!n||r===void 0||i===void 0)&&[`added`,`edited`,`removed`].includes(t.action??``))return{installation:String(r),space:{kind:n.kind,id:n.id},...t.action===`removed`?{left:String(i)}:{joined:String(i)}}}function qe(e,t){let n=O(t),r=n.installation?.id,i=n.organization?.login;if(r===void 0||!i)return;let a=String(r),o=n.team?.slug?`${i}/${n.team.slug}`:void 0,s=n.repository?.full_name,c=n.action??``;if(e===`membership`&&n.scope===`team`&&o)return{installation:a,team:o};if(e===`team`&&[`added_to_repository`,`removed_from_repository`].includes(c))return s?{installation:a,spaces:[s]}:o?{installation:a,team:o}:void 0;if(e===`team`&&c===`deleted`||e===`organization`&&[`member_added`,`member_removed`].includes(c))return{installation:a}}function M(e){let t=e.repository;return t?.owner?.login&&t.name&&t.clone_url&&t.default_branch?{owner:t.owner.login,name:t.name,cloneUrl:t.clone_url,defaultBranch:t.default_branch}:void 0}function N(e,t,n){return{_type:`chat:Thread`,adapterName:`github`,channelId:`github:${e}`,id:`github:${e}:${n?``:`issue:`}${t}`,isDM:!1}}function Je(e,t,n,r){let i=O(t),a=e.headers.get(`x-github-event`);if(a===`pull_request`){let t=i.pull_request,a=i.action??``,o=i.requested_reviewer?.login?.toLowerCase();if(!t||![`opened`,`synchronize`,`reopened`,`ready_for_review`,`review_requested`].includes(a)||a===`review_requested`&&o!==`${r.slug}[bot]`.toLowerCase()||t.draft||a!==`review_requested`&&k(t.user)||!t.number||t.head?.repo?.full_name!==i.repository?.full_name)return[];let s=We(e,n,i,`pull_request`,{user:i.sender??t.user,body:Re(t.title,t.body),number:t.number,kind:`pull`,slug:r.slug});return s?[s]:[]}if(a===`issues`){let t=i.issue;if(!t||![`opened`,`edited`].includes(i.action??``)||k(i.sender??t.user)||!t.number)return[];let a=We(e,n,i,`issue`,{user:i.sender??t.user,body:Re(t.title,t.body),number:t.number,slug:r.slug});return a?[a]:[]}return[]}const Ye={installation:[`created`,`deleted`,`suspend`,`unsuspend`,`new_permissions_accepted`],installation_repositories:[`added`,`removed`],repository:[`created`,`deleted`,`renamed`]};function Xe(e,t,n){let r=O(t),i=r.installation?.id,a=r.action;if(i===void 0||!Ye[e??``]?.includes(a??``))return;let o=r.installation?.account,s=Date.now(),c=e===`installation`&&(a===`deleted`||a===`suspend`);return{op:c?`delete`:`upsert`,...e===`repository`&&r.repository?.full_name?{repos:{add:a===`created`||a===`renamed`?[r.repository.full_name]:[],remove:a===`deleted`?[r.repository.full_name]:a===`renamed`&&r.changes?.repository?.name?.from?[`${r.repository.full_name.split(`/`)[0]}/${r.changes.repository.name.from}`]:[]}}:{},...e===`installation_repositories`?{repos:{...r.repository_selection&&(a===`removed`?!r.repositories_removed?.length:!r.repositories_added?.length)?{refresh:!0}:{},add:(r.repositories_added??[]).flatMap(e=>e.full_name?[e.full_name]:[]),remove:(r.repositories_removed??[]).flatMap(e=>e.full_name?[e.full_name]:[])}}:{},installation:{integration:`github`,...e===`installation`&&a===`deleted`?{uninstalled:!0}:{},id:`${n.id}:${i}`,app:n.id,account:{login:o?.login??r.repository?.owner?.login??`unknown`,...o?.type?{type:o.type}:{}},createdAt:s,...r.repositories?{repos:r.repositories.flatMap(e=>e.full_name?[e.full_name]:[])}:{},...c?{deletedAt:s}:{}}}}function Ze(e,t){let n=O(e),r=n.repository?.full_name,i=n.ref?.startsWith(`refs/heads/`)&&n.ref.slice(11);if(!r||!i)return;let a=n.installation?.id,o=n.commits??[],s=o.flatMap(e=>[...e.added??[],...e.modified??[],...e.removed??[]]);return{...a===void 0?{}:{installation:`${t.id}:${a}`},repo:r,branch:i,...n.after?{commit:n.after}:{},...n.repository?.default_branch?{defaultBranch:n.repository.default_branch}:{},paths:[...new Set(s)],...!o.length||o.length>=2048?{partial:!0}:{}}}function Qe(e,t){let n=e.headers.get(`x-github-hook-installation-target-id`);if(!n)return;let r=O(A(t)),i=M(r),a=j(r),o=r.issue?r.issue.comments:r.comment&&r.comment.in_reply_to_id===void 0?0:void 0;return{app:n,...r.installation?.id===void 0?{}:{installation:String(r.installation.id)},...i?{repo:i}:{},...a?{space:a}:{},...o===void 0?{}:{index:o}}}function $e(e,t,n,r){let i=e.headers.get(`x-github-event`);if(!i||He.includes(i))return;let{webhookSecret:a,slug:o}=r;if(!Ue(t,e.headers.get(`x-hub-signature-256`),a))return{invalid:!0};let s=A(t),c=i===`repository`?Ge(s):i===`member`?Ke(s):void 0;if(c)return{space:c};let l=qe(i,s);if(l)return{members:l};let u=Xe(i,s,n);if(u)return{installation:u};let d=i===`push`?Ze(s,n):void 0;return d?{push:d}:{events:Je(e,s,n,{slug:o})}}function et(e,t,n){let r=n.raw.comment?.author_association;return{type:e===`mention`&&!Be.includes(r??``)?`comment`:e,actor:{id:n.author.userId,login:n.author.userName,...r?{role:r}:{}}}}function tt(e){let t=/^github:([^:]+):(issue:)?(\d+)(?::rc:(\d+))?(?::|$)/.exec(e.chat?.thread.id??``);return t?`https://github.com/${t[1]}/${t[2]?`issues`:`pull`}/${t[3]}${t[4]?`#discussion_r${t[4]}`:``}`:void 0}const P=864e5,F=e=>`github:typing:${e}`;function nt(e){let t=/^github:[^:]+:(\d+)(?::|$)/.exec(e.chat?.thread.id??``);return t?Number(t[1]):void 0}async function rt(e){let[{GitHubAdapter:t},{ConsoleLogger:n}]=await Promise.all([import(`./dist-Clxdruuu.js`),import(`./dist-B5qUdWUG.js`)]);class r extends t{async handleWebhook(e,t){let n=e.headers.get(`x-github-event`)??``,r=await e.clone().text(),i=A(r);if(!Ve.includes(n)||i?.action!==`edited`||!this.chat)return super.handleWebhook(e,t);if(!await this.webhookVerifier?.(e,r))return new Response(`Invalid signature`,{status:401});let{comment:a,repository:o}=i,s={owner:o.owner.login,repo:o.name},c;if(n===`issue_comment`){let{number:e,pull_request:t}=i.issue,n=t?`pr`:`issue`,r=this.encodeThreadId({...s,prNumber:e,type:n});c=this.parseIssueComment(a,o,e,r,n)}else{let{number:e}=i.pull_request,t=a.in_reply_to_id??a.id,n=this.encodeThreadId({...s,prNumber:e,reviewCommentId:t});c=this.parseReviewComment(a,o,e,n)}return this.chat.processMessageUpdated({adapter:this,threadId:c.threadId,message:c},t),new Response(`ok`,{status:200})}reactions(e,t){let{owner:n,repo:r,prNumber:i,reviewCommentId:a}=this.decodeThreadId(e),o=`/repos/${n}/${r}`;return{owner:n,repo:r,path:t?`${o}/${a?`pulls`:`issues`}/comments/${t}/reactions`:`${o}/issues/${i}/reactions`}}async startTyping(e,t,n){let{owner:r,repo:i,path:a}=this.reactions(e,n?.messageId),{status:o,data:s}=await(await this.getOctokitForThread(r,i)).request(`POST ${a}`,{content:`eyes`});o===201&&await this.chat?.getState().appendToList(F(e),{path:a,id:s.id},{ttlMs:P})}async endTyping(e){let t=this.chat?.getState(),n=await t?.getList(F(e))??[];if(!n.length)return;await t.delete(F(e));let{owner:r,repo:i}=this.reactions(e),a=await this.getOctokitForThread(r,i);await Promise.all(n.map(({path:e,id:t})=>a.request(`DELETE ${e}/${t}`)))}async addReaction(e,t,n){await super.addReaction(e,t,n);let r=this.chat?.getState();if(this.emojiToGitHubReaction(n)!==`eyes`||!r)return;let{path:i}=this.reactions(e,t),a=await r.getList(F(e));if(a.some(e=>e.path===i)){await r.delete(F(e));for(let t of a.filter(e=>e.path!==i))await r.appendToList(F(e),t,{ttlMs:P})}}}let i=e.credentials?.webhookSecret,a=e.installationId,o,s=new r({userName:e.name,apiUrl:`https://api.github.com`,botUserId:0,installationToken:()=>a?o??=e.token(a,{tools:y[`read-only`]}):Promise.reject(Error(`The webhook names no GitHub installation`)),webhookVerifier:(e,t)=>Ue(t,e.headers.get(`x-hub-signature-256`),i),logger:new n(`error`)});return ne(s.octokit,e.fetch),s}const it={id:`github`,brand:{color:`#000000`,icon:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`,dark:`#fff`,svg:`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 98 96" fill="none" style="color:light-dark(#000,#fff)"><g clip-path="url(#github-mark-4)"><path d="M 41.44 69.38 C 28.81 67.85 19.91 58.76 19.91 46.99 C 19.91 42.21 21.63 37.04 24.5 33.59 C 23.26 30.43 23.45 23.73 24.88 20.96 C 28.71 20.48 33.88 22.49 36.94 25.27 C 40.58 24.12 44.41 23.54 49.1 23.54 C 53.79 23.54 57.61 24.12 61.06 25.17 C 64.03 22.49 69.29 20.48 73.12 20.96 C 74.46 23.54 74.65 30.24 73.4 33.5 C 76.47 37.13 78.09 42.01 78.09 46.99 C 78.09 58.76 69.19 67.66 56.37 69.29 C 59.62 71.39 61.82 75.99 61.82 81.25 L 61.82 91.21 C 61.82 94.08 64.22 95.7 67.09 94.55 C 84.41 87.95 98 70.63 98 49.19 C 98 22.11 75.99 0 48.9 0 C 21.82 0 0 22.11 0 49.19 C 0 70.44 13.49 88.05 31.68 94.65 C 34.26 95.61 36.75 93.88 36.75 91.3 L 36.75 83.64 C 35.41 84.22 33.69 84.6 32.16 84.6 C 25.84 84.6 22.11 81.16 19.43 74.74 C 18.38 72.16 17.23 70.63 15.03 70.34 C 13.88 70.25 13.49 69.77 13.49 69.19 C 13.49 68.04 15.41 67.18 17.32 67.18 C 20.1 67.18 22.49 68.91 24.98 72.45 C 26.89 75.22 28.9 76.47 31.29 76.47 C 33.69 76.47 35.22 75.61 37.42 73.4 C 39.05 71.78 40.29 70.34 41.44 69.38 Z" fill="black" style="fill:currentColor"/></g><defs><clipPath id="github-mark-4"><rect width="98" height="96" fill="white"/></clipPath></defs></svg>`},name:`GitHub`,featured:!0,description:`Pull requests, issues, and comments on GitHub repositories`,installLabel:`Connect GitHub`,use:`Mention @{handle} in an issue or pull request.`,organizationApps:!0,publicApps:!0,prompt:[`A conversation is an issue or pull request with its comments and inline review threads; a reply goes to the thread that asked.`,"The repository is checked out on its default branch, without submodules; `git submodule update --init <path>` fetches one the work needs. Push to a pull request's branch only when it lives in this repository and changes were asked for; fork pull requests get reads and comments only.",`Replies are GitHub Markdown; cite file paths; link a pull request after changing it.`,`The review tool posts findings as inline review comments marked coder-review:fp.`].join(`
4
+ `),sample:`github:owner/repo:1`,item:e=>e.replace(/:rc:\d+$/,``),author:e=>`${e}[bot]`,events:{mention:{description:`Comment from a repo owner or org member mentioning @<agent>; text has the mention stripped.`,on:`mention`,addressed:!0},pull_request:{description:`Opened, updated, or ready non-draft pull request.`},issue:{description:`Opened or edited issue.`},comment:{description:`New non-agent issue, pull request, or inline review comment.`,on:`message`,noisy:!0}},tools:{presets:y,server:he,install:`arch=$(uname -m); [ "$arch" = aarch64 ] && arch=arm64; curl -fsSL "https://github.com/github/github-mcp-server/releases/latest/download/github-mcp-server_Linux_$arch.tar.gz" | tar -xz -C /usr/local/bin github-mcp-server`,installHosts:[`github.com`,`release-assets.githubusercontent.com`]},hosts:[`github.com`,`api.github.com`,`codeload.github.com`],collapsed:(e,t)=>`<details><summary>${e}</summary>\n\n${t}\n\n</details>`,get app(){return Ne},auth:{token:Le,get user(){return Te},canWrite:async(e,t,n)=>!!(e.repo&&e.actor.login)&&de(`${e.repo.owner}/${e.repo.name}`,e.actor.login,t,n),members:(e,t,n,r)=>fe(e.id,t,n,r),teamSpaces:pe},repos:{cloneHosts:[`github.com`],credentialUsername:`x-access-token`,readFile:re,revalidate:ie,listDir:se,tree:oe,commit:ae,list:(e,t,n)=>ce(t,n),get:ue,url:me,pullRequests:le,pullRequest:nt,pullRequestThread:(e,t)=>N(e,t,!0)},target:Qe,adapter:rt,link:tt,ownEvents:$e,event:et};async function at(e,t,n=fetch){if(!e.actor.id||!e.installationId)throw Error(`Linear event has no actor or workspace`);let r=await n(`https://api.linear.app/graphql`,{method:`POST`,headers:{authorization:`Bearer ${t}`,"content-type":`application/json`},body:JSON.stringify({query:`query WorkspaceMember($id: String!) { user(id: $id) { id active guest app organization { id } } }`,variables:{id:e.actor.id}}),redirect:`error`,signal:AbortSignal.timeout(5e3)}),i=await r.json(),a=i.data?.user;if(!r.ok||i.errors!==void 0&&(!Array.isArray(i.errors)||i.errors.length>0)||!a)throw Error(`Linear returned no valid workspace member`);return a.id===e.actor.id&&a.active===!0&&a.guest===!1&&a.app===!1&&a.organization?.id===e.installationId}async function ot(e,t,n=fetch){let r=/^linear:([^:]+)/.exec(e.chat?.thread.id??``)?.[1];if(!r)return;let i=await n(`https://api.linear.app/graphql`,{method:`POST`,headers:{authorization:`Bearer ${t}`,"content-type":`application/json`},body:JSON.stringify({query:`query IssueTeam($issue: String!) { issue(id: $issue) { team { id private visibility } } }`,variables:{issue:r}}),redirect:`error`,signal:AbortSignal.timeout(5e3)}),a=await i.json(),o=a.data?.issue?.team;if(!i.ok||Array.isArray(a.errors)&&a.errors.length||typeof o?.id!=`string`)throw Error(`Linear returned no issue team`);return{kind:`team`,id:o.id,private:o.private!==!1||o.visibility!==`public`}}async function st(e,t,n=fetch){let r=[],i;do{let a=await n(`https://api.linear.app/graphql`,{method:`POST`,headers:{authorization:`Bearer ${t}`,"content-type":`application/json`},body:JSON.stringify({query:`query TeamMembers($team: String!, $after: String) { team(id: $team) { members(first: 100, after: $after) { nodes { id } pageInfo { hasNextPage endCursor } } } }`,variables:{team:e.id,after:i}}),redirect:`error`,signal:AbortSignal.timeout(5e3)}),o=await a.json(),s=o.data?.team?.members;if(!a.ok||Array.isArray(o.errors)&&o.errors.length||!s?.nodes)throw Error(`Linear returned no team members`);r.push(...s.nodes.flatMap(e=>typeof e.id==`string`?[e.id]:[])),i=s.pageInfo?.hasNextPage?s.pageInfo.endCursor:void 0}while(i);return r}const ct={"read-only":[`read`],auto:[`read`,`write`]};function lt(e,t,n,r){return{name:`linear`,url:`https://mcp.linear.app/mcp${e.includes(`write`)?``:`/readonly`}`,headers:{Authorization:`Bearer ${n}`},credentialFields:{header:`Authorization`},description:r?`On the user's token; what the user can see.`:`On the app's token; the workspace the app is installed in.`,instructions:`get_issue reads an issue by id or identifier such as ENG-123.`}}async function ut(e,t){let n=new URLSearchParams(await e.text()),r=Object.fromEntries(t.map(e=>[e,n.get(e)?.trim()??``])),i=t.filter(e=>!r[e]);if(i.length)throw new d(`invalid-field`,i[0],`Missing ${i.join(`, `)}`);return r}async function I(e,t,n=fetch,r=Date.now()){let i=await n(e,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)}),a=await i.json().catch(()=>({}));if(!i.ok||!a.access_token)throw new d(`platform-error`,a.error??String(i.status),`${new URL(e).host} refused the token request: ${a.error_description??a.error??i.status}`);return{accessToken:a.access_token,...a.refresh_token?{refreshToken:a.refresh_token}:{},...a.expires_in?{expiresAt:r+a.expires_in*1e3}:{},...a.id_token?{idToken:a.id_token}:{}}}async function L(e,t,n,r=Date.now(),i=!1){if(!e)throw Error(`The installation has no token; connect it again`);let a=JSON.parse(e);if(!a.refreshToken){if(i)throw new d(`platform-error`,`invalid_token`,`The refused token has no refresh token`);return a.accessToken}if(!i&&(a.expiresAt??1/0)-3e5>r)return a.accessToken;let{idToken:o,...s}=await t(a.refreshToken),c={...s,refreshToken:s.refreshToken??a.refreshToken},l=await n?.(JSON.stringify(c));return l?JSON.parse(l).accessToken:c.accessToken}const R=`https://api.linear.app/oauth/token`,dt=[`clientId`,`clientSecret`,`webhookSecret`],z={Issue:`Issues`,Comment:`Comments`},B=e=>e.replace(/\/$/,``);async function V(e,t,n){let r=await n(`https://api.linear.app/graphql`,{method:`POST`,headers:{authorization:`Bearer ${e}`,"content-type":`application/json`},body:JSON.stringify({query:t})}),i=await r.json().catch(()=>({}));if(!r.ok||!i.data)throw Error(`Linear refused the query: ${r.status}`);return i.data}function H(e,t,n,r,i=!1){return`https://linear.app/oauth/authorize?${new URLSearchParams({client_id:e.clientId,redirect_uri:t,response_type:`code`,scope:r?`read,write,app:mentionable`:i?`read,write`:`read`,state:n,...r?{actor:`app`}:{}})}`}function U(e,t,n,r){let i=new URL(e.url).searchParams.get(`code`);if(!i)throw new d(`missing-code`);let{clientId:a,clientSecret:o}=t;return I(R,{grant_type:`authorization_code`,code:i,redirect_uri:n,client_id:a,client_secret:o},r)}function ft(e,t,n,r){let i=new URLSearchParams(n?{"oauth.client_name":n}:{});r&&i.set(`distribution`,`public`),i.set(`developer.name`,B(e).replace(/^https?:\/\//,``)),i.set(`oauth.client_uri`,B(e)),i.append(`oauth.redirect_uris`,`${B(e)}/install/linear/callback`),i.append(`oauth.redirect_uris`,`${B(e)}/connect/linear/callback`),i.set(`webhook.enabled`,`true`),i.set(`webhook.url`,`${B(e)}/hooks/linear?app=${t}`);for(let e of Object.keys(z))i.append(`webhook.resourceTypes`,e);return`https://linear.app/settings/api/applications/new?${i}`}const pt={shareable:!0,createStep:(e,{name:t,public:n}={},r=te())=>({intro:`Linear runs the agent as an app of your own OAuth application.`,link:ft(e,r,t,n),steps:[{text:`Open the link signed in to Linear, check the form and click **Create**.`},{text:`Copy the client ID, the client secret and the webhook signing secret into the fields below.`}],notes:[`The link fills in the name, the callback URLs and the webhook${n?`, and makes the app public so other Linear workspaces can install it`:``}.`,...n?[]:[`To install the app in other Linear workspaces, make it public in its Linear settings.`]],hidden:{key:r},fields:[{name:`clientId`,label:`Client ID`,placeholder:`9f3c2a7d1e8b4c6a0d5e7f1a2b3c4d5e`,required:!0},{name:`clientSecret`,label:`Client secret`,placeholder:`4b1e9c7a2d0f8e3c5a6b9d1f0e2c4a7b`,required:!0},{name:`webhookSecret`,label:`Webhook signing secret`,hint:`shown with the webhook settings`,placeholder:`lin_wh_…`,required:!0}],submit:`Create Linear app`}),settingsUrl:()=>`https://linear.app/settings/api`,values:(e,{publicUrl:t,spec:n})=>({url:`https://linear.app/settings/api`,label:`Open application`,lines:[{text:`Application name`,copy:n.name},{text:`Callback URL`,copy:`${B(t)}/install/linear/callback`},{text:`Callback URL`,copy:`${B(t)}/connect/linear/callback`},{text:`Webhook URL`,copy:`${B(t)}/hooks/linear?app=${e.id.slice(e.id.indexOf(`:`)+1)}`},{text:`Webhook events`,copy:Object.values(z).join(`, `)},{text:`Reinstall the app in each workspace after saving, so people can pick it in @ mentions`}]}),async createCallback(e,{spec:t}){let{key:n,...r}=await ut(e,[...dt,`key`]);if(!/^[0-9a-f-]{36}$/.test(n))throw new d(`invalid-field`,`key`);return{platformAppId:n,name:t.name,credentials:r}},accountUrl:({login:e})=>`https://linear.app/${encodeURIComponent(e)}`,async uninstall(e,t,{fetch:n}){if(!e.token)throw Error(`The installation has no token`);let{accessToken:r,refreshToken:i}=JSON.parse(e.token),a=await n(`https://api.linear.app/oauth/revoke`,{method:`POST`,headers:{"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(i?{token:i,token_type_hint:`refresh_token`}:{token:r,token_type_hint:`access_token`})});if(!a.ok)throw Error(`Linear answered ${a.status} to the revoke`)},installationUrl:()=>`https://linear.app/settings/applications`,installUrl(e,t,{publicUrl:n,state:r}){return H(t,`${B(n)}/install/linear/callback`,r,!0)},async installCallback(e,{credentials:t,publicUrl:n,fetch:r}){let{idToken:i,...a}=await U(e,t,`${B(n)}/install/linear/callback`,r),{organization:o,viewer:s}=await V(a.accessToken,`query { organization { id name urlKey } viewer { id } }`,r);return{platformInstallId:o.id,account:{login:o.urlKey},token:JSON.stringify(a),self:s.id}}},mt={authorizeUrl:(e,{publicUrl:t,state:n,access:r})=>H(e,`${B(t)}/connect/linear/callback`,n,!1,!!r),async exchange(e,t,{publicUrl:n,fetch:r,access:i}){let{idToken:a,...o}=await U(e,t,`${B(n)}/connect/linear/callback`,r),{viewer:s}=await V(o.accessToken,`query { viewer { id displayName } }`,r);return{id:s.id,login:s.displayName,...i?{token:JSON.stringify(o)}:{}}},async access(e,t,{fetch:n,now:r,force:i}){let{clientId:a,clientSecret:o}=t,s;return{accessToken:await L(e,e=>I(R,{grant_type:`refresh_token`,refresh_token:e,client_id:a,client_secret:o},n,r),async e=>{s=e},r,i),...s?{refreshed:s}:{}}}};function ht(e,t,n,r){let{clientId:i,clientSecret:a}=t;return L(e.token,e=>I(R,{grant_type:`refresh_token`,refresh_token:e,client_id:i,client_secret:a},r),n)}const W=864e5,G=e=>`linear:typing:${e}`;function gt(e,t,n,r=Date.now()){if(!n||!t)return!1;let i=p(`sha256`,n).update(e).digest();if(!f(Buffer.from(t,`hex`),i))return!1;let a=JSON.parse(e).webhookTimestamp;return typeof a==`number`&&Math.abs(r-a)<=6e4}function _t(e,t){let n=new URL(e.url).searchParams.get(`app`),r;try{r=JSON.parse(t)}catch{return}let i=r.organizationId,a=r.data?.issue,o=a?.teamId??a?.team?.id;return n&&typeof i==`string`?{app:n,installation:i,...r.type===`Comment`?{space:{kind:`team`,id:typeof o==`string`?o:``}}:{}}:void 0}const vt=(e,t)=>RegExp(`(^|[^\\w-])@${t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}(?![\\w-])`,`i`).test(e);function yt(e,t){let n=(e.labels??[]).filter(e=>t.labelIds&&e.id&&!t.labelIds.includes(e.id));return[`stateId`in t&&e.state?.name&&`Moved to ${e.state.name}`,n.length>0&&`Labeled ${n.map(e=>e.name).join(`, `)}`,`priority`in t&&e.priorityLabel&&`Priority ${e.priorityLabel}`,`assigneeId`in t&&(e.assignee?.name?`Assigned to ${e.assignee.name}`:`Unassigned`),(`title`in t||`description`in t)&&`Edited`].filter(e=>!!e)}function bt(e,t,n){let r=t.data;if(t.type!==`Issue`||t.actor?.type!==`user`||!t.actor.id||!r?.id||r.botActor||!t.organizationId)return;let i=[r.title,r.description].filter(Boolean).join(`
5
+
6
+ `),a=t.action===`update`&&t.updatedFrom?yt(r,t.updatedFrom):[],o=t.action===`create`?i:a.length?`${a.join(`
7
+ `)}\n\n${i}`:``;if(!o)return;let s={_type:`chat:Thread`,adapterName:`linear`,channelId:`linear:${r.id}`,id:`linear:${r.id}`,isDM:!1};return{integration:`linear`,type:`issue`,appId:n.id,installationId:t.organizationId,deliveryId:e.headers.get(`linear-delivery`)??``,actor:{id:t.actor.id,...t.actor.name?{login:t.actor.name}:{}},text:o,...t.action===`create`&&vt(i,n.name)?{mentioned:!0}:{},...r.teamId?{space:{kind:`team`,id:r.teamId}}:{},chat:{thread:s}}}function xt(e,t,n,r){let i=JSON.parse(t);if(i.type===`Comment`)return;let a=r.webhookSecret;if(!gt(t,e.headers.get(`linear-signature`),a))return{invalid:!0};if(i.type===`OAuthApp`)return i.action===`revoked`&&i.organizationId&&i.oauthClientId===n.id.slice(7)?{uninstalled:`${n.id}:${i.organizationId}`}:{invalid:!0};let o=bt(e,i,n);return o?{events:[o]}:{ack:!0}}async function St(e){let[{LinearAdapter:t},{ConsoleLogger:n,defaultEmojiResolver:r}]=await Promise.all([import(`./dist-DX0JzVC6.js`),import(`./dist-B5qUdWUG.js`)]);class i extends t{organization;installedSelf;saveSelf;constructor(e,t,n,r){super(e),this.organization=t,this.installedSelf=n,this.saveSelf=r}async initialize(e){this.chat=e}async resolveConnectIdentity(){let e=this.organization&&await this.installedSelf?.(this.organization);if(!e){await super.resolveConnectIdentity(),this.defaultBotUserId&&this.defaultOrganizationId===this.organization&&await this.saveSelf?.(this.organization,this.defaultBotUserId);return}this.defaultBotUserId=e,this.defaultOrganizationId=this.organization}async handle(){let e=this.chat.getState(),t=`linear:handle:${this.botUserId}`,n=await e.get(t);if(n)return n;let{displayName:r}=await this.getClient().user(this.botUserId);return await e.set(t,r,W),r}async onCommentEvent(e,t){let{data:n}=e,r=this.chat,i=e.action===`update`;if(!i&&e.action!==`create`||!r||!n.issueId||!n.user)return;let{issueId:a,user:o}=n;await this.withWebhookInstallation(e.organizationId,async()=>{let s=(/@|\/profiles\//.test(n.body)?await this.handle().catch(e=>{console.error(`coder server: could not read the Linear app user`,e)}):void 0)?.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),c=s&&RegExp(`https://linear\\.app/[^/\\s]+/profiles/${s}(?![\\w-])|(?<![\\w-])@${s}(?![\\w-])`,`gi`),l=c?n.body.replace(c,`@${this.userName}`):n.body,u=this.parseMessage({kind:`comment`,organizationId:e.organizationId,comment:{id:n.id,body:l,issueId:a,parentId:n.parentId??void 0,createdAt:n.createdAt,updatedAt:n.updatedAt,url:e.url??void 0,user:{type:`user`,id:o.id,displayName:/\/profiles\/([^/?#]+)/.exec(o.url)?.[1]??``,fullName:o.name,email:o.email,avatarUrl:o.avatarUrl??void 0}}}),d=this.encodeThreadId({issueId:a,commentId:n.parentId||n.id});i?r.processMessageUpdated({adapter:this,threadId:d,message:u},t):r.processMessage(this,d,u,t)})}bound(e){return this.requestContext.getStore()?e():this.organization?this.withInstallation(this.organization,e):Promise.reject(Error(`No Linear workspace to post for`))}postMessage(e,t){return this.bound(()=>super.postMessage(e,t))}editMessage(e,t,n){return this.bound(()=>super.editMessage(e,t,n))}addReaction(e,t,n){return this.bound(()=>super.addReaction(e,t,r.toGChat(n)))}startTyping(e,t,n){let{issueId:r,commentId:i}=this.decodeThreadId(e),a=n?.messageId??i;return this.bound(async()=>{await this.ensureValidToken();let{reaction:t}=await this.getClient().createReaction({...a?{commentId:a}:{issueId:r},emoji:`👀`});await this.chat?.getState().appendToList(G(e),t.id,{ttlMs:W})})}async endTyping(e){let t=this.chat?.getState(),n=await t?.getList(G(e))??[];n.length&&(await t.delete(G(e)),await this.bound(async()=>{await this.ensureValidToken(),await Promise.all(n.map(e=>this.getClient().deleteReaction(e)))}))}}let a=e.credentials?.webhookSecret,o=e.installationId;return new i({mode:`comments`,userName:e.name,apiUrl:`https://api.linear.app/graphql`,encryptionKey:``,accessToken:()=>o?e.token(o):Promise.reject(Error(`The webhook names no Linear workspace`)),webhookVerifier:(e,t)=>gt(t,e.headers.get(`linear-signature`),a),logger:new n(`error`)},o,e.installedSelf,e.saveSelf)}const Ct={id:`linear`,brand:{color:`#222326`,icon:`M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z`,svg:`<svg xmlns="http://www.w3.org/2000/svg" fill="#222326" viewBox="0 0 100 100" style="fill:light-dark(#222326,#fff)"><path d="M 1.23 61.52 c -0.22 -0.95 0.91 -1.55 1.6 -0.86 L 39.33 97.18 c 0.69 0.69 0.09 1.82 -0.86 1.6 C 20.05 94.45 5.55 79.95 1.23 61.52 Z M 0 46.89 c -0.02 0.28 0.09 0.56 0.29 0.76 L 52.35 99.71 c 0.2 0.2 0.48 0.31 0.76 0.29 2.37 -0.15 4.69 -0.46 6.96 -0.93 0.76 -0.16 1.03 -1.1 0.48 -1.65 L 2.58 39.45 c -0.55 -0.55 -1.49 -0.29 -1.65 0.48 -0.47 2.27 -0.78 4.59 -0.93 6.96 Z M 4.21 29.71 c -0.17 0.37 -0.08 0.81 0.21 1.1 l 64.78 64.78 c 0.29 0.29 0.73 0.37 1.1 0.21 1.79 -0.8 3.52 -1.69 5.19 -2.68 0.55 -0.33 0.64 -1.09 0.18 -1.54 L 8.44 24.34 c -0.45 -0.45 -1.21 -0.37 -1.54 0.18 -0.99 1.67 -1.89 3.4 -2.68 5.19 Z M 12.66 18.07 c -0.37 -0.37 -0.39 -0.96 -0.04 -1.35 C 21.78 6.46 35.11 0 49.95 0 77.59 0 100 22.41 100 50.05 c 0 14.84 -6.46 28.17 -16.72 37.34 -0.39 0.35 -0.98 0.33 -1.35 -0.04 L 12.66 18.07 Z"/></svg>`},name:`Linear`,description:`Issues and comments in a Linear workspace`,installLabel:`Connect Linear`,use:`Mention @{handle} in a comment on an issue.`,sample:`linear:2f1e6a1c-0000-4000-8000-000000000001:c:5b7d3c2a-0000-4000-8000-000000000002`,item:e=>/^linear:[^:]+/.exec(e)?.[0]??e,prompt:[`A conversation is a Linear issue; each comment thread on it is a thread, and a reply goes to the thread that asked.`,`Replies are Markdown; link pull requests and issues by full URL.`].join(`
8
+ `),events:{mention:{description:`Comment mentioning @<agent>; text has the mention stripped.`,on:`mention`,addressed:!0},issue:{description:"Issue created or changed by a person; text starts with the change, such as `Moved to In Review`."},comment:{description:`New comment by a person that does not mention the agent.`,on:`message`,noisy:!0}},tools:{presets:ct,server:lt},hosts:[`api.linear.app`,`mcp.linear.app`],get app(){return pt},auth:{canWrite:at,members:st,space:ot,token:(e,t,n,{save:r,fetch:i}={})=>ht(e,t,r,i),get user(){return mt}},target:_t,adapter:St,ownEvents:xt};function wt(e,t){let n=new Map;return(async(r,i)=>{let a=new Request(r,i);if(new URL(a.url).origin!==`https://slack.com`||new URL(a.url).pathname!==`/api/users.info`)return e(r,i);let o=new URLSearchParams(await a.clone().text()),s=a.headers.get(`authorization`)?.replace(/^Bearer /,``)??o.get(`token`),c=JSON.stringify([s,o.get(`team_id`)??t,o.get(`user`)]),l=n.get(c);return l||(l=e(r,i).then(async e=>{let t=await e.clone().json().catch(()=>void 0);return(!e.ok||t?.ok!==!0)&&n.delete(c),e}).catch(e=>{throw n.delete(c),e}),n.set(c,l)),(await l).clone()})}async function Tt(e,t,n=fetch){let r=e.account??e.installationId;if(!r||!e.actor.id)throw Error(`Slack event has no workspace or actor`);let i=await n(`https://slack.com/api/users.info`,{method:`POST`,headers:{authorization:`Bearer ${t}`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({user:e.actor.id,team_id:r}),redirect:`error`,signal:AbortSignal.timeout(5e3)}),a=await i.json(),o=a.user;if(!i.ok||a.ok!==!0||!o)throw Error(`Slack returned no valid workspace member`);return o.id===e.actor.id&&o.deleted===!1&&o.is_bot===!1&&o.is_restricted===!1&&o.is_ultra_restricted===!1&&(o.is_external===void 0||o.is_external===!1)&&(o.team_id===r||Array.isArray(o.enterprise_user?.teams)&&o.enterprise_user.teams.includes(r))}async function Et(e,t,n,r){let i=await r(`https://slack.com/api/conversations.${e}`,{method:`POST`,headers:{authorization:`Bearer ${n}`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t),redirect:`error`,signal:AbortSignal.timeout(5e3)}),a=await i.json();if(!i.ok||a.ok!==!0)throw Error(`Slack conversations.${e} failed`);return a}async function Dt(e,t,n){let{channel:r}=await Et(`info`,{channel:e},t,n);if(!r)throw Error(`Slack returned no conversation`);return r.is_private===!1&&!r.is_im&&!r.is_mpim}async function Ot(e,t,n=fetch){if(e.space)return{...e.space,private:!await Dt(e.space.id,t,n)}}async function kt(e,t,n=fetch){let r=[],i=``;do{let a=await Et(`members`,{channel:e.id,limit:`200`,...i?{cursor:i}:{}},t,n);r.push(...a.members??[]),i=a.response_metadata?.next_cursor??``}while(i);return r}function At(e){let t=e?.data?.error;return[`invalid_auth`,`account_inactive`,`token_revoked`].includes(t??``)}async function jt(e,t){let n=await e.token();if(!n)return[];let r=await e.fetch(`https://slack.com/api/conversations.replies`,{method:`POST`,headers:{authorization:`Bearer ${n}`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t),redirect:`error`,signal:AbortSignal.timeout(5e3)}),i=await r.json();if(!r.ok||i.ok!==!0)throw Error(`Slack returned no thread`);return i.messages??[]}const Mt=e=>new Date(Number(e)*1e3).toISOString();async function Nt(e,t){let n=/^slack:([^:]+):(\d+\.\d+)$/.exec(e.chat?.thread.id??``),r=e.chat?.message;if(!n||!r||e.chat?.thread.isDM)return{};let[,i,a]=n;if(t.after===void 0){if(r.id===a)return{index:0};let[e]=await jt(t,{channel:i,ts:a,limit:`1`});return e?.reply_count===void 0?{}:{index:e.reply_count}}if(t.delivered)return{};let o=t.after;return{since:(await jt(t,{channel:i,ts:a,oldest:o,limit:`1000`})).filter(e=>e.ts&&e.ts!==a&&e.ts!==r.id&&e.ts>o&&!e.bot_id).map(e=>({id:e.ts,author:e.user_profile?.display_name||e.user_profile?.real_name||e.user||``,text:e.text??``,sentAt:Mt(e.ts)}))}}const Pt={"read-only":[`read`],auto:[`read`,`write`]};function Ft(e,t,n,r){let i=!e.includes(`write`);if(r)return{name:`slack`,url:`https://mcp.slack.com/mcp`,headers:{Authorization:`Bearer ${n}`},credentialFields:{header:`Authorization`},readOnly:i,description:`On the user's token; searches and reads everything the user can see.`};let a=`/tmp/coder-slack-${te()}`;return{name:`slack`,command:`slack-mcp-server`,readOnly:i,description:`On the bot token; reads the channels the bot is in and has no search.`,instructions:[`Read: channels_list lists channels;`,`conversations_history reads a channel's or DM's messages, including messages older than the conversation history the task's history tool returns;`,`conversations_replies reads a thread's by its thread_ts.`,`A channel_id is an id such as C0123, #channel-name, or @user for a DM.`,`Write, when allowed: conversations_add_message posts to a channel or thread; the reaction tools add or remove an emoji reaction.`].join(` `),args:[`--transport`,`stdio`],env:{SLACK_MCP_XOXB_TOKEN:n,SLACK_MCP_USERS_CACHE:`${a}-users.json`,SLACK_MCP_CHANNELS_CACHE:`${a}-channels.json`,SLACK_MCP_LOG_LEVEL:`error`,SLACK_MCP_ADD_MESSAGE_TOOL:i?``:`true`,SLACK_MCP_REACTION_TOOL:i?``:`true`,SLACK_MCP_ATTACHMENT_TOOL:`true`,SLACK_MCP_MARK_TOOL:i?``:`true`},credentialFields:{env:`SLACK_MCP_XOXB_TOKEN`}}}function K(e){return e.replace(/\/$/,``)}function It(e,{name:t,description:n,scopes:r,events:i,extras:a}){let o=K(e);return{display_information:{name:t,...n?{description:n.slice(0,140)}:{}},features:{bot_user:{display_name:t,always_online:!0},app_home:{home_tab_enabled:!0,messages_tab_enabled:!0,messages_tab_read_only_enabled:!1},...a},oauth_config:{redirect_urls:[`${o}/install/slack/callback`,`${o}/connect/slack/callback`],scopes:{bot:r,user:qt}},settings:{org_deploy_enabled:!0,is_mcp_enabled:!0,event_subscriptions:{request_url:`${o}/hooks/slack`,bot_events:i},interactivity:{is_enabled:!0,request_url:`${o}/hooks/slack`}}}}async function q(e,t,n,r){let{assertSlackOk:i,callSlackApi:a}=await import(`./api-qdpx8FD0.js`),o=await a(e,t,{token:n,fetch:r});return i(e,o),o}async function Lt(e,t,n=fetch){let r=await q(`apps.manifest.create`,{manifest:JSON.stringify(t)},e,n);return{appId:r.app_id,clientId:r.credentials.client_id,clientSecret:r.credentials.client_secret,signingSecret:r.credentials.signing_secret}}const J=e=>Yt(e.access,e.events);function Y(e,t,n){return It(e,{name:t,description:n.description,scopes:J(n),events:Qt(n.events),extras:$t(n)})}async function Rt(e,t=fetch){let n=await t(`https://slack.com/api/tooling.tokens.rotate`,{method:`POST`,headers:{"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({refresh_token:e})}),r=await n.json();if(!n.ok||!r.ok||!r.token||!r.refresh_token||!r.team_id||!r.user_id)throw new d(`platform-error`,r.error??String(n.status));return{workspace:r.team_id,user:r.user_id,configToken:r.token,configRefreshToken:r.refresh_token,configTokenExpires:(r.exp??0)*1e3}}async function zt(e,t,n,r){return e.use(t,async(e,t,i)=>{let a=e;if(a.configTokenExpires<=Date.now()+6e4){try{let e=await Rt(a.configRefreshToken,n);if(e.workspace!==a.workspace||e.user!==a.user)throw Error(`Configuration token owner changed`);a=e}catch{throw await i(),new d(`invalid-field`,`token`,`This configuration token could not be refreshed. Paste a new token.`)}await t(a)}return r(a.configToken)})}function Bt(e,t,n,r=[]){let i=new URLSearchParams({client_id:e.clientId,state:n,redirect_uri:`${K(t)}/install/slack/callback`});return r.length&&i.set(`scope`,r.join(`,`)),`https://slack.com/oauth/v2/authorize?${i}`}async function Vt(e,t,n,r){let i=await r(`https://slack.com/api/oauth.v2.access`,{method:`POST`,headers:{"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams({client_id:t.clientId,client_secret:t.clientSecret,code:e,redirect_uri:n})}),a=await i.json();if(!i.ok||!a.ok)throw new d(`platform-error`,a.error??String(i.status));return a}async function Ht(e,t,n,r=fetch){let i=await Vt(e,t,`${K(n)}/install/slack/callback`,r),a=i.is_enterprise_install===!0,o=a?i.enterprise:i.team;if(!i.access_token||!o?.id||!o.name)throw new d(`platform-error`);return{id:o.id,name:o.name,org:a,accessToken:i.access_token,...i.authed_user?.id?{installer:i.authed_user.id}:{}}}const Ut=e=>`${K(e)}/connect/slack/callback`,Wt={authorizeUrl(e,{publicUrl:t,state:n}){return`https://slack.com/oauth/v2/authorize?${new URLSearchParams({client_id:e.clientId,user_scope:qt.join(`,`),redirect_uri:Ut(t),state:n})}`},async exchange(e,t,{publicUrl:n,fetch:r}){let i=new URL(e.url).searchParams.get(`code`);if(!i)throw new d(`missing-code`);let{authed_user:a}=await Vt(i,t,Ut(n),r);if(!a?.id||!a.access_token||a.token_type!==`user`)throw new d(`platform-error`);let o=await q(`auth.test`,{},a.access_token,r);if(o.user_id!==a.id)throw new d(`platform-error`,`invalid_auth`);return{id:a.id,...o.user?{login:o.user}:{},token:JSON.stringify({accessToken:a.access_token})}},async access(e,t,{force:n}){if(n)throw new d(`platform-error`,`invalid_token`,`Slack refused the user token`);return{accessToken:JSON.parse(e).accessToken}}};async function Gt(e,t){let n=[],r=``;do{let i=await q(`auth.teams.list`,{limit:1e3,...r?{cursor:r}:{}},e,t);n.push(...i.teams.map(e=>e.id)),r=i.response_metadata?.next_cursor??``}while(r);return n}const Kt={createStep:(e,t)=>{let n=t?.saved??[],r=n.length?{field:`token`,equals:`new`}:void 0;return{intro:`The Slack app is created with a configuration token and its bot installed in the token's whole workspace.`,link:`https://api.slack.com/apps`,steps:[{...r?{when:r}:{},text:`Under **Your App Configuration Tokens**, click **Generate Token** and pick the workspace the agent should join.`},{text:`Paste the refresh token below, then approve the install when Slack asks.`,...r?{when:r}:{}}],notes:[`A workspace that requires app approval sends the install to its admins first. In Enterprise Grid, only an org admin can install org-wide.`,`To install the app in other Slack workspaces, click **Activate Public Distribution** under the app's **Manage Distribution**.`],fields:[...n.length?[{name:`token`,label:`Configuration token`,options:[...n.map(({id:e,label:t})=>({value:e,label:t})),{value:`new`,label:`Paste a new token`}]}]:[],{...r?{when:r}:{},name:`refreshToken`,label:`Refresh token`,hint:`Starts with xoxe-1-.`,placeholder:`xoxe-1-…`,required:!0}],submit:`Create Slack app`}},async createCallback(e,{publicUrl:t,spec:n,fetch:r,tokens:i}){if(!i)throw Error(`Configuration token storage is unavailable`);let a=new URLSearchParams(await e.text()),o=a.get(`token`);if(!o||o===`new`){let e=a.get(`refreshToken`);if(!e)throw Error(`Missing refresh token`);if(e.startsWith(`xoxe.xoxp-`))throw new d(`invalid-field`,`access-token`,`That is the access token, xoxe.xoxp-…. Paste the refresh token next to it, which starts with xoxe-1-.`);if(!e.startsWith(`xoxe-1-`))throw new d(`invalid-field`,`refresh-token`,`That is not a refresh token; they start with xoxe-1-. Copy it from Your App Configuration Tokens.`);let t=await Rt(e,r),n={workspace:t.workspace,user:t.user,workspaceName:t.workspace,credentials:t},s=await q(`auth.test`,{},t.configToken,r).catch(()=>void 0);o=await i.put({...n,workspaceName:s?.team||n.workspaceName})}let{name:s}=n,c=await zt(i,o,r,e=>Lt(e,Y(t,s,n),r));return{platformAppId:c.appId,name:s,credentials:{...c,configTokenId:o,scopes:J(n)}}},manifest:(e,{publicUrl:t,spec:n})=>Y(t,e.name,n),async update(e,t,{publicUrl:n,spec:r,fetch:i,saveCredentials:a,tokens:o}){let s=t;if(!s.configTokenId||!o)throw new d(`no-refresh-token`);await zt(o,s.configTokenId,i,t=>q(`apps.manifest.update`,{app_id:s.appId,manifest:JSON.stringify(Y(n,e.name,r))},t,i));let c=J(r);c.join()!==s.scopes?.join()&&await a({...s,scopes:c})},settingsUrl:(e,t)=>`https://api.slack.com/apps/${encodeURIComponent(t.appId)}`,async uninstall(e,t,{fetch:n}){let{clientId:r,clientSecret:i}=t,a=await tn(e,t);await q(`apps.uninstall`,{client_id:r,client_secret:i},a,n)},installationUrl:({account:e})=>new URL(`/apps/manage`,e.url??`https://my.slack.com`).href,installUrl(e,t,{publicUrl:n,state:r}){let i=t;return Bt(i,n,r,i.scopes??Yt(`auto`))},async installCallback(e,{app:t,credentials:n,publicUrl:r,fetch:i,tokens:a}){let o=new URL(e.url).searchParams.get(`code`);if(!o)throw new d(`missing-code`);let s=await Ht(o,n,r,i),c=n.configTokenId;a&&c&&!s.org&&await a.use(c,(e,t)=>t(e,s.name));let l=await q(`auth.test`,{},s.accessToken,i).then(e=>e.url?.replace(/\/$/,``)).catch(()=>void 0),u=s.org?await Gt(s.accessToken,i).catch(()=>null):void 0;return{platformInstallId:s.id,account:{login:s.name,...s.org?{type:`Organization`}:{},...l?{url:l}:{}},token:s.accessToken,...s.org?{covers:u}:{},installer:s.installer,...s.installer?{user:{id:s.installer}}:{}}}},qt=[`search:read.public`,`search:read.private`,`search:read.mpim`,`search:read.im`,`search:read.files`,`search:read.users`,`channels:history`,`groups:history`,`mpim:history`,`im:history`,`channels:read`,`groups:read`,`mpim:read`,`im:read`,`users:read`,`users:read.email`,`files:read`,`chat:write`],Jt=[`app_mentions:read`,`channels:history`,`groups:history`,`im:history`,`channels:read`,`groups:read`,`im:read`,`mpim:read`,`users:read`,`users:read.email`,`files:read`,`usergroups:read`,`reactions:read`,`reactions:write`];function Yt(e=`auto`,t=[]){return[...Jt,...t.includes(`dm`)?[`mpim:history`]:[],`chat:write`,`files:write`,`im:write`,`assistant:write`,...(Array.isArray(e)?e.includes(`write`):e===`auto`)?[`channels:join`,`channels:manage`,`groups:write`,`mpim:write`,`usergroups:write`]:[]]}const Xt={mention:[`app_mention`,`message.channels`,`message.groups`],dm:[`message.im`,`message.mpim`],channel:[`message.channels`,`message.groups`]},Zt=[`mention`,`dm`,`channel`];function Qt(e){let t=e.some(e=>Zt.includes(e));return[...new Set([...e.flatMap(e=>Xt[e]??[]),...t?[`reaction_added`,`member_joined_channel`,`member_left_channel`]:[]]),`team_access_granted`,`team_access_revoked`,`app_uninstalled`,`tokens_revoked`,`app_home_opened`]}function $t(e){return{agent_view:{agent_description:e.description??`${e.name} in your workspace.`}}}function en(e,t,n=`send it a direct message`){let r=[t.includes(`mention`)&&`mention @${e} in a channel`,t.includes(`dm`)&&n,t.includes(`channel`)&&`write in a channel it is in`].filter(e=>!!e);if(!r.length)return;let i=r.length>1?`${r.slice(0,-1).join(`, `)}, or ${r.at(-1)}`:r[0];return`${i[0].toUpperCase()}${i.slice(1)}.`}const tn=async e=>{if(!e.token)throw Error(`Slack installation ${e.id} has no bot token`);return e.token},nn=l({type:i(c()),team_id:i(c()),enterprise_id:i(c()),is_enterprise_install:i(n([a(),c()])),api_app_id:i(c()),challenge:i(c()),authorizations:i(o(l({user_id:i(c()),team_id:i(r(c())),enterprise_id:i(r(c())),is_enterprise_install:i(a())})))}),rn=l({enterprise_id:i(c()),authorizations:i(o(l({enterprise_id:i(c())}))),event:l({type:s([`team_access_granted`,`team_access_revoked`]),team_ids:o(c())})}),an=l({type:s([`app_uninstalled`,`tokens_revoked`]),tokens:i(l({bot:i(o(c()))}))}),on=l({type:u(`app_home_opened`),user:c(),tab:u(`home`)}),sn=`link:`,cn=`click:`,ln=`ask:`,un=l({type:u(`block_actions`),actions:o(l({action_id:c()}))}),dn=l({id:c(),username:i(c()),name:i(c())}),fn=l({user:dn,channel:l({id:c()}),message:i(l({ts:c(),thread_ts:i(c())})),trigger_id:i(c()),actions:t([l({action_id:c(),value:c()})])}),pn=l({type:u(`view_submission`),user:dn,view:l({callback_id:u(`ask`),private_metadata:c(),state:l({values:l({ask:l({ask:l({value:i(r(c()))})})})})})}),mn=l({thread:c(),message:i(c()),value:c()}),hn=e=>{let t=e.username??e.name;return{id:e.id,...t?{login:t}:{}}};function gn(e){let t=fn.safeParse(e).data,n=t?.actions[0];if(!t||!n)return;let r=t.channel.id.startsWith(`D`)?t.message?.thread_ts??``:t.message?.thread_ts??t.message?.ts,i={thread:`slack:${t.channel.id}${r===void 0?``:`:${r}`}`,...t.message?{message:t.message.ts}:{}},a=t.trigger_id;if(n.action_id.startsWith(`ask:`)&&a)return{work:async e=>(await import(`./views-3TxH367C.js`)).openAsk(e,a,i,n.value)};if(n.action_id.startsWith(`click:`))return{click:{...i,value:n.value,actor:hn(t.user)}}}function _n(e){let t=pn.safeParse(e).data,n;try{n=t&&mn.safeParse(JSON.parse(t.view.private_metadata)).data}catch{return}if(!t||!n)return;let r=t.view.state.values.ask.ask.value?.trim();return{click:{...n,...r?{text:r}:{},actor:hn(t.user)}}}function vn(e){try{return JSON.parse(e)}catch{let t=new URLSearchParams(e),n=t.get(`payload`);if(!n)return Object.fromEntries(t);try{return JSON.parse(n)}catch{return{}}}}const yn=n([l({type:s([`member_joined_channel`,`member_left_channel`]),user:c(),channel:c()}),l({type:u(`message`),subtype:s([`channel_convert_to_private`,`channel_convert_to_public`]),channel:c()})]);function bn(e,t,n,r){let i=yn.safeParse(e.event).data;if(i&&n){let e={installation:n,...r?{account:r}:{}},t={kind:`channel`,id:i.channel};return i.type===`message`?{space:{...e,space:{...t,private:i.subtype===`channel_convert_to_private`}}}:{space:{...e,space:t,...i.type===`member_joined_channel`?{joined:i.user}:{left:i.user}}}}let a=an.safeParse(e.event).data;if(a){let e=a.type===`app_uninstalled`||a.tokens?.bot?.length;return n&&e?{uninstalled:`${t}:${n}`}:{ack:!0}}let o=on.safeParse(e.event).data;if(o)return{work:async e=>(await import(`./views-3TxH367C.js`)).publishHome(e,o.user)};let s=un.safeParse(e).data?.actions,c=s?.length?gn(e):void 0;if(c)return c;let l=_n(e);if(l)return l;if(s?.length&&s.every(e=>e.action_id.startsWith(`link:`)))return{ack:!0};if(e.type&&e.type!==`event_callback`&&e.type!==`url_verification`)return{unhandled:`Slack interaction ${e.type}`};let u=rn.safeParse(e).data,d=u?.enterprise_id??u?.authorizations?.[0]?.enterprise_id;if(!u||!d)return;let f=u.event.team_ids;return{covers:{installation:`${t}:${d}`,...u.event.type===`team_access_granted`?{add:f}:{remove:f}}}}function xn(e,t,n){let r=e.headers.get(`x-slack-request-timestamp`)??``;if(!n||!(Math.abs(Date.now()/1e3-Number(r))<=300))return!1;let i=`v0=${p(`sha256`,n).update(`v0:${r}:${t}`).digest(`hex`)}`;return f(e.headers.get(`x-slack-signature`)??``,i)}const Sn=e=>e===`im`||e===`mpim`?`dm`:`channel`;function Cn(e){let t=l({channel:c(),channel_type:i(c())}).safeParse(e).data;if(!t)return;let n=t.channel_type;return{kind:`channel`,id:t.channel,...n===`channel`?{private:!1}:[`group`,`im`,`mpim`].includes(n??``)?{private:!0}:{}}}function X(e,t){let n=vn(t),r=nn.safeParse(n).data;if(r?.type===`url_verification`&&r.challenge)return new Response(r.challenge);let i=r?.authorizations?.[0],a=i?.team_id??r?.team_id??n.team?.id,o=String(i?.is_enterprise_install??r?.is_enterprise_install)===`true`,s=o?i?.enterprise_id??r?.enterprise_id??n.enterprise?.id:a,c=i?.user_id,l=Cn(n.event);return r?.api_app_id?{app:r.api_app_id,...s?{installation:s}:{},...o&&a?{account:a}:{},...c?{self:c}:{},...l?{space:l}:{}}:void 0}function wn(e,t,n,r){let i=X(e,t),a=i&&!(i instanceof Response)?i:void 0,o=bn(vn(t),n.id,a?.installation,a?.account);if(o)return xn(e,t,r?.signingSecret)?o:{invalid:!0}}function Tn(e,t,n){let r=n.raw.channel_type;return{type:t.isDM?`dm`:e===`mention`?e:Sn(r),actor:{id:n.author.userId,...n.author.userName?{login:n.author.userName}:{}}}}function En(e){let t=/^slack:([^:]+):(\d+)\.(\d+)$/.exec(e.chat?.thread.id??``);return t?`https://slack.com/archives/${t[1]}/p${t[2]}${t[3]}`:void 0}const Dn=864e5,Z=e=>`slack:typing:${e}`,Q=`coder-pending:`;function On(e,t){return async n=>{let r=n.data,i=n.headers.toJSON(),a=typeof r==`string`?new URLSearchParams(r):void 0,o=a?.get(`token`);a&&o?.startsWith(Q)&&(a.set(`token`,await t(o.slice(14))),r=a.toString());let s=Object.keys(i).find(e=>e.toLowerCase()===`authorization`);s&&i[s].startsWith(`Bearer ${Q}`)&&(i[s]=`Bearer ${await t(i[s].slice(`Bearer ${Q}`.length))}`);let c=await e(new URL(n.url??``,n.baseURL),{method:n.method?.toUpperCase()??`POST`,headers:i,body:r});return{data:await c.text(),status:c.status,statusText:c.statusText,headers:Object.fromEntries(c.headers),config:n,request:{}}}}async function kn(e){let[{SlackAdapter:t},{ConsoleLogger:n,defaultEmojiResolver:r}]=await Promise.all([import(`./dist-DfD9WmV8.js`),import(`./dist-B5qUdWUG.js`)]);class i extends t{outbound;privateState;hears;active;knows;constructor(e,t,n,r,i,a){super(e),this.outbound=t,this.privateState=n,this.hears=r,this.active=i,this.knows=a}unnamed=!1;async handleReactionEvent(e,t){let n=e.item;if(!(this.knows&&n.type===`message`&&n.channel&&n.ts&&!await this.knows(n.channel,n.ts)))return super.handleReactionEvent(e,t)}handleMessageEvent(e,t){let n=e.subtype===`message_changed`&&e.message?{...e.message,channel:e.channel,channel_type:e.channel_type}:e;if(!(e.type===`message`&&e.subtype!==`message_deleted`&&e.channel_type!==`im`&&!this.parseMessage(n).isMention)||!this.hears)return super.handleMessageEvent(e,t);let r=(async()=>{await this.hears(Sn(e.channel_type),n.text??``)&&(this.unnamed=!!n.thread_ts&&!await this.active?.(this.threadIdForMessageEvent(n)),super.handleMessageEvent(e,t))})();t?.waitUntil?.(r)}lookupUser(e){return this.unnamed?Promise.resolve({displayName:e,realName:e}):super.lookupUser(e)}async initialize(e){let t=e.getState(),n=this.privateState?.()??t,r=new Proxy(t,{get(e,t){let r=Reflect.get(e,t);return typeof r==`function`?(...r)=>{let i=typeof r[0]==`string`&&/^slack:(?:user:|user-by-name:|thread-participants:)/.test(r[0])?n:e;return Reflect.apply(Reflect.get(i,t),i,r)}:r}});await super.initialize(new Proxy(e,{get:(e,t,n)=>t===`getState`?()=>r:Reflect.get(e,t,n)}))}async startTyping(e,t,n){let r=n?.messageId??this.decodeThreadId(e).threadTs;if(r){try{await super.addReaction(e,r,`eyes`)}catch(e){if(e.data?.error===`already_reacted`)return;throw e}await this.chat?.getState().appendToList(Z(e),r,{ttlMs:Dn})}}async endTyping(e){let t=this.chat?.getState(),n=await t?.getList(Z(e))??[];n.length&&(await t.delete(Z(e)),await Promise.all(n.map(t=>super.removeReaction(e,t,`eyes`))))}async addReaction(e,t,n){let i=this.chat?.getState(),a=r.toSlack(n).replace(/:/g,``)===`eyes`&&i?await i.getList(Z(e)):[];if(!a.includes(t))return super.addReaction(e,t,n);await i.delete(Z(e));for(let n of a.filter(e=>e!==t))await i.appendToList(Z(e),n,{ttlMs:Dn})}markEventDelivered(){}async isDuplicateEventDelivery(){return!1}getToken(){return this.requestContext.getStore()?.token||!this.outbound?super.getToken():this.outbound()}}let a=e.credentials?.signingSecret,o=e.installationId,s=new Map,c=t=>(s.has(t)||s.set(t,e.token(t)),s.get(t));return new i({userName:e.name,apiUrl:`https://slack.com/api/`,appToken:``,socketForwardingSecret:``,clientId:``,clientSecret:``,encryptionKey:``,...a?{signingSecret:a,installationProvider:{getInstallation:async t=>({botToken:`${Q}${t}`,...e.self?{botUserId:e.self}:{}})}}:{webhookVerifier:()=>!1,botToken:()=>o?e.token(o):Promise.reject(Error(`No Slack workspace to post for`))},webClientOptions:{adapter:On(e.fetch,c)},logger:new n(`error`)},a&&o?()=>c(o):void 0,e.privateState,e.hears,e.active,e.knows)}const An={id:`slack`,brand:{color:`#E3066A`,icon:`M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z`,svg:`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"><g><path d="M 84.04 252.77 c 0 23.13 -18.89 42.02 -42.02 42.02 S 0 275.9 0 252.77 s 18.89 -42.02 42.02 -42.02 h 42.02 v 42.02 Z" fill="#e3066a"/><path d="M 105.21 252.77 c 0 -23.13 18.89 -42.02 42.02 -42.02 s 42.02 18.89 42.02 42.02 v 105.21 c 0 23.13 -18.89 42.02 -42.02 42.02 s -42.02 -18.89 -42.02 -42.02 c 0 0 0 -105.21 0 -105.21 Z" fill="#e3066a"/></g><g><path d="M 147.23 84.04 c -23.13 0 -42.02 -18.89 -42.02 -42.02 S 124.1 0 147.23 0 s 42.02 18.89 42.02 42.02 v 42.02 h -42.02 Z" fill="#00b3ff"/><path d="M 147.23 105.21 c 23.13 0 42.02 18.89 42.02 42.02 s -18.89 42.02 -42.02 42.02 H 42.02 c -23.13 0 -42.02 -18.89 -42.02 -42.02 s 18.89 -42.02 42.02 -42.02 c 0 0 105.21 0 105.21 0 Z" fill="#00b3ff"/></g><g><path d="M 315.96 147.23 c 0 -23.13 18.89 -42.02 42.02 -42.02 s 42.02 18.89 42.02 42.02 -18.89 42.02 -42.02 42.02 h -42.02 v -42.02 Z" fill="#41b658"/><path d="M 294.79 147.23 c 0 23.13 -18.89 42.02 -42.02 42.02 s -42.02 -18.89 -42.02 -42.02 V 42.02 c 0 -23.13 18.89 -42.02 42.02 -42.02 s 42.02 18.89 42.02 42.02 v 105.21 Z" fill="#41b658"/></g><g><path d="M 252.77 315.96 c 23.13 0 42.02 18.89 42.02 42.02 s -18.89 42.02 -42.02 42.02 -42.02 -18.89 -42.02 -42.02 v -42.02 h 42.02 Z" fill="#fcc003"/><path d="M 252.77 294.79 c -23.13 0 -42.02 -18.89 -42.02 -42.02 s 18.89 -42.02 42.02 -42.02 h 105.21 c 23.13 0 42.02 18.89 42.02 42.02 s -18.89 42.02 -42.02 42.02 h -105.21 Z" fill="#fcc003"/></g></svg>`},name:`Slack`,featured:!0,description:`Mentions, direct messages, and channel messages in a Slack workspace`,installLabel:`Add to Slack`,use:(e,t)=>en(`{handle}`,e,t?`message it here`:void 0),covered:`Slack workspace`,item:e=>e.replace(/^(slack:D[A-Z0-9]+:).+$/,`$1`),sample:`slack:C0000000000:1700000000.000100`,prompt:[`A conversation is a Slack thread, or a whole 1:1 DM with its threads. A group DM works like a channel.`,`Replies render as Slack Markdown: headings, lists, tables, code blocks, quotes. Mention a person as <@USER_ID>.`,`Link pull requests and issues by full URL; a bare number like #123 renders only on GitHub.`].join(`
9
+ `),replyLimit:12e3,events:{mention:{description:`A message that mentions the agent in a channel or group DM.`,on:`mention`,addressed:!0},dm:{description:`Every message in a direct message or group DM with the agent.`,on:`message`,addressed:!0},channel:{description:`Every message in channels the agent is in.`,on:`message`,noisy:!0,addressed:!0}},tools:{presets:Pt,server:Ft,install:`set -eu; arch=$(uname -m); case "$arch" in x86_64) arch=amd64; checksum=d1525962e9b9dbfdd2eaf48d0a81ca1eca7d8f1862b8d34931b812c850b3e568;; aarch64|arm64) arch=arm64; checksum=a307a48d16c2261346bdc257274cdcdb8b2027c867dc971b41d52cef36472c88;; *) exit 1;; esac; file=$(mktemp); trap 'rm -f "$file"' EXIT; curl -fsSL "https://github.com/korotovsky/slack-mcp-server/releases/download/v1.3.0/slack-mcp-server-linux-$arch" -o "$file"; echo "$checksum $file" | sha256sum -c -; install -m 755 "$file" /usr/local/bin/slack-mcp-server`,installHosts:[`github.com`,`release-assets.githubusercontent.com`]},hosts:[`slack.com`,`*.slack.com`],get app(){return Kt},target:X,messages:{asks:!0,post:async(e,t)=>(await import(`./views-3TxH367C.js`)).postMessage(e,t),edit:async(e,t,n)=>(await import(`./views-3TxH367C.js`)).editMessage(e,t,n),direct:async(e,t,n)=>(await import(`./views-3TxH367C.js`)).directMessage(e,t,n)},link:En,ownEvents:wn,adapter:kn,event:Tn,requestFetch:wt,isUninstalled:At,conversation:Nt,auth:{canWrite:Tt,members:kt,space:Ot,token:tn,get user(){return Wt}}};var jn=e({INTEGRATIONS:()=>$,enabledIntegrations:()=>Mn});const $={slack:An,github:it,linear:Ct};function Mn(e){if(!e)return $;let t=e.filter(e=>!$[e]);if(t.length)throw Error(`Unknown integration ${t.join(`, `)} in SERVER_INTEGRATIONS; pick from ${Object.keys($).join(`, `)}`);return Object.fromEntries(e.map(e=>[e,$[e]]))}export{cn as a,ln as i,Mn as n,sn as o,jn as r,q as s,$ as t};
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import{Qt as e,Tt as t,Ut as n,cn as r,ft as i,jn as a,jt as o,lt as s,mn as c,mt as l,r as ee,t as u,ut as d,vt as te,yt as f}from"../errors-XBA-Ls4n.js";import{m as p,s as m}from"../args-CbO_Ck9Z.js";import h from"node:path";import g from"node:process";import _ from"node:fs";import ne from"node:net";const v=new Set([`turn/start`,`review/start`,`thread/compact/start`]),y=3e4;function b(e,t,n){let r=new Set;return t?.threadId&&r.add(t.threadId),e===`review/start`&&n?.reviewThreadId&&r.add(n.reviewThreadId),r}function x(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function S(e,t){e.destroyed||e.write(`${JSON.stringify(t)}\n`)}const C=new Set([`turn/interrupt`,`turn/steer`,`thread/backgroundTerminals/clean`,`thread/archive`,`thread/delete`]);function re(e){return typeof e?.method==`string`&&C.has(e.method)}function ie(e){e&&(_.mkdirSync(h.dirname(e),{recursive:!0}),_.writeFileSync(e,`${g.pid}\n`,`utf8`))}async function w(){let[C,...w]=g.argv.slice(2);if(C!==`serve`)throw Error(`Usage: coder broker serve --endpoint <value> [--cwd <path>] [--pid-file <path>] [--network-access <true|false>] [--idle-ms <ms>]`);let T=p(a({name:`broker`,description:`The codex app-server broker`,access:`write`,args:{cwd:m(),"pid-file":m(),endpoint:c(),"network-access":r(e([`true`,`false`])),"idle-ms":m()},run(){}}),w),E=T.cwd?h.resolve(g.cwd(),T.cwd):g.cwd(),D=String(T.endpoint),O=t(D),k=T[`pid-file`]?h.resolve(T[`pid-file`]):null,A=T[`network-access`]===`true`,j=Number(T[`idle-ms`]??18e5);ie(k);let M=null,N=``,P={},F=null,I=!1,L=!1,R=null,z=null,B=null,V=new Set,H=new Map;function U(e){g.stderr.write(`[coder broker] ${JSON.parse(n(e))}\n`)}function W(e){for(let[t,n]of H)n.socket===e&&(H.delete(t),n.client.exitResolved||n.client.sendMessage({id:t,error:x(-32e3,`Broker client disconnected before answering the server request.`)}))}function G(e,t){let n=z??R;if(!n||n.destroyed){e.sendMessage({id:t.id,error:x(-32601,`No broker client available to answer ${t.method}.`)});return}H.set(t.id,{socket:n,client:e}),S(n,t)}function K(e){if(e!==M||L)return;M=null;let t=e.exitError?.message??`codex app-server exited.`;U(`${t} Starting a fresh one on the next request.`);for(let e of new Set([R,z]))e&&S(e,{method:s,params:{message:t}});H.clear(),R=null,z=null,B=null}async function q(){let e=u(g.env,P),t=l.connect(E,{disableBroker:!0,networkAccess:A}),n,r=new Promise((e,t)=>{n=setTimeout(()=>t(Error(`no answer within ${y/1e3}s`)),y)});try{let n=await Promise.race([t,r]);return n.setNotificationHandler(oe),n.handleServerRequest=e=>G(n,e),n.exitPromise.then(()=>K(n)),N=e,n}catch(e){throw t.then(e=>e.close()).catch(()=>{}),Error(`codex app-server could not start: ${ee(e)}`)}finally{clearTimeout(n)}}async function J(){let e=M;M=null,H.clear(),await e?.close().catch(()=>{})}async function ae(e){if(F)return F;let t=I||u(g.env,P)!==N;if(M&&!M.exitResolved&&!t)return M;if(M&&!M.exitResolved){let t=`Codex login changed; restarted the shared Codex app-server.`;U(t),S(e,{method:i,params:{message:t}})}return I=!1,await J(),F=q().finally(()=>{F=null}),M=await F,M}function Y(e){W(e),R===e&&(R=null),z===e&&(z=null,B=null)}function oe(e){let t=R??z;if(t&&(S(t,e),e.method===`turn/completed`&&z===t)){let n=e.params?.threadId??null;(!n||!B||B.has(n))&&(z=null,B=null,R===t&&(R=null))}}async function X(e){L=!0;let t=new Promise(t=>e.close(t));O.kind===`unix`&&_.existsSync(O.path)&&_.unlinkSync(O.path);let n=o();f(E,A,n)?.endpoint===D&&te(E,A,n);for(let e of V)e.end();await M?.close().catch(()=>{}),await t,k&&_.existsSync(k)&&_.unlinkSync(k)}M=await q();let Z;function Q(){clearTimeout(Z),V.size===0&&(Z=setTimeout(async()=>{U(`No clients for ${j/1e3}s; exiting.`),await X($),g.exit(0)},j))}let $=ne.createServer(e=>{clearTimeout(Z),V.add(e),e.setEncoding(`utf8`);let t=``;e.on(`data`,async n=>{t+=n;let r=t.indexOf(`
2
+ import{T as e,ba as t,h as n,j as r,u as i}from"../args-CJsHYWbt.js";import{a}from"../emit-BgeqsCkC.js";import{it as o}from"../state-Br-Fuaxg.js";import{o as s}from"../connections-Cswv7r8Z.js";import{C as c,S as l,a as ee,b as te,c as ne,n as re,o as u,p as d,r as f,t as ie}from"../app-server-BTpa5GBV.js";import p from"node:path";import m from"node:process";import h from"node:fs";import ae from"node:net";const oe=new Set([`turn/start`,`review/start`,`thread/compact/start`]),g=3e4;function _(e,t,n){let r=new Set;return t?.threadId&&r.add(t.threadId),e===`review/start`&&n?.reviewThreadId&&r.add(n.reviewThreadId),r}function v(e={}){let{threadId:t,serviceName:n,ephemeral:r,...i}=e;return JSON.stringify(i)}function y(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function b(e,t){e.destroyed||e.write(`${JSON.stringify(t)}\n`)}const x=new Set([`turn/interrupt`,`turn/steer`,`thread/backgroundTerminals/clean`,`thread/archive`,`thread/delete`]);function se(e){return typeof e?.method==`string`&&x.has(e.method)}function ce(e){e&&(h.mkdirSync(p.dirname(e),{recursive:!0}),h.writeFileSync(e,`${m.pid}\n`,`utf8`))}async function S(){let[x,...S]=m.argv.slice(2);if(x!==`serve`)throw Error(`Usage: coder broker serve --endpoint <value> [--cwd <path>] [--pid-file <path>] [--network-access <true|false>] [--idle-ms <ms>]`);let C=a(t({name:`broker`,description:`The codex app-server broker`,access:`write`,args:{cwd:i(),"pid-file":i(),endpoint:r(),"network-access":e(n([`true`,`false`])),"idle-ms":i()},run(){}}),S),w=C.cwd?p.resolve(m.cwd(),C.cwd):m.cwd(),T=String(C.endpoint),E=c(T),D=C[`pid-file`]?p.resolve(C[`pid-file`]):null,O=C[`network-access`]===`true`,k=Number(C[`idle-ms`]??18e5);ce(D);let A=null,j=``,M={},N=null,P=!1,F=!1,I=null,L=null,R=null,z=new Set,B=new WeakMap,V=new Set,H=new Map;function U(e){m.stderr.write(`[coder broker] ${JSON.parse(o(e,[...V]))}\n`)}function W(e){for(let[t,n]of H)n.socket===e&&(H.delete(t),n.client.exitResolved||n.client.sendMessage({id:t,error:y(-32e3,`Broker client disconnected before answering the server request.`)}))}function le(e,t){let n=L??I;if(!n||n.destroyed){e.sendMessage({id:t.id,error:y(-32601,`No broker client available to answer ${t.method}.`)});return}H.set(t.id,{socket:n,client:e}),b(n,t)}function G(e){if(e!==A||F)return;A=null;let t=e.exitError?.message??`codex app-server exited.`;U(`${t} Starting a fresh one on the next request.`);for(let e of new Set([I,L]))e&&b(e,{method:ie,params:{message:t}});H.clear(),I=null,L=null,R=null}async function K(){let e=u(m.env,M),t=ee.connect(w,{disableBroker:!0,networkAccess:O,bridgeUrl:X.url}),n,r=new Promise((e,t)=>{n=setTimeout(()=>t(Error(`no answer within ${g/1e3}s`)),g)});try{let n=await Promise.race([t,r]);return n.setNotificationHandler(de),n.handleServerRequest=e=>le(n,e),n.exitPromise.then(()=>G(n)),j=e,n}catch(e){throw t.then(e=>e.close()).catch(()=>{}),Error(`codex app-server could not start: ${ne(e)}`)}finally{clearTimeout(n)}}async function q(){let e=A;A=null,H.clear(),await e?.close().catch(()=>{})}async function ue(e){if(N)return N;let t=P||u(m.env,M)!==j;if(A&&!A.exitResolved&&!t)return A;if(A&&!A.exitResolved){let t=`Codex login changed; restarted the shared Codex app-server.`;U(t),b(e,{method:f,params:{message:t}})}return P=!1,await q(),N=K().finally(()=>{N=null}),A=await N,A}function J(e){W(e),I===e&&(I=null),L===e&&(L=null,R=null)}function de(e){let t=I??L;if(t&&(b(t,e),e.method===`turn/completed`&&L===t)){let n=e.params?.threadId??null;(!n||!R||R.has(n))&&(L=null,R=null,I===t&&(I=null))}}async function Y(e){F=!0;let t=new Promise(t=>e.close(t));E.kind===`unix`&&h.existsSync(E.path)&&h.unlinkSync(E.path);let n=s();l(w,O,n)?.endpoint===T&&te(w,O,n);for(let e of z)e.end();await A?.close().catch(()=>{}),await X.close(),await t,D&&h.existsSync(D)&&h.unlinkSync(D)}let X=await d();A=await K();let Z;function Q(){clearTimeout(Z),z.size===0&&(Z=setTimeout(async()=>{U(`No clients for ${k/1e3}s; exiting.`),await Y($),m.exit(0)},k))}let $=ae.createServer(e=>{clearTimeout(Z),z.add(e),e.setEncoding(`utf8`);let t=``;e.on(`data`,async n=>{t+=n;let r=t.indexOf(`
3
3
  `);for(;r!==-1;){let n=t.slice(0,r);if(t=t.slice(r+1),r=t.indexOf(`
4
- `),!n.trim())continue;let i;try{i=JSON.parse(n)}catch(t){S(e,{id:null,error:x(-32700,`Invalid JSON: ${t instanceof Error?t.message:String(t)}`)});continue}let a=i.id!==void 0&&!i.method?H.get(i.id):void 0;if(a){H.delete(i.id),a.client.exitResolved||a.client.sendMessage(i);continue}if(i.id!==void 0&&i.method===`initialize`){S(e,{id:i.id,result:{userAgent:`coder-broker`}});continue}if(i.method===`initialized`&&i.id===void 0||(i.id!==void 0&&i.method===`broker/shutdown`&&(S(e,{id:i.id,result:{}}),await X($),g.exit(0)),i.id===void 0||!i.method))continue;let o=R&&R!==e||z&&z!==e;if(i.method===`broker/recycle`){I=!0,!o&&M&&(U(`Recycling the shared Codex app-server after a stale-login error.`),I=!1,await J()),S(e,{id:i.id,result:{recycled:!o}});continue}let s=re(i)&&z&&z!==e&&!R;if(o&&!s){S(e,{id:i.id,error:x(d,`Shared Codex broker is busy.`)});continue}if(s){try{if(!M)throw Error(`codex app-server is not running.`);let t=await M.request(i.method,i.params??{});S(e,{id:i.id,result:t})}catch(t){let n=t;S(e,{id:i.id,error:x(n.rpcCode??-32e3,n.message)})}continue}let c=v.has(i.method);R=e,c&&(z=e,B=b(i.method,i.params??{},null));try{let t=await(await ae(e)).request(i.method,i.params??{});S(e,{id:i.id,result:t}),c&&(B=b(i.method,i.params??{},t)),R===e&&(R=null)}catch(t){let n=t;S(e,{id:i.id,error:x(n.rpcCode??-32e3,n.message)}),R===e&&(R=null),z===e&&c&&(z=null,B=null)}}}),e.on(`close`,()=>{V.delete(e),Y(e),Q()}),e.on(`error`,()=>{V.delete(e),Y(e),Q()})});g.on(`SIGTERM`,async()=>{await X($),g.exit(0)}),g.on(`SIGINT`,async()=>{await X($),g.exit(0)}),setInterval(async()=>{V.size===0&&f(E,A,o())?.endpoint!==D&&(await X($),g.exit(0))},3e4).unref(),$.listen(O.path),Q()}w().catch(e=>{g.stderr.write(`${JSON.parse(n(e instanceof Error?e.message:String(e)))}\n`),g.exit(1)});export{};
4
+ `),!n.trim())continue;let i;try{i=JSON.parse(n)}catch(t){b(e,{id:null,error:y(-32700,`Invalid JSON: ${t instanceof Error?t.message:String(t)}`)});continue}let a=i.id!==void 0&&!i.method?H.get(i.id):void 0;if(a){H.delete(i.id),a.client.exitResolved||a.client.sendMessage(i);continue}if(i.id!==void 0&&i.method===`initialize`){b(e,{id:i.id,result:{userAgent:`coder-broker`,bridgeUrl:X.url}});continue}if(i.method===`initialized`&&i.id===void 0||(i.id!==void 0&&i.method===`broker/shutdown`&&(b(e,{id:i.id,result:{}}),await Y($),m.exit(0)),i.id===void 0||!i.method))continue;for(let[e,t]of Object.entries(i.params?.config??{}))e.startsWith(`model_providers.`)&&t?.http_headers?.authorization&&V.add(String(t.http_headers.authorization).replace(/^Bearer /,``));let o=I&&I!==e||L&&L!==e;if(i.method===`broker/recycle`){P=!0,!o&&A&&(U(`Recycling the shared Codex app-server after a stale-login error.`),P=!1,await q()),b(e,{id:i.id,result:{recycled:!o}});continue}let s=se(i)&&L&&L!==e&&!I;if(o&&!s){b(e,{id:i.id,error:y(re,`Shared Codex broker is busy.`)});continue}if(s){try{if(!A)throw Error(`codex app-server is not running.`);let t=await A.request(i.method,i.params??{});b(e,{id:i.id,result:t})}catch(t){let n=t;b(e,{id:i.id,error:y(n.rpcCode??-32e3,n.message)})}continue}let c=oe.has(i.method);I=e,c&&(L=e,R=_(i.method,i.params??{},null));try{let t=await ue(e),n=B.get(t)??new Map;B.set(t,n);let r=i.method===`thread/start`||i.method===`thread/resume`?v(i.params):null;i.method===`thread/resume`&&n.get(i.params?.threadId)!==r&&await t.request(`thread/unsubscribe`,{threadId:i.params?.threadId});let a=await t.request(i.method,i.params??{});r&&a?.thread?.id&&n.set(a.thread.id,r),b(e,{id:i.id,result:a}),c&&(R=_(i.method,i.params??{},a)),I===e&&(I=null)}catch(t){let n=t;b(e,{id:i.id,error:y(n.rpcCode??-32e3,n.message)}),I===e&&(I=null),L===e&&c&&(L=null,R=null)}}}),e.on(`close`,()=>{z.delete(e),J(e),Q()}),e.on(`error`,()=>{z.delete(e),J(e),Q()})});m.on(`SIGTERM`,async()=>{await Y($),m.exit(0)}),m.on(`SIGINT`,async()=>{await Y($),m.exit(0)}),setInterval(async()=>{z.size===0&&l(w,O,s())?.endpoint!==T&&(await Y($),m.exit(0))},3e4).unref(),$.listen(E.path),Q()}S().catch(e=>{m.stderr.write(`${JSON.parse(o(e instanceof Error?e.message:String(e)))}\n`),m.exit(1)});export{};
@@ -0,0 +1,2 @@
1
+ import{Ea as e,s as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import{W as r,p as i}from"./state-Br-Fuaxg.js";import{t as a}from"./types-DHBqXFE2.js";import{F as o,w as s}from"./config-D_RuO6gX.js";import{l as c,p as l,u}from"./definition-4on4SG5J.js";import d from"node:path";import{fileURLToPath as f}from"node:url";import p from"node:fs";import{execFile as m}from"node:child_process";import h from"node:os";import g from"node:fs/promises";import{promisify as _}from"node:util";var v={name:`Coder`,description:`Answers engineering questions, reviews pull requests, and makes requested changes.`,integrations:{github:{events:{pull_request:!0,mention:!0,issue:!0,comment:{match:`[Cc]oder`}}},slack:{events:{mention:!0,dm:!0,channel:{match:`[Cc]oder`}}},linear:{events:{mention:!0,issue:!0,comment:{match:`[Cc]oder`}}}}},y=e({AgentLoadError:()=>b,agentsFromSources:()=>D,assertNotReserved:()=>O,builtinDefinitions:()=>w,defaultAgent:()=>T,folderFiles:()=>L,init:()=>V,loadAgents:()=>j,repoAgentOverride:()=>A}),b=class extends Error{};const x=f(new URL(`./builtin/coder/`,import.meta.url)),S={coder:{json:v,builtin:!0,dir:x,systemPrompt:p.readFileSync(d.join(x,`system.md`),`utf8`)}};function C(e,t=!1){let n={},r;try{r=p.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return n}for(let i of r){let r=d.join(e,i),a=d.join(r,`agent.json`);p.statSync(a,{throwIfNoEntry:!1})?.isFile()&&(n[i]={json:JSON.parse(p.readFileSync(a,`utf8`)),builtin:t,dir:r})}return n}function w(){return S}function T(){return`coder`}function E(e,t){let n=Object.entries(e.integrations).flatMap(([e,n])=>{let r=t[e]?.events;if(!r)return[];let i=Array.isArray(n.events)?n.events.filter(e=>e in r):n.events&&Object.fromEntries(Object.entries(n.events).filter(([e])=>e in r));return[[e,{...n,...i?{events:i}:{}}]]});return{...e,integrations:Object.fromEntries(n)}}function D(e,t,n){let r=u(e.usage),i=Object.keys(r).filter(t=>!(t in e.definitions));if(i.length){let t=Object.keys(e.definitions).sort().join(`, `)||`none`;throw Error(`Invalid agents:\n agents.${i.sort().join(`, agents.`)}: no agent definition; known ids: ${t}`)}let a=[];for(let[n,i]of Object.entries(e.definitions)){let o=r[n],s=o===!1?{disabled:!0}:o,l=typeof s==`object`&&s.disabled;if(l&&!e.includeDisabled)continue;let u;try{u=c(n,i.json,i.repository??!i.builtin)}catch(e){if(l)continue;throw new b(e instanceof Error?e.message:String(e))}let d=i.builtin?E(u,t):u;a.push({id:n,name:d.name??n,definition:d,...typeof s==`object`?{usage:s}:{},...i.dir?{dir:i.dir}:{},builtin:i.builtin})}let o=l(a.filter(e=>!e.usage?.disabled),t);if(o.length)throw new b(`Invalid agents:\n ${o.join(`
2
+ `)}`);return a}function O(e){let t=e.filter(e=>e in w()).sort();if(t.length)throw Error(`Invalid agents:\n agents.${t.join(`, agents.`)}: built-in agent ids are reserved`)}function k(e){let t=o(r(d.resolve(e)));return{file:t,usage:p.existsSync(t)?JSON.parse(p.readFileSync(t,`utf8`)).agents??{}:{}}}function A(e,t,n){let{file:r,usage:i}=k(e),a=i[t],o=typeof a==`boolean`?!a:a?.disabled;return o===void 0||o===n?void 0:r}async function j(e,t,{includeDisabled:n=!1}={}){e=d.resolve(e);let r={...w()},a=C(i(`agents`));for(let e of Object.values(a))e.repository=!1;let o=C(d.join(e,`.coder`,`agents`));O([...Object.keys(a),...Object.keys(o)]),Object.assign(r,a,o);let c={...s(e).agents},{usage:l}=k(e);for(let e of Object.keys(c))!(e in r)&&!(e in l)&&delete c[e];return D({definitions:r,usage:c,includeDisabled:n},t,e)}const M={"**/":`(?:.*/)?`,"/**":`/.*`,"**":`.*`,"*":`[^/]*`,"?":`[^/]`};function N(e){return e.split(/\r?\n/).flatMap(e=>{let t=e.trimEnd();if(!t||t.startsWith(`#`))return[];let n=t.startsWith(`!`);n&&(t=t.slice(1));let r=t.endsWith(`/`);r&&(t=t.slice(0,-1));let i=t.replace(/^\//,``).replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*\/|\/\*\*$|\*\*|\*|\?/g,e=>M[e]),a=t.includes(`/`);return[{pattern:RegExp(a?`^${i}$`:`^(?:.*/)?${i}$`),negate:n,directory:r}]})}const P=(e,t,n)=>e.reduce((e,r)=>(!r.directory||n)&&r.pattern.test(t)?!r.negate:e,!1);async function F(e,t,n=``){let r=[];for(let i of await p.promises.readdir(d.join(e,n),{withFileTypes:!0})){let a=n?`${n}/${i.name}`:i.name;i.isDirectory()&&!P(t,a,!0)?r.push(...await F(e,t,a)):i.isFile()&&!P(t,a,!1)&&r.push(a)}return r}async function I(e){return(await _(m)(`git`,[`-C`,e,`ls-files`,`--cached`,`--others`,`--exclude-standard`,`-z`,`--`,`.`],{maxBuffer:67108864}).catch(()=>void 0))?.stdout.split(`\0`).filter(Boolean)}async function L(e){let t=await I(e)??await F(e,N(await p.promises.readFile(d.join(e,`.gitignore`),`utf8`).catch(()=>``))),n={};for(let r of t){if(r===`agent.json`||r===`system.md`)continue;let t=d.join(e,r);(await p.promises.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await p.promises.readFile(t,`utf8`))}return n}const R=/^[a-z0-9][a-z0-9_-]*$/;function z(e,t){if(!R.test(t))return`Use lowercase letters, digits, - or _, starting with a letter or digit.`;let n=d.join(e,`.coder`,`agents`,t);if(p.existsSync(n)&&p.readdirSync(n).length>0)return`${d.relative(e,n)} is not empty; clear it to start over, or edit what is there.`}function B(e,t,n){return{integration:e,type:t,appId:`${e}:sample`,installationId:`sample`,deliveryId:`sample-1`,actor:{id:`user-1`,login:`someone`,role:`member`},text:`Replace me with the text a real event would carry.`,...n?{chat:{thread:{_type:`chat:Thread`,adapterName:e,channelId:n.slice(0,n.lastIndexOf(`:`)),id:n,isDM:!1}}}:{}}}async function V(e,r={}){let{INTEGRATIONS:i}=await import(`./integrations-BVmsk64f.js`).then(e=>e.r),o=d.resolve(r.cwd??`.`);if(!e&&r.askId&&(e=await r.askId(e=>z(o,e))),!e)throw new n(`invalid-option`,`Missing agent id.`,{hint:`Usage: coder agent init <id>`});let s=z(o,e);if(s)throw new n(`invalid-option`,s.includes(`not empty`)?s:`Agent id "${e}": ${s}`);let c=d.join(o,`.coder`,`agents`,e),l=r.askPicks?await r.askPicks(e):{...r.name?{name:r.name}:{},integrations:r.integrations?.length?r.integrations:[Object.keys(i)[0]],events:{},matches:{},access:r.access??`auto`};if(!a.includes(l.access))throw new n(`invalid-option`,`Unknown access "${l.access}"; valid: ${a.join(`, `)}`);let u={},f=r.events??[],p=e=>Object.keys(i[e]?.events??{});for(let e of l.integrations)if(!i[e])throw new n(`invalid-option`,`Unknown integration "${e}"; valid: ${Object.keys(i).join(`, `)}`);for(let e of f)if(!l.integrations.some(t=>p(t).includes(e)))throw new n(`invalid-option`,`No chosen integration has event "${e}".`,{hint:`Events per integration: coder agent integrations show <id>`});for(let[e,i]of Object.entries(r.matches??{}))if(t(i))throw new n(`invalid-option`,`Bad --match for ${e}: ${t(i)}`);for(let e of l.integrations){let t=p(e),i=l.events[e]??(f.length?f.filter(e=>t.includes(e)):[t.includes(`mention`)?`mention`:t[0]]);for(let r of i)if(!t.includes(r))throw new n(`invalid-option`,`${e} has no event "${r}"; valid: ${t.join(`, `)}`);let a={...r.matches,...l.matches[e]??{}},o=i.filter(e=>a[e]);i.length&&(u[e]={events:o.length?Object.fromEntries(i.map(e=>[e,!a[e]||{match:a[e]}])):i})}let m={...l.name?{name:l.name}:{},...r.description?{description:r.description}:{},access:l.access,integrations:u};await g.mkdir(c,{recursive:!0}),await g.writeFile(d.join(c,`agent.json`),`${JSON.stringify(m,null,2)}\n`),await g.writeFile(d.join(c,`system.md`),``);let _=d.join(h.tmpdir(),`coder-agent-samples`,e),v=[];for(let[e,t]of Object.entries(u)){let n=(Array.isArray(t.events)?t.events:Object.keys(t.events??{}))[0];await g.mkdir(_,{recursive:!0});let r=d.join(_,`sample-${e}-${n}.json`),a=B(e,n,i[e]?.sample);await g.writeFile(r,`${JSON.stringify(a,null,2)}\n`),v.push(r)}return{id:e,dir:c,files:[`agent.json`,`system.md`],samples:v,integrations:Object.keys(u)}}export{T as a,j as c,w as i,y as l,D as n,L as o,O as r,V as s,b as t,A as u};
@@ -0,0 +1 @@
1
+ import{la as e}from"./args-CJsHYWbt.js";import{l as t}from"./state-Br-Fuaxg.js";import{t as n}from"./integrations-BVmsk64f.js";import{n as r,t as i}from"./crypto-Ittsv-m4.js";import{a,i as o,o as s,s as c}from"./task-N0qhnKpK.js";import l from"node:path";import u from"node:process";import d from"node:fs";import{execFile as f,spawn as p}from"node:child_process";import m from"node:fs/promises";import{promisify as h}from"node:util";const g=h(f);async function _(e){if(u.platform===`linux`){let t=await m.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await g(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function v(e){let t=i(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var y=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,n){let i=this.taskDir(t.id),s=t.runner===`local`?o(t):void 0;await m.mkdir(i,{recursive:!0});let c=d.openSync(l.join(i,`runner.log`),`a`);await m.mkdir(l.join(i,`bin`),{recursive:!0}),await m.writeFile(l.join(i,`bin/coder`),`#!/bin/sh\nexec "${u.execPath}" "${e}" "$@"\n`,{mode:493});let f=p(u.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:i,detached:!0,env:{PATH:[l.join(i,`bin`),u.env.PATH??``].join(l.delimiter),HOME:u.env.HOME??``,TMPDIR:u.env.TMPDIR??``,...u.env.CODER_HOME?{CODER_HOME:u.env.CODER_HOME}:{},...n,...s?{CODER_CHECKOUT_CACHE:s}:{},CODER_INBOX_SOCKET:a(i)},stdio:[`ignore`,c,c]});await new Promise((e,t)=>{f.once(`spawn`,e),f.once(`error`,t)}),d.closeSync(c);let h={child:f};this.children.set(f.pid,h),f.once(`close`,e=>{h.code=e}),f.unref();let g=await _(f.pid);if(!g)throw Error(`Could not identify the local runner process`);return r({pid:f.pid,dir:i,started:g})}async status(e){let{pid:t,started:n}=v(e),r=this.children.get(t);if(r?.code===void 0)try{if(u.kill(t,0),await _(t)===n)return{state:`running`}}catch{}return{state:`exited`,...r?.code==null?{}:{code:r.code}}}async stop(e){let{pid:t,started:n}=v(e);if(await _(t)===n)try{u.kill(-t,`SIGTERM`)}catch{try{u.kill(t,`SIGTERM`)}catch{}}}async remove(e,t){let n=this.taskDir(e);if(t){let{pid:e,started:n}=v(t);for(let t=0;t<100&&await _(e)===n;t++)await new Promise(e=>setTimeout(e,100))}await s(l.join(n,`work`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e)),await m.rm(n,{recursive:!0,force:!0}),await m.rm(a(n),{force:!0})}taskDir(e){return t(e,`task id`),l.join(this.workDir,e)}async push(e,t){let{pid:n,dir:r,started:i}=v(e);if(await _(n)!==i)throw Error(`The task process exited`);return c(a(r),t)}};function b(e,t,n={}){return new Promise((r,i)=>{let a=p(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function x(){return Object.values(n).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}export{b as n,x as r,y as t};
@@ -0,0 +1,5 @@
1
+ import{Ea as e,ma as t}from"./args-CJsHYWbt.js";import{B as n,p as r,vt as i,z as a}from"./state-Br-Fuaxg.js";import{z as o}from"./config-D_RuO6gX.js";import{n as s}from"./connections-Cswv7r8Z.js";import{c,i as l,n as u}from"./load-PqaDHiHX.js";import{t as d}from"./integrations-BVmsk64f.js";import{f,i as ee,l as p}from"./definition-4on4SG5J.js";import"./turn-Cc-v-eSy.js";import m from"node:path";import h from"node:fs";import{execFile as te}from"node:child_process";import{randomUUID as ne}from"node:crypto";import{isDeepStrictEqual as g}from"node:util";const _=(e,t,n)=>(e.retryAt??1/0)<=t||!e.shownAt&&e.at<=t-n,v=3e4;var y=class extends Error{};const b=e=>`${e.source===`builtin`?0:1}:${e.id}`,x=(e,t=``)=>`token:${e}:${t}`,S=e=>`token-drop:${e}`;var re=e({agentProblems:()=>M,agentWithVersion:()=>D,diskFiles:()=>P,ensureBuiltinAgents:()=>L,getAgent:()=>w,getVersion:()=>E,listAgents:()=>T,publishAgent:()=>O,publishVersion:()=>k,seedBuiltinAgent:()=>F,seedBuiltinAgents:()=>I,setAgentSettings:()=>A,toAgent:()=>N,versionKey:()=>C});const C=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function w(e,t){return e.get(`agent`,t)}async function T(e){return(await e.list(`agent`)).map(e=>e.value)}async function E(e,t,n){let r=n??(await w(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,C(t,r))}async function D(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function O(e,t,n,r){let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},r)}async function k(e,t,n,r){if(!r)return(await O(e,t,n)).version;let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await w(e,t.id),s=r?r.version:o?await E(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>g(e.definition,i)&&e.systemPrompt===t.systemPrompt&&g(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return g(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,C(t.id,r),u);r++){let n=await e.get(`agentversion`,C(t.id,r));if(n&&l(n)){u=n;break}}let d=await w(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function A(e,t,n,r=Date.now()){let i=await w(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}function j(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},s=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),c=Object.fromEntries([...s].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),l=a.engine||a.model?{engine:void 0,model:void 0,effort:void 0}:{};return{...i,...l,...a,...i.access||a.access?{access:o(i.access,a.access)}:{},...s.size?{integrations:c}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function M(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];let r=ee(t.definition);if(r.length)return r;try{return u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:f(e.settings)}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function N(e,t,n,r=d){let i=j(t.definition,void 0,e.settings,r),a=j(t.definition,i,n,r),[o]=u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:f(a)}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function P(e,t=``){let n={};for(let r of h.readdirSync(m.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,P(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=h.readFileSync(m.join(e,i),`utf8`))}return n}async function F(e,n,r,i){let a=l()[r];return a?await k(e,{id:r,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${t()}`},n,i)!==i.version:!1}async function I(e,t,n){let r=n??await Promise.all(Object.keys(l()).map(t=>D(e,t))),i=!1;for(let n of Object.keys(l()))await F(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function L(e,t){let n=e.settings??={};return n.builtinAgents||=I(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}function R(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const z=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function B(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-B6mUToTa.js`).then(e=>e.Yt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function V(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new y(`Installation "${t}" is bound through another app.`)}function H(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function ie(e,t){let n=e.sending?.count??0;return t===void 0?n:e.items.findIndex((e,r)=>r<n&&e.admission===t)+1}function ae(e,t,n,r){let{sending:i,...a}=e,o=t?ie(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+v}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:H(s,s.owner,[],s.at)}function U(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:ne()},a=i.version??i.messages.length+i.more,o=i.messages.map((e,t)=>({sequence:t+1,...e}));if(t)return{...i,version:a+1,messages:o.length<50?[...o,{...t,sequence:a+1}]:o,more:i.more+(o.length<50?0:1)};if(i.epoch!==r)return i;let s=Math.max(i.acknowledged??0,Math.min(n,a)),c=o.filter(e=>e.sequence>s);return{...i,version:a,acknowledged:s,messages:c,more:a-s-c.length}}function oe(e){let{sending:t,...n}=e;return H({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,t){let n=`${e}:${t}`,r=i();return this.recordEvents.addEventListener(n,r.notify),{...r,close:()=>{this.recordEvents.removeEventListener(n,r.notify),r.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(z(e,t),()=>B(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||b(t)>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).sort((e,t)=>b(e.record)<b(t.record)?-1:1).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t,n){let{publishVersion:r}=await Promise.resolve().then(()=>re);return this.withAppLock(`agent:${e.id}`,async()=>{let i=(await this.listAgentsWithVersions(e.id))[0]??{};if(n&&(i.record?.currentVersion??0)!==n.currentVersion)return;let a=await r(this,{...e,definition:t.definition,systemPrompt:t.systemPrompt,files:t.files,commit:t.commit,origin:t.source,importedFrom:t.importedFrom},e.updatedAt,i);return{record:await this.get(`agent`,e.id),version:a,unchanged:a.version===i.record?.currentVersion}})}async listCredentials(e){return(await this.list(`credential`)).filter(({value:t})=>!t.owner||t.owner===e.owner).slice(0,e.limit)}async installationApp(e){let t=await this.get(`installation`,e);if(!t||t.deletedAt)return;let n=await this.get(`app`,t.app);return n?{installation:t,app:n}:void 0}async getApps(e){return(await Promise.all([...new Set(e)].map(async e=>({id:e,value:await this.get(`app`,e)})))).filter(e=>!!e.value)}async updateMetadata(e,t,n){let r=await this.get(e,t);return r?(await this.put(e,t,{...r,...n}),!0):!1}async listHistory(e){return(await this.list(`history`,{prefix:`${e}:`})).map(({value:{engine:e,conversation:t,savedAt:n}})=>({engine:e,conversation:t,savedAt:n})).sort((e,t)=>e.savedAt-t.savedAt)}async conversationState(e){let[t,n,r]=await Promise.all([this.get(`delivery`,e),this.get(`delivery`,`since:${e}`),this.get(`delivery`,`batch:${e}`)]),i=t&&await this.get(`task`,t.taskId);return{record:t,unseen:n,batch:r,...i?.task.flow==="default"?{status:i}:{}}}async markConversation(e,t,n,r,i){let a=await this.get(`delivery`,e);a?.taskId===t&&await this.put(`delivery`,e,{...a,at:r,seen:n},{ttlMs:i})}async heldTokens(e,t){let n={held:new Map,drops:new Map};for(let t of e)for(let e of await this.list(`snapshot`,{prefix:x(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(S(r),(await this.get(`snapshot`,S(r)))?.drop);return n}async holdToken(e){(await Promise.all(e.drops.map(async e=>(await this.get(`snapshot`,e.key))?.drop===e.drop))).every(Boolean)&&await this.put(`snapshot`,e.key,e.value,{ttlMs:e.ttlMs})}saveTaskSecrets(e,t){return this.withAppLock(`connections:${e}`,async n=>{let r=await n.get(`task`,e),i=!!(r&&![`completed`,`failed`,`cancelled`].includes(r.status));if(i)for(let e of t)await n.put(`snapshot`,e.id,{secret:e.value,expiresAt:e.expiresAt},{ttlMs:Math.max(1,e.expiresAt-this.now())});return i})}async dispatchState(e){let{key:t,owner:n,at:r,ttlMs:i}=e.delivery,a=this.live(`delivery`).get(t)?.value,o=a?.pending!==void 0&&(!a.owner||(a.at??0)+i<=r);return a&&!o?{claimed:!1}:(await this.put(`delivery`,t,{at:r,owner:n,pending:a?.pending??!0},a?.pending&&a.pending!==!0?{}:{ttlMs:i}),{claimed:!0})}async usageTotals(e){let{sumUsageTotals:t}=await import(`./apps-B6mUToTa.js`).then(e=>e.bt);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-B6mUToTa.js`).then(e=>e.bt);return n((await this.list(`usage`)).map(e=>e.value),e,t).totals}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}changed(e){}read(e,t){let n=t;if(e!==`app`||!n.shared)return t;let r=this.live(`app`).get(n.shared)?.value;return{...n,credentials:r?.credentials??``}}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){let n=this.live(e).get(t);return n&&this.read(e,n.value)}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,this.recordEvents.dispatchEvent(new Event(`login:${e}`)),a}async completeLogin(e,t,n){let{completeLogin:r}=await import(`./apps-B6mUToTa.js`).then(e=>e.Yt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&V([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>R(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async approvalPostsDue(e,t){return[...this.live(`delivery`).entries()].filter(([e])=>e.startsWith(`approval:`)).map(([e,t])=>({id:e,value:t.value})).filter(({value:n})=>_(n,e,t))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:U(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=U(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=H(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=oe(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+v,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=ae(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},se=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(h.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){h.mkdirSync(m.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{h.writeFileSync(n,t,{mode:384}),h.renameSync(n,e)}finally{h.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new s){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>B(this,e,t,n);return e===`credential`?this.connections().withLock(r,z(e,t)):super.withAppLock(z(e,t),r)}get appsFile(){return r(`apps.json`)}get deliveriesFile(){return m.join(n(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?a():e===`snapshot`?m.join(n(``),`snapshots.json`):m.join(n(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=h.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return m.join(n(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=h.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
2
+ `).filter(Boolean)){let{id:n,...r}=JSON.parse(e);t.set(n,r)}}catch(e){if(e.code!==`ENOENT`)throw e}return this.logBuckets.set(e,t),t}entries(e){if(e===`connection`)return this.connections().list().map(e=>[e.id,e]);if(e===`credential`)return this.connections().credentials().map(e=>[e.id,e.value]);if(G.has(e)){let t=this.apps(),n=Object.entries(t[e]??{});return e===`app`?n.map(([e,n])=>{let r=n,i=r.shared?t.app?.[r.shared]:void 0;return[e,r.shared?{...r,credentials:i?.credentials??``}:r]}):n}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(e===`connection`)return this.connections().get(t);if(e===`tasklog`){let e=this.loadLog(t.slice(0,t.lastIndexOf(`:`))).get(t);return e&&(e.expiresAt===void 0||e.expiresAt>this.now())?e.value:void 0}return!G.has(e)&&!K.has(e)?super.get(e,t):this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(e===`tasklog`)return this.putMany(e,[{id:t,value:n}],r);if(!G.has(e)&&!K.has(e))return super.put(e,t,n,r);await this.serial(()=>this.write(e,t,n),K.has(e))}write(e,t,n){if(e===`connection`){this.connections().put(n);return}if(e===`credential`&&t!==`claude`&&t!==`codex`){this.connections().putCredential(t,n);return}if(G.has(e)){let r=this.apps();e===`installation`&&V(Object.entries(r.installation??{}),t,n),e===`app`&&n.shared&&(n={...n,credentials:``}),r[e]={...r[e],[t]:n},Y(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else this.refuse(e)}remove(e,t){if(e===`connection`){let e=this.connections(),n=!!e.get(t);return e.delete(t),n}if(e===`credential`){let e=this.connections(),n=e.credentials().some(e=>e.id===t);return e.deleteCredential(t),n}if(G.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],Y(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}return!1}async putMany(e,t,n={}){if(e===`tasklog`){let e=new Map;for(let{id:r,value:i}of t){let t=r.slice(0,r.lastIndexOf(`:`)),a=e.get(t)??[];a.push(JSON.stringify({id:r,value:i,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})),e.set(t,a)}for(let[t,n]of e){let e=this.logFile(t);h.mkdirSync(m.dirname(e),{recursive:!0}),h.appendFileSync(e,`${n.join(`
3
+ `)}\n`,{mode:384})}for(let{id:e,value:r}of t)this.loadLog(e.slice(0,e.lastIndexOf(`:`))).set(e,{value:r,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})}else if(!G.has(e)&&!K.has(e))await super.putMany(e,t,n);else for(let r of t)await this.put(e,r.id,r.value,n)}async list(e,t={}){if(e===`tasklog`){let e=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0;if(e!==void 0)this.loadLog(e);else{let e=m.dirname(this.logFile(``));if(h.existsSync(e))for(let t of h.readdirSync(e))t.endsWith(`.jsonl`)&&this.loadLog(decodeURIComponent(t.slice(0,-6)))}return(e===void 0?[...this.logBuckets.values()]:[this.loadLog(e)]).flatMap(e=>[...e]).filter(([e,n])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)&&(n.expiresAt===void 0||n.expiresAt>this.now())).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}if(!G.has(e)&&!K.has(e))return super.list(e,t);let n=e===`installation`&&t.agent?this.apps().app:void 0;return this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).filter(([e,r])=>R(e,r,t,n?.[r.app]?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([n,r])=>{let i=r;return{id:n,value:(e===`connection`&&t.secrets&&(t.secrets===`all`||i.provider===`mcp`&&i.auth===`oauth`)?this.connections().get(n):void 0)??r}})}async delete(e,t){if(e===`tasklog`){let e=t.slice(0,t.lastIndexOf(`:`)),n=this.loadLog(e);n.delete(t),Y(this.logFile(e),[...n].map(([e,t])=>JSON.stringify({id:e,...t})).join(`
4
+ `)+`
5
+ `);return}if(!G.has(e)&&!K.has(e)){await super.delete(e,t),e===`task`&&(h.rmSync(this.logFile(t),{force:!0}),this.logBuckets.delete(t));return}await this.serial(()=>this.remove(e,t),K.has(e))}async create(e,t,n,r={}){return e===`tasklog`?this.serial(async()=>!await this.get(e,t)&&(await this.put(e,t,n,r),!0)):!G.has(e)&&!K.has(e)?super.create(e,t,n,r):this.serial(()=>!this.entries(e).some(([e])=>e===t)&&(this.write(e,t,n),!0),K.has(e))}async take(e,t,n){return!G.has(e)&&!K.has(e)&&e!==`tasklog`?super.take(e,t,n):this.serial(async()=>{let r=await this.get(e,t);if(!(r===void 0||Object.entries(n??{}).some(([e,t])=>r[e]!==t)))return e===`tasklog`?await this.delete(e,t):this.remove(e,t),r},K.has(e))}};function ce(e){let t=m.resolve(e);for(;!h.existsSync(m.join(t,`.git`));){let e=m.dirname(t);if(e===t)return Promise.resolve(void 0);t=e}return new Promise(t=>te(`git`,[`log`,`-1`,`--format=%H`,`--`,`.`],{cwd:e},(e,n)=>t(e?void 0:n.trim()||void 0)))}async function Z(e,t,n,i){let a=await c(t,n,{includeDisabled:!0}),o=await Promise.all(a.filter(e=>!i||e.id===i).map(async t=>{let n=t.usage?{settings:t.usage}:{};if(t.builtin){let{record:r,version:i}=await D(e,t.id);if(!r)return;let a={...r,settings:void 0,...n,local:!0};return await e.put(`agent`,t.id,a),{record:a,version:i}}if(!t.dir)return;let i=await ce(t.dir),a=h.statSync(m.join(t.dir,`agent.json`)),o=m.join(t.dir,`system.md`),s={agent:t.id,version:1,definition:t.definition,systemPrompt:h.existsSync(o)?h.readFileSync(o,`utf8`):``,files:P(t.dir),...i?{commit:i}:{},importedFrom:`local:${t.dir}`,createdAt:a.mtimeMs},c={id:t.id,name:t.name,...t.definition.description?{description:t.definition.description}:{},source:m.resolve(t.dir)===r(`agents`,t.id)?`home`:`repo`,path:t.dir,currentVersion:1,...n,local:!0,...i?{commit:i}:{},createdAt:a.birthtimeMs||a.mtimeMs,updatedAt:a.mtimeMs};return await e.put(`agentversion`,C(t.id,1),s),await e.put(`agent`,t.id,c),{record:c,version:s}}));if(!i){let t=new Set(a.map(e=>e.id));for(let n of await T(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return o.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function Q(e,t,n,i){let a=(await c(e,t,{includeDisabled:!0})).find(e=>e.id===n&&!e.builtin)?.dir??r(`agents`,n),o={...i.files,"agent.json":`${JSON.stringify(i.definition,null,2)}\n`,"system.md":i.systemPrompt};for(let[e,t]of Object.entries(o))h.mkdirSync(m.dirname(m.join(a,e)),{recursive:!0}),h.writeFileSync(m.join(a,e),t)}async function $(e,t,n){let i=(await c(e,t,{includeDisabled:!0})).find(e=>e.id===n&&!e.builtin);if(!i?.dir)throw Error(`No local agent named "${n}".`);return m.resolve(i.dir)===r(`agents`,n)&&(h.rmSync(i.dir,{recursive:!0}),!0)}export{b as C,y as S,x as T,F as _,Q as a,N as b,V as c,D as d,L as f,k as g,O as h,Z as i,B as l,E as m,$ as n,W as o,w as p,se as r,H as s,X as t,M as u,I as v,S as w,v as x,A as y};
@@ -0,0 +1,8 @@
1
+ import{c as e}from"./task-N0qhnKpK.js";import t from"node:path";import n from"node:process";import{spawn as r}from"node:child_process";import i from"node:fs/promises";const a=[`SIGTERM`,`SIGINT`],o=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Z0-9]|\r/g;function s(e,t){if(e===`codex`)return{file:`codex`,args:[`login`,`--device-auth`],env:{CODEX_HOME:t}};let r=`stty cols 4000 rows 50 2>/dev/null; exec claude setup-token`;return{file:`sh`,args:[`-c`,`cat | { ${n.platform===`darwin`?`script -q /dev/null sh -c '${r}'`:`script -qfec '${r}' /dev/null`}; kill 0; }`],env:{CLAUDE_CONFIG_DIR:t,BROWSER:`true`}}}function c(e){try{return JSON.parse(Buffer.from(String(e).split(`.`)[1]??``,`base64url`).toString())}catch{return{}}}function l(e){let t=c(JSON.parse(e).tokens?.id_token),n=t[`https://api.openai.com/auth`];return{...typeof t.email==`string`?{email:t.email}:{},...typeof n?.chatgpt_plan_type==`string`?{plan:n.chatgpt_plan_type}:{}}}function u(e,t){let n=t.replace(o,``),r=/\x1b\]8;[^;]*;(https:\/\/[^\x07\x1b]+)(?:\x07|\x1b\\)/.exec(t)?.[1],i=e===`claude`?r??/https:\/\/\S*(?:oauth|authorize)\S*(?=\s)/.exec(n)?.[0]:/https:\/\/\S+(?=\s)/.exec(n)?.[0],a=e===`codex`?/\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/.exec(n)?.[0]:void 0;if(!(!i||e===`codex`&&!a))return{url:i,...a?{code:a}:{}}}const d=/sk-ant-oat[\w-]+/,f=e=>e.replace(/[\w#.%-]{20,}|\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/g,`…`).slice(-600),p=/\x1b(?:\[([0-9;?<>=]*)[ -/]*([@-~])|\][^\x07\x1b]*(?:\x07|\x1b\\)|[()][\s\S]|[^[\]()])/y;var m=class{height;rows=[[]];row=0;col=0;saved=[0,0];rest=``;constructor(e=50){this.height=e}write(e){let t=this.rest+e;this.rest=``;for(let e=0;e<t.length;){if(t[e]===`\x1B`){p.lastIndex=e;let n=p.exec(t);if(!n){this.rest=t.slice(e,e+4096);return}n[2]&&!/^[?<>=]/.test(n[1])?this.csi(n[1].split(`;`),n[2]):n[0]===`\x1B7`?this.saved=[this.row,this.col]:n[0]===`\x1B8`&&([this.row,this.col]=this.saved),e+=n[0].length;continue}let n=t.codePointAt(e),r=String.fromCodePoint(n);e+=r.length,r===`\r`?this.col=0:r===`
2
+ `?this.down():r===`\b`?this.col=Math.max(0,this.col-1):n>=32&&n!==127&&(this.line()[this.col++]=r)}}text(){return this.rows.map(e=>Array.from(e,e=>e??` `).join(``).trimEnd()).join(`
3
+ `)}line(){return this.rows[this.row]??=[]}down(){this.row<this.height-1?this.row++:this.rows.splice(0,this.rows.length-this.height+1)}csi(e,t){let n=(t=0)=>Number(e[t])||1,r=Number(e[0])||0,i=this.height-1;if(t===`A`)this.row=Math.max(0,this.row-n());else if(t===`B`)this.row=Math.min(i,this.row+n());else if(t===`C`)this.col+=n();else if(t===`D`)this.col=Math.max(0,this.col-n());else if(t===`E`||t===`F`)this.row=Math.max(0,Math.min(i,this.row+(t===`E`?n():-n()))),this.col=0;else if(t===`G`)this.col=n()-1;else if(t===`d`)this.row=Math.min(i,n()-1);else if(t===`H`||t===`f`)this.row=Math.min(i,n()-1),this.col=n(1)-1;else if(t===`K`){let e=this.line();r===0?e.length=Math.min(e.length,this.col):r===1?e.fill(` `,0,this.col+1):e.length=0}else t===`J`?r===0?(this.line().length=Math.min(this.line().length,this.col),this.rows.length=Math.min(this.rows.length,this.row+1)):r>=2&&(this.rows=[]):t===`s`?this.saved=[this.row,this.col]:t===`u`&&([this.row,this.col]=this.saved)}};async function h(c,p){let{server:h,token:g}=e();delete n.env.CODER_TASK_TOKEN,delete n.env.CODER_LOGIN;let _=new AbortController,v=async(e,t)=>{let n=e?_.signal:void 0;for(let r=1;;r++){let i=await fetch(`${h}/logins/${encodeURIComponent(c)}${e}`,{method:t===void 0?`GET`:`POST`,...n?{signal:n}:{},headers:{authorization:`Bearer ${g}`,...t===void 0?{}:{"content-type":`application/json`}},...t===void 0?{}:{body:JSON.stringify(t)}}).catch(t=>{if(n?.aborted||e===`/input`||r>=10)throw t;console.error(`coder runner: Coder server did not answer: ${t.message}`)});if(i?.ok)return await i.json();if(i&&(i.status<500||r>=10))throw Error(`Coder server answered ${i.status}`);i&&console.error(`coder runner: Coder server answered ${i.status}`),await new Promise(e=>setTimeout(e,1e3))}},{engine:y}=await v(``),b=await i.mkdtemp(t.join(p,`.login-`)),x=s(y,b),S=r(x.file,x.args,{env:{...n.env,...x.env},stdio:[`pipe`,`pipe`,`pipe`],detached:!0}),C=()=>{try{n.kill(-S.pid,`SIGTERM`)}catch{}},w=``,T=new m,E=!1,D=!1,O=0,k,A,j,M=new Promise((e,t)=>{S.once(`error`,t),S.once(`close`,e)}),N=setTimeout(C,6e5);for(let e of a)n.once(e,C);let P=async()=>{for(;!_.signal.aborted;){let{code:e}=await v(`/input`);if(e){k=w.length,S.stdin.write(e),await new Promise(e=>setTimeout(e,500)),S.stdin.write(`\r`),n.stdout.write(`Sign-in code typed
4
+ `);let t=k;setTimeout(()=>{k===t&&!E&&console.error(`coder runner: claude has not answered the code: ${JSON.stringify(f(T.text()))}`)},2e4).unref();return}}},F=e=>{if(w+=e,T.write(e),!D){let e=u(y,w.slice(O));e&&(D=!0,clearInterval(A),n.stdout.write(`Sign-in link ready
5
+ `),v(``,e).catch(()=>C()),y===`claude`&&P().catch(()=>{_.signal.aborted||C()}))}y===`claude`&&!E&&d.test(T.text())&&(E=!0,n.stdout.write(`Sign-in token shown
6
+ `),j=setTimeout(C,2e3)),(k===void 0?``:w.slice(k).replace(o,``).replace(/\s/g,``)).includes(`PressEntertoretry`)&&(n.stdout.write(`Sign-in code rejected; asking claude for a new link
7
+ `),k=void 0,O=w.length,D=!1,A=setInterval(()=>S.stdin.write(`\r`),1e3))};S.stdout.setEncoding(`utf8`).on(`data`,F),S.stderr.setEncoding(`utf8`).on(`data`,F);try{let e=await M;_.abort();let r=T.text(),a=d.exec(r)?.[0];if(y===`claude`&&a){let e=/[\w.+-]+@[\w-]+(?:\.[\w-]+)+/.exec(r)?.[0];await v(``,{result:{env:{CLAUDE_CODE_OAUTH_TOKEN:a},...e?{account:{email:e}}:{}}})}else if(y===`codex`&&e===0){let e=await i.readFile(t.join(b,`auth.json`),`utf8`);await v(``,{result:{env:{CODEX_AUTH_JSON:e},account:l(e)}})}else console.error(`coder runner: ${y} sign-in ended (exit ${e}): ${JSON.stringify(f(r))}`),await v(``,{error:D?`Sign-in did not finish. Start again.`:`${y} sign-in could not start.`}).catch(()=>{});n.stdout.write(`Sign-in finished
8
+ `)}finally{clearTimeout(N),clearTimeout(j),clearInterval(A);for(let e of a)n.off(e,C);_.abort(),C(),await i.rm(b,{recursive:!0,force:!0})}}export{h as runLogin};
@@ -0,0 +1 @@
1
+ import{t as e}from"./errors-DK_trCff.js";import"./dispatch-BaW2X6Sc.js";import{n as t}from"./env-_AxrvBXP.js";import{p as n}from"./drizzle-orm-CYU7WOQS.js";import{secret as r}from"./schema.js";import{$t as i,ai as a,ci as o,kr as s,li as c,si as l}from"./apps-B6mUToTa.js";import u from"node:process";async function d(t){try{return await t()}catch(t){throw t instanceof e?t:new e(`server`,t instanceof Error?t.message:String(t))}}function f(f={}){return d(async()=>{let d=t(f.env??u.env);if(!d.encryptionKey)throw new e(`invalid-option`,`SERVER_ENCRYPTION_KEY is required to rotate keys.`,{hint:`Set the new key in SERVER_ENCRYPTION_KEY and the old key in SERVER_ENCRYPTION_KEY_PREVIOUS.`});let p=await s(d);try{let e=p.connection?.db;if(!e)return{moved:await i(p.store(p.defaultOrganizationId),d)};let t=o(d.encryptionKey),s=0;for(let i of await e.select().from(r))c(d,i.value)!==t&&(await e.update(r).set({value:l(d,a(d,i.value))}).where(n(r.id,i.id)),s++);return{moved:s}}finally{await p.close()}})}export{f as rotateKey};
@@ -0,0 +1 @@
1
+ import{la as e,ua as t}from"./args-CJsHYWbt.js";import{s as n,t as r}from"./emit-BgeqsCkC.js";import{l as i,u as a,z as o}from"./config-D_RuO6gX.js";import{v as s}from"./connections-Cswv7r8Z.js";import{t as c}from"./dispatch-BaW2X6Sc.js";import{o as l,s as u}from"./mcp-BGx48pyR.js";import{n as d,r as f,t as p}from"./tools-oQvFAnh5.js";import{o as m}from"./async-CNhQ4wyZ.js";import{i as h,n as g,t as _}from"./tool-search-BkdgVolu.js";import v from"node:path";import y from"node:process";const b=[`CODER_HOME`,`CODER_MCP_MODE`,a,i,`CODEX_HOME`,`CLAUDE_CONFIG_DIR`,`CLAUDE_CODE_PROJECT_DIR_NAME`],x=()=>Object.fromEntries(b.flatMap(e=>y.env[e]?[[e,y.env[e]]]:[])),S=(e,t)=>!!e.readOnly||o(e.access,t)===`read-only`;async function C(e){let t=await s(e,fetch,AbortSignal.timeout(3e4));try{return await t.tools()}finally{await t.close().catch(()=>{})}}async function w(n,r,i,a){let s=e=>i.find(t=>t.name===e&&!t.command&&!t.url),d=s(`conversation`),f=s(t),m=e=>e.command?{...e,env:{...e.env,[c]:`1`}}:e,_=n.conversation?{...E(f?.env),connect:`start`}:void 0,b=[..._?[_]:[],...i.filter(e=>e!==d&&e!==f)].map(e=>m(S(e,e===_?`auto`:o(n.access,a.access))?{...e,readOnly:!0}:e)),C=A(n),w=p.flatMap(e=>{let t=e.platform&&u(i,e.platform);return t?[[l(e.platform),t]]:[]}),D=d?.env?.CODER_REPLY_URL,O=d?.env?.CODER_REPLY_TOKEN,j=D&&URL.canParse(D)?`${new URL(D).origin}/dash/settings/connections`:void 0;return{servers:[...C.length?[T(v.join(r,`job.json`),C,{...d?.env,...Object.fromEntries(w)})]:[],...b.length?[{...g({command:y.execPath,args:[e,`task`,`tools-search`],env:x()},b,j,D&&O?{url:D,token:O}:void 0,h(await k(b))),alwaysLoad:!0}]:[]].map(m),listed:b}}function T(t,r,i={}){return{name:d.name,command:y.execPath,args:[e,`task`,`tools`,...r],env:{...i,...x(),CODER_HISTORY_TASK:t},tools:r,alwaysLoad:!0,instructions:n(f(r))}}function E(n={}){return{name:t,command:y.execPath,args:[e,`mcp`],env:{...n,...x()}}}const D=(e,t=fetch)=>async(n,r)=>{let i=await t(`${e.url}/connection`,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:n.connection??n.name,url:n.url,connectionCreatedAt:n.connectionCreatedAt,...r?{refused:r}:{}}),signal:AbortSignal.timeout(1e4)});if(i.status===403)throw Error((await i.json()).error);if(!i.ok)throw Error(`The connection is unavailable (${i.status})`);return(await i.json()).token};async function O(e={}){let t=await import(`./context-CFrDYenS.js`),i=e.CODER_MCP_MODE===`cloud`?t.cloudApp:t.app,a=r(i).commands.flatMap(e=>e.command.mcp===!1?[]:[e.id]);return{description:i.description,started:{instructions:n(i,{tools:!1}),tools:[...a,...i.skills?.length?[`load_skill`]:[]]}}}function k(e){return Promise.all(e.map(async e=>{if(e.connect!==`start`)return e;if(e.name===`coder`)return{...e,...await O(e.env)};let t=await _(e,1e4).catch(()=>void 0);await t?.client.close().catch(()=>{});let n=t?.serverInfo?.description;return t?{...e,...n?{description:n}:{},started:{instructions:t.instructions,tools:t.tools.map(e=>e.name)}}:e}))}function A(e){let t=m(e);return[...p.some(e=>e.flow===t)?[]:p.map(e=>e.name),...(e.access??`auto`)===`auto`?[`escalate`]:[],...e.conversation?[`reply`,`react`,`history`]:[]]}export{C as listServerTools,D as serverCredential,A as taskToolNames,T as taskToolServer,w as turnToolServers};
@@ -0,0 +1,25 @@
1
+ import{a as e,l as t}from"./connections-Cswv7r8Z.js";import{t as n}from"./integrations-BVmsk64f.js";import r from"node:path";import i from"node:process";import a from"node:os";import o from"node:fs/promises";function s(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const c=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function l(e,t,r){let{tools:i,repos:a}=n[e],{readOnly:o,...s}=i.server(t,r.event,r.token,r.owner),l=Object.entries(s.env??{}).find(([,e])=>e===r.token)?.[0],d=t.some(e=>!i.presets[`read-only`].includes(e))?`auto`:`read-only`,f=r.account??(r.event?.integration===e?r.event.repo?.owner:void 0);return{...s,name:c(u(e,r.account)),integration:e,...f?{account:f}:{},access:d,...o?{readOnly:o}:{},...l?{credentialFields:{env:l}}:{},...a?.credentialUsername?{gitCredential:!0}:{}}}const u=(e,t)=>t?`${e}:${t}`:e;function d(e){if(!e?.integration||!n[e.integration])return;let t=l(e.integration,[],{token:`\0`}),r=Object.entries(t.env??{}).find(([,e])=>e===`\0`)?.[0],i=t.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function f(e,t){return d(e.find(e=>e.name===t))}function p(e,t){let r=new Set;return Object.keys(t).flatMap(i=>{let[a,o]=i.split(/:(.*)/),s=e.tools[a],c=t[i];if(!n[a]||!c||!s?.length)return[];let u=l(a,s,{token:c,...e.event?{event:e.event}:{},...o?{account:o}:{}}),d=u.name;for(let e=2;r.has(d);e++)d=`${u.name}-${e}`;return r.add(d),[{...u,name:d}]})}function m(e,n,r){let i=l(e.provider,n,{token:`\0`,...r?{event:r}:{},...e.owner?{owner:e.owner}:{}});for(let e of[`env`,`headers`])i[e]&&(i[e]=Object.fromEntries(Object.entries(i[e]).filter(([,e])=>!e.includes(`\0`))));return{...i,name:t(e),connection:e.id,credentialOnUse:i.credentialFields,owner:e.owner,account:e.login??e.account}}function h(t,n,r){return e(Object.fromEntries([...p(t,n).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}],[`native:coder`,{name:`coder`,resolved:!0,env:{CODER_SERVER:new URL(r.url).origin,CODER_TASK_TOKEN:r.token,...r.dashboard?{CODER_DASHBOARD:r.dashboard}:{}},credentialFields:{env:`CODER_TASK_TOKEN`}}]]:[]]))}async function g(e){let t=e.find(e=>e.name===`conversation`)?.env,s=t?.CODER_REPLY_URL&&t.CODER_REPLY_TOKEN?{url:`${t.CODER_REPLY_URL}/connection`,token:t.CODER_REPLY_TOKEN}:void 0,c=e.flatMap(e=>{let t=e.integration?n[e.integration]?.repos:void 0;if(!e.gitCredential||!t?.credentialUsername)return[];let r=d(e),i=s&&e.credentialOnUse&&e.access!==`read-only`?e.connection:void 0;return(r||i)&&!/[\r\n]/.test(r??``)?t.cloneHosts.map(n=>({host:n,username:t.credentialUsername,...r?{password:r}:{},...i?{connection:i}:{},...e.account?{owner:e.account.toLowerCase()}:{}})):[]});if(!c.length)return{env:{},close:async()=>{}};let l=await o.mkdtemp(r.join(a.tmpdir(),`coder-git-`)),u=r.join(l,`credential.cjs`);try{await o.writeFile(r.join(l,`tokens.json`),JSON.stringify({credentials:c,endpoint:s}),{mode:384}),await o.writeFile(u,`const fs = require('node:fs');
2
+ let input = '';
3
+ process.stdin.on('data', data => input += data);
4
+ process.stdin.on('end', async () => {
5
+ if (process.argv[2] !== 'get') return;
6
+ const fields = Object.fromEntries(input.trim().split('\\n').map(line => { const at = line.indexOf('='); return [line.slice(0, at), line.slice(at + 1)]; }));
7
+ const { credentials, endpoint } = JSON.parse(fs.readFileSync(require('node:path').join(__dirname, 'tokens.json'), 'utf8'));
8
+ const owner = (fields.path || '').split('/')[0].toLowerCase();
9
+ const hosted = credentials.filter(entry => fields.protocol === 'https' && fields.host === entry.host);
10
+ const apps = hosted.filter(entry => !entry.connection);
11
+ const members = hosted.filter(entry => entry.connection);
12
+ const covering = apps.find(entry => entry.owner === owner);
13
+ const ordered = covering
14
+ ? [covering]
15
+ : [...members.filter(entry => entry.owner === owner), ...members.filter(entry => entry.owner !== owner), ...apps.filter(entry => !entry.owner), ...apps.filter(entry => entry.owner)];
16
+ for (const credential of ordered) {
17
+ let password = credential.password;
18
+ if (credential.connection)
19
+ password = await fetch(endpoint.url, { method: 'POST', headers: { authorization: 'Bearer ' + endpoint.token, 'content-type': 'application/json' }, body: JSON.stringify({ connection: credential.connection }), signal: AbortSignal.timeout(10000) })
20
+ .then(response => response.ok ? response.json() : {})
21
+ .then(body => typeof body.token === 'string' && !/[\\r\\n]/.test(body.token) ? body.token : password, () => password);
22
+ if (password) return process.stdout.write('username=' + credential.username + '\\npassword=' + password + '\\n');
23
+ }
24
+ });
25
+ `,{mode:384});let e=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,t=Number(i.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(t)||t<0||t>1e3)throw Error(`Invalid git config count`);return{env:{GIT_CONFIG_COUNT:String(t+3),[`GIT_CONFIG_KEY_${t}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${t}`]:``,[`GIT_CONFIG_KEY_${t+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${t+1}`]:`!${e(i.execPath)} ${e(u)}`,[`GIT_CONFIG_KEY_${t+2}`]:`credential.useHttpPath`,[`GIT_CONFIG_VALUE_${t+2}`]:`true`},close:()=>o.rm(l,{recursive:!0,force:!0})}}catch(e){throw await o.rm(l,{recursive:!0,force:!0}),e}}export{c as a,h as i,g as n,s as o,u as r,f as s,m as t};
@@ -0,0 +1 @@
1
+ import{F as e,O as t,T as n,ba as r,j as i,t as a,u as o,va as s}from"./args-CJsHYWbt.js";import{command as c}from"./cli.js";import{n as l}from"./permission-BkYxjiFR.js";import{serve as u}from"./serve-DoYbHm_k.js";const d=a(n(t(i(),e())),`The tool's input.`),f=(e,t)=>s({name:`coder`,description:`Coder approval policy`,commands:[r({name:`approval_prompt`,description:`Coder approval policy for claude permission prompts.`,args:{tool_name:o(`The tool Claude asks to run.`),input:d,tool_input:d},access:`read`,run:n=>l(e,t,n),mcp:{text:e=>JSON.stringify(e)}})]}),p=c({name:`mcp`,description:`the coder MCP server engines call back into`,access:`write`,args:{"task-id":o()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,run:async({args:e,cwd:t})=>{await(await u(f(t,e[0]),`stdio`)).done}});export{p as commandTaskMcp};
@@ -0,0 +1 @@
1
+ import{a as e}from"./http-DRk8cDjf.js";const t=`/api/auth/callback`,n=`/.well-known/oauth-client.json`,r=`/.well-known/oauth-cli-client.json`,i=`/.well-known/oauth-protected-resource`,a=`openid profile email offline_access organizations:read`;function o(e,r){return{client_id:`${e}${n}`,client_name:`Coder at ${new URL(e).host}`,redirect_uris:[`${e}${t}`],post_logout_redirect_uris:[`${e}/?signed_out=1`],grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],token_endpoint_auth_method:`private_key_jwt`,token_endpoint_auth_signing_alg:`ES256`,jwks:r,scope:a}}function s(e){return{client_id:`${e}${r}`,client_name:`Coder CLI for ${new URL(e).host}`,redirect_uris:[`http://127.0.0.1/callback`],grant_types:[`authorization_code`,`refresh_token`,`urn:ietf:params:oauth:grant-type:device_code`],response_types:[`code`],token_endpoint_auth_method:`none`,scope:a}}function c(e,t){return{resource:new URL(e).origin,authorization_servers:[t],bearer_methods_supported:[`header`],scopes_supported:a.split(` `)}}function l(t){let n=e(t);return n.headers.set(`cache-control`,`public, max-age=3600`),n}function u(e,t,n,r){return l(o(t.config.publicUrl,t.auth.jwks))}function d(e,t,n,r){return l(s(t.config.publicUrl))}function f(e,t,n,r){return l(c(t.config.publicUrl,t.auth.issuer))}export{n as a,u as c,a as i,r as n,d as o,i as r,f as s,t};
@@ -0,0 +1 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{B as n,C as r,G as i,O as a,R as o,S as s,b as c,c as l,f as u,j as d,k as f,r as p,v as m,w as h,x as g}from"./config-D_RuO6gX.js";import{n as _}from"./remote-BbXx6S9P.js";import{M as v,O as y}from"./dispatch-BaW2X6Sc.js";import b from"node:path";import x from"node:process";var S=e({detectWireApi:()=>G,models:()=>U,probeEndpoint:()=>w});const C=new Set([`codex`,`claude`,`custom`]);async function w(e,t={}){let n=`key`in t?t.key:e.envKey?x.env[e.envKey]:void 0,r=t.fetch??fetch,i=c(e.baseUrl,`models`),a=null;for(let t of i)try{let i=await r(t,{headers:n?{Authorization:`Bearer ${n}`}:{},signal:AbortSignal.timeout(5e3)});if(!i.ok){a=i.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${t} -> HTTP ${i.status}`};continue}let o=await i.json().catch(()=>null),s=Array.isArray(o?.data)?o.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};let c=Object.fromEntries(o.data.flatMap(e=>{let t=T(e.context_window??e.context_length??e.max_model_len);return typeof e.id==`string`&&t?[[e.id,t]]:[]})),l=Object.keys(c).length?c:await E(e.baseUrl,e.model?[e.model]:s,n,r),u=Object.keys(l).length?{contextWindows:l}:{};if(!e.model)return{reachable:!0,modelListed:null,models:s,...u,detail:`endpoint reachable; ${s.length} models listed`};let d=s.includes(e.model);return{reachable:!0,modelListed:d,models:s,...u,detail:d?`endpoint reachable; model "${e.model}" listed`:`endpoint reachable, but "${e.model}" is not in its model list`}}catch(e){a={reachable:!1,modelListed:null,models:null,detail:`${t} unreachable (${e instanceof Error?e.message:String(e)})`}}return a}const T=e=>Number.isInteger(e)&&e>0?e:void 0;async function E(e,t,n,r){let i=`${a(e).replace(/\/v1$/,``)}/api/show`,o=async e=>{let t=await r(i,{method:`POST`,headers:{"content-type":`application/json`,...n?{Authorization:`Bearer ${n}`}:{}},body:JSON.stringify({model:e}),signal:AbortSignal.timeout(5e3)}).catch(()=>null),a=(t?.ok?await t.json().catch(()=>null):null)?.model_info??{},o=Object.keys(a).find(e=>e.endsWith(`.context_length`));return o?T(a[o]):void 0},[s,...c]=t,l=s?await o(s):void 0;if(!l)return{};let u=await Promise.all(c.map(async e=>[e,await o(e)]));return Object.fromEntries([[s,l],...u].filter(e=>!!e[1]))}function D(e,t){i(e,e=>{e.models=e.models??{},t(e.models)})}const O=(e,t=p)=>Object.fromEntries(Object.entries(t).flatMap(([t,n])=>{let[r,i]=n.split(`/`);return r===e&&i?[[t,i]]:[]}));function k(e){let t=e.models??{},n=Object.entries(t).filter(e=>r(e[1])),i=Object.entries(t).filter(e=>g(e[1])).map(([t,n])=>{let r=u(n,e),i=O(r.engine),a=(r.model&&i[r.model])??r.model,o=()=>[r.engine,r.model,r.effort].filter(Boolean).join(`/`),c=s(t)?t:Object.entries(i).find(([,e])=>e===a)?.[0];return{name:t,spec:o(),replaces:c,disabled:!1}}),a=new Map;for(let e of i)e.replaces&&(e.name===e.replaces||!a.has(e.replaces))&&a.get(e.replaces)?.name!==e.replaces&&a.set(e.replaces,e);let o=e=>t[e]===!1,c=i.filter(e=>![...a.values()].some(t=>t.name===e.name));return{models:t,endpoints:n,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=a.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:o(e)}}),...c.filter(t=>t.spec.startsWith(`${e}/`)).map(({name:e,spec:t,disabled:n})=>({alias:e,spec:t,disabled:n}))],toggledSlugs:Object.entries(t).filter(([e,t])=>t===!1&&!s(e)).map(([e])=>({name:e,disabled:!0})),disabled:o}}async function A(e,t){let n=t?await _(t).models.list():void 0,{endpoints:r,providerRows:i,toggledSlugs:a}=k(n?{models:n.models}:h(e)),o=await Promise.all(r.map(async([e,t])=>({name:e,...t,...n?{}:{probe:await w(t)}})));return{codex:i(`codex`,O(`codex`,n?.builtin)),claude:i(`claude`,O(`claude`,n?.builtin)),custom:o,...a.length?{toggles:a}:{}}}async function j(e,t,n,r){let i=await G(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi;let o=await w(t),s=o.contextWindows?.[t.model];!t.contextWindow&&s&&(t.contextWindow=s),D(n,n=>{n[e]=t});let c=y(v(r)),l=v(r);return{name:e,entry:t,file:n,probe:o,codex:l,install:c,nativeResponses:a,keyMissing:!!(t.envKey&&!x.env[t.envKey]),ready:o.reachable&&l.available}}const M=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR] [--context-window <tokens>]`,N=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR] [--context-window <tokens>]`,P=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex/luna)`,F=`List them: coder model list`;function I(e,n,r){if(!e)throw new t(`invalid-option`,`Missing model name.`,{hint:r});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new t(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(l.has(e)||n===`model`&&(C.has(e)||s(e)))throw new t(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function L(e,n,i){I(n,`model`,M);let o=h(e).models?.[n];if(o)throw new t(`invalid-option`,r(o)?`Custom model "${n}" already exists.`:`"${n}" is already configured as an ${g(o)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${n} [--base-url|--model|--env-key], or remove it first.`});if(!i.baseUrl||!i.model)throw new t(`invalid-option`,`Missing --base-url or --model.`,{hint:M});return j(n,{baseUrl:a(i.baseUrl),model:i.model,...i.envKey?{envKey:i.envKey}:{},...i.contextWindow?{contextWindow:i.contextWindow}:{}},m(e,i.workspace),e)}async function R(e,n,i){let o=n?h(e).models?.[n]:void 0,s=o&&r(o)?o:void 0;if(!n||!s)throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:N});if(!i.baseUrl&&!i.model&&!i.envKey&&!i.contextWindow)throw new t(`invalid-option`,`Nothing to update: pass --base-url, --model, --env-key, or --context-window.`,{hint:N});let c={...s,...i.baseUrl?{baseUrl:a(i.baseUrl)}:{},...i.model?{model:i.model}:{},...i.envKey?{envKey:i.envKey}:{}};return i.contextWindow?c.contextWindow=i.contextWindow:(c.model!==s.model||c.baseUrl!==s.baseUrl)&&delete c.contextWindow,j(n,c,m(e,i.workspace),e)}function z(e,n,r={}){if(!n||!h(e).models?.[n])throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:`Usage: coder model remove <name>`});let a=m(e,r.workspace);return i(a,e=>d(e,n)),{removed:n,file:a}}function B(e,n,i,a={}){I(n,`alias`,P);let s=h(e),c=s.models?.[n];if(c&&r(c))throw new t(`invalid-option`,`"${n}" is a custom model name; pick another alias name.`);if(!i)throw new t(`invalid-option`,`Missing alias spec.`,{hint:P});let l;try{l=f(i,s)}catch(e){throw new t(`invalid-option`,e instanceof Error?e.message:String(e),{hint:P})}if(!l||!l.model)throw new t(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:P});if(C.has(n)&&l.engine!==n)throw new t(`invalid-option`,`The ${n} alias names a ${n} model.`,{hint:P});if(l.engine===`custom`&&n!==`custom`)throw new t(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let u=o(i),d=[l.engine,u.model??l.model,u.effort].filter(Boolean).join(`/`),p=m(e,a.workspace);return D(p,e=>{e[n]=d}),{alias:n,model:d,file:p}}function V(e,n,r={}){let a=n?h(e).models?.[n]:void 0;if(!n||!a||!g(a))throw new t(`invalid-option`,n?`No alias named "${n}".`:`Missing alias name.`,{hint:n?F:`Usage: coder model unalias <name>`});let o=m(e,r.workspace);return i(o,e=>d(e,n)),{unaliased:n,file:o}}function H(e,r,i,a={}){if(!r)throw new t(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${i?`disable`:`enable`} <name>`});let o=m(e,a.workspace);return D(o,e=>n(e,r,i)),{name:r,disabled:i,file:o}}const U={add:(e,t)=>L(b.resolve(t.cwd??`.`),e,t),update:(e,t)=>t.server===void 0?R(b.resolve(t.cwd??`.`),e,t):_({server:t.server}).models.update(e,{...t.baseUrl?{baseUrl:t.baseUrl}:{},...t.model?{model:t.model}:{},...t.envKey?{envKey:t.envKey}:{},...t.contextWindow?{contextWindow:t.contextWindow}:{}}),remove:(e,t={})=>z(b.resolve(t.cwd??`.`),e,t),list:({cwd:e,workspace:t,...n}={})=>A(b.resolve(e??`.`),n.server===void 0?void 0:{...n,organization:n.organization??t}),alias:(e,t,n={})=>n.server===void 0?B(b.resolve(n.cwd??`.`),e,t,n):_({server:n.server}).models.alias(e,t),unalias:(e,t={})=>V(b.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!0,t):_({server:t.server}).models.disable(e),enable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!1,t):_({server:t.server}).models.enable(e)};async function W(e,t,n){let r=e.envKey?x.env[e.envKey]:void 0,i=!1;for(let a of c(e.baseUrl,t))try{let e=await fetch(a,{method:`POST`,headers:{"content-type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify(n),signal:AbortSignal.timeout(5e3)});if(i=!0,e.status!==404&&e.status!==405&&e.status!==501)return{baseUrl:a.slice(0,-(t.length+1))}}catch{}return{reachable:i}}async function G(e){let t=await W(e,`responses`,{model:e.model,input:[],stream:!1});if(`baseUrl`in t)return{wireApi:`responses`,baseUrl:t.baseUrl};let n=await W(e,`chat/completions`,{model:e.model,messages:[],stream:!1});return`baseUrl`in n?{wireApi:`chat`,baseUrl:n.baseUrl}:t.reachable||n.reachable?{wireApi:`chat`}:null}export{w as i,U as n,S as r,G as t};
@@ -0,0 +1,5 @@
1
+ import e from"node:process";function t(t=e.stdout){try{return t.getWindowSize?.()[0]??t.columns}catch{return t.columns}}function n(t=e.stdout){try{return t.getWindowSize?.()[1]??t.rows}catch{return t.rows}}function r(e){return e>=768&&e<=879||e>=8203&&e<=8207||e>=65024&&e<=65039?0:e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=129791||e>=131072&&e<=262141?2:1}function i(e){let t=0;for(let n of e.replace(/\x1b\[[0-9;]*m/g,``))t+=r(n.codePointAt(0));return t}function a(e,t){let n=0;for(let i=0;i<e.length;){let a=e[i]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(i)):null;if(a){i+=a[0].length;continue}let o=String.fromCodePoint(e.codePointAt(i)),s=r(o.codePointAt(0));if(n+s>t)return i;n+=s,i+=o.length}return e.length}function o(e,t,n){if(t<4||n<1)return[e];let r=[],o=e;for(;i(o)>t;){if(r.length===n-1)return[...r,`${o.slice(0,a(o,t-1))}…`];let e=a(o,t),i=o.lastIndexOf(` `,e),s=i>t*.66?i:e;r.push(o.slice(0,s).trimEnd()),o=o.slice(s).replace(/^\s+/,``)}return[...r,o]}function s(e,t){let n=0,i=``;for(let a=0;a<e.length;){let o=e[a]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(a)):null;if(o){i+=o[0],a+=o[0].length;continue}let s=e.codePointAt(a),c=String.fromCodePoint(s),l=r(s);if(n+l>t-1)return`${i}\x1b[0m${d.dim(`…`)}`;i+=c,n+=l,a+=c.length}return i}function c(){let t=e.stdin;if(!t.isTTY||!e.stdout.isTTY)return()=>{};t.setRawMode(!0),t.resume();let n=t=>{t.includes(3)&&e.kill(e.pid,`SIGINT`),t.includes(26)&&e.kill(e.pid,`SIGTSTP`)};return t.on(`data`,n),t.unref(),()=>{t.off(`data`,n),t.isTTY&&t.setRawMode(!1),t.pause()}}var l=class{stream;quietMs;lines=[];painted=[];paintedWidths=[];paintedCols;resizeTimer;tty;constructor(t=e.stdout,n=250){this.stream=t,this.quietMs=n,this.tty=!!t.isTTY,this.tty&&t.on(`resize`,this.onResize)}set(e){this.lines=e,!(!this.tty||this.resizeTimer)&&this.paint()}commit(e){this.clear(),this.stream.write(e)}clear(){if(!this.painted.length)return;let e=t(this.stream),n=this.painted.length;e&&this.paintedCols&&e!==this.paintedCols&&(n=this.paintedWidths.reduce((t,n)=>t+Math.max(1,Math.ceil(n/e)),0)),this.stream.write(`\x1b[${n}A\x1b[0J`),this.painted=[],this.paintedWidths=[]}done(){this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=void 0,this.paint()),this.tty&&this.stream.off(`resize`,this.onResize)}paint(){this.clear();let e=t(this.stream),r=e?this.lines.map(t=>s(t,e-1)):this.lines,a=n(this.stream);a&&r.length>a-1&&(r=a>1?r.slice(-(a-1)):[]);for(let e of r)this.stream.write(`${e}\n`);this.painted=r,this.paintedWidths=r.map(i),this.paintedCols=e}onResize=()=>{this.clear(),this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{this.resizeTimer=void 0,this.paint()},this.quietMs),this.resizeTimer.unref?.()}};function u(t){let n=e.env.FORCE_COLOR,r=n!=null&&n!==``&&n!==`0`||n!==`0`&&t.isTTY&&!e.env.NO_COLOR,i=(e,t)=>r?`\x1b[${e}m${t}\x1b[0m`:t;return{blue:e=>i(`34`,e),bold:e=>i(`1`,e),cyan:e=>i(`36`,e),dim:e=>i(`2`,e),light:e=>i(`38;5;246`,e),green:e=>i(`32`,e),red:e=>i(`31`,e),yellow:e=>i(`33`,e)}}const d=u(e.stdout),f=u(e.stderr);function p(e,t=f,n=t.blue,r=`Related`){let i=e.map(e=>{let t=e.search(/(?:\b[A-Z][A-Z0-9_]*=\S+\s+)*coder /);if(t===-1)return{text:e};let n=e.slice(0,t).trim().replace(/:$/,``);return{command:e.slice(t),label:n.charAt(0).toLowerCase()+n.slice(1)}}),a=Math.max(0,...i.map(e=>e.command?.length??0))+2;return[t.bold(`${r}:`),...i.map(e=>e.command===void 0?` ${t.dim(e.text)}`:` ${n(e.label?e.command.padEnd(a):e.command)}${t.dim(e.label)}`)].join(`
2
+ `)}function m(t,n={}){let r=typeof n==`number`?n:n.code??1,i=typeof n==`object`?n.hint:null,a=i==null?[]:Array.isArray(i)?i:[i];e.stderr.write(`${f.red(t)}\n`),a.length&&e.stderr.write(`\n${p(a,f)}\n`),e.exit(r)}function h(t){e.stdout.write(`${JSON.stringify(t,null,2)}\n`)}function g(e,t=d){return(JSON.stringify(e,null,2)??`null`).split(`
3
+ `).map(e=>e.replace(/"((?:[^"\\]|\\.)*)":/g,(e,n)=>`${t.light(`"${n}"`)}:`).replace(/: (-?\d[\d.eE+-]*|true|false|null)(,?)$/,(e,n,r)=>`: ${t.blue(n)}${r}`)).join(`
4
+ `)}function _(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h${n%60}m`}function v(e){let t=Math.max(0,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60)%60,i=Math.floor(t/3600),a=e=>String(e).padStart(2,`0`);return i?`${i}:${a(r)}:${a(n)}`:`${r}:${a(n)}`}function y(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}function b(e,t){let n=[`in ${y(e.input)}`,...e.cachedInput?[`cached ${y(e.cachedInput)}`]:[],`out ${y(e.output)}`];return`${y(e.total)} (${n.join(` · `)}) on ${t||`default model`}`}function x(e){return`ctx ${y(e.input+e.cachedInput)} · out ${y(e.output)}`}function S(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function C(e,t){let n=[],r=e;for(;r.length>t;){let e=r.lastIndexOf(` `,t);e<=0&&(e=t),n.push(r.slice(0,e).trimEnd()),r=r.slice(e).trimStart()}return n.push(r),n}function w(e,n,r={}){let i=`bold`in r?{style:r}:r,a=i.style??d,o=n.length&&typeof n[0]==`object`&&n[0]!==null&&`rows`in n[0]?n:[{rows:n}],s=o.flatMap(e=>e.rows),c=e.length-1,l=e.map((e,t)=>t===c&&!i.border?0:Math.min(e.max??40,Math.max(e.header.length,...s.map(t=>e.value(t).length))));if(i.border){let n=i.width??t()??120,r=l.slice(0,c).reduce((e,t)=>e+t+3,0)+4,a=Math.max(e[c].header.length,...s.map(t=>e[c].value(t).length));l[c]=Math.max(e[c].header.length,Math.min(a,n-r))}let u=(e,t,n)=>a.light(`${e}${l.map(e=>`─`.repeat(e+2)).join(t)}${n}`),f=e=>i.border?`${a.light(`│`)} ${e.join(` ${a.light(`│`)} `)} ${a.light(`│`)}`:e.join(` `),p=(e,t)=>t===c&&!i.border?e:S(e,l[t]),m=[];return i.border&&m.push(u(`┌`,`┬`,`┐`)),m.push(a.bold(a.light(f(e.map((e,t)=>p(e.header,t)))))),i.border&&m.push(u(`├`,`┼`,`┤`)),o.forEach((t,n)=>{n&&!i.border&&m.push(``),t.header&&m.push(i.border?`${a.light(`│`)} ${t.header}`:t.header),t.rows.forEach((n,r)=>{i.border&&(r||t.header)&&m.push(u(`├`,`┼`,`┤`));let a=e.map((e,t)=>i.border?C(e.value(n),l[t]):[e.value(n)]),o=Math.max(...a.map(e=>e.length));for(let t=0;t<o;t++)m.push(f(e.map((e,r)=>{let i=p(a[r][t]??``,r);return e.paint&&a[r][t]!==void 0?e.paint(i,n):i})))})}),i.border&&m.push(u(`└`,`┴`,`┘`)),`${m.join(`
5
+ `)}\n`}function T(e){return` ${d.bold(d.green(`✔`))} ${e}`}function E(e){return` ${d.bold(d.red(`✘`))} ${e}`}function D(e,t=0){let n=e.padEnd(t);return e===`running`?d.green(n):e===`waiting-approval`?d.yellow(n):e===`failed`||e===`cancelled`?d.red(n):e===`completed`?d.blue(n):d.dim(n)}export{o as S,l as _,_ as a,n as b,g as c,x as d,T as f,w as g,h,m as i,y as l,D as m,S as n,v as o,d as p,f as r,p as s,E as t,b as u,c as v,i as x,t as y};
@@ -0,0 +1 @@
1
+ import{V as e,bt as t,gt as n,o as r}from"./state-Br-Fuaxg.js";import{c as i,r as a}from"./approvals-CRwkc9vB.js";import o from"node:path";function s(e,t,n){let i=String(n.tool_name??``),o=n.input??n.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return r(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,n,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,n),o):void 0;return s?(r(t,n,{kind:`approval-decision`,method:`Bash`,decision:`accept`,approvalId:s.id,summary:`run command: ${o.trim()}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`allow`,permissionDecisionReason:`Coder: approved action ${s.id}`,updatedInput:a.tool_input}}):null}async function l(i,a,s,c){let l=String(s.tool_name??``);if(!c||!l.startsWith(`mcp__`))return null;let[{claudeToolName:u},{listServerTools:d}]=await Promise.all([import(`./dispatch-BaW2X6Sc.js`).then(e=>e.v),import(`./mcp-BGam3G_B.js`)]),f=n(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&n(p)?.[f.name],h=`This task is read-only.`;if(f&&!m)try{m=(await d(f)).filter(e=>e.annotations?.readOnlyHint===!0).map(e=>e.name),t(p,{...n(p),[f.name]:m})}catch(e){h=`This task is read-only, and MCP server "${f.name}" did not list its tools (${e instanceof Error?e.message:String(e)}).`}return f&&m?.some(e=>u(f.name,e)===l)?null:(r(i,a,{kind:`approval-decision`,method:l,decision:`decline`,reason:h,summary:`${l}: ${JSON.stringify(s.tool_input??{}).slice(0,200)}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`deny`,permissionDecisionReason:h}})}export{s as n,l as r,c as t};
@@ -0,0 +1,4 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{p as t,x as n,y as r}from"./output-BKeyLbvt.js";import i from"node:process";import{spawn as a}from"node:child_process";var o=e({PromptCancelled:()=>l,ask:()=>_,askSecret:()=>g,canPrompt:()=>u,openUrl:()=>v,pick:()=>m,pickDetailed:()=>h});function s(e){let t=r()??80;return Math.max(1,Math.ceil(n(e)/t))}const c={tab:[` `],up:[`\x1B[A`,`k`],down:[`\x1B[B`,`j`],enter:[`\r`,`
2
+ `],space:[` `],backspace:[``,`\b`],cancel:[``,`\x1B`]};var l=class extends Error{constructor(){super(`Cancelled.`)}};function u(){return!!(i.stdin.isTTY&&i.stdout.isTTY)}function d(e){let t=[];for(let n=0;n<e.length;)if(e[n]===`\x1B`&&e[n+1]===`[`){let r=n+2;for(;r<e.length&&!/[@-~]/.test(e[r]);)r++;t.push(e.slice(n,r+1)),n=r+1}else t.push(e[n]),n++;return t}const f=[];function p(){return f.length?Promise.resolve(f.shift()):new Promise(e=>{let t=n=>{i.stdin.off(`data`,t);let r=d(n.toString(`utf8`));f.push(...r.slice(1)),e(r[0])};i.stdin.on(`data`,t)})}async function m(e){return(await h(e)).values}async function h(e){let n=t,r=i.stdout,a=Math.max(3,e.window??8),o=new Set(e.selected??[]),u=Math.max(0,e.options.findIndex(e=>o.has(e.value))),d=0,f=``,m=0,h=``,g=new Map(e.options.flatMap(e=>e.input?.value?[[e.value,e.input.value]]:[])),_=!1,v=e.options.some(e=>e.input),y=()=>e.options.filter(e=>!f||e.value.toLowerCase().includes(f.toLowerCase())||(e.label??``).toLowerCase().includes(f.toLowerCase())),b=(t=!1)=>{m&&r.write(`\x1b[${m}A\x1b[J`);let i=y();u=Math.min(u,Math.max(0,i.length-1)),u<d&&(d=u),u>=d+a&&(d=u-a+1);let c=v?` · tab to edit`:``,l=_?`type to edit · enter when done · esc to discard`:e.multi?`↑↓ to move · space to toggle · type to filter${c} · enter to continue · esc to cancel`:`↑↓ to move · type to filter${c} · enter to choose · esc to cancel`,p=[`${n.bold(e.title)} ${n.dim(l)}`];if(t){let t=[...o].map(e=>g.get(e)?`${e} (${g.get(e)})`:e).join(`, `)||`-`;r.write(`${n.green(`✔`)} ${n.bold(e.title)} ${n.cyan(t)}\n\n`),m=0;return}e.hint&&p.push(` ${n.light(e.hint)}`),e.multi&&p.push(` ${n.light(`selected:`)} ${[...o].join(`, `)||n.dim(`none`)}`),f&&p.push(` ${n.light(`filter:`)} ${f}${n.dim(`▏`)}`),i.length||p.push(` ${n.dim(`no matches`)}`),d>0&&p.push(` ${n.dim(`↑ ${d} more`)}`);let b=Math.max(0,...i.map(e=>(e.label??e.value).length));i.slice(d,d+a).forEach((t,r)=>{let i=d+r===u,a=`${e.multi?o.has(t.value)?`◉`:`◯`:i?`●`:`○`} ${(t.label??t.value).padEnd(b)}${t.hint?` ${n.light(t.hint)}`:``}`,s=g.get(t.value)??``,c=t.input&&(s||i&&_)?` ${n.light(`${t.input.label}:`)} ${s}${i&&_?n.dim(`▏`):``}`:t.input&&i&&t.input.placeholder?` ${n.dim(t.input.placeholder)}`:``;p.push(`${i?n.cyan(`❯ `):` `}${i?n.cyan(a):a}${c}`)});let x=i.length-(d+a);x>0&&p.push(` ${n.dim(`↓ ${x} more`)}`),h&&p.push(` ${n.red(h)}`),r.write(`${p.join(`
3
+ `)}\n`),m=p.reduce((e,t)=>e+s(t),0)},x=i.stdin,S=x.isRaw;x.setRawMode(!0),x.resume(),r.write(`\x1B[?25l`);try{for(b();;){let t=await p();h=``;let n=y(),r=n[u];if(_&&r?.input){let e=g.get(r.value)??``;if(c.cancel.includes(t))g.delete(r.value),_=!1;else if(c.enter.includes(t)){let t=e?r.input.validate?.(e):void 0;t?h=t:_=!1}else c.backspace.includes(t)?g.set(r.value,e.slice(0,-1)):t.length===1&&t>=` `&&g.set(r.value,e+t);b();continue}if(c.cancel.includes(t))throw new l;if(c.tab.includes(t)&&r?.input){_=!0,e.multi&&o.add(r.value),b();continue}if(c.up.includes(t)&&!(t===`k`&&f))u=Math.max(0,u-1);else if(c.down.includes(t)&&!(t===`j`&&f))u=Math.min(n.length-1,u+1);else if(c.enter.includes(t))if(!e.multi&&n[u]&&(o.clear(),o.add(n[u].value)),e.required&&!o.size)h=`Pick at least one.`;else{b(!0);let e={};for(let[t,n]of g)n&&o.has(t)&&(e[t]=n);return{values:[...o],inputs:e}}else if(e.multi&&c.space.includes(t)&&n[u]){let e=n[u].value;o.has(e)?o.delete(e):o.add(e)}else c.backspace.includes(t)?f=f.slice(0,-1):t.length===1&&t>=` `&&t!==` `&&(f+=t,u=0,d=0);b()}}finally{r.write(`\x1B[?25h`),x.setRawMode(!!S),x.pause()}}async function g(e){let n=i.stdin;if(!n.isTTY){let e=``;for await(let t of n)e+=t.toString();return e.replace(/\r?\n$/,``)}i.stderr.write(`${t.bold(e)} `),n.setRawMode(!0),n.resume();let r=``;try{for(;;){let e=await p();if(c.cancel.includes(e))throw new l;if(c.enter.includes(e))return r;c.backspace.includes(e)?r=r.slice(0,-1):e.length===1&&e>=` `&&(r+=e)}}finally{n.setRawMode(!1),n.pause(),i.stderr.write(`
4
+ `)}}async function _(e,n=``,r,a){let o=t;a&&i.stdout.write(`${o.bold(e)}\n ${o.light(a)}\n`);let c=(await import(`node:readline/promises`)).createInterface({input:i.stdin,output:i.stdout}),l=a?s(e)+s(` ${a}`):0;try{for(;;){let t=a?` ${n?o.dim(`[${n}] `):``}`:`${o.bold(e)} ${n?o.dim(`[${n}] `):``}`,u=(await c.question(t)).trim()||n;l+=s(`${a?` `:`${e} `}${n?`[${n}] `:``}${u}`);let d=r?.(u);if(!d)return i.stdout.write(`\x1b[${l}A\x1b[J${o.green(`✔`)} ${o.bold(e)} ${o.cyan(u||`-`)}\n\n`),u;i.stdout.write(` ${o.red(d)}\n`),l+=s(` ${d}`)}}finally{c?.close()}}function v(e){let t=i.env.BROWSER;if(t===`none`||i.env.CI||i.env.NODE_ENV===`test`)return!1;let[n,r]=t?i.platform===`darwin`?[`open`,[`-a`,t,e]]:[t,[e]]:i.platform===`darwin`?[`open`,[e]]:i.platform===`win32`?[`cmd`,[`/c`,`start`,``,e]]:[`xdg-open`,[e]];try{return a(n,r,{detached:!0,stdio:`ignore`}).unref(),!0}catch{return!1}}export{m as a,v as i,_ as n,h as o,u as r,o as s,l as t};
@@ -0,0 +1 @@
1
+ import{ma as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{a as n}from"./update-check-UyRob3yy.js";const r=t({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>n(e())});export{r as commandRefreshUpdate};
@@ -0,0 +1 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{c as n,o as r}from"./load-PqaDHiHX.js";import{a as i,i as a,n as o,o as s,r as c}from"./http-615JJgHo.js";import{i as l,n as u,r as d,s as f,t as p}from"./session-Dtje9y-r.js";import m from"node:path";import h from"node:process";import g from"node:http";import _ from"node:fs/promises";import{Readable as v}from"node:stream";var y=class extends t{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};const b=new Set([`completed`,`failed`,`cancelled`]);var x=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,n,r={}){if(this.cookie=`cookie`in n,this.url=e?s(e):``,!this.cookie&&!this.url)throw new t(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in n?n.token:void 0,this.fetchImpl=r.fetch??((e,t)=>fetch(e,t)),this.organization=r.organization,this.renewal=r.renewal,this.onError=r.onError}request(e,t={}){let n=this.read(e,t);return n.catch(()=>{}),n}async read(e,n){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,n);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,n));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new t(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(r.status===202&&a.pending){let{approval:e,reason:n,changes:r}=a;throw new t(`approval-pending`,n,{approval:{id:e,reason:n,actions:r}})}if(!r.ok){let e=new y(r.status,a.error??a.message??o??`The server answered ${r.status}.`,r.headers.get(`www-authenticate`)??``,a.hint,a.needs===`key`?a.needs:void 0);throw this.onError?.(e),e}return a}send(e,n){let r=new Headers(n.headers);return n.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.token&&r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...n,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof t||e.name===`AbortError`?e:new t(`server`,this.url?`No Coder server answers at ${this.url}: ${e.message}`:`The server did not answer. Check the connection and try again.`)})}post(e,t){return this.request(e,{method:`POST`,...t===void 0?{}:{body:JSON.stringify(t)}})}me(){return this.request(`/me`)}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(c(`/admin/agents`,e??{})),get:(e,t)=>this.request(c(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{},...t?.installations?{installations:1}:{}})),versions:(e,t={})=>this.request(c(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(c(`/admin/agents/import`,{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify(t)}).then(t=>({id:e,version:t.version,unchanged:t.unchanged,...t.apps?.length?{apps:t.apps}:{}})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:`PATCH`,body:JSON.stringify(t)}),import:(e,t,n)=>this.post(`/admin/agents/import`,{repo:e,ref:t,...n?{agents:n}:{}})};composer(){return this.request(`/admin/composer`)}folders={list:()=>this.request(`/admin/folders`),check:e=>this.post(`/admin/folders/check`,{path:e}),clone:e=>this.post(`/admin/folders/clone`,{url:e}),pick:()=>this.post(`/admin/folders/pick`,{})};tasks={list:e=>this.request(c(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{},...e?.approvals?{approvals:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(c(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:n})),stream:(e,t=-1,n)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:`text/event-stream`},signal:n}),events:(e,t,n)=>this.send(c(`/admin/events`,{tasks:e}),{headers:{accept:`text/event-stream`,...t?{"last-event-id":t}:{}},signal:n}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...n}),ask:(e,t,n={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t,...n}),approve:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n,...r}),request:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/requests/${encodeURIComponent(t)}`,{decision:n,...r}),pendingApprovals:()=>this.request(`/admin/approvals/pending`),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:`DELETE`}),create:e=>this.post(`/admin/tasks`,e),wait:async(e,n={})=>{let r=-1;for(;;){let i=new AbortController,o=await this.tasks.stream(e,r,i.signal);if(!o.ok||!o.body){let n=await this.tasks.get(e);if(b.has(n.status))return n;if(o.status===401)continue;throw new t(`server`,`The task stream answered ${o.status}.`)}let s=!1;for await(let e of a(o.body))if(e.event===`log`){let t=JSON.parse(e.data);r=t.seq,n.onLog?.(t)}else if(e.event===`end`||e.event===`approval`){s=!0;break}if(s)return this.tasks.get(e)}}};credentials={list:e=>this.request(c(`/admin/credentials`,e??{})),add:e=>this.post(`/admin/credentials`,e),remove:(e,{workspace:t}={})=>this.request(`/admin/credentials/${encodeURIComponent(e)}${t?`?workspace`:``}`,{method:`DELETE`}),login:e=>this.post(`/admin/logins`,{engine:e}),loginStatus:(e,t)=>this.request(`/admin/logins/${encodeURIComponent(e)}${t?`?state=${encodeURIComponent(t)}`:``}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:`DELETE`})};runners={list:()=>this.request(`/admin/runners`),add:e=>this.post(`/admin/runners`,e),pair:e=>this.post(`/admin/runners/pair`,e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`DELETE`})};integrations={list:e=>this.request(c(`/admin/integrations`,{agent:e}))};repositories={list:()=>this.request(`/admin/repositories`),refresh:()=>this.post(`/admin/repositories/refresh`,{})};engines={status:()=>this.request(`/admin/engines/status`),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(c(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(c(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t})),remove:e=>this.request(`/admin/apps/${encodeURIComponent(e)}`,{method:`DELETE`}),update:e=>this.post(`/admin/apps/${encodeURIComponent(e)}/update`,{}),drift:e=>this.request(`/admin/apps/${encodeURIComponent(e)}/drift`),create:(e,t)=>this.post(`/admin/apps/create/${encodeURIComponent(e)}`,t),start:(e,t)=>this.post(c(`/create/${encodeURIComponent(e)}`,t)),finish:(e,t)=>this.request(`/create/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)})};operator={apps:()=>this.request(`/admin/operator/apps`),setUp:(e,t)=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}`,t),audit:()=>this.request(`/admin/operator/audit`),drift:e=>this.request(`/admin/operator/apps/${encodeURIComponent(e)}/drift`),update:e=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}/update`,{})};installations={list:(e,t={})=>this.request(c(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}})),uninstall:e=>this.request(`/admin/installations/${encodeURIComponent(e)}`,{method:`DELETE`})};connections={list:(e,t)=>this.request(c(`/admin/connections`,{authorization:e,wait:t})),add:e=>this.post(`/admin/connections`,e),update:(e,t)=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),remove:e=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),authorize:e=>this.post(`/admin/connections/${encodeURIComponent(e)}/authorize`)};config={get:()=>this.request(`/admin/config`),patch:e=>this.request(`/admin/config`,{method:`PATCH`,headers:{"content-type":`application/merge-patch+json`},body:JSON.stringify(e)})};models={list:()=>this.request(`/admin/models`),add:e=>this.post(`/admin/models`,e),probe:e=>this.post(`/admin/models/probe`,e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`DELETE`}),update:(e,t)=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={search:e=>this.request(c(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(c(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(c(`/admin/pulls`,{repo:e}))};review(e){return this.post(`/admin/review`,e)}usage(e={}){return this.request(c(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(c(`/admin/usage`,{installation:e}))}},S=e({addCredential:()=>j,coderClient:()=>T,connect:()=>w,credentials:()=>N,loginCredential:()=>M,pushAgents:()=>D,serverFor:()=>C});function C(e={}){let n=f(e.server);if(!p(n)){if(!e.yes)throw new t(`invalid-option`,`First use of Coder server ${new URL(n).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});u(n)}return n}function w(e={}){let t=C(e);return T(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function T(e,{token:n,missingHint:r,organization:a}={}){let s=f(e),c=i();if(c&&s===`unix:${c}`)return new x(`http://localhost`,{},{fetch:E(c),organization:a});let u=l(s),p=u?.token,m=h.env.ADMIN_TOKEN,g=h.env.CODER_MCP_MODE===`cloud`?h.env.CODER_TASK_TOKEN:void 0,_=n??g??p??m;if(_&&_===m&&!o(s))throw new t(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!_)throw new t(`login-failed`,`Not signed in to ${s}.`,{...r?{hint:r}:{}});return new x(s,{token:_},{organization:a??u?.organization?.slug,renewal:u&&_===p?d(s,u):void 0})}function E(e){return async(t,n={})=>{let r=new URL(String(t)),i=n.body?Buffer.from(await new Response(n.body).arrayBuffer()):void 0;return new Promise((t,a)=>{let o=g.request({socketPath:e,path:`${r.pathname}${r.search}`,method:n.method??`GET`,headers:Object.fromEntries(new Headers(n.headers)),signal:n.signal??void 0},e=>{let r=new Headers;for(let t=0;t<e.rawHeaders.length;t+=2)r.append(e.rawHeaders[t],e.rawHeaders[t+1]);let i=e.statusCode??502,a=i===204||i===304||n.method===`HEAD`;a&&e.resume(),t(new Response(a?null:v.toWeb(e),{status:i,headers:r}))});o.on(`error`,a),o.end(i)})}}async function D(e,i,a){let{INTEGRATIONS:o}=await import(`./integrations-BVmsk64f.js`).then(e=>e.r),s=(await n(i,o)).filter(e=>!e.builtin),c=a?s.filter(e=>e.id===a):s;if(a&&!c.length)throw new t(`invalid-option`,`No workspace agent named "${a}".`);let l=[];for(let t of c)l.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await _.readFile(m.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await r(t.dir),name:t.name,description:t.definition.description}));return l}const O=/^[A-Z_][A-Z0-9_]*$/,k=(e,n)=>new t(`invalid-option`,e,n?{hint:n}:{});async function A(){let e=``;for await(let t of h.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function j(e){let t=e.env;if(!t)throw k(`Missing required --env NAME.`,`Like --env ANTHROPIC_API_KEY`);if(!O.test(t))throw k(`Invalid environment variable name ${JSON.stringify(t)}.`);let n=e.value===`-`?await A():e.value??h.env[t];if(!n)throw k(`Environment variable ${t} is not set.`);return w(e).credentials.add({env:{[t]:n},workspace:e.workspace,noCheck:e.noCheck})}async function M(e,t={}){if(e!==`claude`&&e!==`codex`)throw k(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=w(t).credentials,r=await n.login(e);t.onStart?.(()=>n.cancelLogin(r.id));let i=async e=>{for(;!e(r.state);)r=await n.loginStatus(r.id,r.state)};return await i(e=>e!==`starting`),t.onOpen?.(r),e===`claude`&&r.state===`open`&&t.code&&await n.loginCode(r.id,await t.code()),await i(e=>e===`done`||e===`failed`),r}const N={list:(e={})=>w(e).credentials.list(),add:j,remove:(e,t={})=>w(t).credentials.remove(e,t),login:M};export{S as a,D as i,w as n,C as o,N as r,T as t};
@@ -0,0 +1,2 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{i as t,ot as n}from"./state-Br-Fuaxg.js";import{R as r}from"./config-D_RuO6gX.js";import{a as i}from"./definition-4on4SG5J.js";import{t as a}from"./approvals-CRwkc9vB.js";import{l as o}from"./view-D-rbQ1Kz.js";var s=e({iso:()=>c,remoteAnswer:()=>h,remoteApprovals:()=>p,remoteInspection:()=>_,remoteResult:()=>d,remoteStep:()=>g,remoteTask:()=>f});const c=e=>e===void 0?void 0:new Date(e).toISOString();function l(e){let t=(e??``).trim().split(`
2
+ `);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n.startsWith(`{`))try{let e=JSON.parse(n).reply;return typeof e==`string`?e:void 0}catch{return}}}function u(e,t,n,r){if(e?.trimStart().startsWith(`{`))try{let t=JSON.parse(e);if(t&&typeof t.status==`number`&&`threadId`in t)return{...t,error:t.error??(n?{message:n}:null),tokens:t.tokens??r??null}}catch{}let i=l(e)??e;return{status:+!t,threadId:null,...i?{finalMessage:i}:{},error:n?{message:n}:null,tokens:r??null}}function d(e){return e.result?u(e.result.output,e.result.ok,e.error,e.tokens):null}function f(e){let{task:t}=e,n=i(t);return{id:t.id,createdAt:c(e.createdAt),updatedAt:c(e.updatedAt),status:e.status===`waiting`?`running`:e.status,name:t.name??null,engine:n.engine??(t.models?.[0]?r(t.models[0].model).engine:void 0),prompt:t.prompt??t.event?.text,model:t.usage?.resolvedModel??d(e)?.model??n.model??e.model??null,effort:n.effort??null,...t.access?{access:t.access}:{},...t.cwd?{cwd:t.cwd}:{},...t.appendSystem?{appendSystem:t.appendSystem}:{},...t.addDirs?.length?{addDirs:t.addDirs}:{},...e.finishedAt===void 0?{}:{completedAt:c(e.finishedAt)},...e.error?{error:e.error}:{},archived:e.archivedAt!==void 0,...e.archivedAt===void 0?{}:{archivedAt:c(e.archivedAt)},agentId:t.agent,source:t.source}}function p(e){let t=e.approval;return(e.approvals??(t?.id?[t]:[])).map(e=>{let t=e.change?.scope;return{id:e.id,reason:e.reason,actions:e.actions,createdAt:e.createdAt,answered:e.response?.decision??null,deniedReason:e.response?.decision===`decline`?e.response.reason??null:null,...t?{scope:t,approvers:a[t]}:{}}})}function m(e){return(e.turns??[]).filter(e=>e.finishedAt!==void 0).map(e=>{let t=typeof e.result==`string`?{ok:!0,output:e.result}:e.result;return{at:c(e.finishedAt),prompt:e.prompt,...u(t?.output,t?.ok??!e.error,e.error,void 0)}})}function h(e){let t=f(e),n=d(e);return{taskId:t.id,name:t.name??null,status:e.status,engine:t.engine??null,model:t.model??null,finalMessage:n?.finalMessage??null,error:n?.error?.message??t.error??null,tokens:n?.tokens??null,pendingApprovals:p(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n}))}}function g(e){return{...e.entry??o(e.line)??{kind:e.level===`err`?`error`:`info`,message:e.line},at:e.entry?.at??new Date(e.at).toISOString()}}function _(e,r){let i=f(e),a=p(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n})),o=n.includes(i.status),s=c(e.lastActivityAt??e.updatedAt),l=t(s);return{taskId:i.id,status:o&&a.length?`waiting-approval`:i.status,task:i,result:d(e),steps:r,turns:m(e),pendingApprovals:a,...o?{idleMs:l,lastActivityAt:s??null,stalled:a.length===0&&l>6e5,liveTokens:null}:{}}}export{g as a,d as i,p as n,f as o,_ as r,s,c as t};
@@ -0,0 +1 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{n}from"./remote-BbXx6S9P.js";import{t as r}from"./serve-B-5rDiZm.js";import i from"node:process";var a=e({addRunnerFields:()=>p,listRunners:()=>s,removeRunner:()=>f,runAssignedTask:()=>o,runners:()=>m,testRunner:()=>d});async function o(e,t){if(i.env.CODER_LOGIN)return(await import(`./login-BDKTNynK.js`)).runLogin(e,t);let{prepareRepo:n,runTask:r}=await import(`./task-N0qhnKpK.js`).then(e=>e.l);return i.env.CODER_PREPARE?n(e,t):r(e,t)}const s=(e={})=>n(e).runners.list(),c=(e,t={})=>n(t).runners.add(e),l=(e,t={})=>n(t).runners.pair(e),u=(e,t,r={})=>n(r).runners.update(e,t),d=(e,t={})=>n(t).runners.test(e),f=(e,t={})=>n(t).runners.remove(e);async function p(e,r){let a=n(r),{catalog:o}=await a.runners.list(),s=o.find(t=>t.kind===e);if(!s)throw new t(`invalid-option`,`Unknown runner kind.`);if(!s.available)throw new t(`invalid-option`,s.reason??`Runner unavailable.`);let c={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),a=e.slice(n+1),o=s.fields.find(e=>e.key===r);if(!o)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(o.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(a)||!i.env[a.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);c[r]=i.env[a.slice(4)]}else c[r]=a}let l=r.scope??((await a.me()).user?`personal`:`workspace`);if(l!==`personal`&&l!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return s.connect===`pair`?a.runners.pair({name:r.name,scope:l}):a.runners.add({kind:s.kind,name:r.name??s.name,scope:l,config:c})}const m={list:s,add:c,pair:l,update:u,default:(e,t={})=>u(e,{default:!0},t),test:d,rename:(e,t,n={})=>u(e,{name:t},n),remove:f,serve:r};export{m as n,a as t};
package/dist/runner.json CHANGED
@@ -1 +1 @@
1
- {"hash":"ad5ff9d9ab44490cae8d66b86737343fa71c33a6f8847d9a0d5630ac6aa6dacc"}
1
+ {"hash":"161df6f24645c03e860cfa4646292388b9a9ac6b01e2a55984097a316b6f37fc"}
package/dist/runner.tgz CHANGED
Binary file
package/dist/schema.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as taskTombstone, a as coder, c as integrationAppInstallation, d as secret, f as tables, g as taskLog, h as taskInbox, i as chatState, l as platformLink, m as taskHistory, n as agentVersion, o as engineCredential, p as task, r as chatItem, s as integrationApp, t as agent, u as runner, v as usage } from "./sdk.js";
2
- export { agent, agentVersion, chatItem, chatState, coder, engineCredential, integrationApp, integrationAppInstallation, platformLink, runner, secret, tables, task, taskHistory, taskInbox, taskLog, taskTombstone, usage };
1
+ import { C as workspace, S as taskTombstone, _ as task, a as chatState, b as taskLog, c as engineCredential, d as platformLink, f as privateSpace, g as tables, h as spaceMember, i as chatItem, l as integrationApp, m as secret, n as agentVersion, o as coder, p as runner, r as approvalPost, s as connection, t as agent, u as integrationAppInstallation, v as taskHistory, x as taskSecret, y as taskInbox } from "./sdk.js";
2
+ export { agent, agentVersion, approvalPost, chatItem, chatState, coder, connection, engineCredential, integrationApp, integrationAppInstallation, platformLink, privateSpace, runner, secret, spaceMember, tables, task, taskHistory, taskInbox, taskLog, taskSecret, taskTombstone, workspace };