@wular/coder 0.5.0 → 0.5.2

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 (267) hide show
  1. package/dist/{actions-CkMAM1Km.js → actions-C35tq9KH.js} +2 -2
  2. package/dist/{agent-Bi5nbUhA.js → agent-BZR4Eqdc.js} +1 -1
  3. package/dist/{app-server-BTpa5GBV.js → app-server-dnlLhhZb.js} +1 -1
  4. package/dist/{approvals-CRwkc9vB.js → approvals-C8XV7CK2.js} +1 -1
  5. package/dist/apps-CCqOsEZH.js +18 -0
  6. package/dist/async-BP5q3Une.js +3 -0
  7. package/dist/{auth-oCvlHitk.js → auth-CJOm9_Vh.js} +1 -1
  8. package/dist/builtin/coder/system.md +6 -3
  9. package/dist/{chat-4AiZEqKh.js → chat-BD2Fu3jU.js} +1 -1
  10. package/dist/cli.js +3 -3
  11. package/dist/{cmd-Cu3OquA_.js → cmd-BH1bmZGs.js} +34 -34
  12. package/dist/{config-D_RuO6gX.js → config-_32PHl9g.js} +1 -1
  13. package/dist/{connection-BXjn7gCC.js → connection-DNzNYpha.js} +1 -1
  14. package/dist/{connections-Cswv7r8Z.js → connections-B90TemYf.js} +1 -1
  15. package/dist/{context-CFrDYenS.js → context-DVGPu7f_.js} +1 -1
  16. package/dist/dash/standalone/server/build-index.json +1 -1
  17. package/dist/dash/standalone/server/manifest.json +1406 -1406
  18. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.54c45900f2153d34.js → index.a036e2c6ae93ec75.js} +3 -5
  19. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.252f972b42c690e2.js → load.3e1c235ecb89201a.js} +2 -2
  20. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.11efd0e175db9053.js → page.ff03c26886d248d2.js} +3 -3
  21. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.59ae138dc182d7c3.js → notify.5b9c5a4ab975b01e.js} +1 -1
  22. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.e9386951cedea737.js → page.6e80433ca86c927d.js} +3 -3
  23. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.713d3ec10951fde5.js → sign-out.e419e0eae59a1394.js} +1 -1
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f989d6f2d9ece6e4.js → agents-grid.53dc6597be8d6049.js} +1 -1
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.0f88720e52db99a2.js → page.82a238c790c19a6c.js} +6 -6
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.8d2f0997462fc958.js → layout.4a5c6f90ebaccf6f.js} +7 -7
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.bc93891522c8120d.js → page.ed696703c6fb5796.js} +7 -7
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.cf5cf9afe38ab0e4.js → page.12dbb62edaa16b4f.js} +11 -11
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.c44c7df7841719f2.js → platform-actions.1e7bb5f00112eeac.js} +3 -3
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-step.6e90cbfe308f28a0.js → platform-step.45adc3fb28e7d33b.js} +1 -1
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.61de585104c2be10.js → agent-settings-form.1693e7dc34f5b94a.js} +16 -17
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.4d06f759984a63b3.js → page.fbbcdf8fde222f1e.js} +8 -9
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.ea2925eab1d2e594.js → loading.099f0e549e964a5c.js} +1 -1
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.fb069bf82b727d27.js → page.577e64210260faf2.js} +1 -1
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.0a472a0e269b8c01.js → page.2d10853615403293.js} +3 -3
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.7ef7dfd5d8f5de43.js → versions-list.e6088baf4de7f41e.js} +1 -1
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.007326a04f05d46c.js → loading.f0dfaf4552b8cde1.js} +1 -1
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.a26aa7bc6ab655f0.js → page.9f09979ad3435fe3.js} +6 -6
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{app-cards.361918fe58349aa1.js → app-cards.adaebe98ec9d32e8.js} +2 -2
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.3f60cf67517d0d31.js → page.e2dc60bbcac65b1f.js} +3 -3
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.ffbf9a8b8b2fbde7.js → agent-toggle.d795b7112534872c.js} +2 -2
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.0ae015a4fbe6321e.js → hero.b74c6eb40c45b498.js} +1 -1
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.9abe365f0098d358.js → connect-repositories.e27bcba279f82d7b.js} +1 -1
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.6548f8f757578f90.js → editor.288736c2a52c7df4.js} +8 -8
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.577b1d84c7ab84e1.js → import-picker.58bad50dd8e60d63.js} +3 -3
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.2b326d00ccef5544.js → page.83a490948f585e69.js} +4 -4
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.45a09107b19f0a7e.js → layout.61ad05aceb425910.js} +3 -3
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.f8d679f2d06b0ebc.js → operator-apps.6f71999915848a2c.js} +6 -6
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.5aa3ddc669366703.js → page.4758811b7fc86d84.js} +5 -5
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.5a5188f0fc75dcd2.js → page.7de674df6cd0e824.js} +1 -1
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{advanced-list.73cdadb2968a39d2.js → advanced-list.851275e04f8e7305.js} +1 -1
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.353ec01fbb814f78.js → connection-add.45a224c5e612b15f.js} +4 -4
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.cf4061ae909272c3.js → connections-list.6cacd41c18de261d.js} +5 -5
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.fc4cff0289267551.js → credentials-list.79a1355d894b8642.js} +4 -4
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.db01de2581ac65f3.js → credentials.30db114aef2c6ff6.js} +8 -8
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.e7d6a422f6a869ea.js → list.fa3b9eff6657bc57.js} +3 -3
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.acb92b39cab1d11c.js → models-list.2a8f6a5679fc5c4d.js} +6 -6
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.95fe939e36e5be55.js → page.7681780b48e2aa3e.js} +13 -13
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.5764eac3307d67cc.js → runners-list.e9834546550a3c2c.js} +6 -6
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.d316bb157f747f6c.js → secrets-list.ff9f3b3d88f2b8df.js} +4 -4
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.4eb70f2de8674f93.js → layout.3f8a61434ceaa186.js} +1 -1
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.dc630cb6e2cbf83a.js → model-options.0d6077fe68db3af9.js} +2 -5
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-pick.a143e77f5ed5f9d3.js → model-pick.695538b2edf9dd15.js} +1 -1
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.70cad0e981c33fa5.js → page.e439da4bae9d6d6c.js} +1 -1
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.18bd2b92cd23b73f.js → create-link.371225925a83e900.js} +3 -3
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.95f7be49430248eb.js → outcome-toast.c7d02e38464dec0b.js} +1 -1
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.e39ee9236664d043.js → page.885e5ae7913d8f5b.js} +4 -4
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.441e82ab00344fb2.js → activity.f8d48c80747830ee.js} +1 -1
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.24e121ea6eb578ba.js → page.70ce5ef3bcf56310.js} +6 -6
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.4a4052a38db4bad3.js → task-actions.783070d7dbd198e4.js} +4 -4
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.0cd3ec2655f44cc7.js → task-view.db256c7f111b8f23.js} +22 -57
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.73225456d60d63e3.js → composer-data.c16854be11a561e4.js} +1 -1
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.ee326fbf5e526fb1.js → composer.6a331de70f3baff4.js} +24 -82
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.7607998094780fdd.js → pending-approvals.7ff2eadf13a3ee90.js} +1 -1
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.e486cbd16ea3e963.js → tasks-list.57c90c66384141a0.js} +8 -8
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.01510523d1556d59.js → tasks-section.22e4f86847e1a3e2.js} +4 -4
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.ede64f82388f9480.js → page.c6b9db3ca88aaa1f.js} +3 -3
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.0499098badd3f5f8.js → page.743fe359f09f5648.js} +2 -2
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e3800e736f832124.js → stream.c7ffa724145ce870.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.3b7eeee29fc327de.js → task-toasts.b0ba5a1b4976ae27.js} +47 -20
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.f22057e7dfac40fe.js → action.44115286faf6c0f8.js} +1 -1
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.c8d7efefb6194d7d.js → client.b9225923da59febe.js} +1 -1
  83. package/dist/dash/standalone/static/assets/chunks/{advanced-list-850a950afe4f6996.js → advanced-list-4a393f37c461986f.js} +1 -1
  84. package/dist/dash/standalone/static/assets/chunks/{agent-pills-9f6fa120182db948.js → agent-pills-f07bea43753a9342.js} +1 -1
  85. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-6c1b6776328cd046.js +1 -0
  86. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-521136f20a71400d.js → agent-toggle-dabbca2fe4006852.js} +1 -1
  87. package/dist/dash/standalone/static/assets/chunks/{agents-grid-bcd13cd7a46224a6.js → agents-grid-a9440caa1768bfd8.js} +1 -1
  88. package/dist/dash/standalone/static/assets/chunks/{back-2d67134b122334f4.js → back-8ca96656264a0d1c.js} +1 -1
  89. package/dist/dash/standalone/static/assets/chunks/{chain-hint-53675e299a865420.js → chain-hint-c7994aad798ef430.js} +1 -1
  90. package/dist/dash/standalone/static/assets/chunks/{combo-cb2c62fe580a8903.js → combo-7b125f3927083749.js} +1 -1
  91. package/dist/dash/standalone/static/assets/chunks/composer-3efd63e2e0192937.js +1 -0
  92. package/dist/dash/standalone/static/assets/chunks/composer-a6cf207b9c69b43f.js +1 -0
  93. package/dist/dash/standalone/static/assets/chunks/{composer-data-890f71bade4f0616.js → composer-data-b05f3d93fdc472d7.js} +1 -1
  94. package/dist/dash/standalone/static/assets/chunks/{confirm-d6b2c5b1deccd1e8.js → confirm-6e26ab941d655b9f.js} +1 -1
  95. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-226bf70aa81c29d8.js → connect-repositories-90f1aedea6de7a99.js} +1 -1
  96. package/dist/dash/standalone/static/assets/chunks/{connections-list-a33d6637e2d52fcf.js → connections-list-90935e956e8f4626.js} +1 -1
  97. package/dist/dash/standalone/static/assets/chunks/{copy-294c6052b3b69424.js → copy-38fa78628f39ec10.js} +1 -1
  98. package/dist/dash/standalone/static/assets/chunks/create-link-a3c963721aa06a72.js +1 -0
  99. package/dist/dash/standalone/static/assets/chunks/{credentials-list-90fc1c6d202e1461.js → credentials-list-ae950b9891d30c29.js} +1 -1
  100. package/dist/dash/standalone/static/assets/chunks/{custom-range-efa1b6a71ba84597.js → custom-range-e9185a23187b3fe6.js} +1 -1
  101. package/dist/dash/standalone/static/assets/chunks/{editor-53a3e1a893644fff.js → editor-e0cc472111713852.js} +3 -3
  102. package/dist/dash/standalone/static/assets/chunks/{field-4d374d5ed3f43d7e.js → field-444bab2e16b91c26.js} +1 -1
  103. package/dist/dash/standalone/static/assets/chunks/instructions-7d9131eb37c4619e.js +1 -0
  104. package/dist/dash/standalone/static/assets/chunks/{instructions-d3dc01b2f90820db.js → instructions-9f173d4229d9b77e.js} +1 -1
  105. package/dist/dash/standalone/static/assets/chunks/{list-16247e39898cd20e.js → list-84356c9286747b10.js} +1 -1
  106. package/dist/dash/standalone/static/assets/chunks/model-options-5e07b3318d69d218.js +1 -0
  107. package/dist/dash/standalone/static/assets/chunks/{models-list-6d93523660503dfb.js → models-list-eca9705ab89a2ce5.js} +1 -1
  108. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-3006ae63624b3940.js +1 -0
  109. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-755fc581cbc2836e.js → outcome-dialog-c4d61a288688f53a.js} +1 -1
  110. package/dist/dash/standalone/static/assets/chunks/outcome-toast-ba59a3c06c25f0fd.js +1 -0
  111. package/dist/dash/standalone/static/assets/chunks/platform-actions-0c61a03082f9d169.js +1 -0
  112. package/dist/dash/standalone/static/assets/chunks/{platform-actions-08e9b3816dcd62b1.js → platform-actions-267a43c805e3c3a6.js} +1 -1
  113. package/dist/dash/standalone/static/assets/chunks/{platform-step-5881a8be1e761e00.js → platform-step-adfc87c1fa86e7e1.js} +1 -1
  114. package/dist/dash/standalone/static/assets/chunks/platform-step-fd1616528b2f6f12.js +1 -0
  115. package/dist/dash/standalone/static/assets/chunks/{runners-list-dd759d408c643a29.js → runners-list-c858c5546c6fd513.js} +1 -1
  116. package/dist/dash/standalone/static/assets/chunks/{runtime-9b28886f3cbe0ed3-1.js → runtime-3fcac605fffcc273-1.js} +1 -1
  117. package/dist/dash/standalone/static/assets/chunks/{secrets-list-be1f634a1b077baa.js → secrets-list-06cd41b5a2627452.js} +1 -1
  118. package/dist/dash/standalone/static/assets/chunks/{segmented-f646bfa8aa0aa449.js → segmented-15503e745dd97f56.js} +1 -1
  119. package/dist/dash/standalone/static/assets/chunks/{shared-init-b42d2c06c25d1e2b.js → shared-init-02666a6f76606589.js} +1 -1
  120. package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +1 -0
  121. package/dist/dash/standalone/static/assets/chunks/shared-init-7a7f1e623f0f5861.js +9 -0
  122. package/dist/dash/standalone/static/assets/chunks/{shared-init-953965859f7bf6b9.js → shared-init-a69029db2d72fb52.js} +1 -1
  123. package/dist/dash/standalone/static/assets/chunks/side-toggle-800f7bacd6de5aa8.js +1 -0
  124. package/dist/dash/standalone/static/assets/chunks/{tail-d13c4cc0cf11ffd1.js → tail-3024b828bce41f94.js} +1 -1
  125. package/dist/dash/standalone/static/assets/chunks/{task-423e6a3f2527f534.js → task-1e6f9ba22fb5e29f.js} +1 -1
  126. package/dist/dash/standalone/static/assets/chunks/{task-actions-5917357eac6504ca.js → task-actions-c8fe1201a56901d9.js} +1 -1
  127. package/dist/dash/standalone/static/assets/chunks/task-view-531e243f8222f802.js +3 -0
  128. package/dist/dash/standalone/static/assets/chunks/{tasks-list-2c5ce592e00fda45.js → tasks-list-5373f9a2772a386a.js} +1 -1
  129. package/dist/dash/standalone/static/assets/chunks/{versions-list-177ae397ad64dcea.js → versions-list-6642a24e9cef352b.js} +1 -1
  130. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-9b28886f3cbe0ed3-0.js → wular-pnext-3fcac605fffcc273-0.js} +1 -1
  131. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-00243b34eb094b95.css → dash-param-org-agents-param-slug-dd4ac319a0d62432.css} +1 -1
  132. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css → dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css} +1 -1
  133. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css → dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css} +1 -1
  134. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css → dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css} +1 -1
  135. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css +1 -0
  136. package/dist/dash/standalone/static/assets/{dash-param-org-tasks-8a44e171984d32a1.css → dash-param-org-tasks-be3cb3d64573f3d9.css} +1 -1
  137. package/dist/dash/standalone/static/assets/{dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css → dash-param-org-tasks-param-id-c20a0537bc82620d.css} +1 -1
  138. package/dist/dash/standalone/static/assets/pnext-client-02b9bb5ae78a37d6.js +1 -0
  139. package/dist/dash/standalone/static/assets/pnext-client-063d14b5b5c893a3.js +1 -0
  140. package/dist/dash/standalone/static/assets/pnext-client-1710a65c5b8280af.js +1 -0
  141. package/dist/dash/standalone/static/assets/pnext-client-2936b44e963219bc.js +1 -0
  142. package/dist/dash/standalone/static/assets/pnext-client-2f14cc4bf71bf456.js +1 -0
  143. package/dist/dash/standalone/static/assets/pnext-client-2f81535a69d0c8a3.js +1 -0
  144. package/dist/dash/standalone/static/assets/pnext-client-368d90341055d7ff.js +1 -0
  145. package/dist/dash/standalone/static/assets/pnext-client-58e0efbceb6c595f.js +1 -0
  146. package/dist/dash/standalone/static/assets/{pnext-client-7ecbd7a0cbe4e231.js → pnext-client-5fc693a6184e48a4.js} +1 -1
  147. package/dist/dash/standalone/static/assets/pnext-client-6ee756a74310a9fe.js +1 -0
  148. package/dist/dash/standalone/static/assets/pnext-client-713f7a6bc55d23fb.js +1 -0
  149. package/dist/dash/standalone/static/assets/pnext-client-7c91f8543cd360fa.js +1 -0
  150. package/dist/dash/standalone/static/assets/pnext-client-827b030f2c8e738e.js +1 -0
  151. package/dist/dash/standalone/static/assets/pnext-client-8b165b7e5c14a1f3.js +1 -0
  152. package/dist/dash/standalone/static/assets/pnext-client-95a81597ac1bdea0.js +1 -0
  153. package/dist/dash/standalone/static/assets/pnext-client-a4c2fb8a94ccce04.js +1 -0
  154. package/dist/dash/standalone/static/assets/pnext-client-a7faaaf8c4cc8145.js +1 -0
  155. package/dist/dash/standalone/static/assets/pnext-client-bab8ffb68e7dd229.js +1 -0
  156. package/dist/dash/standalone/static/assets/pnext-client-d9fab2611c2e7246.js +1 -0
  157. package/dist/dash/standalone/static/assets/pnext-client-f3804c9ffb299fe0.js +1 -0
  158. package/dist/{definition-4on4SG5J.js → definition-D0OpQfGX.js} +1 -1
  159. package/dist/{discover-DvzAbQvU.js → discover-BfYHHJN_.js} +1 -1
  160. package/dist/{dispatch-BaW2X6Sc.js → dispatch-BkoIU4GU.js} +2 -2
  161. package/dist/{docs-CbgaMPvq.js → docs-CxklYa3P.js} +1 -1
  162. package/dist/{drive-Tk6JvQK5.js → drive-MggMiKA0.js} +1 -1
  163. package/dist/env-BwFCHakK.js +1 -0
  164. package/dist/{exec-CAaYFJD1.js → exec-CNygM6yF.js} +2 -2
  165. package/dist/{executor-Chc0zawh.js → executor-Ds4wDCzV.js} +6 -6
  166. package/dist/flow/builtin/review/index.d.ts +2 -2
  167. package/dist/flow/builtin/review/index.js +10 -15
  168. package/dist/flow/index.d.ts +2 -2
  169. package/dist/flow/index.js +1 -1
  170. package/dist/{hook-COWDSO4a.js → hook-CVJU-ZD0.js} +1 -1
  171. package/dist/{index-ezhbF5wC.d.ts → index-CTAQrCRU.d.ts} +71 -66
  172. package/dist/integrations-DSZSa8Rc.js +9 -0
  173. package/dist/lib/broker.js +1 -1
  174. package/dist/{load-PqaDHiHX.js → load-BtIDghgd.js} +2 -2
  175. package/dist/{local-BzZuOwgI.js → local-CqOUpEtl.js} +1 -1
  176. package/dist/{local-BMGcCk8N.js → local-DFrTuJFN.js} +1 -1
  177. package/dist/{login-BDKTNynK.js → login-93jO9qjx.js} +1 -1
  178. package/dist/maintenance-BuDKnfc7.js +1 -0
  179. package/dist/{mcp-BNz_l5TV2.js → mcp-CTVOR7r6.js} +1 -1
  180. package/dist/{mcp-BGam3G_B.js → mcp-EwT2mCaa.js} +1 -1
  181. package/dist/{mcp-BGx48pyR.js → mcp-cEIva8Pd.js} +6 -4
  182. package/dist/{models-D1NXi6ni.js → models-mKyePWrV.js} +1 -1
  183. package/dist/{permission-BkYxjiFR.js → permission-F6F25GJU.js} +1 -1
  184. package/dist/post-DLenID75.js +11 -0
  185. package/dist/{refresh-yfEi5SQs.js → refresh-CWEpTAkD.js} +1 -1
  186. package/dist/{remote-rArUa01V.js → remote-BDMuKaON.js} +1 -1
  187. package/dist/remote-Cl-j8r3W.js +1 -0
  188. package/dist/{runner-DG9jrX5H.js → runner-DK0jnzPr.js} +1 -1
  189. package/dist/runner.json +1 -1
  190. package/dist/runner.tgz +0 -0
  191. package/dist/schema.js +1 -1
  192. package/dist/sdk.d.ts +49 -45
  193. package/dist/sdk.js +1 -1
  194. package/dist/serve-Cqlkgdfd.js +8 -0
  195. package/dist/{serve-B-5rDiZm.js → serve-DHe6dZM6.js} +1 -1
  196. package/dist/{session-Dtje9y-r.js → session-BMbMzzPu.js} +1 -1
  197. package/dist/{sessions-DIz9fyRN.js → sessions-BGUfSe8L.js} +1 -1
  198. package/dist/{shared--aE4olIO.js → shared-D-KqAi7b.js} +1 -1
  199. package/dist/{sign-in-wWkyaq5X.js → sign-in-Dv-rdYD4.js} +2 -2
  200. package/dist/{state-Br-Fuaxg.js → state-CxAUec80.js} +1 -1
  201. package/dist/store-BpDipcKB.js +349 -0
  202. package/dist/{task-CFt85vTy.js → task-BRHXn5y1.js} +1 -1
  203. package/dist/task-CzXNLREX.js +7 -0
  204. package/dist/{tool-search-BkdgVolu.js → tool-search-C9Ty3hhL.js} +1 -1
  205. package/dist/{tools-oQvFAnh5.js → tools-BCm26CeV.js} +1 -1
  206. package/dist/{tools-DNgEptor.js → tools-C69W1B6S.js} +1 -1
  207. package/dist/{tools-search-D1zArRyJ.js → tools-search-BDaeCoWe.js} +1 -1
  208. package/dist/{turn-Cc-v-eSy.js → turn-eI4iRPsq.js} +1 -1
  209. package/dist/{update-check-UyRob3yy.js → update-check-Bap3dwaj.js} +1 -1
  210. package/dist/{views-3TxH367C.js → views-Bxm_5J6T.js} +1 -1
  211. package/dist/worker-DGhRPDDt.js +7 -0
  212. package/dist/{worker-BMuKKiIa.js → worker-DHNBRRl-.js} +1 -1
  213. package/docs/agents/coder.md +1 -1
  214. package/docs/cli/index.md +5 -3
  215. package/docs/connections.md +1 -1
  216. package/docs/flows.md +1 -1
  217. package/docs/review.md +36 -8
  218. package/docs/self-host.md +2 -1
  219. package/package.json +1 -1
  220. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  221. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  222. package/dist/apps-B6mUToTa.js +0 -18
  223. package/dist/async-CNhQ4wyZ.js +0 -3
  224. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +0 -1
  225. package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +0 -1
  226. package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +0 -1
  227. package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +0 -1
  228. package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +0 -1
  229. package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +0 -1
  230. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +0 -1
  231. package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +0 -1
  232. package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +0 -1
  233. package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +0 -1
  234. package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +0 -9
  235. package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +0 -1
  236. package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +0 -1
  237. package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +0 -3
  238. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +0 -1
  239. package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +0 -1
  240. package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +0 -1
  241. package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +0 -1
  242. package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +0 -1
  243. package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +0 -1
  244. package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +0 -1
  245. package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +0 -1
  246. package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +0 -1
  247. package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +0 -1
  248. package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +0 -1
  249. package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +0 -1
  250. package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +0 -1
  251. package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +0 -1
  252. package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +0 -1
  253. package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +0 -1
  254. package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +0 -1
  255. package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +0 -1
  256. package/dist/dash/standalone/static/assets/pnext-client-ed31510d4615a5a5.js +0 -1
  257. package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +0 -1
  258. package/dist/env-_AxrvBXP.js +0 -1
  259. package/dist/integrations-BVmsk64f.js +0 -9
  260. package/dist/maintenance-d43Ml540.js +0 -1
  261. package/dist/remote-BbXx6S9P.js +0 -1
  262. package/dist/serve-CvnrGAj7.js +0 -12
  263. package/dist/store-CzQLgCzt.js +0 -352
  264. package/dist/task-N0qhnKpK.js +0 -7
  265. package/dist/worker-CIHY9L42.js +0 -7
  266. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{types.5bf5a41cedb54154.js → types.9d22123d6296f5af.js} +0 -0
  267. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.aae9fa481b9015d1.css.pnext-asset.js → task-view.440367ae07204ee7.css.pnext-asset.js} +0 -0
@@ -1,4 +1,4 @@
1
- import{Ea as e,ma as t}from"./args-CJsHYWbt.js";import{B as n,p as r,vt as i,z as a}from"./state-Br-Fuaxg.js";import{z as o}from"./config-D_RuO6gX.js";import{n as s}from"./connections-Cswv7r8Z.js";import{c,i as l,n as u}from"./load-PqaDHiHX.js";import{t as d}from"./integrations-BVmsk64f.js";import{f,i as ee,l as p}from"./definition-4on4SG5J.js";import"./turn-Cc-v-eSy.js";import m from"node:path";import h from"node:fs";import{execFile as te}from"node:child_process";import{randomUUID as ne}from"node:crypto";import{isDeepStrictEqual as g}from"node:util";const _=(e,t,n)=>(e.retryAt??1/0)<=t||!e.shownAt&&e.at<=t-n,v=3e4;var y=class extends Error{};const b=e=>`${e.source===`builtin`?0:1}:${e.id}`,x=(e,t=``)=>`token:${e}:${t}`,S=e=>`token-drop:${e}`;var re=e({agentProblems:()=>M,agentWithVersion:()=>D,diskFiles:()=>P,ensureBuiltinAgents:()=>L,getAgent:()=>w,getVersion:()=>E,listAgents:()=>T,publishAgent:()=>O,publishVersion:()=>k,seedBuiltinAgent:()=>F,seedBuiltinAgents:()=>I,setAgentSettings:()=>A,toAgent:()=>N,versionKey:()=>C});const C=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function w(e,t){return e.get(`agent`,t)}async function T(e){return(await e.list(`agent`)).map(e=>e.value)}async function E(e,t,n){let r=n??(await w(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,C(t,r))}async function D(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function O(e,t,n,r){let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},r)}async function k(e,t,n,r){if(!r)return(await O(e,t,n)).version;let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await w(e,t.id),s=r?r.version:o?await E(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>g(e.definition,i)&&e.systemPrompt===t.systemPrompt&&g(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return g(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,C(t.id,r),u);r++){let n=await e.get(`agentversion`,C(t.id,r));if(n&&l(n)){u=n;break}}let d=await w(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function A(e,t,n,r=Date.now()){let i=await w(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}function j(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},s=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),c=Object.fromEntries([...s].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),l=a.engine||a.model?{engine:void 0,model:void 0,effort:void 0}:{};return{...i,...l,...a,...i.access||a.access?{access:o(i.access,a.access)}:{},...s.size?{integrations:c}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function M(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];let r=ee(t.definition);if(r.length)return r;try{return u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:f(e.settings)}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function N(e,t,n,r=d){let i=j(t.definition,void 0,e.settings,r),a=j(t.definition,i,n,r),[o]=u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:f(a)}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function P(e,t=``){let n={};for(let r of h.readdirSync(m.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,P(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=h.readFileSync(m.join(e,i),`utf8`))}return n}async function F(e,n,r,i){let a=l()[r];return a?await k(e,{id:r,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${t()}`},n,i)!==i.version:!1}async function I(e,t,n){let r=n??await Promise.all(Object.keys(l()).map(t=>D(e,t))),i=!1;for(let n of Object.keys(l()))await F(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function L(e,t){let n=e.settings??={};return n.builtinAgents||=I(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}function R(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const z=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function B(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-B6mUToTa.js`).then(e=>e.Yt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function V(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new y(`Installation "${t}" is bound through another app.`)}function H(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function ie(e,t){let n=e.sending?.count??0;return t===void 0?n:e.items.findIndex((e,r)=>r<n&&e.admission===t)+1}function ae(e,t,n,r){let{sending:i,...a}=e,o=t?ie(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+v}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:H(s,s.owner,[],s.at)}function U(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:ne()},a=i.version??i.messages.length+i.more,o=i.messages.map((e,t)=>({sequence:t+1,...e}));if(t)return{...i,version:a+1,messages:o.length<50?[...o,{...t,sequence:a+1}]:o,more:i.more+(o.length<50?0:1)};if(i.epoch!==r)return i;let s=Math.max(i.acknowledged??0,Math.min(n,a)),c=o.filter(e=>e.sequence>s);return{...i,version:a,acknowledged:s,messages:c,more:a-s-c.length}}function oe(e){let{sending:t,...n}=e;return H({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,t){let n=`${e}:${t}`,r=i();return this.recordEvents.addEventListener(n,r.notify),{...r,close:()=>{this.recordEvents.removeEventListener(n,r.notify),r.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(z(e,t),()=>B(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||b(t)>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).sort((e,t)=>b(e.record)<b(t.record)?-1:1).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t,n){let{publishVersion:r}=await Promise.resolve().then(()=>re);return this.withAppLock(`agent:${e.id}`,async()=>{let i=(await this.listAgentsWithVersions(e.id))[0]??{};if(n&&(i.record?.currentVersion??0)!==n.currentVersion)return;let a=await r(this,{...e,definition:t.definition,systemPrompt:t.systemPrompt,files:t.files,commit:t.commit,origin:t.source,importedFrom:t.importedFrom},e.updatedAt,i);return{record:await this.get(`agent`,e.id),version:a,unchanged:a.version===i.record?.currentVersion}})}async listCredentials(e){return(await this.list(`credential`)).filter(({value:t})=>!t.owner||t.owner===e.owner).slice(0,e.limit)}async installationApp(e){let t=await this.get(`installation`,e);if(!t||t.deletedAt)return;let n=await this.get(`app`,t.app);return n?{installation:t,app:n}:void 0}async getApps(e){return(await Promise.all([...new Set(e)].map(async e=>({id:e,value:await this.get(`app`,e)})))).filter(e=>!!e.value)}async updateMetadata(e,t,n){let r=await this.get(e,t);return r?(await this.put(e,t,{...r,...n}),!0):!1}async listHistory(e){return(await this.list(`history`,{prefix:`${e}:`})).map(({value:{engine:e,conversation:t,savedAt:n}})=>({engine:e,conversation:t,savedAt:n})).sort((e,t)=>e.savedAt-t.savedAt)}async conversationState(e){let[t,n,r]=await Promise.all([this.get(`delivery`,e),this.get(`delivery`,`since:${e}`),this.get(`delivery`,`batch:${e}`)]),i=t&&await this.get(`task`,t.taskId);return{record:t,unseen:n,batch:r,...i?.task.flow==="default"?{status:i}:{}}}async markConversation(e,t,n,r,i){let a=await this.get(`delivery`,e);a?.taskId===t&&await this.put(`delivery`,e,{...a,at:r,seen:n},{ttlMs:i})}async heldTokens(e,t){let n={held:new Map,drops:new Map};for(let t of e)for(let e of await this.list(`snapshot`,{prefix:x(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(S(r),(await this.get(`snapshot`,S(r)))?.drop);return n}async holdToken(e){(await Promise.all(e.drops.map(async e=>(await this.get(`snapshot`,e.key))?.drop===e.drop))).every(Boolean)&&await this.put(`snapshot`,e.key,e.value,{ttlMs:e.ttlMs})}saveTaskSecrets(e,t){return this.withAppLock(`connections:${e}`,async n=>{let r=await n.get(`task`,e),i=!!(r&&![`completed`,`failed`,`cancelled`].includes(r.status));if(i)for(let e of t)await n.put(`snapshot`,e.id,{secret:e.value,expiresAt:e.expiresAt},{ttlMs:Math.max(1,e.expiresAt-this.now())});return i})}async dispatchState(e){let{key:t,owner:n,at:r,ttlMs:i}=e.delivery,a=this.live(`delivery`).get(t)?.value,o=a?.pending!==void 0&&(!a.owner||(a.at??0)+i<=r);return a&&!o?{claimed:!1}:(await this.put(`delivery`,t,{at:r,owner:n,pending:a?.pending??!0},a?.pending&&a.pending!==!0?{}:{ttlMs:i}),{claimed:!0})}async usageTotals(e){let{sumUsageTotals:t}=await import(`./apps-B6mUToTa.js`).then(e=>e.bt);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-B6mUToTa.js`).then(e=>e.bt);return n((await this.list(`usage`)).map(e=>e.value),e,t).totals}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}changed(e){}read(e,t){let n=t;if(e!==`app`||!n.shared)return t;let r=this.live(`app`).get(n.shared)?.value;return{...n,credentials:r?.credentials??``}}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){let n=this.live(e).get(t);return n&&this.read(e,n.value)}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,this.recordEvents.dispatchEvent(new Event(`login:${e}`)),a}async completeLogin(e,t,n){let{completeLogin:r}=await import(`./apps-B6mUToTa.js`).then(e=>e.Yt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&V([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>R(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async approvalPostsDue(e,t){return[...this.live(`delivery`).entries()].filter(([e])=>e.startsWith(`approval:`)).map(([e,t])=>({id:e,value:t.value})).filter(({value:n})=>_(n,e,t))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:U(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=U(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=H(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=oe(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+v,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=ae(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},se=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(h.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){h.mkdirSync(m.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{h.writeFileSync(n,t,{mode:384}),h.renameSync(n,e)}finally{h.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new s){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>B(this,e,t,n);return e===`credential`?this.connections().withLock(r,z(e,t)):super.withAppLock(z(e,t),r)}get appsFile(){return r(`apps.json`)}get deliveriesFile(){return m.join(n(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?a():e===`snapshot`?m.join(n(``),`snapshots.json`):m.join(n(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=h.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return m.join(n(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=h.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
1
+ import{Ea as e,ma as t}from"./args-CJsHYWbt.js";import{B as n,p as r,vt as i,z as a}from"./state-CxAUec80.js";import{z as o}from"./config-_32PHl9g.js";import{n as s}from"./connections-B90TemYf.js";import{c,i as l,n as u}from"./load-BtIDghgd.js";import{t as d}from"./integrations-DSZSa8Rc.js";import{f,i as ee,l as p}from"./definition-D0OpQfGX.js";import"./turn-eI4iRPsq.js";import m from"node:path";import h from"node:fs";import{execFile as te}from"node:child_process";import{randomUUID as ne}from"node:crypto";import{isDeepStrictEqual as g}from"node:util";const _=(e,t,n)=>(e.retryAt??1/0)<=t||!e.shownAt&&e.at<=t-n,v=3e4;var y=class extends Error{};const b=e=>`${e.source===`builtin`?0:1}:${e.id}`,x=(e,t=``)=>`token:${e}:${t}`,S=e=>`token-drop:${e}`;var re=e({agentProblems:()=>M,agentWithVersion:()=>D,diskFiles:()=>P,ensureBuiltinAgents:()=>L,getAgent:()=>w,getVersion:()=>E,listAgents:()=>T,publishAgent:()=>O,publishVersion:()=>k,seedBuiltinAgent:()=>F,seedBuiltinAgents:()=>I,setAgentSettings:()=>A,toAgent:()=>N,versionKey:()=>C});const C=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function w(e,t){return e.get(`agent`,t)}async function T(e){return(await e.list(`agent`)).map(e=>e.value)}async function E(e,t,n){let r=n??(await w(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,C(t,r))}async function D(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function O(e,t,n,r){let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},r)}async function k(e,t,n,r){if(!r)return(await O(e,t,n)).version;let i=p(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await w(e,t.id),s=r?r.version:o?await E(e,t.id,o.currentVersion):void 0,c=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),l=e=>g(e.definition,i)&&e.systemPrompt===t.systemPrompt&&g(e.files,a);if(s&&l(s)){let r=c(s.version,o.updatedAt);return g(o,r)||await e.put(`agent`,t.id,c(s.version,n)),s}o||await e.put(`agent`,t.id,c(0,n));let u;for(let r=(o?.currentVersion??0)+1;u={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,C(t.id,r),u);r++){let n=await e.get(`agentversion`,C(t.id,r));if(n&&l(n)){u=n;break}}let d=await w(e,t.id);return(!d||d.currentVersion<u.version)&&await e.put(`agent`,t.id,c(u.version,n)),u}async function A(e,t,n,r=Date.now()){let i=await w(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}function j(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},s=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),c=Object.fromEntries([...s].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),l=a.engine||a.model?{engine:void 0,model:void 0,effort:void 0}:{};return{...i,...l,...a,...i.access||a.access?{access:o(i.access,a.access)}:{},...s.size?{integrations:c}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function M(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];let r=ee(t.definition);if(r.length)return r;try{return u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:f(e.settings)}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function N(e,t,n,r=d){let i=j(t.definition,void 0,e.settings,r),a=j(t.definition,i,n,r),[o]=u({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:f(a)}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function P(e,t=``){let n={};for(let r of h.readdirSync(m.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,P(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=h.readFileSync(m.join(e,i),`utf8`))}return n}async function F(e,n,r,i){let a=l()[r];return a?await k(e,{id:r,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${t()}`},n,i)!==i.version:!1}async function I(e,t,n){let r=n??await Promise.all(Object.keys(l()).map(t=>D(e,t))),i=!1;for(let n of Object.keys(l()))await F(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function L(e,t){let n=e.settings??={};return n.builtinAgents||=I(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}function R(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const z=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function B(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-CCqOsEZH.js`).then(e=>e.qt),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-CCqOsEZH.js`).then(e=>e.yt);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-CCqOsEZH.js`).then(e=>e.yt);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-CCqOsEZH.js`).then(e=>e.qt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&V([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>R(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async approvalPostsDue(e,t){return[...this.live(`delivery`).entries()].filter(([e])=>e.startsWith(`approval:`)).map(([e,t])=>({id:e,value:t.value})).filter(({value:n})=>_(n,e,t))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:U(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=U(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=H(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=oe(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+v,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=ae(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},se=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(h.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){h.mkdirSync(m.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{h.writeFileSync(n,t,{mode:384}),h.renameSync(n,e)}finally{h.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new s){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>B(this,e,t,n);return e===`credential`?this.connections().withLock(r,z(e,t)):super.withAppLock(z(e,t),r)}get appsFile(){return r(`apps.json`)}get deliveriesFile(){return m.join(n(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?a():e===`snapshot`?m.join(n(``),`snapshots.json`):m.join(n(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=h.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return m.join(n(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=h.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
2
2
  `).filter(Boolean)){let{id:n,...r}=JSON.parse(e);t.set(n,r)}}catch(e){if(e.code!==`ENOENT`)throw e}return this.logBuckets.set(e,t),t}entries(e){if(e===`connection`)return this.connections().list().map(e=>[e.id,e]);if(e===`credential`)return this.connections().credentials().map(e=>[e.id,e.value]);if(G.has(e)){let t=this.apps(),n=Object.entries(t[e]??{});return e===`app`?n.map(([e,n])=>{let r=n,i=r.shared?t.app?.[r.shared]:void 0;return[e,r.shared?{...r,credentials:i?.credentials??``}:r]}):n}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(e===`connection`)return this.connections().get(t);if(e===`tasklog`){let e=this.loadLog(t.slice(0,t.lastIndexOf(`:`))).get(t);return e&&(e.expiresAt===void 0||e.expiresAt>this.now())?e.value:void 0}return!G.has(e)&&!K.has(e)?super.get(e,t):this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(e===`tasklog`)return this.putMany(e,[{id:t,value:n}],r);if(!G.has(e)&&!K.has(e))return super.put(e,t,n,r);await this.serial(()=>this.write(e,t,n),K.has(e))}write(e,t,n){if(e===`connection`){this.connections().put(n);return}if(e===`credential`&&t!==`claude`&&t!==`codex`){this.connections().putCredential(t,n);return}if(G.has(e)){let r=this.apps();e===`installation`&&V(Object.entries(r.installation??{}),t,n),e===`app`&&n.shared&&(n={...n,credentials:``}),r[e]={...r[e],[t]:n},Y(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else this.refuse(e)}remove(e,t){if(e===`connection`){let e=this.connections(),n=!!e.get(t);return e.delete(t),n}if(e===`credential`){let e=this.connections(),n=e.credentials().some(e=>e.id===t);return e.deleteCredential(t),n}if(G.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],Y(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}return!1}async putMany(e,t,n={}){if(e===`tasklog`){let e=new Map;for(let{id:r,value:i}of t){let t=r.slice(0,r.lastIndexOf(`:`)),a=e.get(t)??[];a.push(JSON.stringify({id:r,value:i,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})),e.set(t,a)}for(let[t,n]of e){let e=this.logFile(t);h.mkdirSync(m.dirname(e),{recursive:!0}),h.appendFileSync(e,`${n.join(`
3
3
  `)}\n`,{mode:384})}for(let{id:e,value:r}of t)this.loadLog(e.slice(0,e.lastIndexOf(`:`))).set(e,{value:r,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})}else if(!G.has(e)&&!K.has(e))await super.putMany(e,t,n);else for(let r of t)await this.put(e,r.id,r.value,n)}async list(e,t={}){if(e===`tasklog`){let e=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0;if(e!==void 0)this.loadLog(e);else{let e=m.dirname(this.logFile(``));if(h.existsSync(e))for(let t of h.readdirSync(e))t.endsWith(`.jsonl`)&&this.loadLog(decodeURIComponent(t.slice(0,-6)))}return(e===void 0?[...this.logBuckets.values()]:[this.loadLog(e)]).flatMap(e=>[...e]).filter(([e,n])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)&&(n.expiresAt===void 0||n.expiresAt>this.now())).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}if(!G.has(e)&&!K.has(e))return super.list(e,t);let n=e===`installation`&&t.agent?this.apps().app:void 0;return this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).filter(([e,r])=>R(e,r,t,n?.[r.app]?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([n,r])=>{let i=r;return{id:n,value:(e===`connection`&&t.secrets&&(t.secrets===`all`||i.provider===`mcp`&&i.auth===`oauth`)?this.connections().get(n):void 0)??r}})}async delete(e,t){if(e===`tasklog`){let e=t.slice(0,t.lastIndexOf(`:`)),n=this.loadLog(e);n.delete(t),Y(this.logFile(e),[...n].map(([e,t])=>JSON.stringify({id:e,...t})).join(`
4
4
  `)+`
@@ -1 +1 @@
1
- import{la as e}from"./args-CJsHYWbt.js";import{l as t}from"./state-Br-Fuaxg.js";import{t as n}from"./integrations-BVmsk64f.js";import{n as r,t as i}from"./crypto-Ittsv-m4.js";import{a,i as o,o as s,s as c}from"./task-N0qhnKpK.js";import l from"node:path";import u from"node:process";import d from"node:fs";import{execFile as f,spawn as p}from"node:child_process";import m from"node:fs/promises";import{promisify as h}from"node:util";const g=h(f);async function _(e){if(u.platform===`linux`){let t=await m.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await g(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function v(e){let t=i(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var y=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,n){let i=this.taskDir(t.id),s=t.runner===`local`?o(t):void 0;await m.mkdir(i,{recursive:!0});let c=d.openSync(l.join(i,`runner.log`),`a`);await m.mkdir(l.join(i,`bin`),{recursive:!0}),await m.writeFile(l.join(i,`bin/coder`),`#!/bin/sh\nexec "${u.execPath}" "${e}" "$@"\n`,{mode:493});let f=p(u.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:i,detached:!0,env:{PATH:[l.join(i,`bin`),u.env.PATH??``].join(l.delimiter),HOME:u.env.HOME??``,TMPDIR:u.env.TMPDIR??``,...u.env.CODER_HOME?{CODER_HOME:u.env.CODER_HOME}:{},...n,...s?{CODER_CHECKOUT_CACHE:s}:{},CODER_INBOX_SOCKET:a(i)},stdio:[`ignore`,c,c]});await new Promise((e,t)=>{f.once(`spawn`,e),f.once(`error`,t)}),d.closeSync(c);let h={child:f};this.children.set(f.pid,h),f.once(`close`,e=>{h.code=e}),f.unref();let g=await _(f.pid);if(!g)throw Error(`Could not identify the local runner process`);return r({pid:f.pid,dir:i,started:g})}async status(e){let{pid:t,started:n}=v(e),r=this.children.get(t);if(r?.code===void 0)try{if(u.kill(t,0),await _(t)===n)return{state:`running`}}catch{}return{state:`exited`,...r?.code==null?{}:{code:r.code}}}async stop(e){let{pid:t,started:n}=v(e);if(await _(t)===n)try{u.kill(-t,`SIGTERM`)}catch{try{u.kill(t,`SIGTERM`)}catch{}}}async remove(e,t){let n=this.taskDir(e);if(t){let{pid:e,started:n}=v(t);for(let t=0;t<100&&await _(e)===n;t++)await new Promise(e=>setTimeout(e,100))}await s(l.join(n,`work`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e)),await m.rm(n,{recursive:!0,force:!0}),await m.rm(a(n),{force:!0})}taskDir(e){return t(e,`task id`),l.join(this.workDir,e)}async push(e,t){let{pid:n,dir:r,started:i}=v(e);if(await _(n)!==i)throw Error(`The task process exited`);return c(a(r),t)}};function b(e,t,n={}){return new Promise((r,i)=>{let a=p(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function x(){return Object.values(n).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}export{b as n,x as r,y as t};
1
+ import{la as e}from"./args-CJsHYWbt.js";import{l as t}from"./state-CxAUec80.js";import{t as n}from"./integrations-DSZSa8Rc.js";import{n as r,t as i}from"./crypto-Ittsv-m4.js";import{a,i as o,o as s,s as c}from"./task-CzXNLREX.js";import l from"node:path";import u from"node:process";import d from"node:fs";import{execFile as f,spawn as p}from"node:child_process";import m from"node:fs/promises";import{promisify as h}from"node:util";const g=h(f);async function _(e){if(u.platform===`linux`){let t=await m.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await g(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function v(e){let t=i(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var y=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,n){let i=this.taskDir(t.id),s=t.runner===`local`?o(t):void 0;await m.mkdir(i,{recursive:!0});let c=d.openSync(l.join(i,`runner.log`),`a`);await m.mkdir(l.join(i,`bin`),{recursive:!0}),await m.writeFile(l.join(i,`bin/coder`),`#!/bin/sh\nexec "${u.execPath}" "${e}" "$@"\n`,{mode:493});let f=p(u.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:i,detached:!0,env:{PATH:[l.join(i,`bin`),u.env.PATH??``].join(l.delimiter),HOME:u.env.HOME??``,TMPDIR:u.env.TMPDIR??``,...u.env.CODER_HOME?{CODER_HOME:u.env.CODER_HOME}:{},...n,...s?{CODER_CHECKOUT_CACHE:s}:{},CODER_INBOX_SOCKET:a(i)},stdio:[`ignore`,c,c]});await new Promise((e,t)=>{f.once(`spawn`,e),f.once(`error`,t)}),d.closeSync(c);let h={child:f};this.children.set(f.pid,h),f.once(`close`,e=>{h.code=e}),f.unref();let g=await _(f.pid);if(!g)throw Error(`Could not identify the local runner process`);return r({pid:f.pid,dir:i,started:g})}async status(e){let{pid:t,started:n}=v(e),r=this.children.get(t);if(r?.code===void 0)try{if(u.kill(t,0),await _(t)===n)return{state:`running`}}catch{}return{state:`exited`,...r?.code==null?{}:{code:r.code}}}async stop(e){let{pid:t,started:n}=v(e);if(await _(t)===n)try{u.kill(-t,`SIGTERM`)}catch{try{u.kill(t,`SIGTERM`)}catch{}}}async remove(e,t){let n=this.taskDir(e);if(t){let{pid:e,started:n}=v(t);for(let t=0;t<100&&await _(e)===n;t++)await new Promise(e=>setTimeout(e,100))}await s(l.join(n,`work`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e)),await m.rm(n,{recursive:!0,force:!0}),await m.rm(a(n),{force:!0})}taskDir(e){return t(e,`task id`),l.join(this.workDir,e)}async push(e,t){let{pid:n,dir:r,started:i}=v(e);if(await _(n)!==i)throw Error(`The task process exited`);return c(a(r),t)}};function b(e,t,n={}){return new Promise((r,i)=>{let a=p(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function x(){return Object.values(n).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}export{b as n,x as r,y as t};
@@ -1,4 +1,4 @@
1
- import{c as e}from"./task-N0qhnKpK.js";import t from"node:path";import n from"node:process";import{spawn as r}from"node:child_process";import i from"node:fs/promises";const a=[`SIGTERM`,`SIGINT`],o=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Z0-9]|\r/g;function s(e,t){if(e===`codex`)return{file:`codex`,args:[`login`,`--device-auth`],env:{CODEX_HOME:t}};let r=`stty cols 4000 rows 50 2>/dev/null; exec claude setup-token`;return{file:`sh`,args:[`-c`,`cat | { ${n.platform===`darwin`?`script -q /dev/null sh -c '${r}'`:`script -qfec '${r}' /dev/null`}; kill 0; }`],env:{CLAUDE_CONFIG_DIR:t,BROWSER:`true`}}}function c(e){try{return JSON.parse(Buffer.from(String(e).split(`.`)[1]??``,`base64url`).toString())}catch{return{}}}function l(e){let t=c(JSON.parse(e).tokens?.id_token),n=t[`https://api.openai.com/auth`];return{...typeof t.email==`string`?{email:t.email}:{},...typeof n?.chatgpt_plan_type==`string`?{plan:n.chatgpt_plan_type}:{}}}function u(e,t){let n=t.replace(o,``),r=/\x1b\]8;[^;]*;(https:\/\/[^\x07\x1b]+)(?:\x07|\x1b\\)/.exec(t)?.[1],i=e===`claude`?r??/https:\/\/\S*(?:oauth|authorize)\S*(?=\s)/.exec(n)?.[0]:/https:\/\/\S+(?=\s)/.exec(n)?.[0],a=e===`codex`?/\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/.exec(n)?.[0]:void 0;if(!(!i||e===`codex`&&!a))return{url:i,...a?{code:a}:{}}}const d=/sk-ant-oat[\w-]+/,f=e=>e.replace(/[\w#.%-]{20,}|\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/g,`…`).slice(-600),p=/\x1b(?:\[([0-9;?<>=]*)[ -/]*([@-~])|\][^\x07\x1b]*(?:\x07|\x1b\\)|[()][\s\S]|[^[\]()])/y;var m=class{height;rows=[[]];row=0;col=0;saved=[0,0];rest=``;constructor(e=50){this.height=e}write(e){let t=this.rest+e;this.rest=``;for(let e=0;e<t.length;){if(t[e]===`\x1B`){p.lastIndex=e;let n=p.exec(t);if(!n){this.rest=t.slice(e,e+4096);return}n[2]&&!/^[?<>=]/.test(n[1])?this.csi(n[1].split(`;`),n[2]):n[0]===`\x1B7`?this.saved=[this.row,this.col]:n[0]===`\x1B8`&&([this.row,this.col]=this.saved),e+=n[0].length;continue}let n=t.codePointAt(e),r=String.fromCodePoint(n);e+=r.length,r===`\r`?this.col=0:r===`
1
+ import{c as e}from"./task-CzXNLREX.js";import t from"node:path";import n from"node:process";import{spawn as r}from"node:child_process";import i from"node:fs/promises";const a=[`SIGTERM`,`SIGINT`],o=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Z0-9]|\r/g;function s(e,t){if(e===`codex`)return{file:`codex`,args:[`login`,`--device-auth`],env:{CODEX_HOME:t}};let r=`stty cols 4000 rows 50 2>/dev/null; exec claude setup-token`;return{file:`sh`,args:[`-c`,`cat | { ${n.platform===`darwin`?`script -q /dev/null sh -c '${r}'`:`script -qfec '${r}' /dev/null`}; kill 0; }`],env:{CLAUDE_CONFIG_DIR:t,BROWSER:`true`}}}function c(e){try{return JSON.parse(Buffer.from(String(e).split(`.`)[1]??``,`base64url`).toString())}catch{return{}}}function l(e){let t=c(JSON.parse(e).tokens?.id_token),n=t[`https://api.openai.com/auth`];return{...typeof t.email==`string`?{email:t.email}:{},...typeof n?.chatgpt_plan_type==`string`?{plan:n.chatgpt_plan_type}:{}}}function u(e,t){let n=t.replace(o,``),r=/\x1b\]8;[^;]*;(https:\/\/[^\x07\x1b]+)(?:\x07|\x1b\\)/.exec(t)?.[1],i=e===`claude`?r??/https:\/\/\S*(?:oauth|authorize)\S*(?=\s)/.exec(n)?.[0]:/https:\/\/\S+(?=\s)/.exec(n)?.[0],a=e===`codex`?/\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/.exec(n)?.[0]:void 0;if(!(!i||e===`codex`&&!a))return{url:i,...a?{code:a}:{}}}const d=/sk-ant-oat[\w-]+/,f=e=>e.replace(/[\w#.%-]{20,}|\b[A-Z0-9]{4,}-[A-Z0-9]{4,}\b/g,`…`).slice(-600),p=/\x1b(?:\[([0-9;?<>=]*)[ -/]*([@-~])|\][^\x07\x1b]*(?:\x07|\x1b\\)|[()][\s\S]|[^[\]()])/y;var m=class{height;rows=[[]];row=0;col=0;saved=[0,0];rest=``;constructor(e=50){this.height=e}write(e){let t=this.rest+e;this.rest=``;for(let e=0;e<t.length;){if(t[e]===`\x1B`){p.lastIndex=e;let n=p.exec(t);if(!n){this.rest=t.slice(e,e+4096);return}n[2]&&!/^[?<>=]/.test(n[1])?this.csi(n[1].split(`;`),n[2]):n[0]===`\x1B7`?this.saved=[this.row,this.col]:n[0]===`\x1B8`&&([this.row,this.col]=this.saved),e+=n[0].length;continue}let n=t.codePointAt(e),r=String.fromCodePoint(n);e+=r.length,r===`\r`?this.col=0:r===`
2
2
  `?this.down():r===`\b`?this.col=Math.max(0,this.col-1):n>=32&&n!==127&&(this.line()[this.col++]=r)}}text(){return this.rows.map(e=>Array.from(e,e=>e??` `).join(``).trimEnd()).join(`
3
3
  `)}line(){return this.rows[this.row]??=[]}down(){this.row<this.height-1?this.row++:this.rows.splice(0,this.rows.length-this.height+1)}csi(e,t){let n=(t=0)=>Number(e[t])||1,r=Number(e[0])||0,i=this.height-1;if(t===`A`)this.row=Math.max(0,this.row-n());else if(t===`B`)this.row=Math.min(i,this.row+n());else if(t===`C`)this.col+=n();else if(t===`D`)this.col=Math.max(0,this.col-n());else if(t===`E`||t===`F`)this.row=Math.max(0,Math.min(i,this.row+(t===`E`?n():-n()))),this.col=0;else if(t===`G`)this.col=n()-1;else if(t===`d`)this.row=Math.min(i,n()-1);else if(t===`H`||t===`f`)this.row=Math.min(i,n()-1),this.col=n(1)-1;else if(t===`K`){let e=this.line();r===0?e.length=Math.min(e.length,this.col):r===1?e.fill(` `,0,this.col+1):e.length=0}else t===`J`?r===0?(this.line().length=Math.min(this.line().length,this.col),this.rows.length=Math.min(this.rows.length,this.row+1)):r>=2&&(this.rows=[]):t===`s`?this.saved=[this.row,this.col]:t===`u`&&([this.row,this.col]=this.saved)}};async function h(c,p){let{server:h,token:g}=e();delete n.env.CODER_TASK_TOKEN,delete n.env.CODER_LOGIN;let _=new AbortController,v=async(e,t)=>{let n=e?_.signal:void 0;for(let r=1;;r++){let i=await fetch(`${h}/logins/${encodeURIComponent(c)}${e}`,{method:t===void 0?`GET`:`POST`,...n?{signal:n}:{},headers:{authorization:`Bearer ${g}`,...t===void 0?{}:{"content-type":`application/json`}},...t===void 0?{}:{body:JSON.stringify(t)}}).catch(t=>{if(n?.aborted||e===`/input`||r>=10)throw t;console.error(`coder runner: Coder server did not answer: ${t.message}`)});if(i?.ok)return await i.json();if(i&&(i.status<500||r>=10))throw Error(`Coder server answered ${i.status}`);i&&console.error(`coder runner: Coder server answered ${i.status}`),await new Promise(e=>setTimeout(e,1e3))}},{engine:y}=await v(``),b=await i.mkdtemp(t.join(p,`.login-`)),x=s(y,b),S=r(x.file,x.args,{env:{...n.env,...x.env},stdio:[`pipe`,`pipe`,`pipe`],detached:!0}),C=()=>{try{n.kill(-S.pid,`SIGTERM`)}catch{}},w=``,T=new m,E=!1,D=!1,O=0,k,A,j,M=new Promise((e,t)=>{S.once(`error`,t),S.once(`close`,e)}),N=setTimeout(C,6e5);for(let e of a)n.once(e,C);let P=async()=>{for(;!_.signal.aborted;){let{code:e}=await v(`/input`);if(e){k=w.length,S.stdin.write(e),await new Promise(e=>setTimeout(e,500)),S.stdin.write(`\r`),n.stdout.write(`Sign-in code typed
4
4
  `);let t=k;setTimeout(()=>{k===t&&!E&&console.error(`coder runner: claude has not answered the code: ${JSON.stringify(f(T.text()))}`)},2e4).unref();return}}},F=e=>{if(w+=e,T.write(e),!D){let e=u(y,w.slice(O));e&&(D=!0,clearInterval(A),n.stdout.write(`Sign-in link ready
@@ -0,0 +1 @@
1
+ import{t as e}from"./errors-DK_trCff.js";import"./dispatch-BkoIU4GU.js";import{n as t}from"./env-BwFCHakK.js";import{p as n}from"./drizzle-orm-CYU7WOQS.js";import{secret as r}from"./schema.js";import{Er as i,Zt as a,ai as o,ii as s,ni as c,oi as l}from"./apps-CCqOsEZH.js";import u from"node:process";async function d(t){try{return await t()}catch(t){throw t instanceof e?t:new e(`server`,t instanceof Error?t.message:String(t))}}function f(f={}){return d(async()=>{let d=t(f.env??u.env);if(!d.encryptionKey)throw new e(`invalid-option`,`SERVER_ENCRYPTION_KEY is required to rotate keys.`,{hint:`Set the new key in SERVER_ENCRYPTION_KEY and the old key in SERVER_ENCRYPTION_KEY_PREVIOUS.`});let p=await i(d);try{let e=p.connection?.db;if(!e)return{moved:await a(p.store(p.defaultOrganizationId),d)};let t=o(d.encryptionKey),i=0;for(let a of await e.select().from(r))l(d,a.value)!==t&&(await e.update(r).set({value:s(d,c(d,a.value))}).where(n(r.id,a.id)),i++);return{moved:i}}finally{await p.close()}})}export{f as rotateKey};
@@ -1 +1 @@
1
- import{F as e,O as t,T as n,ba as r,j as i,t as a,u as o,va as s}from"./args-CJsHYWbt.js";import{command as c}from"./cli.js";import{n as l}from"./permission-BkYxjiFR.js";import{serve as u}from"./serve-DoYbHm_k.js";const d=a(n(t(i(),e())),`The tool's input.`),f=(e,t)=>s({name:`coder`,description:`Coder approval policy`,commands:[r({name:`approval_prompt`,description:`Coder approval policy for claude permission prompts.`,args:{tool_name:o(`The tool Claude asks to run.`),input:d,tool_input:d},access:`read`,run:n=>l(e,t,n),mcp:{text:e=>JSON.stringify(e)}})]}),p=c({name:`mcp`,description:`the coder MCP server engines call back into`,access:`write`,args:{"task-id":o()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,run:async({args:e,cwd:t})=>{await(await u(f(t,e[0]),`stdio`)).done}});export{p as commandTaskMcp};
1
+ import{F as e,O as t,T as n,ba as r,j as i,t as a,u as o,va as s}from"./args-CJsHYWbt.js";import{command as c}from"./cli.js";import{n as l}from"./permission-F6F25GJU.js";import{serve as u}from"./serve-DoYbHm_k.js";const d=a(n(t(i(),e())),`The tool's input.`),f=(e,t)=>s({name:`coder`,description:`Coder approval policy`,commands:[r({name:`approval_prompt`,description:`Coder approval policy for claude permission prompts.`,args:{tool_name:o(`The tool Claude asks to run.`),input:d,tool_input:d},access:`read`,run:n=>l(e,t,n),mcp:{text:e=>JSON.stringify(e)}})]}),p=c({name:`mcp`,description:`the coder MCP server engines call back into`,access:`write`,args:{"task-id":o()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,run:async({args:e,cwd:t})=>{await(await u(f(t,e[0]),`stdio`)).done}});export{p as commandTaskMcp};
@@ -1 +1 @@
1
- import{la as e,ua as t}from"./args-CJsHYWbt.js";import{s as n,t as r}from"./emit-BgeqsCkC.js";import{l as i,u as a,z as o}from"./config-D_RuO6gX.js";import{v as s}from"./connections-Cswv7r8Z.js";import{t as c}from"./dispatch-BaW2X6Sc.js";import{o as l,s as u}from"./mcp-BGx48pyR.js";import{n as d,r as f,t as p}from"./tools-oQvFAnh5.js";import{o as m}from"./async-CNhQ4wyZ.js";import{i as h,n as g,t as _}from"./tool-search-BkdgVolu.js";import v from"node:path";import y from"node:process";const b=[`CODER_HOME`,`CODER_MCP_MODE`,a,i,`CODEX_HOME`,`CLAUDE_CONFIG_DIR`,`CLAUDE_CODE_PROJECT_DIR_NAME`],x=()=>Object.fromEntries(b.flatMap(e=>y.env[e]?[[e,y.env[e]]]:[])),S=(e,t)=>!!e.readOnly||o(e.access,t)===`read-only`;async function C(e){let t=await s(e,fetch,AbortSignal.timeout(3e4));try{return await t.tools()}finally{await t.close().catch(()=>{})}}async function w(n,r,i,a){let s=e=>i.find(t=>t.name===e&&!t.command&&!t.url),d=s(`conversation`),f=s(t),m=e=>e.command?{...e,env:{...e.env,[c]:`1`}}:e,_=n.conversation?{...E(f?.env),connect:`start`}:void 0,b=[..._?[_]:[],...i.filter(e=>e!==d&&e!==f)].map(e=>m(S(e,e===_?`auto`:o(n.access,a.access))?{...e,readOnly:!0}:e)),C=A(n),w=p.flatMap(e=>{let t=e.platform&&u(i,e.platform);return t?[[l(e.platform),t]]:[]}),D=d?.env?.CODER_REPLY_URL,O=d?.env?.CODER_REPLY_TOKEN,j=D&&URL.canParse(D)?`${new URL(D).origin}/dash/settings/connections`:void 0;return{servers:[...C.length?[T(v.join(r,`job.json`),C,{...d?.env,...Object.fromEntries(w)})]:[],...b.length?[{...g({command:y.execPath,args:[e,`task`,`tools-search`],env:x()},b,j,D&&O?{url:D,token:O}:void 0,h(await k(b))),alwaysLoad:!0}]:[]].map(m),listed:b}}function T(t,r,i={}){return{name:d.name,command:y.execPath,args:[e,`task`,`tools`,...r],env:{...i,...x(),CODER_HISTORY_TASK:t},tools:r,alwaysLoad:!0,instructions:n(f(r))}}function E(n={}){return{name:t,command:y.execPath,args:[e,`mcp`],env:{...n,...x()}}}const D=(e,t=fetch)=>async(n,r)=>{let i=await t(`${e.url}/connection`,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:n.connection??n.name,url:n.url,connectionCreatedAt:n.connectionCreatedAt,...r?{refused:r}:{}}),signal:AbortSignal.timeout(1e4)});if(i.status===403)throw Error((await i.json()).error);if(!i.ok)throw Error(`The connection is unavailable (${i.status})`);return(await i.json()).token};async function O(e={}){let t=await import(`./context-CFrDYenS.js`),i=e.CODER_MCP_MODE===`cloud`?t.cloudApp:t.app,a=r(i).commands.flatMap(e=>e.command.mcp===!1?[]:[e.id]);return{description:i.description,started:{instructions:n(i,{tools:!1}),tools:[...a,...i.skills?.length?[`load_skill`]:[]]}}}function k(e){return Promise.all(e.map(async e=>{if(e.connect!==`start`)return e;if(e.name===`coder`)return{...e,...await O(e.env)};let t=await _(e,1e4).catch(()=>void 0);await t?.client.close().catch(()=>{});let n=t?.serverInfo?.description;return t?{...e,...n?{description:n}:{},started:{instructions:t.instructions,tools:t.tools.map(e=>e.name)}}:e}))}function A(e){let t=m(e);return[...p.some(e=>e.flow===t)?[]:p.map(e=>e.name),...(e.access??`auto`)===`auto`?[`escalate`]:[],...e.conversation?[`reply`,`react`,`history`]:[]]}export{C as listServerTools,D as serverCredential,A as taskToolNames,T as taskToolServer,w as turnToolServers};
1
+ import{la as e,ua as t}from"./args-CJsHYWbt.js";import{s as n,t as r}from"./emit-BgeqsCkC.js";import{l as i,u as a,z as o}from"./config-_32PHl9g.js";import{v as s}from"./connections-B90TemYf.js";import{t as c}from"./dispatch-BkoIU4GU.js";import{o as l,s as u}from"./mcp-cEIva8Pd.js";import{n as d,r as f,t as p}from"./tools-BCm26CeV.js";import{o as m}from"./async-BP5q3Une.js";import{i as h,n as g,t as _}from"./tool-search-C9Ty3hhL.js";import v from"node:path";import y from"node:process";const b=[`CODER_HOME`,`CODER_MCP_MODE`,a,i,`CODEX_HOME`,`CLAUDE_CONFIG_DIR`,`CLAUDE_CODE_PROJECT_DIR_NAME`],x=()=>Object.fromEntries(b.flatMap(e=>y.env[e]?[[e,y.env[e]]]:[])),S=(e,t)=>!!e.readOnly||o(e.access,t)===`read-only`;async function C(e){let t=await s(e,fetch,AbortSignal.timeout(3e4));try{return await t.tools()}finally{await t.close().catch(()=>{})}}async function w(n,r,i,a){let s=e=>i.find(t=>t.name===e&&!t.command&&!t.url),d=s(`conversation`),f=s(t),m=e=>e.command?{...e,env:{...e.env,[c]:`1`}}:e,_=n.conversation?{...E(f?.env),connect:`start`}:void 0,b=[..._?[_]:[],...i.filter(e=>e!==d&&e!==f)].map(e=>m(S(e,e===_?`auto`:o(n.access,a.access))?{...e,readOnly:!0}:e)),C=A(n),w=p.flatMap(e=>{let t=e.platform&&u(i,e.platform);return t?[[l(e.platform),t]]:[]}),D=d?.env?.CODER_REPLY_URL,O=d?.env?.CODER_REPLY_TOKEN,j=D&&URL.canParse(D)?`${new URL(D).origin}/dash/settings/connections`:void 0;return{servers:[...C.length?[T(v.join(r,`job.json`),C,{...d?.env,...Object.fromEntries(w)})]:[],...b.length?[{...g({command:y.execPath,args:[e,`task`,`tools-search`],env:x()},b,j,D&&O?{url:D,token:O}:void 0,h(await k(b))),alwaysLoad:!0}]:[]].map(m),listed:b}}function T(t,r,i={}){return{name:d.name,command:y.execPath,args:[e,`task`,`tools`,...r],env:{...i,...x(),CODER_HISTORY_TASK:t},tools:r,alwaysLoad:!0,instructions:n(f(r))}}function E(n={}){return{name:t,command:y.execPath,args:[e,`mcp`],env:{...n,...x()}}}const D=(e,t=fetch)=>async(n,r)=>{let i=await t(`${e.url}/connection`,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:n.connection??n.name,url:n.url,connectionCreatedAt:n.connectionCreatedAt,...r?{refused:r}:{}}),signal:AbortSignal.timeout(1e4)});if(i.status===403)throw Error((await i.json()).error);if(!i.ok)throw Error(`The connection is unavailable (${i.status})`);return(await i.json()).token};async function O(e={}){let t=await import(`./context-DVGPu7f_.js`),i=e.CODER_MCP_MODE===`cloud`?t.cloudApp:t.app,a=r(i).commands.flatMap(e=>e.command.mcp===!1?[]:[e.id]);return{description:i.description,started:{instructions:n(i,{tools:!1}),tools:[...a,...i.skills?.length?[`load_skill`]:[]]}}}function k(e){return Promise.all(e.map(async e=>{if(e.connect!==`start`)return e;if(e.name===`coder`)return{...e,...await O(e.env)};let t=await _(e,1e4).catch(()=>void 0);await t?.client.close().catch(()=>{});let n=t?.serverInfo?.description;return t?{...e,...n?{description:n}:{},started:{instructions:t.instructions,tools:t.tools.map(e=>e.name)}}:e}))}function A(e){let t=m(e);return[...p.some(e=>e.flow===t)?[]:p.map(e=>e.name),...(e.access??`auto`)===`auto`?[`escalate`]:[],...e.conversation?[`reply`,`react`,`history`]:[]]}export{C as listServerTools,D as serverCredential,A as taskToolNames,T as taskToolServer,w as turnToolServers};
@@ -1,4 +1,4 @@
1
- import{a as e,l as t}from"./connections-Cswv7r8Z.js";import{t as n}from"./integrations-BVmsk64f.js";import r from"node:path";import i from"node:process";import a from"node:os";import o from"node:fs/promises";function s(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const c=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function l(e,t,r){let{tools:i,repos:a}=n[e],{readOnly:o,...s}=i.server(t,r.event,r.token,r.owner),l=Object.entries(s.env??{}).find(([,e])=>e===r.token)?.[0],d=t.some(e=>!i.presets[`read-only`].includes(e))?`auto`:`read-only`,f=r.account??(r.event?.integration===e?r.event.repo?.owner:void 0);return{...s,name:c(u(e,r.account)),integration:e,...f?{account:f}:{},access:d,...o?{readOnly:o}:{},...l?{credentialFields:{env:l}}:{},...a?.credentialUsername?{gitCredential:!0}:{}}}const u=(e,t)=>t?`${e}:${t}`:e;function d(e){if(!e?.integration||!n[e.integration])return;let t=l(e.integration,[],{token:`\0`}),r=Object.entries(t.env??{}).find(([,e])=>e===`\0`)?.[0],i=t.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function f(e,t){return d(e.find(e=>e.name===t))}function p(e,t){let r=new Set;return Object.keys(t).flatMap(i=>{let[a,o]=i.split(/:(.*)/),s=e.tools[a],c=t[i];if(!n[a]||!c||!s?.length)return[];let u=l(a,s,{token:c,...e.event?{event:e.event}:{},...o?{account:o}:{}}),d=u.name;for(let e=2;r.has(d);e++)d=`${u.name}-${e}`;return r.add(d),[{...u,name:d}]})}function m(e,n,r){let i=l(e.provider,n,{token:`\0`,...r?{event:r}:{},...e.owner?{owner:e.owner}:{}});for(let e of[`env`,`headers`])i[e]&&(i[e]=Object.fromEntries(Object.entries(i[e]).filter(([,e])=>!e.includes(`\0`))));return{...i,name:t(e),connection:e.id,credentialOnUse:i.credentialFields,owner:e.owner,account:e.login??e.account}}function h(t,n,r){return e(Object.fromEntries([...p(t,n).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}],[`native:coder`,{name:`coder`,resolved:!0,env:{CODER_SERVER:new URL(r.url).origin,CODER_TASK_TOKEN:r.token,...r.dashboard?{CODER_DASHBOARD:r.dashboard}:{}},credentialFields:{env:`CODER_TASK_TOKEN`}}]]:[]]))}async function g(e){let t=e.find(e=>e.name===`conversation`)?.env,s=t?.CODER_REPLY_URL&&t.CODER_REPLY_TOKEN?{url:`${t.CODER_REPLY_URL}/connection`,token:t.CODER_REPLY_TOKEN}:void 0,c=e.flatMap(e=>{let t=e.integration?n[e.integration]?.repos:void 0;if(!e.gitCredential||!t?.credentialUsername)return[];let r=d(e),i=s&&e.credentialOnUse&&e.access!==`read-only`?e.connection:void 0;return(r||i)&&!/[\r\n]/.test(r??``)?t.cloneHosts.map(n=>({host:n,username:t.credentialUsername,...r?{password:r}:{},...i?{connection:i}:{},...e.account?{owner:e.account.toLowerCase()}:{}})):[]});if(!c.length)return{env:{},close:async()=>{}};let l=await o.mkdtemp(r.join(a.tmpdir(),`coder-git-`)),u=r.join(l,`credential.cjs`);try{await o.writeFile(r.join(l,`tokens.json`),JSON.stringify({credentials:c,endpoint:s}),{mode:384}),await o.writeFile(u,`const fs = require('node:fs');
1
+ import{a as e,l as t}from"./connections-B90TemYf.js";import{t as n}from"./integrations-DSZSa8Rc.js";import r from"node:path";import i from"node:process";import a from"node:os";import o from"node:fs/promises";function s(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const c=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function l(e,t,r){let{tools:i,repos:a}=n[e],{readOnly:o,...s}=i.server(t,r.event,r.token,r.owner),l=Object.entries(s.env??{}).find(([,e])=>e===r.token)?.[0],d=t.some(e=>!i.presets[`read-only`].includes(e))?`auto`:`read-only`,f=r.account??(r.event?.integration===e?r.event.repo?.owner:void 0);return{...s,name:c(u(e,r.account)),integration:e,...f?{account:f}:{},access:d,...o?{readOnly:o}:{},...l?{credentialFields:{env:l}}:{},...a?.credentialUsername?{gitCredential:!0}:{}}}const u=(e,t)=>t?`${e}:${t}`:e;function d(e){if(!e?.integration||!n[e.integration])return;let t=l(e.integration,[],{token:`\0`}),r=Object.entries(t.env??{}).find(([,e])=>e===`\0`)?.[0],i=t.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function f(e,t){return d(e.find(e=>e.name===t))}function p(e,t){let r=new Set;return Object.keys(t).flatMap(i=>{let[a,o]=i.split(/:(.*)/),s=e.tools[a],c=t[i];if(!n[a]||!c||!s?.length)return[];let u=l(a,s,{token:c,...e.event?{event:e.event}:{},...o?{account:o}:{}}),d=u.name;for(let e=2;r.has(d);e++)d=`${u.name}-${e}`;return r.add(d),[{...u,name:d}]})}function m(e,n,r){let i=l(e.provider,n,{token:`\0`,...r?{event:r}:{},...e.owner?{owner:e.owner}:{}});for(let e of[`env`,`headers`])i[e]&&(i[e]=Object.fromEntries(Object.entries(i[e]).filter(([,e])=>!e.includes(`\0`))));return{...i,name:t(e),connection:e.id,credentialOnUse:i.credentialFields,owner:e.owner,account:e.login??e.account}}function h(t,n,r){return e(Object.fromEntries([...p(t,n).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}],[`native:coder`,{name:`coder`,resolved:!0,env:{CODER_SERVER:new URL(r.url).origin,CODER_TASK_TOKEN:r.token,...r.dashboard?{CODER_DASHBOARD:r.dashboard}:{}},credentialFields:{env:`CODER_TASK_TOKEN`}}]]:[]]))}async function g(e,t){return(await Promise.all(t.map(async t=>{try{let n=await fetch(e.url,{method:`POST`,headers:{authorization:`Bearer ${e.token}`,"content-type":`application/json`},body:JSON.stringify({connection:t,git:!0}),signal:AbortSignal.timeout(1e4)});if(!n.ok)return;let{name:r,email:i}=(await n.json()).author??{};return{connection:t,...typeof r==`string`&&typeof i==`string`?{author:{name:r,email:i}}:{}}}catch(e){console.error(`coder: act-as probe failed for ${t}`,e);return}}))).find(e=>e!==void 0)}const _=e=>e?{GIT_AUTHOR_NAME:e.name,GIT_COMMITTER_NAME:e.name,GIT_AUTHOR_EMAIL:e.email,GIT_COMMITTER_EMAIL:e.email}:{};async function v(e){let t=e.find(e=>e.name===`conversation`)?.env,s=t?.CODER_REPLY_URL&&t.CODER_REPLY_TOKEN?{url:`${t.CODER_REPLY_URL}/connection`,token:t.CODER_REPLY_TOKEN}:void 0,c=e.flatMap(e=>{let t=e.integration?n[e.integration]?.repos:void 0;if(!e.gitCredential||!t?.credentialUsername)return[];let r=d(e),i=s&&e.credentialOnUse&&e.access!==`read-only`?e.connection:void 0;return(r||i)&&!/[\r\n]/.test(r??``)?t.cloneHosts.map(n=>({host:n,username:t.credentialUsername,...r?{password:r}:{},...i?{connection:i}:{},...e.account?{owner:e.account.toLowerCase()}:{},actAs:!1})):[]}),l=[...new Set(c.flatMap(e=>e.connection??[]))],u=s&&l.length?await g(s,l):void 0;for(let e of c)e.actAs=!!u&&!!e.connection&&e.connection===u.connection;let f=i.env.CODER_GIT_AUTHOR?JSON.parse(i.env.CODER_GIT_AUTHOR):void 0,p=_(u?u.author:f);if(!c.length)return{env:p,close:async()=>{}};let m=await o.mkdtemp(r.join(a.tmpdir(),`coder-git-`)),h=r.join(m,`credential.cjs`);try{let e={credentials:c,...c.some(e=>e.connection)?{endpoint:s}:{}};await o.writeFile(r.join(m,`tokens.json`),JSON.stringify(e),{mode:384}),await o.writeFile(h,`const fs = require('node:fs');
2
2
  let input = '';
3
3
  process.stdin.on('data', data => input += data);
4
4
  process.stdin.on('end', async () => {
@@ -8,9 +8,11 @@ process.stdin.on('end', async () => {
8
8
  const owner = (fields.path || '').split('/')[0].toLowerCase();
9
9
  const hosted = credentials.filter(entry => fields.protocol === 'https' && fields.host === entry.host);
10
10
  const apps = hosted.filter(entry => !entry.connection);
11
- const members = hosted.filter(entry => entry.connection);
11
+ const members = hosted.filter(entry => entry.connection && !entry.actAs);
12
12
  const covering = apps.find(entry => entry.owner === owner);
13
- const ordered = covering
13
+ // The account acted as is the only credential: refused, the push fails rather than pushing another way under its name.
14
+ const acting = hosted.filter(entry => entry.actAs);
15
+ const ordered = acting.length ? acting : covering
14
16
  ? [covering]
15
17
  : [...members.filter(entry => entry.owner === owner), ...members.filter(entry => entry.owner !== owner), ...apps.filter(entry => !entry.owner), ...apps.filter(entry => entry.owner)];
16
18
  for (const credential of ordered) {
@@ -22,4 +24,4 @@ process.stdin.on('end', async () => {
22
24
  if (password) return process.stdout.write('username=' + credential.username + '\\npassword=' + password + '\\n');
23
25
  }
24
26
  });
25
- `,{mode:384});let e=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,t=Number(i.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(t)||t<0||t>1e3)throw Error(`Invalid git config count`);return{env:{GIT_CONFIG_COUNT:String(t+3),[`GIT_CONFIG_KEY_${t}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${t}`]:``,[`GIT_CONFIG_KEY_${t+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${t+1}`]:`!${e(i.execPath)} ${e(u)}`,[`GIT_CONFIG_KEY_${t+2}`]:`credential.useHttpPath`,[`GIT_CONFIG_VALUE_${t+2}`]:`true`},close:()=>o.rm(l,{recursive:!0,force:!0})}}catch(e){throw await o.rm(l,{recursive:!0,force:!0}),e}}export{c as a,h as i,g as n,s as o,u as r,f as s,m as t};
27
+ `,{mode:384});let t=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,n=Number(i.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(n)||n<0||n>1e3)throw Error(`Invalid git config count`);return{env:{...p,GIT_CONFIG_COUNT:String(n+3),[`GIT_CONFIG_KEY_${n}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${n}`]:``,[`GIT_CONFIG_KEY_${n+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${n+1}`]:`!${t(i.execPath)} ${t(h)}`,[`GIT_CONFIG_KEY_${n+2}`]:`credential.useHttpPath`,[`GIT_CONFIG_VALUE_${n+2}`]:`true`},close:()=>o.rm(m,{recursive:!0,force:!0})}}catch(e){throw await o.rm(m,{recursive:!0,force:!0}),e}}export{c as a,h as i,v as n,s as o,u as r,f as s,m as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{B as n,C as r,G as i,O as a,R as o,S as s,b as c,c as l,f as u,j as d,k as f,r as p,v as m,w as h,x as g}from"./config-D_RuO6gX.js";import{n as _}from"./remote-BbXx6S9P.js";import{M as v,O as y}from"./dispatch-BaW2X6Sc.js";import b from"node:path";import x from"node:process";var S=e({detectWireApi:()=>G,models:()=>U,probeEndpoint:()=>w});const C=new Set([`codex`,`claude`,`custom`]);async function w(e,t={}){let n=`key`in t?t.key:e.envKey?x.env[e.envKey]:void 0,r=t.fetch??fetch,i=c(e.baseUrl,`models`),a=null;for(let t of i)try{let i=await r(t,{headers:n?{Authorization:`Bearer ${n}`}:{},signal:AbortSignal.timeout(5e3)});if(!i.ok){a=i.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${t} -> HTTP ${i.status}`};continue}let o=await i.json().catch(()=>null),s=Array.isArray(o?.data)?o.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};let c=Object.fromEntries(o.data.flatMap(e=>{let t=T(e.context_window??e.context_length??e.max_model_len);return typeof e.id==`string`&&t?[[e.id,t]]:[]})),l=Object.keys(c).length?c:await E(e.baseUrl,e.model?[e.model]:s,n,r),u=Object.keys(l).length?{contextWindows:l}:{};if(!e.model)return{reachable:!0,modelListed:null,models:s,...u,detail:`endpoint reachable; ${s.length} models listed`};let d=s.includes(e.model);return{reachable:!0,modelListed:d,models:s,...u,detail:d?`endpoint reachable; model "${e.model}" listed`:`endpoint reachable, but "${e.model}" is not in its model list`}}catch(e){a={reachable:!1,modelListed:null,models:null,detail:`${t} unreachable (${e instanceof Error?e.message:String(e)})`}}return a}const T=e=>Number.isInteger(e)&&e>0?e:void 0;async function E(e,t,n,r){let i=`${a(e).replace(/\/v1$/,``)}/api/show`,o=async e=>{let t=await r(i,{method:`POST`,headers:{"content-type":`application/json`,...n?{Authorization:`Bearer ${n}`}:{}},body:JSON.stringify({model:e}),signal:AbortSignal.timeout(5e3)}).catch(()=>null),a=(t?.ok?await t.json().catch(()=>null):null)?.model_info??{},o=Object.keys(a).find(e=>e.endsWith(`.context_length`));return o?T(a[o]):void 0},[s,...c]=t,l=s?await o(s):void 0;if(!l)return{};let u=await Promise.all(c.map(async e=>[e,await o(e)]));return Object.fromEntries([[s,l],...u].filter(e=>!!e[1]))}function D(e,t){i(e,e=>{e.models=e.models??{},t(e.models)})}const O=(e,t=p)=>Object.fromEntries(Object.entries(t).flatMap(([t,n])=>{let[r,i]=n.split(`/`);return r===e&&i?[[t,i]]:[]}));function k(e){let t=e.models??{},n=Object.entries(t).filter(e=>r(e[1])),i=Object.entries(t).filter(e=>g(e[1])).map(([t,n])=>{let r=u(n,e),i=O(r.engine),a=(r.model&&i[r.model])??r.model,o=()=>[r.engine,r.model,r.effort].filter(Boolean).join(`/`),c=s(t)?t:Object.entries(i).find(([,e])=>e===a)?.[0];return{name:t,spec:o(),replaces:c,disabled:!1}}),a=new Map;for(let e of i)e.replaces&&(e.name===e.replaces||!a.has(e.replaces))&&a.get(e.replaces)?.name!==e.replaces&&a.set(e.replaces,e);let o=e=>t[e]===!1,c=i.filter(e=>![...a.values()].some(t=>t.name===e.name));return{models:t,endpoints:n,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=a.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:o(e)}}),...c.filter(t=>t.spec.startsWith(`${e}/`)).map(({name:e,spec:t,disabled:n})=>({alias:e,spec:t,disabled:n}))],toggledSlugs:Object.entries(t).filter(([e,t])=>t===!1&&!s(e)).map(([e])=>({name:e,disabled:!0})),disabled:o}}async function A(e,t){let n=t?await _(t).models.list():void 0,{endpoints:r,providerRows:i,toggledSlugs:a}=k(n?{models:n.models}:h(e)),o=await Promise.all(r.map(async([e,t])=>({name:e,...t,...n?{}:{probe:await w(t)}})));return{codex:i(`codex`,O(`codex`,n?.builtin)),claude:i(`claude`,O(`claude`,n?.builtin)),custom:o,...a.length?{toggles:a}:{}}}async function j(e,t,n,r){let i=await G(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi;let o=await w(t),s=o.contextWindows?.[t.model];!t.contextWindow&&s&&(t.contextWindow=s),D(n,n=>{n[e]=t});let c=y(v(r)),l=v(r);return{name:e,entry:t,file:n,probe:o,codex:l,install:c,nativeResponses:a,keyMissing:!!(t.envKey&&!x.env[t.envKey]),ready:o.reachable&&l.available}}const M=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR] [--context-window <tokens>]`,N=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR] [--context-window <tokens>]`,P=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex/luna)`,F=`List them: coder model list`;function I(e,n,r){if(!e)throw new t(`invalid-option`,`Missing model name.`,{hint:r});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new t(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(l.has(e)||n===`model`&&(C.has(e)||s(e)))throw new t(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function L(e,n,i){I(n,`model`,M);let o=h(e).models?.[n];if(o)throw new t(`invalid-option`,r(o)?`Custom model "${n}" already exists.`:`"${n}" is already configured as an ${g(o)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${n} [--base-url|--model|--env-key], or remove it first.`});if(!i.baseUrl||!i.model)throw new t(`invalid-option`,`Missing --base-url or --model.`,{hint:M});return j(n,{baseUrl:a(i.baseUrl),model:i.model,...i.envKey?{envKey:i.envKey}:{},...i.contextWindow?{contextWindow:i.contextWindow}:{}},m(e,i.workspace),e)}async function R(e,n,i){let o=n?h(e).models?.[n]:void 0,s=o&&r(o)?o:void 0;if(!n||!s)throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:N});if(!i.baseUrl&&!i.model&&!i.envKey&&!i.contextWindow)throw new t(`invalid-option`,`Nothing to update: pass --base-url, --model, --env-key, or --context-window.`,{hint:N});let c={...s,...i.baseUrl?{baseUrl:a(i.baseUrl)}:{},...i.model?{model:i.model}:{},...i.envKey?{envKey:i.envKey}:{}};return i.contextWindow?c.contextWindow=i.contextWindow:(c.model!==s.model||c.baseUrl!==s.baseUrl)&&delete c.contextWindow,j(n,c,m(e,i.workspace),e)}function z(e,n,r={}){if(!n||!h(e).models?.[n])throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:`Usage: coder model remove <name>`});let a=m(e,r.workspace);return i(a,e=>d(e,n)),{removed:n,file:a}}function B(e,n,i,a={}){I(n,`alias`,P);let s=h(e),c=s.models?.[n];if(c&&r(c))throw new t(`invalid-option`,`"${n}" is a custom model name; pick another alias name.`);if(!i)throw new t(`invalid-option`,`Missing alias spec.`,{hint:P});let l;try{l=f(i,s)}catch(e){throw new t(`invalid-option`,e instanceof Error?e.message:String(e),{hint:P})}if(!l||!l.model)throw new t(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:P});if(C.has(n)&&l.engine!==n)throw new t(`invalid-option`,`The ${n} alias names a ${n} model.`,{hint:P});if(l.engine===`custom`&&n!==`custom`)throw new t(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let u=o(i),d=[l.engine,u.model??l.model,u.effort].filter(Boolean).join(`/`),p=m(e,a.workspace);return D(p,e=>{e[n]=d}),{alias:n,model:d,file:p}}function V(e,n,r={}){let a=n?h(e).models?.[n]:void 0;if(!n||!a||!g(a))throw new t(`invalid-option`,n?`No alias named "${n}".`:`Missing alias name.`,{hint:n?F:`Usage: coder model unalias <name>`});let o=m(e,r.workspace);return i(o,e=>d(e,n)),{unaliased:n,file:o}}function H(e,r,i,a={}){if(!r)throw new t(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${i?`disable`:`enable`} <name>`});let o=m(e,a.workspace);return D(o,e=>n(e,r,i)),{name:r,disabled:i,file:o}}const U={add:(e,t)=>L(b.resolve(t.cwd??`.`),e,t),update:(e,t)=>t.server===void 0?R(b.resolve(t.cwd??`.`),e,t):_({server:t.server}).models.update(e,{...t.baseUrl?{baseUrl:t.baseUrl}:{},...t.model?{model:t.model}:{},...t.envKey?{envKey:t.envKey}:{},...t.contextWindow?{contextWindow:t.contextWindow}:{}}),remove:(e,t={})=>z(b.resolve(t.cwd??`.`),e,t),list:({cwd:e,workspace:t,...n}={})=>A(b.resolve(e??`.`),n.server===void 0?void 0:{...n,organization:n.organization??t}),alias:(e,t,n={})=>n.server===void 0?B(b.resolve(n.cwd??`.`),e,t,n):_({server:n.server}).models.alias(e,t),unalias:(e,t={})=>V(b.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!0,t):_({server:t.server}).models.disable(e),enable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!1,t):_({server:t.server}).models.enable(e)};async function W(e,t,n){let r=e.envKey?x.env[e.envKey]:void 0,i=!1;for(let a of c(e.baseUrl,t))try{let e=await fetch(a,{method:`POST`,headers:{"content-type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify(n),signal:AbortSignal.timeout(5e3)});if(i=!0,e.status!==404&&e.status!==405&&e.status!==501)return{baseUrl:a.slice(0,-(t.length+1))}}catch{}return{reachable:i}}async function G(e){let t=await W(e,`responses`,{model:e.model,input:[],stream:!1});if(`baseUrl`in t)return{wireApi:`responses`,baseUrl:t.baseUrl};let n=await W(e,`chat/completions`,{model:e.model,messages:[],stream:!1});return`baseUrl`in n?{wireApi:`chat`,baseUrl:n.baseUrl}:t.reachable||n.reachable?{wireApi:`chat`}:null}export{w as i,U as n,S as r,G as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{B as n,C as r,G as i,O as a,R as o,S as s,b as c,c as l,f as u,j as d,k as f,r as p,v as m,w as h,x as g}from"./config-_32PHl9g.js";import{n as _}from"./remote-Cl-j8r3W.js";import{M as v,O as y}from"./dispatch-BkoIU4GU.js";import b from"node:path";import x from"node:process";var S=e({detectWireApi:()=>G,models:()=>U,probeEndpoint:()=>w});const C=new Set([`codex`,`claude`,`custom`]);async function w(e,t={}){let n=`key`in t?t.key:e.envKey?x.env[e.envKey]:void 0,r=t.fetch??fetch,i=c(e.baseUrl,`models`),a=null;for(let t of i)try{let i=await r(t,{headers:n?{Authorization:`Bearer ${n}`}:{},signal:AbortSignal.timeout(5e3)});if(!i.ok){a=i.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${t} -> HTTP ${i.status}`};continue}let o=await i.json().catch(()=>null),s=Array.isArray(o?.data)?o.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};let c=Object.fromEntries(o.data.flatMap(e=>{let t=T(e.context_window??e.context_length??e.max_model_len);return typeof e.id==`string`&&t?[[e.id,t]]:[]})),l=Object.keys(c).length?c:await E(e.baseUrl,e.model?[e.model]:s,n,r),u=Object.keys(l).length?{contextWindows:l}:{};if(!e.model)return{reachable:!0,modelListed:null,models:s,...u,detail:`endpoint reachable; ${s.length} models listed`};let d=s.includes(e.model);return{reachable:!0,modelListed:d,models:s,...u,detail:d?`endpoint reachable; model "${e.model}" listed`:`endpoint reachable, but "${e.model}" is not in its model list`}}catch(e){a={reachable:!1,modelListed:null,models:null,detail:`${t} unreachable (${e instanceof Error?e.message:String(e)})`}}return a}const T=e=>Number.isInteger(e)&&e>0?e:void 0;async function E(e,t,n,r){let i=`${a(e).replace(/\/v1$/,``)}/api/show`,o=async e=>{let t=await r(i,{method:`POST`,headers:{"content-type":`application/json`,...n?{Authorization:`Bearer ${n}`}:{}},body:JSON.stringify({model:e}),signal:AbortSignal.timeout(5e3)}).catch(()=>null),a=(t?.ok?await t.json().catch(()=>null):null)?.model_info??{},o=Object.keys(a).find(e=>e.endsWith(`.context_length`));return o?T(a[o]):void 0},[s,...c]=t,l=s?await o(s):void 0;if(!l)return{};let u=await Promise.all(c.map(async e=>[e,await o(e)]));return Object.fromEntries([[s,l],...u].filter(e=>!!e[1]))}function D(e,t){i(e,e=>{e.models=e.models??{},t(e.models)})}const O=(e,t=p)=>Object.fromEntries(Object.entries(t).flatMap(([t,n])=>{let[r,i]=n.split(`/`);return r===e&&i?[[t,i]]:[]}));function k(e){let t=e.models??{},n=Object.entries(t).filter(e=>r(e[1])),i=Object.entries(t).filter(e=>g(e[1])).map(([t,n])=>{let r=u(n,e),i=O(r.engine),a=(r.model&&i[r.model])??r.model,o=()=>[r.engine,r.model,r.effort].filter(Boolean).join(`/`),c=s(t)?t:Object.entries(i).find(([,e])=>e===a)?.[0];return{name:t,spec:o(),replaces:c,disabled:!1}}),a=new Map;for(let e of i)e.replaces&&(e.name===e.replaces||!a.has(e.replaces))&&a.get(e.replaces)?.name!==e.replaces&&a.set(e.replaces,e);let o=e=>t[e]===!1,c=i.filter(e=>![...a.values()].some(t=>t.name===e.name));return{models:t,endpoints:n,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=a.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:o(e)}}),...c.filter(t=>t.spec.startsWith(`${e}/`)).map(({name:e,spec:t,disabled:n})=>({alias:e,spec:t,disabled:n}))],toggledSlugs:Object.entries(t).filter(([e,t])=>t===!1&&!s(e)).map(([e])=>({name:e,disabled:!0})),disabled:o}}async function A(e,t){let n=t?await _(t).models.list():void 0,{endpoints:r,providerRows:i,toggledSlugs:a}=k(n?{models:n.models}:h(e)),o=await Promise.all(r.map(async([e,t])=>({name:e,...t,...n?{}:{probe:await w(t)}})));return{codex:i(`codex`,O(`codex`,n?.builtin)),claude:i(`claude`,O(`claude`,n?.builtin)),custom:o,...a.length?{toggles:a}:{}}}async function j(e,t,n,r){let i=await G(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi;let o=await w(t),s=o.contextWindows?.[t.model];!t.contextWindow&&s&&(t.contextWindow=s),D(n,n=>{n[e]=t});let c=y(v(r)),l=v(r);return{name:e,entry:t,file:n,probe:o,codex:l,install:c,nativeResponses:a,keyMissing:!!(t.envKey&&!x.env[t.envKey]),ready:o.reachable&&l.available}}const M=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR] [--context-window <tokens>]`,N=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR] [--context-window <tokens>]`,P=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex/luna)`,F=`List them: coder model list`;function I(e,n,r){if(!e)throw new t(`invalid-option`,`Missing model name.`,{hint:r});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new t(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(l.has(e)||n===`model`&&(C.has(e)||s(e)))throw new t(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function L(e,n,i){I(n,`model`,M);let o=h(e).models?.[n];if(o)throw new t(`invalid-option`,r(o)?`Custom model "${n}" already exists.`:`"${n}" is already configured as an ${g(o)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${n} [--base-url|--model|--env-key], or remove it first.`});if(!i.baseUrl||!i.model)throw new t(`invalid-option`,`Missing --base-url or --model.`,{hint:M});return j(n,{baseUrl:a(i.baseUrl),model:i.model,...i.envKey?{envKey:i.envKey}:{},...i.contextWindow?{contextWindow:i.contextWindow}:{}},m(e,i.workspace),e)}async function R(e,n,i){let o=n?h(e).models?.[n]:void 0,s=o&&r(o)?o:void 0;if(!n||!s)throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:N});if(!i.baseUrl&&!i.model&&!i.envKey&&!i.contextWindow)throw new t(`invalid-option`,`Nothing to update: pass --base-url, --model, --env-key, or --context-window.`,{hint:N});let c={...s,...i.baseUrl?{baseUrl:a(i.baseUrl)}:{},...i.model?{model:i.model}:{},...i.envKey?{envKey:i.envKey}:{}};return i.contextWindow?c.contextWindow=i.contextWindow:(c.model!==s.model||c.baseUrl!==s.baseUrl)&&delete c.contextWindow,j(n,c,m(e,i.workspace),e)}function z(e,n,r={}){if(!n||!h(e).models?.[n])throw new t(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?F:`Usage: coder model remove <name>`});let a=m(e,r.workspace);return i(a,e=>d(e,n)),{removed:n,file:a}}function B(e,n,i,a={}){I(n,`alias`,P);let s=h(e),c=s.models?.[n];if(c&&r(c))throw new t(`invalid-option`,`"${n}" is a custom model name; pick another alias name.`);if(!i)throw new t(`invalid-option`,`Missing alias spec.`,{hint:P});let l;try{l=f(i,s)}catch(e){throw new t(`invalid-option`,e instanceof Error?e.message:String(e),{hint:P})}if(!l||!l.model)throw new t(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:P});if(C.has(n)&&l.engine!==n)throw new t(`invalid-option`,`The ${n} alias names a ${n} model.`,{hint:P});if(l.engine===`custom`&&n!==`custom`)throw new t(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let u=o(i),d=[l.engine,u.model??l.model,u.effort].filter(Boolean).join(`/`),p=m(e,a.workspace);return D(p,e=>{e[n]=d}),{alias:n,model:d,file:p}}function V(e,n,r={}){let a=n?h(e).models?.[n]:void 0;if(!n||!a||!g(a))throw new t(`invalid-option`,n?`No alias named "${n}".`:`Missing alias name.`,{hint:n?F:`Usage: coder model unalias <name>`});let o=m(e,r.workspace);return i(o,e=>d(e,n)),{unaliased:n,file:o}}function H(e,r,i,a={}){if(!r)throw new t(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${i?`disable`:`enable`} <name>`});let o=m(e,a.workspace);return D(o,e=>n(e,r,i)),{name:r,disabled:i,file:o}}const U={add:(e,t)=>L(b.resolve(t.cwd??`.`),e,t),update:(e,t)=>t.server===void 0?R(b.resolve(t.cwd??`.`),e,t):_({server:t.server}).models.update(e,{...t.baseUrl?{baseUrl:t.baseUrl}:{},...t.model?{model:t.model}:{},...t.envKey?{envKey:t.envKey}:{},...t.contextWindow?{contextWindow:t.contextWindow}:{}}),remove:(e,t={})=>z(b.resolve(t.cwd??`.`),e,t),list:({cwd:e,workspace:t,...n}={})=>A(b.resolve(e??`.`),n.server===void 0?void 0:{...n,organization:n.organization??t}),alias:(e,t,n={})=>n.server===void 0?B(b.resolve(n.cwd??`.`),e,t,n):_({server:n.server}).models.alias(e,t),unalias:(e,t={})=>V(b.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!0,t):_({server:t.server}).models.disable(e),enable:(e,t={})=>t.server===void 0?H(b.resolve(t.cwd??`.`),e,!1,t):_({server:t.server}).models.enable(e)};async function W(e,t,n){let r=e.envKey?x.env[e.envKey]:void 0,i=!1;for(let a of c(e.baseUrl,t))try{let e=await fetch(a,{method:`POST`,headers:{"content-type":`application/json`,...r?{Authorization:`Bearer ${r}`}:{}},body:JSON.stringify(n),signal:AbortSignal.timeout(5e3)});if(i=!0,e.status!==404&&e.status!==405&&e.status!==501)return{baseUrl:a.slice(0,-(t.length+1))}}catch{}return{reachable:i}}async function G(e){let t=await W(e,`responses`,{model:e.model,input:[],stream:!1});if(`baseUrl`in t)return{wireApi:`responses`,baseUrl:t.baseUrl};let n=await W(e,`chat/completions`,{model:e.model,messages:[],stream:!1});return`baseUrl`in n?{wireApi:`chat`,baseUrl:n.baseUrl}:t.reachable||n.reachable?{wireApi:`chat`}:null}export{w as i,U as n,S as r,G as t};
@@ -1 +1 @@
1
- import{V as e,bt as t,gt as n,o as r}from"./state-Br-Fuaxg.js";import{c as i,r as a}from"./approvals-CRwkc9vB.js";import o from"node:path";function s(e,t,n){let i=String(n.tool_name??``),o=n.input??n.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return r(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,n,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,n),o):void 0;return s?(r(t,n,{kind:`approval-decision`,method:`Bash`,decision:`accept`,approvalId:s.id,summary:`run command: ${o.trim()}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`allow`,permissionDecisionReason:`Coder: approved action ${s.id}`,updatedInput:a.tool_input}}):null}async function l(i,a,s,c){let l=String(s.tool_name??``);if(!c||!l.startsWith(`mcp__`))return null;let[{claudeToolName:u},{listServerTools:d}]=await Promise.all([import(`./dispatch-BaW2X6Sc.js`).then(e=>e.v),import(`./mcp-BGam3G_B.js`)]),f=n(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&n(p)?.[f.name],h=`This task is read-only.`;if(f&&!m)try{m=(await d(f)).filter(e=>e.annotations?.readOnlyHint===!0).map(e=>e.name),t(p,{...n(p),[f.name]:m})}catch(e){h=`This task is read-only, and MCP server "${f.name}" did not list its tools (${e instanceof Error?e.message:String(e)}).`}return f&&m?.some(e=>u(f.name,e)===l)?null:(r(i,a,{kind:`approval-decision`,method:l,decision:`decline`,reason:h,summary:`${l}: ${JSON.stringify(s.tool_input??{}).slice(0,200)}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`deny`,permissionDecisionReason:h}})}export{s as n,l as r,c as t};
1
+ import{V as e,bt as t,gt as n,o as r}from"./state-CxAUec80.js";import{c as i,r as a}from"./approvals-C8XV7CK2.js";import o from"node:path";function s(e,t,n){let i=String(n.tool_name??``),o=n.input??n.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return r(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,n,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,n),o):void 0;return s?(r(t,n,{kind:`approval-decision`,method:`Bash`,decision:`accept`,approvalId:s.id,summary:`run command: ${o.trim()}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`allow`,permissionDecisionReason:`Coder: approved action ${s.id}`,updatedInput:a.tool_input}}):null}async function l(i,a,s,c){let l=String(s.tool_name??``);if(!c||!l.startsWith(`mcp__`))return null;let[{claudeToolName:u},{listServerTools:d}]=await Promise.all([import(`./dispatch-BkoIU4GU.js`).then(e=>e.v),import(`./mcp-EwT2mCaa.js`)]),f=n(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&n(p)?.[f.name],h=`This task is read-only.`;if(f&&!m)try{m=(await d(f)).filter(e=>e.annotations?.readOnlyHint===!0).map(e=>e.name),t(p,{...n(p),[f.name]:m})}catch(e){h=`This task is read-only, and MCP server "${f.name}" did not list its tools (${e instanceof Error?e.message:String(e)}).`}return f&&m?.some(e=>u(f.name,e)===l)?null:(r(i,a,{kind:`approval-decision`,method:l,decision:`decline`,reason:h,summary:`${l}: ${JSON.stringify(s.tool_input??{}).slice(0,200)}`}),{hookSpecificOutput:{hookEventName:`PreToolUse`,permissionDecision:`deny`,permissionDecisionReason:h}})}export{s as n,l as r,c as t};
@@ -0,0 +1,11 @@
1
+ function e(e,t,n){return{from:`cloud`,coder:new URL(e).origin,...n===void 0?{}:{images:n},...t?{task:t}:{}}}const t=(e,t,n)=>`<picture><source media="(prefers-color-scheme: dark)" srcset="${e}/${t}-dark.svg"><img align="absmiddle" alt="${n}" src="${e}/${t}-light.svg"></picture>`,n=e=>e[0].toUpperCase()+e.slice(1),r=e=>e.replace(/<([A-Za-z/!?])/g,`<​$1`).replace(/\]\(/g,`]​(`).replace(/\]:/g,`]​:`).replace(/!\[/g,`!​[`).replace(/&([#A-Za-z])/g,`&​$1`).replace(/@([\w-])/g,`@​$1`).replace(/(https?):\/\//gi,`$1​://`).replace(/www\./gi,`www​.`),i=e=>r(e.trim()),a=/[!-/:-@[-`{-~]/,o=e=>{let t=r(e.replace(/\s+/g,` `).trim()),n=``;for(let e=0;e<t.length;){let r=t[e];if(r===`\\`){let r=t[e+1],i=r!==void 0&&a.test(r);n+=i?`\\${r}`:`\\\\`,e+=i?2:1}else if(r==="`"){let r=t.slice(e).match(/^`+/)[0],i=/`+/g;i.lastIndex=e+r.length;let a;for(;(a=i.exec(t))&&a[0].length!==r.length;);n+=a?t.slice(e,i.lastIndex):r.replace(/`/g,"\\`"),e=a?i.lastIndex:e+r.length}else n+=r===`[`||r===`]`?`\\${r}`:r,e+=1}return n},s=e=>{let t=e.replace(/[\r\n]+/g,` `),n="`".repeat(Math.max(0,...(t.match(/`+/g)??[]).map(e=>e.length))+1),r=/^`|`$/.test(t)?` `:``;return`${n}${r}${t}${r}${n}`};function c(e,t,r,i){let a=o(e),c=[a.length>200?`${a.slice(0,199)}…`:a],l=`[View the review](${r})${i?` · [View task](${i})`:``}`,u=c[0].length+1+l.length;for(let[e,r]of t.entries()){let i=`- ${n(r.severity)} ${o(r.summary)} ${s(`${r.file}:${r.start_line?`${r.start_line}-`:``}${r.line}`)}`,a=t.length-e-1,l=a?`and ${a} more`:``;if(u+1+i.length+(l?1+l.length:0)>65e3){c.push(`and ${t.length-e} more`);break}c.push(i),u+=1+i.length}return[...c,l].join(`
2
+ `)}const l=(e,t)=>`<a href="https://github.com/${e}/commit/${t}"><code>${t.slice(0,7)}</code></a>`,u=e=>e.since?`<a href="https://github.com/${e.repo}/compare/${e.since}..${e.headSha}"><code>${e.since.slice(0,7)}..${e.headSha.slice(0,7)}</code></a>`:l(e.repo,e.headSha);function d(e){return e.images===void 0?`<sub>Posted by [coder ${e.from}](${e.coder})${e.task?` · [View task](${e.task})`:``}</sub>`:[`<a href="${e.coder}">${t(e.images,`btn-${e.from}`,`Posted by coder ${e.from}`)}</a>`,...e.task?[`<a href="${e.task}">${t(e.images,`btn-task`,`View task`)}</a>`]:[]].join(` `)}function f(e,r=new Map){let{target:a,findings:c,links:l}=e,f=e.title?.replace(/\s+/g,` `).trim()??``,p=f.length>200?`${f.slice(0,199)}…`:f,m=`Reviewed ${u(a)}`,h=e=>e.inline===!1?void 0:r.get(e.fingerprint),g=c.map(e=>{let r=h(e),a=o(e.summary),c=r?`[${a}](${r})`:a,u=r?e.file.split(`/`).pop():e.file,d=r?``:`\n\n ${i(e.failure_scenario).replace(/\n/g,`
3
+ `)}`;return`- ${l.images===void 0?`**${n(e.severity)}**`:t(l.images,`sev-${e.severity}`,n(e.severity))} ${c} <sub>${s(`${u}:${e.start_line?`${e.start_line}-`:``}${e.line}`)}</sub>${d}`}),_=c.length?[`<details open>`,`<summary>${m}: <b>${c.length} issue${c.length===1?``:`s`}</b></summary>`,``,g.join(c.some(e=>!h(e))?`
4
+
5
+ `:`
6
+ `),``,`</details>`].join(`
7
+ `):``;return[o(p)||(!e.body.trim()&&!c.length?`Nothing to report.`:``),i(e.body),a.forcePushed&&a.since?`> [!WARNING]\n> The branch no longer contains <code>${a.since.slice(0,7)}</code> after a force-push. This review covers lines changed since it.`:``,_||m,d(l),`<!-- coder-review head=${a.headSha} -->`].filter(Boolean).join(`
8
+
9
+ `)}function p(e,r){return[`### ${o(e.summary)}`,r===void 0?`**${n(e.severity)}**`:t(r,`sev-${e.severity}`,n(e.severity)),i(e.failure_scenario),`<!-- coder-review:fp=${e.fingerprint} -->`].join(`
10
+
11
+ `)}async function m(e,t,n,r,i=()=>!1){let{target:a}=t,o=await e.threads(a,n,r);if(i())throw Error(`The review was stopped before posting.`);let s=t.findings.filter(e=>e.inline!==!1&&!o.has(e.fingerprint)),c=s.map(e=>({file:e.file,line:e.line,...e.start_line?{startLine:e.start_line}:{},body:p(e,t.links.images)}));try{return{url:(await e.post(a,{comments:c,body:e=>f(t,new Map([...o,...e]))},n,r)).url,posted:s.length}}catch(s){if(!c.length)throw s;if(i())throw Error(`The review was stopped before posting.`);return console.error(`coder review: posting ${a.repo}#${a.number} again without inline comments`,s),{url:(await e.post(a,{comments:[],body:()=>f(t,o)},n,r)).url,posted:0}}}export{c as n,e as r,m as t};
@@ -1 +1 @@
1
- import{ma as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{a as n}from"./update-check-UyRob3yy.js";const r=t({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>n(e())});export{r as commandRefreshUpdate};
1
+ import{ma as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{a as n}from"./update-check-Bap3dwaj.js";const r=t({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>n(e())});export{r as commandRefreshUpdate};
@@ -1,2 +1,2 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{i as t,ot as n}from"./state-Br-Fuaxg.js";import{R as r}from"./config-D_RuO6gX.js";import{a as i}from"./definition-4on4SG5J.js";import{t as a}from"./approvals-CRwkc9vB.js";import{l as o}from"./view-D-rbQ1Kz.js";var s=e({iso:()=>c,remoteAnswer:()=>h,remoteApprovals:()=>p,remoteInspection:()=>_,remoteResult:()=>d,remoteStep:()=>g,remoteTask:()=>f});const c=e=>e===void 0?void 0:new Date(e).toISOString();function l(e){let t=(e??``).trim().split(`
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{i as t,ot as n}from"./state-CxAUec80.js";import{R as r}from"./config-_32PHl9g.js";import{a as i}from"./definition-D0OpQfGX.js";import{t as a}from"./approvals-C8XV7CK2.js";import{l as o}from"./view-D-rbQ1Kz.js";var s=e({iso:()=>c,remoteAnswer:()=>h,remoteApprovals:()=>p,remoteInspection:()=>_,remoteResult:()=>d,remoteStep:()=>g,remoteTask:()=>f});const c=e=>e===void 0?void 0:new Date(e).toISOString();function l(e){let t=(e??``).trim().split(`
2
2
  `);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n.startsWith(`{`))try{let e=JSON.parse(n).reply;return typeof e==`string`?e:void 0}catch{return}}}function u(e,t,n,r){if(e?.trimStart().startsWith(`{`))try{let t=JSON.parse(e);if(t&&typeof t.status==`number`&&`threadId`in t)return{...t,error:t.error??(n?{message:n}:null),tokens:t.tokens??r??null}}catch{}let i=l(e)??e;return{status:+!t,threadId:null,...i?{finalMessage:i}:{},error:n?{message:n}:null,tokens:r??null}}function d(e){return e.result?u(e.result.output,e.result.ok,e.error,e.tokens):null}function f(e){let{task:t}=e,n=i(t);return{id:t.id,createdAt:c(e.createdAt),updatedAt:c(e.updatedAt),status:e.status===`waiting`?`running`:e.status,name:t.name??null,engine:n.engine??(t.models?.[0]?r(t.models[0].model).engine:void 0),prompt:t.prompt??t.event?.text,model:t.usage?.resolvedModel??d(e)?.model??n.model??e.model??null,effort:n.effort??null,...t.access?{access:t.access}:{},...t.cwd?{cwd:t.cwd}:{},...t.appendSystem?{appendSystem:t.appendSystem}:{},...t.addDirs?.length?{addDirs:t.addDirs}:{},...e.finishedAt===void 0?{}:{completedAt:c(e.finishedAt)},...e.error?{error:e.error}:{},archived:e.archivedAt!==void 0,...e.archivedAt===void 0?{}:{archivedAt:c(e.archivedAt)},agentId:t.agent,source:t.source}}function p(e){let t=e.approval;return(e.approvals??(t?.id?[t]:[])).map(e=>{let t=e.change?.scope;return{id:e.id,reason:e.reason,actions:e.actions,createdAt:e.createdAt,answered:e.response?.decision??null,deniedReason:e.response?.decision===`decline`?e.response.reason??null:null,...t?{scope:t,approvers:a[t]}:{}}})}function m(e){return(e.turns??[]).filter(e=>e.finishedAt!==void 0).map(e=>{let t=typeof e.result==`string`?{ok:!0,output:e.result}:e.result;return{at:c(e.finishedAt),prompt:e.prompt,...u(t?.output,t?.ok??!e.error,e.error,void 0)}})}function h(e){let t=f(e),n=d(e);return{taskId:t.id,name:t.name??null,status:e.status,engine:t.engine??null,model:t.model??null,finalMessage:n?.finalMessage??null,error:n?.error?.message??t.error??null,tokens:n?.tokens??null,pendingApprovals:p(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n}))}}function g(e){return{...e.entry??o(e.line)??{kind:e.level===`err`?`error`:`info`,message:e.line},at:e.entry?.at??new Date(e.at).toISOString()}}function _(e,r){let i=f(e),a=p(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n})),o=n.includes(i.status),s=c(e.lastActivityAt??e.updatedAt),l=t(s);return{taskId:i.id,status:o&&a.length?`waiting-approval`:i.status,task:i,result:d(e),steps:r,turns:m(e),pendingApprovals:a,...o?{idleMs:l,lastActivityAt:s??null,stalled:a.length===0&&l>6e5,liveTokens:null}:{}}}export{g as a,d as i,p as n,f as o,_ as r,s,c as t};
@@ -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-BtIDghgd.js";import{a as i,i as a,n as o,o as s,r as c}from"./http-615JJgHo.js";import{a as l,c as u,i as d,n as f,r as p}from"./session-BMbMzzPu.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);await new Promise(e=>setTimeout(e,1e3))}}};credentials={list:e=>this.request(c(`/admin/credentials`,e??{})),add:e=>this.post(`/admin/credentials`,e),remove:(e,{workspace:t}={})=>this.request(`/admin/credentials/${encodeURIComponent(e)}${t?`?workspace`:``}`,{method:`DELETE`}),login:e=>this.post(`/admin/logins`,{engine:e}),loginStatus:(e,t)=>this.request(`/admin/logins/${encodeURIComponent(e)}${t?`?state=${encodeURIComponent(t)}`:``}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:`DELETE`})};runners={list:()=>this.request(`/admin/runners`),add:e=>this.post(`/admin/runners`,e),pair:e=>this.post(`/admin/runners/pair`,e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:`DELETE`})};integrations={list:e=>this.request(c(`/admin/integrations`,{agent:e}))};repositories={list:()=>this.request(`/admin/repositories`),refresh:()=>this.post(`/admin/repositories/refresh`,{})};engines={status:()=>this.request(`/admin/engines/status`),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(c(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(c(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t})),remove:e=>this.request(`/admin/apps/${encodeURIComponent(e)}`,{method:`DELETE`}),update:e=>this.post(`/admin/apps/${encodeURIComponent(e)}/update`,{}),drift:e=>this.request(`/admin/apps/${encodeURIComponent(e)}/drift`),create:(e,t)=>this.post(`/admin/apps/create/${encodeURIComponent(e)}`,t),start:(e,t)=>this.post(c(`/create/${encodeURIComponent(e)}`,t)),finish:(e,t)=>this.request(`/create/${encodeURIComponent(e)}/callback`,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)})};operator={apps:()=>this.request(`/admin/operator/apps`),setUp:(e,t)=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}`,t),audit:()=>this.request(`/admin/operator/audit`),drift:e=>this.request(`/admin/operator/apps/${encodeURIComponent(e)}/drift`),update:e=>this.post(`/admin/operator/apps/${encodeURIComponent(e)}/update`,{})};installations={list:(e,t={})=>this.request(c(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}})),uninstall:e=>this.request(`/admin/installations/${encodeURIComponent(e)}`,{method:`DELETE`})};connections={list:(e,t)=>this.request(c(`/admin/connections`,{authorization:e,wait:t})),add:e=>this.post(`/admin/connections`,e),update:(e,t)=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),remove:e=>this.request(`/admin/connections/${encodeURIComponent(e)}`,{method:`DELETE`}),authorize:e=>this.post(`/admin/connections/${encodeURIComponent(e)}/authorize`)};config={get:()=>this.request(`/admin/config`),patch:e=>this.request(`/admin/config`,{method:`PATCH`,headers:{"content-type":`application/merge-patch+json`},body:JSON.stringify(e)})};models={list:()=>this.request(`/admin/models`),add:e=>this.post(`/admin/models`,e),probe:e=>this.post(`/admin/models/probe`,e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`DELETE`}),update:(e,t)=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={search:e=>this.request(c(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(c(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(c(`/admin/pulls`,{repo:e}))};usage(e={}){return this.request(c(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(c(`/admin/usage`,{installation:e}))}},S=e({addCredential:()=>j,coderClient:()=>T,connect:()=>w,credentials:()=>N,loginCredential:()=>M,pushAgents:()=>D,serverFor:()=>C});function C(e={}){let n=u(e.server);if(!f(n)){if(!e.yes)throw new t(`invalid-option`,`First use of Coder server ${new URL(n).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});p(n)}return n}function w(e={}){let t=C(e);return T(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function T(e,{token:n,missingHint:r,organization:a}={}){let s=u(e),c=i();if(c&&s===`unix:${c}`)return new x(`http://localhost`,{},{fetch:E(c),organization:a});let f=l(s),p=f?.token,m=h.env.ADMIN_TOKEN,g=h.env.CODER_MCP_MODE===`cloud`?h.env.CODER_TASK_TOKEN:void 0,_=n??g??p??m;if(_&&_===m&&!o(s))throw new t(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!_)throw new t(`login-failed`,`Not signed in to ${s}.`,{...r?{hint:r}:{}});return new x(s,{token:_},{organization:a??f?.organization?.slug,renewal:f&&_===p?d(s,f):void 0})}function E(e){return async(t,n={})=>{let r=new URL(String(t)),i=n.body?Buffer.from(await new Response(n.body).arrayBuffer()):void 0;return new Promise((t,a)=>{let o=g.request({socketPath:e,path:`${r.pathname}${r.search}`,method:n.method??`GET`,headers:Object.fromEntries(new Headers(n.headers)),signal:n.signal??void 0},e=>{let r=new Headers;for(let t=0;t<e.rawHeaders.length;t+=2)r.append(e.rawHeaders[t],e.rawHeaders[t+1]);let i=e.statusCode??502,a=i===204||i===304||n.method===`HEAD`;a&&e.resume(),t(new Response(a?null:v.toWeb(e),{status:i,headers:r}))});o.on(`error`,a),o.end(i)})}}async function D(e,i,a){let{INTEGRATIONS:o}=await import(`./integrations-DSZSa8Rc.js`).then(e=>e.r),s=(await n(i,o)).filter(e=>!e.builtin),c=a?s.filter(e=>e.id===a):s;if(a&&!c.length)throw new t(`invalid-option`,`No workspace agent named "${a}".`);let l=[];for(let t of c)l.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await _.readFile(m.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await r(t.dir),name:t.name,description:t.definition.description}));return l}const O=/^[A-Z_][A-Z0-9_]*$/,k=(e,n)=>new t(`invalid-option`,e,n?{hint:n}:{});async function A(){let e=``;for await(let t of h.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function j(e){let t=e.env;if(!t)throw k(`Missing required --env NAME.`,`Like --env ANTHROPIC_API_KEY`);if(!O.test(t))throw k(`Invalid environment variable name ${JSON.stringify(t)}.`);let n=e.value===`-`?await A():e.value??h.env[t];if(!n)throw k(`Environment variable ${t} is not set.`);return w(e).credentials.add({env:{[t]:n},workspace:e.workspace,noCheck:e.noCheck})}async function M(e,t={}){if(e!==`claude`&&e!==`codex`)throw k(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=w(t).credentials,r=await n.login(e);t.onStart?.(()=>n.cancelLogin(r.id));let i=async e=>{for(;!e(r.state);)r=await n.loginStatus(r.id,r.state)};return await i(e=>e!==`starting`),t.onOpen?.(r),e===`claude`&&r.state===`open`&&t.code&&await n.loginCode(r.id,await t.code()),await i(e=>e===`done`||e===`failed`),r}const N={list:(e={})=>w(e).credentials.list(),add:j,remove:(e,t={})=>w(t).credentials.remove(e,t),login:M};export{S as a,D as i,w as n,C as o,N as r,T as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{n}from"./remote-BbXx6S9P.js";import{t as r}from"./serve-B-5rDiZm.js";import i from"node:process";var a=e({addRunnerFields:()=>p,listRunners:()=>s,removeRunner:()=>f,runAssignedTask:()=>o,runners:()=>m,testRunner:()=>d});async function o(e,t){if(i.env.CODER_LOGIN)return(await import(`./login-BDKTNynK.js`)).runLogin(e,t);let{prepareRepo:n,runTask:r}=await import(`./task-N0qhnKpK.js`).then(e=>e.l);return i.env.CODER_PREPARE?n(e,t):r(e,t)}const s=(e={})=>n(e).runners.list(),c=(e,t={})=>n(t).runners.add(e),l=(e,t={})=>n(t).runners.pair(e),u=(e,t,r={})=>n(r).runners.update(e,t),d=(e,t={})=>n(t).runners.test(e),f=(e,t={})=>n(t).runners.remove(e);async function p(e,r){let a=n(r),{catalog:o}=await a.runners.list(),s=o.find(t=>t.kind===e);if(!s)throw new t(`invalid-option`,`Unknown runner kind.`);if(!s.available)throw new t(`invalid-option`,s.reason??`Runner unavailable.`);let c={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),a=e.slice(n+1),o=s.fields.find(e=>e.key===r);if(!o)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(o.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(a)||!i.env[a.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);c[r]=i.env[a.slice(4)]}else c[r]=a}let l=r.scope??((await a.me()).user?`personal`:`workspace`);if(l!==`personal`&&l!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return s.connect===`pair`?a.runners.pair({name:r.name,scope:l}):a.runners.add({kind:s.kind,name:r.name??s.name,scope:l,config:c})}const m={list:s,add:c,pair:l,update:u,default:(e,t={})=>u(e,{default:!0},t),test:d,rename:(e,t,n={})=>u(e,{name:t},n),remove:f,serve:r};export{m as n,a as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{n}from"./remote-Cl-j8r3W.js";import{t as r}from"./serve-DHe6dZM6.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-93jO9qjx.js`)).runLogin(e,t);let{prepareRepo:n,runTask:r}=await import(`./task-CzXNLREX.js`).then(e=>e.l);return i.env.CODER_PREPARE?n(e,t):r(e,t)}const s=(e={})=>n(e).runners.list(),c=(e,t={})=>n(t).runners.add(e),l=(e,t={})=>n(t).runners.pair(e),u=(e,t,r={})=>n(r).runners.update(e,t),d=(e,t={})=>n(t).runners.test(e),f=(e,t={})=>n(t).runners.remove(e);async function p(e,r){let a=n(r),{catalog:o}=await a.runners.list(),s=o.find(t=>t.kind===e);if(!s)throw new t(`invalid-option`,`Unknown runner kind.`);if(!s.available)throw new t(`invalid-option`,s.reason??`Runner unavailable.`);let c={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),a=e.slice(n+1),o=s.fields.find(e=>e.key===r);if(!o)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(o.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(a)||!i.env[a.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);c[r]=i.env[a.slice(4)]}else c[r]=a}let l=r.scope??((await a.me()).user?`personal`:`workspace`);if(l!==`personal`&&l!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return s.connect===`pair`?a.runners.pair({name:r.name,scope:l}):a.runners.add({kind:s.kind,name:r.name??s.name,scope:l,config:c})}const m={list:s,add:c,pair:l,update:u,default:(e,t={})=>u(e,{default:!0},t),test:d,rename:(e,t,n={})=>u(e,{name:t},n),remove:f,serve:r};export{m as n,a as t};
package/dist/runner.json CHANGED
@@ -1 +1 @@
1
- {"hash":"161df6f24645c03e860cfa4646292388b9a9ac6b01e2a55984097a316b6f37fc"}
1
+ {"hash":"2b429416fcad4ebae26938973a67b3c2435225e44364bb38cb86f270523e693a"}
package/dist/runner.tgz CHANGED
Binary file