@wular/coder 0.4.12 → 0.4.13

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 (372) hide show
  1. package/README.md +1 -1
  2. package/dist/actions-D12xDiQS.js +4 -0
  3. package/dist/{adapter-CVd5klMH.js → adapter-Bz0E-DAY.js} +2 -2
  4. package/dist/{adapter-CU9H4g6c.js → adapter-CsacmMmv.js} +1 -1
  5. package/dist/adapter-DzpdWewB.js +1 -0
  6. package/dist/{agent-BA6xr8QY.js → agent-JJStALIx.js} +2 -2
  7. package/dist/apps-Bnk7F3A2.js +379 -0
  8. package/dist/args-Dqf5Y1RP.js +1 -0
  9. package/dist/async-Tj4zKHXR.js +3 -0
  10. package/dist/{auth-DuXnSNf9.js → auth-BhpnOCbn.js} +1 -1
  11. package/dist/builtin/coder/agent.json +0 -1
  12. package/dist/builtin/coder/system.md +1 -1
  13. package/dist/{chat-CgQdDRhs.js → chat-CSepnsrK.js} +1 -1
  14. package/dist/cli.js +13 -13
  15. package/dist/cmd-BHZwhrfa.js +118 -0
  16. package/dist/connection-BkYTuJjV.js +1 -0
  17. package/dist/context-zhSlmXOp.js +7 -0
  18. package/dist/dash/standalone/node_modules/contextjsx/package.json +1 -1
  19. package/dist/dash/standalone/server/build-index.json +1 -1
  20. package/dist/dash/standalone/server/manifest.json +1281 -1261
  21. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/{turn.dac8eb211c500271.js → turn.6bb73458768e222e.js} +4 -16
  22. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.0de14cb4e30bd70d.js → index.de1f1311bab4252f.js} +12 -6
  23. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{defaults.1b615366c56838a1.js → defaults.e972c134a1ae918f.js} +3 -5
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.60308a11f7001eb7.js → log-view.ec6391dbf3063330.js} +40 -48
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.be791a5eaf328738.js → load.30ed8c28774a1a82.js} +4 -4
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.0fbfdba5254f7ae5.js → page.04762872666a6f0a.js} +1 -1
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.70913bd4075da914.js → page.118a70787eff1761.js} +23 -3
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.e348ec45e9ed951b.js → loading.fcdfd50c21031895.js} +1 -1
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.61aab176baeefebd.js → notify.98dfcd316c306258.js} +1 -1
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.815371ed0d5dd4fa.js → page.74c59322f5fe8a2c.js} +4 -4
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.1d6af804f9ec043d.js → sign-out.730aa96b086ac996.js} +1 -1
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.2ed0e66d131fc148.js → agent-menu.1be5795272b245c8.js} +1 -1
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f43bcc1148ce3650.js → agents-grid.2c30ace077893029.js} +6 -6
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{connect-apps.f3af8cc8540719d7.js → connect-apps.8a20501ccb244421.js} +3 -3
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.fac1132ad9c4248e.js → loading.733f0acc2af5ceda.js} +2 -2
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.c6efd5432c1a4a75.js → page.d066b77dd3187026.js} +9 -9
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.a795379254982121.js → layout.b26006f060cd48f0.js} +9 -9
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.a2cb6d1f1714259a.js → page.4b23e9df21433bd3.js} +9 -9
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.4da9e2ba3fea937f.js → loading.e06845585ca67abc.js} +2 -2
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.996172c951739b35.js → page.4048048acb374c67.js} +35 -23
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.8e7ca54dd1821e98.js → platform-actions.000f2f87a48bfbc6.js} +36 -10
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.aa9e157d141481d7.js → agent-settings-form.ee0bb2dc4d403ec3.js} +8 -8
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.ad1a4c9b000d269a.js → loading.0e3641f3e4abaa7c.js} +1 -1
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.44d886e60ae04303.js → page.649b4ba135ded99b.js} +7 -7
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.521c9e7b8d77f557.js → loading.195e168e8e41d797.js} +1 -1
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.828cfb8112404792.js → page.96f7573208644f40.js} +1 -1
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.8f998a9c511e1fb3.js → loading.905293c9aa9afbc9.js} +2 -2
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.45e18b6dc3019af4.js → page.5f2b8585db8b27ad.js} +4 -4
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.c8d76988c734dda2.js → versions-list.8700f0106f4e8c15.js} +1 -1
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.b1367e864b4fb406.js → loading.f94b2f9ab04aaf21.js} +3 -3
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.dd11f2618e08becd.js → page.e898c4b5ef16ecb0.js} +7 -7
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.f987c12bcbc5c850.js → agent-pills.44e689e546fb042b.js} +1 -1
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.1579dc8acbaacf92.js → agent-toggle.4c67dfbb7d28a416.js} +2 -2
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.ad5cc342db794e5d.js → hero.9740a8e2f4b41f28.js} +5 -5
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.43b4b28f194ea842.js → connect-repositories.ff8b78a03153239b.js} +1 -1
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.776856fe1ed1a642.js → editor.471af698b8060eba.js} +31 -20
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.eafa5b41a2ed571f.js → import-picker.b7b5c89e618e8f89.js} +5 -5
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.ee001af7a96e3972.js → loading.ecb9dfd4d0f9d107.js} +2 -2
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.7d84ef2b178b34d2.js → page.880bdac7fe843635.js} +5 -5
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.393cf7429eea189e.js → layout.81f7e055829854a3.js} +5 -5
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.09bf294d753ee9d7.js +115 -0
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.980adfb7c5714752.js → page.8f8697b1b6b34ad7.js} +36 -9
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.24a1987405ed7b17.js → page.fe608b8e661aba1d.js} +1 -1
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.21ec9dc73ce68656.js → connections-list.97381888bfdd711b.js} +8 -8
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.683476f62a9ecde7.js → credentials-list.a4d8338c7f6a5702.js} +10 -8
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.b43dd3d97c536c2a.js → credentials.1443bbed1ff1d441.js} +8 -8
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.9e116751bd34e2cc.js → engines-list.d47db60d7dc01ebd.js} +2 -2
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.083f5c665df04b1b.js → list.a5b273558fb7f0f0.js} +4 -4
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.537f63f8e5dd085d.js → models-list.31d369f1b7ab45da.js} +66 -32
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.dfed4ae6ffc74434.js → page.805d0f8a2c5817d6.js} +15 -15
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.3afa989490bbe77c.js → runners-list.1e83449aa6593224.js} +6 -6
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.0d175ee815b22cd7.js → secrets-list.17ac06593005b8ba.js} +4 -4
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.3e8289f888fa444c.js → layout.8c4a2b31b194ba3e.js} +5 -5
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.06feaa5fbb06f1e6.js → page.a77996786278cda0.js} +1 -1
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.bbc7ced8dd5491eb.js → settings-head.705be0b1129b97af.js} +1 -1
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.ff95e4b6977d0474.js → create-link.19b4c50ef497aca1.js} +3 -3
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.894c73f9abee3ce1.js → outcome-dialog.18cf32fa42247b91.js} +1 -1
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.f06fda0df59beeb5.js → page.616f0b36bf7925bc.js} +5 -5
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.3c79cf14feff12bf.js → activity.a911169a820ba604.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.47cbb34ea8d2e33f.js → loading.76f851da5cc5268d.js} +5 -5
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.abed2a8424ef3da0.js → page.ddb594bb6567ee13.js} +6 -6
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.51fbeac76459433a.js +240 -0
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.dc294bb94b7437e1.js → task-view.3276538e8306fd8a.js} +28 -28
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.309a194fc7fa34be.js → composer-data.05fc39e1a7fd1ab7.js} +2 -2
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.5072aacdce127689.js → composer.dbf06b05c5e2eba3.js} +9 -9
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{status.16190fdd5fd7daad.js → status.cb704b48ce86cc7d.js} +6 -3
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.0a1b5878dccd3b37.js → task.f089c1c122ed6dd2.js} +17 -4
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.1162926f7498c732.js → tasks-list.5a00d69851dae119.js} +37 -22
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.1d687c986db53a73.js → tasks-section.36e70c93f7d0feee.js} +7 -7
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.d5d8cb5033823c9c.js → page.185b1ba0c803db3f.js} +4 -4
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.97d277dbab9c15cf.js → loading.a7e0ec01bfa769e3.js} +2 -2
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.fb21ebe90d49dac1.js → page.d41fea7676e37bfc.js} +4 -4
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.2197d8f43216d104.js → range-bar.69e68c9dae09f238.js} +2 -2
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.185dbc99875e208a.js → layout.296d70b95894209f.js} +1 -1
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.1f4217895ff1e835.js → foreign-link.8c6adf9c5a6f467c.js} +1 -1
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.cc76fc9708142525.js → loading-card.1cea8a722c10b998.js} +2 -2
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.85f15db7b648d48c.js → page-head.87b92529dbb53ceb.js} +3 -3
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e2915852cf82c86b.js → stream.c32d78562f75db25.js} +1 -1
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.0ed8ccaae81b9d53.js → task-toasts.44075fa7e04575e8.js} +5 -5
  100. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.180765bdadf6d602.js → back.d6109e72fbd04b45.js} +2 -2
  101. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.572ad93c7707ab27.js → org.d3abfd4053b711ce.js} +1 -1
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.c1281f9b12854210.js → confirm.29e198be34578222.js} +1 -1
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.3a452a262f040973.js → filter.81bb9a5c60cd1089.js} +1 -1
  104. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.25d53e5b41b9c4e5.js → modal.0b69c7fd9db025b9.js} +1 -1
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.a08dc08338d080e9.js → segmented.633abe26ff760e37.js} +1 -1
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.17cffebfc3103b9f.js → sentinel.0ddf515b8f09ef9f.js} +1 -1
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.66b2e54963f6901b.js → tabs.1600a0b563a5c7dd.js} +1 -1
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.24036899654de6df.js → toolbar.8b3a460a65edf85a.js} +1 -1
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.b9a5c37272250e82.js → action.67dd6f8ab1ae067d.js} +1 -1
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.a3928fa2dcd27b75.js → client.78267fa3d7905d17.js} +1 -1
  111. package/dist/dash/standalone/static/assets/chunks/{action-71685b2d5ad9f359.js → action-a76e495fb39a73d3.js} +1 -1
  112. package/dist/dash/standalone/static/assets/chunks/{agent-pills-15da36c2cb81991b.js → agent-pills-4d3c6a2aa9eb1522.js} +1 -1
  113. package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-6e6a87d6e673daa8.js → agent-settings-form-f7231a66e391f6b6.js} +1 -1
  114. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-ca98586e3b4ce9ae.js → agent-toggle-d7d27123f2070f18.js} +1 -1
  115. package/dist/dash/standalone/static/assets/chunks/{agents-grid-29c399e46b4e9e2b.js → agents-grid-185ecb3d86c6c447.js} +1 -1
  116. package/dist/dash/standalone/static/assets/chunks/{back-fa9d6e37f9828093.js → back-e29cb10f5548ddae.js} +1 -1
  117. package/dist/dash/standalone/static/assets/chunks/{combo-86f3e11d1f6f6cee.js → combo-702c94817bf6ac17.js} +1 -1
  118. package/dist/dash/standalone/static/assets/chunks/composer-56ebf36d63400423.js +1 -0
  119. package/dist/dash/standalone/static/assets/chunks/{composer-85e0ec7163ae18b7.js → composer-a686289a79f64bae.js} +1 -1
  120. package/dist/dash/standalone/static/assets/chunks/composer-data-f46a9bc7a14b4f9a.js +1 -0
  121. package/dist/dash/standalone/static/assets/chunks/{confirm-c29a1db0130638d2.js → confirm-a78147b6ecef3847.js} +1 -1
  122. package/dist/dash/standalone/static/assets/chunks/{connect-apps-b73490e04ae6398d.js → connect-apps-696726aedab42c96.js} +1 -1
  123. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-0de82daaf654b1d3.js → connect-repositories-7770ab805160028d.js} +1 -1
  124. package/dist/dash/standalone/static/assets/chunks/connections-list-07559f145f3e3da3.js +1 -0
  125. package/dist/dash/standalone/static/assets/chunks/{copy-445c11202f136275.js → copy-bdc60bdafe336316.js} +1 -1
  126. package/dist/dash/standalone/static/assets/chunks/create-link-426b0a5871ee41dd.js +1 -0
  127. package/dist/dash/standalone/static/assets/chunks/credentials-list-f07d090410104148.js +1 -0
  128. package/dist/dash/standalone/static/assets/chunks/{custom-range-a0630599f907b30e.js → custom-range-6618f32ef6cd4e80.js} +1 -1
  129. package/dist/dash/standalone/static/assets/chunks/editor-0860e370cbfc6b03.js +6 -0
  130. package/dist/dash/standalone/static/assets/chunks/engines-list-31b9bb7885924b05.js +1 -0
  131. package/dist/dash/standalone/static/assets/chunks/{field-b82a0f895266791c.js → field-bb8191aa02d07282.js} +1 -1
  132. package/dist/dash/standalone/static/assets/chunks/instructions-06b63e558f879da5.js +1 -0
  133. package/dist/dash/standalone/static/assets/chunks/{instructions-affaaeff366b1725.js → instructions-2d9fbcbfadac4f40.js} +1 -1
  134. package/dist/dash/standalone/static/assets/chunks/list-2773686bf8df64c7.js +1 -0
  135. package/dist/dash/standalone/static/assets/chunks/models-list-03611e64b6a07efe.js +1 -0
  136. package/dist/dash/standalone/static/assets/chunks/{notice-57db7a1f05b7308c.js → notice-d14fdac28139c0a8.js} +1 -1
  137. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-d3ba8ef89c59f801.js +1 -0
  138. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-5cf575a5e6921a5d.js → outcome-dialog-fde11a52c282301d.js} +1 -1
  139. package/dist/dash/standalone/static/assets/chunks/platform-actions-2a71c62b9f7eaef3.js +1 -0
  140. package/dist/dash/standalone/static/assets/chunks/platform-actions-70600c9943320152.js +1 -0
  141. package/dist/dash/standalone/static/assets/chunks/runners-list-edf536eb8003eab5.js +1 -0
  142. package/dist/dash/standalone/static/assets/chunks/secrets-list-e86122f73525ff95.js +1 -0
  143. package/dist/dash/standalone/static/assets/chunks/segmented-0b6dc6b93c35e0f5.js +1 -0
  144. package/dist/dash/standalone/static/assets/chunks/shared-init-b281027d465e004f.js +5 -0
  145. package/dist/dash/standalone/static/assets/chunks/shared-init-c3bd249cf1eca6d1.js +2 -0
  146. package/dist/dash/standalone/static/assets/chunks/side-toggle-9b3af821cfe4c824.js +1 -0
  147. package/dist/dash/standalone/static/assets/chunks/{tail-b1c46587301ef397.js → tail-f8804b80cf32f8d0.js} +1 -1
  148. package/dist/dash/standalone/static/assets/chunks/task-a37e7c26e82eb77d.js +1 -0
  149. package/dist/dash/standalone/static/assets/chunks/task-actions-705395565f2d83b8.js +1 -0
  150. package/dist/dash/standalone/static/assets/chunks/task-view-cb21169f38b56d15.js +6 -0
  151. package/dist/dash/standalone/static/assets/chunks/tasks-list-d7dccfd7e0623ae0.js +1 -0
  152. package/dist/dash/standalone/static/assets/chunks/{versions-list-21cb854e6a7108a7.js → versions-list-f8f2e71df691efda.js} +1 -1
  153. package/dist/dash/standalone/static/assets/create-param-id-c2c756f652f2fc30.css +1 -0
  154. package/dist/dash/standalone/static/assets/{dash-param-org-account-9471bec93c444232.css → dash-param-org-account-702f8a1b213e4026.css} +1 -1
  155. package/dist/dash/standalone/static/assets/dash-param-org-agents-aad2f9f93c06e9ab.css +1 -0
  156. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-f9dcbcec36586f2b.css +1 -0
  157. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-8ff47f5d622c1f9b.css +1 -0
  158. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-907036d553cfeb36.css +1 -0
  159. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cc77badad15f00c.css +1 -0
  160. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-705d7c15868b4fd6.css +1 -0
  161. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-04e189c045098772.css +1 -0
  162. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-76fcd1ce7b3dae71.css +1 -0
  163. package/dist/dash/standalone/static/assets/{dash-param-org-bcfa3de29341d5ba.css → dash-param-org-eccb6bb9297a53e6.css} +1 -1
  164. package/dist/dash/standalone/static/assets/dash-param-org-operator-635a121f7a9a95bd.css +1 -0
  165. package/dist/dash/standalone/static/assets/{dash-param-org-settings-6d6902345d88a687.css → dash-param-org-settings-a3297dc4d9e0c961.css} +1 -1
  166. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-bcb06f81d9e8268d.css +1 -0
  167. package/dist/dash/standalone/static/assets/{dash-param-org-setup-173efecd7b990c2e.css → dash-param-org-setup-df4be8b188b9777f.css} +1 -1
  168. package/dist/dash/standalone/static/assets/dash-param-org-tasks-16f9866a1b4801cd.css +1 -0
  169. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-02ae551dcd852b57.css +1 -0
  170. package/dist/dash/standalone/static/assets/dash-param-org-usage-f2175403069aab99.css +1 -0
  171. package/dist/dash/standalone/static/assets/{global-87e1762113874559.css → global-e1de614478b64717.css} +1 -1
  172. package/dist/dash/standalone/static/assets/pnext-client-0dc829ba60df5c26.js +1 -0
  173. package/dist/dash/standalone/static/assets/pnext-client-14d191f7f1da6602.js +1 -0
  174. package/dist/dash/standalone/static/assets/pnext-client-169eaa63783b71fd.js +1 -0
  175. package/dist/dash/standalone/static/assets/pnext-client-1e34cfefafa70fac.js +1 -0
  176. package/dist/dash/standalone/static/assets/pnext-client-285d61f00a80f40b.js +1 -0
  177. package/dist/dash/standalone/static/assets/pnext-client-35b89c3ba23ee845.js +1 -0
  178. package/dist/dash/standalone/static/assets/pnext-client-6c42784e005d4b87.js +1 -0
  179. package/dist/dash/standalone/static/assets/{pnext-client-576c06599e241231.js → pnext-client-6cd93f9bd4cf6ffd.js} +1 -1
  180. package/dist/dash/standalone/static/assets/pnext-client-7355f473fade532d.js +1 -0
  181. package/dist/dash/standalone/static/assets/pnext-client-815c3c297f75efb0.js +1 -0
  182. package/dist/dash/standalone/static/assets/pnext-client-87fe73c10a4dc33c.js +1 -0
  183. package/dist/dash/standalone/static/assets/pnext-client-98b56a142d441260.js +1 -0
  184. package/dist/dash/standalone/static/assets/pnext-client-b4bafe68a40f720b.js +1 -0
  185. package/dist/dash/standalone/static/assets/pnext-client-bf61ff39bdc0db48.js +1 -0
  186. package/dist/dash/standalone/static/assets/pnext-client-c9fa86c244813f74.js +1 -0
  187. package/dist/dash/standalone/static/assets/pnext-client-d2e7a75e16221224.js +1 -0
  188. package/dist/dash/standalone/static/assets/pnext-client-d34e774405ea8da8.js +1 -0
  189. package/dist/dash/standalone/static/assets/pnext-client-d511822afdb41d1d.js +1 -0
  190. package/dist/dash/standalone/static/assets/pnext-client-e113aa2f25ecfe01.js +1 -0
  191. package/dist/dash/standalone/static/assets/{pnext-client-c2c30dcb6dc31d60.js → pnext-client-eb62f461d0c32266.js} +1 -1
  192. package/dist/{discover-CPZdprlQ.js → discover-CHfF4cEz.js} +1 -1
  193. package/dist/{docs-x-l7gjFE.js → docs-KHc0_gFX.js} +1 -1
  194. package/dist/{drive-Y-ZlgiUW.js → drive-Bwl7Bjme.js} +1 -1
  195. package/dist/emit-BrkJJPUE.js +11 -0
  196. package/dist/env-6Y-NNnYD.js +1 -0
  197. package/dist/errors-DO_IltpP.js +16 -0
  198. package/dist/exec-BmTa0vcO.js +4 -0
  199. package/dist/executor-ufWRqhdS.js +11 -0
  200. package/dist/flow/builtin/review/index.d.ts +1 -1
  201. package/dist/flow/builtin/review/index.js +3 -3
  202. package/dist/flow/index.d.ts +1 -1
  203. package/dist/flow/index.js +1 -1
  204. package/dist/hook-CIipj9MJ.js +1 -0
  205. package/dist/http-Cg8PSe-c.js +1 -0
  206. package/dist/{index-BdkdNI1v.d.ts → index-ChcxzFdB.d.ts} +50 -185
  207. package/dist/integrations-I7fRDk_l.js +4 -0
  208. package/dist/lib/broker.js +2 -2
  209. package/dist/load-BDlEFetB.js +2 -0
  210. package/dist/local-COlczLwI.js +5 -0
  211. package/dist/log-view-CfX9lakH.js +4 -0
  212. package/dist/{maintenance-BfxcatXH.js → maintenance-CKCIWOvn.js} +1 -1
  213. package/dist/{match-Bq4sDuCy.js → match-CufHAZQH.js} +1 -1
  214. package/dist/mcp-BkwmRHI9.js +2 -0
  215. package/dist/mcp-CGU7aoJ-.js +1 -0
  216. package/dist/{mcp-Bta09QCU.js → mcp-DAHbhfUh.js} +1 -1
  217. package/dist/models-CzggS7p2.js +1 -0
  218. package/dist/output-SNqdgh9A.js +17 -0
  219. package/dist/permission-MWFjKxqX.js +1 -0
  220. package/dist/{prompt-onpyIyXK.js → prompt-CIx4jwQF.js} +1 -1
  221. package/dist/refresh-CxsaX5R9.js +1 -0
  222. package/dist/remote-C9Hj2cby.js +2 -0
  223. package/dist/remote-HUZCWgfl.js +3 -0
  224. package/dist/{runner-CTFTuaz_.js → runner-DYysY1-G.js} +1 -1
  225. package/dist/runner.json +1 -1
  226. package/dist/runner.tgz +0 -0
  227. package/dist/runners-CfaGE0nV.js +36 -0
  228. package/dist/schema.js +1 -1
  229. package/dist/sdk.d.ts +285 -104
  230. package/dist/sdk.js +1 -1
  231. package/dist/serve-DdAdw7Su.js +4 -0
  232. package/dist/serve-NQykWAKV.js +1 -0
  233. package/dist/serve-vKNqVaVy.js +12 -0
  234. package/dist/slack-BtKvW_4v.js +5 -0
  235. package/dist/task-CFxs0E_J.js +1 -0
  236. package/dist/task-iuYQ0zAK.js +7 -0
  237. package/dist/tools-B6ZxcqRi.js +2 -0
  238. package/dist/{tools-CM4UCsId.js → tools-FVop8XYG.js} +1 -1
  239. package/dist/tools-search-kjKKolwp.js +1 -0
  240. package/dist/turn-DQ13lkPF.js +2 -0
  241. package/dist/types-DPtbvoo3.js +1 -0
  242. package/dist/types-DmThhjcW.js +1 -0
  243. package/dist/views-CMHXBMJp.js +3 -0
  244. package/dist/{wire-JMNPv8f6.js → wire-C9CupY_A.js} +1 -1
  245. package/dist/worker-BQpx1dPr.js +9 -0
  246. package/dist/worker-sTJL2eoe.js +1 -0
  247. package/docs/access.md +33 -0
  248. package/docs/agents/coder.md +0 -11
  249. package/docs/agents/index.md +1 -1
  250. package/docs/cli/agent.md +6 -6
  251. package/docs/cli/connection.md +5 -5
  252. package/docs/cli/flow.md +9 -9
  253. package/docs/cli/index.md +3 -3
  254. package/docs/cli/model.md +12 -10
  255. package/docs/cli/runner.md +1 -1
  256. package/docs/cli/server.md +2 -2
  257. package/docs/cli/task.md +23 -21
  258. package/docs/config.md +5 -15
  259. package/docs/flows.md +1 -1
  260. package/docs/models.md +7 -6
  261. package/docs/sdk.md +29 -29
  262. package/docs/self-host.md +25 -25
  263. package/package.json +2 -2
  264. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  265. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  266. package/dist/actions-BT7_eKXm.js +0 -10
  267. package/dist/adapter-BT8ECcRG.js +0 -1
  268. package/dist/apps-D-v5sQJk.js +0 -367
  269. package/dist/args-CbO_Ck9Z.js +0 -11
  270. package/dist/async-XNO3nqum.js +0 -3
  271. package/dist/cmd-DX5ByXo3.js +0 -119
  272. package/dist/connection-DNxi2btM.js +0 -1
  273. package/dist/context-65bOofts.js +0 -7
  274. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a244f3199e7cf09c.js +0 -144
  275. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.587da79d68ab8d14.js +0 -151
  276. package/dist/dash/standalone/static/assets/chunks/composer-910bb87127972f62.js +0 -1
  277. package/dist/dash/standalone/static/assets/chunks/composer-data-5fed6c271a4791ca.js +0 -1
  278. package/dist/dash/standalone/static/assets/chunks/connections-list-c50f58b4b28d10bb.js +0 -1
  279. package/dist/dash/standalone/static/assets/chunks/create-link-6d64a2d5f9ce6de0.js +0 -1
  280. package/dist/dash/standalone/static/assets/chunks/credentials-list-bee95799b2319b3b.js +0 -1
  281. package/dist/dash/standalone/static/assets/chunks/defaults-52f30e83d7666f7a.js +0 -1
  282. package/dist/dash/standalone/static/assets/chunks/editor-b9951819f21b2e43.js +0 -6
  283. package/dist/dash/standalone/static/assets/chunks/engines-list-2720c3e8fa12b2f7.js +0 -1
  284. package/dist/dash/standalone/static/assets/chunks/instructions-fd7402ac5aa8b50e.js +0 -1
  285. package/dist/dash/standalone/static/assets/chunks/list-d918f79562d497eb.js +0 -1
  286. package/dist/dash/standalone/static/assets/chunks/models-list-12bc7aceaa52f5b0.js +0 -1
  287. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-b219595be320108a.js +0 -1
  288. package/dist/dash/standalone/static/assets/chunks/platform-actions-1d27d2ba7eee9ff1.js +0 -1
  289. package/dist/dash/standalone/static/assets/chunks/platform-actions-dba96dcb0f6513db.js +0 -1
  290. package/dist/dash/standalone/static/assets/chunks/runners-list-36f8c5ecfcf8e9ae.js +0 -1
  291. package/dist/dash/standalone/static/assets/chunks/secrets-list-d7dbafd24dd18481.js +0 -1
  292. package/dist/dash/standalone/static/assets/chunks/segmented-8f809ebe712e92a7.js +0 -1
  293. package/dist/dash/standalone/static/assets/chunks/shared-init-cc13a835f3508618.js +0 -2
  294. package/dist/dash/standalone/static/assets/chunks/shared-init-f475017dd5811e33.js +0 -5
  295. package/dist/dash/standalone/static/assets/chunks/side-toggle-0aa237eba3dfe9c1.js +0 -1
  296. package/dist/dash/standalone/static/assets/chunks/task-681061023bdf0a49.js +0 -5
  297. package/dist/dash/standalone/static/assets/chunks/task-actions-c9e46e81604e85c5.js +0 -1
  298. package/dist/dash/standalone/static/assets/chunks/task-view-134186a544917ceb.js +0 -5
  299. package/dist/dash/standalone/static/assets/chunks/tasks-list-352a3222d878de0f.js +0 -1
  300. package/dist/dash/standalone/static/assets/create-param-id-da3f7e20689fe51a.css +0 -1
  301. package/dist/dash/standalone/static/assets/dash-param-org-agents-64500e78caae32df.css +0 -1
  302. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-c067c22928a2d7cc.css +0 -1
  303. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-9dec87710e04f949.css +0 -1
  304. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-779c474301e04440.css +0 -1
  305. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-c7d594b5232630c2.css +0 -1
  306. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-a80e62570716fdb9.css +0 -1
  307. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-ce278252012297b9.css +0 -1
  308. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-d3b6d701eb8e1403.css +0 -1
  309. package/dist/dash/standalone/static/assets/dash-param-org-operator-b7bc6447cc27c9ce.css +0 -1
  310. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-85c7af9a89eef06e.css +0 -1
  311. package/dist/dash/standalone/static/assets/dash-param-org-tasks-ae0bc03f468e63cc.css +0 -1
  312. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-7325d8cff5be3592.css +0 -1
  313. package/dist/dash/standalone/static/assets/dash-param-org-usage-517b2a7ae462ac57.css +0 -1
  314. package/dist/dash/standalone/static/assets/pnext-client-05df74b071ddb0b3.js +0 -1
  315. package/dist/dash/standalone/static/assets/pnext-client-2c19cca257f78ae6.js +0 -1
  316. package/dist/dash/standalone/static/assets/pnext-client-2db05dfa62642a65.js +0 -1
  317. package/dist/dash/standalone/static/assets/pnext-client-36b0d6085a073880.js +0 -1
  318. package/dist/dash/standalone/static/assets/pnext-client-6aa0f19a30d58d63.js +0 -1
  319. package/dist/dash/standalone/static/assets/pnext-client-6b30b71f452f2f07.js +0 -1
  320. package/dist/dash/standalone/static/assets/pnext-client-6ccb4d4fff812db3.js +0 -1
  321. package/dist/dash/standalone/static/assets/pnext-client-74eb465defba421e.js +0 -1
  322. package/dist/dash/standalone/static/assets/pnext-client-8c692d12b2fd90d6.js +0 -1
  323. package/dist/dash/standalone/static/assets/pnext-client-92e17d39063a9ced.js +0 -1
  324. package/dist/dash/standalone/static/assets/pnext-client-93246aea268c2682.js +0 -1
  325. package/dist/dash/standalone/static/assets/pnext-client-9954dcbc0c579e0d.js +0 -1
  326. package/dist/dash/standalone/static/assets/pnext-client-c0dfa1cdde9a9855.js +0 -1
  327. package/dist/dash/standalone/static/assets/pnext-client-c28d38d4aafd4af6.js +0 -1
  328. package/dist/dash/standalone/static/assets/pnext-client-dbf741073e11eac0.js +0 -1
  329. package/dist/dash/standalone/static/assets/pnext-client-e29194a27280333f.js +0 -1
  330. package/dist/dash/standalone/static/assets/pnext-client-f8a7e692b27caad9.js +0 -1
  331. package/dist/dash/standalone/static/assets/pnext-client-fc5b8cfcba2a9f63.js +0 -1
  332. package/dist/env-B9JG6gwo.js +0 -1
  333. package/dist/errors-XBA-Ls4n.js +0 -10
  334. package/dist/exec-iFssTO5V.js +0 -3
  335. package/dist/executor-Dt2FFT-y.js +0 -11
  336. package/dist/http-BZfjbiov.js +0 -1
  337. package/dist/integrations-DyInAa5g.js +0 -2
  338. package/dist/load-zhcrwSRF.js +0 -2
  339. package/dist/local-D55UkW93.js +0 -5
  340. package/dist/log-view-CL3_S0IQ.js +0 -3
  341. package/dist/mcp-CUITALl1.js +0 -1
  342. package/dist/models-C1O2DrXx.js +0 -1
  343. package/dist/output-D95NoAA9.js +0 -16
  344. package/dist/prompts-B8pKhMcu.js +0 -4
  345. package/dist/refresh-D-0K9fo3.js +0 -1
  346. package/dist/remote-CDm0YUU3.js +0 -3
  347. package/dist/runners-CYTicTb7.js +0 -36
  348. package/dist/serve-Bzs_lEg-.js +0 -1
  349. package/dist/serve-CWtLyyTz.js +0 -12
  350. package/dist/serve-DE6A-rBk.js +0 -4
  351. package/dist/slack-Bo5l13Rs.js +0 -5
  352. package/dist/task-BU1JEK9X.js +0 -7
  353. package/dist/task-CPzBITsp.js +0 -1
  354. package/dist/tools-BMaKWTa6.js +0 -1
  355. package/dist/turn-DMvPfhb5.js +0 -3
  356. package/dist/types-D_xnfP7m.js +0 -1
  357. package/dist/views-DEdKqLm_.js +0 -5
  358. package/dist/worker-BuP_Lem1.js +0 -9
  359. package/dist/worker-C1tuzq5n.js +0 -1
  360. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.0a735590a5412ea6.js → errors.1bd0542d832ae0c0.js} +0 -0
  361. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.c811938ae8a8f1df.css.pnext-asset.js → page.107e622830bff31d.css.pnext-asset.js} +0 -0
  362. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.1bef5dca89b5942c.css.pnext-asset.js → hero.243d85cac1f22df2.css.pnext-asset.js} +0 -0
  363. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.c496247a81ed832c.css.pnext-asset.js → editor.1eb1bce282b289c9.css.pnext-asset.js} +0 -0
  364. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.a96c11d11674f598.js → model-options.73f8d0d54f79d8e3.js} +0 -0
  365. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.57990cfd2bdf5c11.css.pnext-asset.js → task-view.42337a0d7c6ad0b6.css.pnext-asset.js} +0 -0
  366. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.abbbc9ace4d866e5.css.pnext-asset.js → tasks-list.2f90c4410f843fff.css.pnext-asset.js} +0 -0
  367. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.c8fd2b8b01e7077b.css.pnext-asset.js → globals.f8ac779f0ebf888b.css.pnext-asset.js} +0 -0
  368. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.364ec93a8e7857b3.css.pnext-asset.js → page-head.9fcc49ddf7119d75.css.pnext-asset.js} +0 -0
  369. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.9db07d368dcf5981.css.pnext-asset.js → modal.a533234c7c831be4.css.pnext-asset.js} +0 -0
  370. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.0bd8652fdbc05eb0.css.pnext-asset.js → segmented.c6f30b839fd27f35.css.pnext-asset.js} +0 -0
  371. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.1e3ec9bd6008d811.css.pnext-asset.js → sentinel.d17e2bfcbeb9df31.css.pnext-asset.js} +0 -0
  372. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.ca13e40ff54128d0.css.pnext-asset.js → tabs.025b532d6cc51736.css.pnext-asset.js} +0 -0
@@ -0,0 +1 @@
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{Bt as t,Dt as n,Et as r,Gt as i,Ht as a,Jt as o,Mt as s,Ut as c,Vt as l,Wt as u,Xt as d,jt as f,qt as p,rn as m}from"./errors-DO_IltpP.js";import{Dt as h,G as g,Z as _}from"./output-SNqdgh9A.js";import{t as v}from"./wire-C9CupY_A.js";import y from"node:path";import b from"node:process";var x=e({RESERVED:()=>S,buildModelRows:()=>D,modelAddCore:()=>F,modelAliasCore:()=>R,modelListData:()=>O,modelRemoveCore:()=>L,modelToggleCore:()=>B,modelUnaliasCore:()=>z,modelUpdateCore:()=>I,models:()=>V,persistModel:()=>k,probeEndpoint:()=>C});const S=new Set([`codex`,`claude`,`custom`]);async function C(e,t={}){let n=`key`in t?t.key:e.envKey?b.env[e.envKey]:void 0,r=t.fetch??fetch,i=l(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=w(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 T(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 w=e=>Number.isInteger(e)&&e>0?e:void 0;async function T(e,t,n,r){let i=`${p(e).replace(/\/v1$/,``)}/api/show`,a=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?w(a[o]):void 0},[o,...s]=t,c=o?await a(o):void 0;if(!c)return{};let l=await Promise.all(s.map(async e=>[e,await a(e)]));return Object.fromEntries([[o,c],...l].filter(e=>!!e[1]))}function E(e,t){m(e,e=>{e.models=e.models??{},t(e.models)})}function D(e){let t=e.models??{},r=Object.entries(t).filter(e=>u(e[1])),i=e=>`${e.provider}:${e.model}${e.effort?`:${e.effort}`:``}`,o=Object.entries(t).filter(e=>a(e[1])).map(([e,t])=>{let r=t.provider===`claude`?n:s,a=r[t.model]??t.model,o=c(e)?e:Object.entries(r).find(([,e])=>e===a)?.[0];return{name:e,spec:i(t),replaces:o,disabled:!!t.disabled}}),l=new Map;for(let e of o)e.replaces&&(e.name===e.replaces||!l.has(e.replaces))&&l.get(e.replaces)?.name!==e.replaces&&l.set(e.replaces,e);let d=e=>!!t[e]?.disabled,f=o.filter(e=>![...l.values()].some(t=>t.name===e.name));return{models:t,endpoints:r,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=l.get(e);return n?{alias:n.name,spec:n.spec,overrides:e,disabled:n.disabled}:{alias:e,model:t,builtin:!0,disabled:d(e)}}),...f.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])=>!u(t)&&!a(t)&&!c(e)).map(([e,t])=>({name:e,disabled:!!t.disabled})),disabled:d}}async function O(e){let{endpoints:t,providerRows:r,toggledSlugs:a}=D(i(e)),o=await Promise.all(t.map(async([e,t])=>({name:e,...t,probe:await C(t)})));return{codex:r(`codex`,s),claude:r(`claude`,n),custom:o,...a.length?{toggles:a}:{}}}async function k(e,t,n,r){let i=await v(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi;let o=await C(t),s=o.contextWindows?.[t.model];!t.contextWindow&&s&&(t.contextWindow=s),E(n,n=>{n[e]=t});let c=g(_(r)),l=_(r);return{name:e,entry:t,file:n,probe:o,codex:l,install:c,nativeResponses:a,keyMissing:!!(t.envKey&&!b.env[t.envKey]),ready:o.reachable&&l.available}}const A=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR] [--context-window <tokens>]`,j=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR] [--context-window <tokens>]`,M=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex:luna)`,N=`List them: coder model list`;function P(e,t,n){if(!e)throw new h(`invalid-option`,`Missing model name.`,{hint:n});if(!/^[a-z][a-z0-9-]*$/.test(e))throw new h(`invalid-option`,`Invalid model name "${e}". Use lowercase kebab-case (e.g. qwen-local).`);if(S.has(e)||t===`model`&&c(e))throw new h(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function F(e,n,r){P(n,`model`,A);let o=i(e).models?.[n];if(o)throw new h(`invalid-option`,u(o)?`Custom model "${n}" already exists.`:`"${n}" is already configured as an ${a(o)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${n} [--base-url|--model|--env-key], or remove it first.`});if(!r.baseUrl||!r.model)throw new h(`invalid-option`,`Missing --base-url or --model.`,{hint:A});return k(n,{baseUrl:p(r.baseUrl),model:r.model,...r.envKey?{envKey:r.envKey}:{},...r.contextWindow?{contextWindow:r.contextWindow}:{}},t(e,r.workspace),e)}async function I(e,n,r){let a=n?i(e).models?.[n]:void 0,o=a&&u(a)?a:void 0;if(!n||!o)throw new h(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?N:j});if(!r.baseUrl&&!r.model&&!r.envKey&&!r.contextWindow)throw new h(`invalid-option`,`Nothing to update: pass --base-url, --model, --env-key, or --context-window.`,{hint:j});let s={...o,...r.baseUrl?{baseUrl:p(r.baseUrl)}:{},...r.model?{model:r.model}:{},...r.envKey?{envKey:r.envKey}:{}};return r.contextWindow?s.contextWindow=r.contextWindow:(s.model!==o.model||s.baseUrl!==o.baseUrl)&&delete s.contextWindow,k(n,s,t(e,r.workspace),e)}function L(e,n,r={}){if(!n||!i(e).models?.[n])throw new h(`invalid-option`,n?`No custom model named "${n}".`:`Missing model name.`,{hint:n?N:`Usage: coder model remove <name>`});let a=t(e,r.workspace);return m(a,e=>d(e,n)),{removed:n,file:a}}function R(e,a,c,l={}){P(a,`alias`,M);let d=i(e),p=d.models?.[a];if(p&&u(p))throw new h(`invalid-option`,`"${a}" is a custom model name; pick another alias name.`);if(!c)throw new h(`invalid-option`,`Missing alias spec.`,{hint:M});let m;try{m=o(c,d)}catch(e){throw new h(`invalid-option`,e instanceof Error?e.message:String(e),{hint:M})}if(!m||!m.model)throw new h(`invalid-option`,`Alias spec "${c}" does not resolve to a model.`,{hint:M});if(m.engine===`custom`)throw new h(`invalid-option`,`"${c}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let g=c.split(`:`).some(e=>f.has(e.trim())||r.has(e.trim())),_=m.engine===`claude`?n:s,v={provider:m.engine,model:_[m.model]??m.model,...g&&m.effort?{effort:m.effort}:{}},y=t(e,l.workspace);return E(y,e=>{e[a]=v}),{alias:a,...v,file:y}}function z(e,n,r={}){let o=n?i(e).models?.[n]:void 0;if(!n||!o||!a(o))throw new h(`invalid-option`,n?`No alias named "${n}".`:`Missing alias name.`,{hint:n?N:`Usage: coder model unalias <name>`});let s=t(e,r.workspace);return m(s,e=>d(e,n)),{unaliased:n,file:s}}function B(e,n,r,o={}){if(!n)throw new h(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${r?`disable`:`enable`} <name>`});let s=!!i(e).models?.[n],c=t(e,o.workspace);return E(c,e=>{let t=e[n];if(!t){r?e[n]={disabled:!0}:s&&(e[n]={disabled:!1});return}u(t)||a(t)?r?t.disabled=!0:delete t.disabled:r?t.disabled=!0:delete e[n]}),{name:n,disabled:r,file:c}}const V={add:(e,t)=>F(y.resolve(t.cwd??`.`),e,t),update:(e,t)=>I(y.resolve(t.cwd??`.`),e,t),remove:(e,t={})=>L(y.resolve(t.cwd??`.`),e,t),list:(e={})=>O(y.resolve(e.cwd??`.`)),alias:(e,t,n={})=>R(y.resolve(n.cwd??`.`),e,t,n),unalias:(e,t={})=>z(y.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>B(y.resolve(t.cwd??`.`),e,!0,t),enable:(e,t={})=>B(y.resolve(t.cwd??`.`),e,!1,t)};export{x as n,C as r,V as t};
@@ -0,0 +1,17 @@
1
+ import{Rt as e,qi as t,wi as n}from"./core-DwsAMCnL.js";import{$t as r,A as i,At as a,C as o,Dn as s,Dr as c,Dt as l,Er as u,Et as d,G as f,Gt as p,Ht as m,I as h,It as g,Jt as _,Kt as v,L as y,Lt as b,Mt as x,N as S,Nt as C,On as w,Ot as T,Pt as E,Q as D,Qt as O,R as ee,S as te,Sr as ne,Tn as re,Tr as ie,Un as k,Wt as ae,Y as oe,Zt as se,_ as ce,_r as le,a as ue,at as de,bn as fe,bt as pe,d as me,dt as he,gr as ge,hr as _e,ht as ve,i as ye,in as be,ir as xe,jt as Se,kn as Ce,kt as we,ln as Te,mt as Ee,n as De,ot as Oe,r as ke,rt as Ae,sn as je,st as Me,tt as Ne,un as Pe,xn as A,xt as Fe}from"./errors-DO_IltpP.js";import j from"node:path";import M from"node:process";import{fileURLToPath as Ie}from"node:url";import N from"node:fs";import{spawn as Le,spawnSync as P}from"node:child_process";import{createHash as Re,randomUUID as F}from"node:crypto";import I from"node:os";import ze from"node:readline";import{setImmediate as Be}from"node:timers/promises";var L=class extends Error{code;hint;taskId;payload;approval;result;runId;status;needs;constructor(e,t,n={}){super(t),this.name=`CoderError`,this.code=e,Object.assign(this,n)}};const Ve=`Not allowed here. If the task truly needs this, call the escalate tool with the exact command and why, then continue or end your turn; the decision arrives as a message, in this turn if it is still running.`,He=e=>j.join(e,`approvals`);function R(e){let t=He(e);return N.existsSync(t)?N.readdirSync(t).filter(e=>e.endsWith(`.request.json`)).flatMap(e=>{let n=e.replace(/\.request\.json$/,``),r=ie(j.join(t,e));if(!r)return[];let i=ie(j.join(t,`${n}.response.json`));return[{...r,id:n,response:i}]}).sort((e,t)=>String(e.createdAt).localeCompare(String(t.createdAt))):[]}const Ue=e=>[...new Set(R(e).flatMap(e=>e.response?.decision===`accept`?e.actions:[]))],We=(e,t)=>R(e).find(e=>e.response?.decision===`accept`&&e.actions.some(e=>e.trim()===t.trim())),Ge=e=>R(e).filter(e=>!e.response),Ke=e=>R(e).filter(e=>e.response?.decision===`decline`),qe=e=>`The task was stopped, so approval "${e}" is closed.`,Je=(e=new Date().toISOString())=>({decision:`closed`,answeredAt:e,deliveredAt:e});function Ye(e){let t=Je();return Ge(e).map(n=>(tt(e,n.id,t),{...n,response:t}))}function Xe(e,t){let n=He(e);N.mkdirSync(n,{recursive:!0});let r=`apr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,i={id:r,reason:t.reason,actions:t.actions,createdAt:new Date().toISOString()},{id:a,response:o,...s}=i;return N.writeFileSync(j.join(n,`${r}.request.json`),`${JSON.stringify(s,null,2)}\n`,`utf8`),i}function Ze(e,t,n,r){let i=Xe(n,r);return me(e,t,{kind:`approval-escalated`,approvalId:i.id,summary:i.actions.join(`
2
+ `),actions:i.actions,reason:i.reason,message:`Approval needed (${i.id}): ${i.reason}`}),i}const Qe=`CODER_SIMULATE_APPROVAL`;function $e(e,t,n,r,i){let a=R(e).find(e=>e.id===t);if(!a)throw Error(`No approval "${t}" for this task.`);if(a.response?.decision===`closed`)throw Error(qe(t));if(a.response?.decision===`accept`)throw Error(`Approval "${t}" is already approved.`);let o={decision:n,...r?{reason:r}:{},answeredAt:new Date().toISOString(),...i?{by:i}:{}};return tt(e,t,o),{...a,response:o}}function et(e,t){let n=R(e).find(e=>e.id===t.id)?.response;if(n?.decision!==t.response?.decision||n?.answeredAt!==t.response?.answeredAt)return t;let r={...t.response,deliveredAt:new Date().toISOString()};return tt(e,t.id,r),{...t,response:r}}function tt(e,t,n){N.writeFileSync(j.join(He(e),`${t}.response.json`),`${JSON.stringify(n,null,2)}\n`,`utf8`)}var nt=class extends Error{};function rt(e,t){return e?.response?.decision===`closed`&&t.response?.decision!==`closed`?qe(t.id):e?.response?.decision===`accept`&&t.response?.decision!==`accept`?`Approval "${t.id}" is already approved`:null}function it(e,t){if(!t.length)return;let n=He(e);N.mkdirSync(n,{recursive:!0});for(let{id:e,response:r,...i}of t){let t=j.join(n,`${e}.request.json`);N.existsSync(t)||N.writeFileSync(t,`${JSON.stringify(i,null,2)}\n`,`utf8`),r&&N.writeFileSync(j.join(n,`${e}.response.json`),`${JSON.stringify(r,null,2)}\n`,`utf8`)}}function at(e,t){let n=new Map(e.map(e=>[e.id,e.response])),r=new Set(t.map(e=>e.id)),i=(e,t)=>e?.decision!==`closed`&&(!e||!t||String(t.answeredAt??``)>=String(e.answeredAt??``))?t??e:e;return[...t.map(e=>({...e,response:i(n.get(e.id),e.response)??null})),...e.filter(e=>!r.has(e.id))].sort((e,t)=>String(e.createdAt).localeCompare(String(t.createdAt)))}function ot(e){let{decision:t,reason:n}=e.response,{actions:r}=e,i=r.map((e,t)=>`${t+1}. ${e}`).join(` `);return t===`decline`?`Denied: ${i}${n?`: ${n}`:``}`:t===`closed`?`Closed, the task was stopped: ${i}`:r.length===1?`The user approved doing exactly this outside the sandbox for the rest of this task: ${r[0]}. Retry it outside the sandbox now, exactly as written.`:`The user approved doing exactly these outside the sandbox for the rest of this task: ${i}. Retry them outside the sandbox now, each exactly as written.`}const st=(e,t=[])=>e.map(e=>{let n=t.find(t=>t.response&&ot(t)===e.prompt);return n?{...e,approval:n.id}:e}),ct=e=>e.map((e,t)=>` ${t+1}. ${e.replaceAll(`
3
+ `,`
4
+ `)}`).join(`
5
+ `);function lt(e){let t=e.actions.length;return`${t} action${t===1?``:`s`}`}function ut(e){return async(t,n)=>(e({kind:`approval-decision`,method:t,decision:`decline`,summary:n.command??t,reason:Ve}),{decision:`decline`})}function dt(e,t){let n=`${e}.${F()}.tmp`;N.writeFileSync(n,JSON.stringify(t),{flag:`wx`}),N.renameSync(n,e)}function ft(e,t){let n=N.mkdtempSync(j.join(I.tmpdir(),e)),r=new Map,i=!1,a=()=>{try{for(let e of N.readdirSync(n)){if(!e.endsWith(`.request.json`))continue;let a=e.slice(0,-13),o=j.join(n,e),s=j.join(n,`${a}.response.json`);if(N.existsSync(s)){N.rmSync(o,{force:!0});continue}if(r.has(a))continue;let c=`${o}.processing`;N.renameSync(o,c);let l=(async()=>{let e;try{let n=JSON.parse(N.readFileSync(c,`utf8`));if(n.id!==a)throw Error(`Invalid control request id.`);e={id:a,result:await t(n,i)}}catch(t){let n=t;e={id:a,error:{message:n.message,retryable:n.retryable===!0,rpcCode:n.rpcCode}}}dt(s,e),N.rmSync(c,{force:!0})})();r.set(a,l),l.finally(()=>r.delete(a)).catch(()=>{})}}catch{}},o=c(n,a),s=setInterval(a,3e4);return s.unref(),{endpoint:`file:${n}`,async close(){if(i)return;i=!0,clearInterval(s);let e=Date.now()+3e3;try{for(;a(),await Promise.allSettled([...r.values()]),await Be(),!(!N.existsSync(n)||!N.readdirSync(n).some(e=>e.endsWith(`.reader`))||Date.now()>=e);)await o.wait(e-Date.now())}finally{o.close(),N.rmSync(n,{recursive:!0,force:!0})}}}}async function pt(e,t,n,r){if(!e)return{ok:!1,retryable:!0,detail:`${r} endpoint is not ready.`};if(!e.startsWith(`file:`)||e.length===5)return{ok:!1,retryable:!1,detail:`Unsupported ${r} endpoint: ${e}`};let i=e.slice(5),a=c(i),o=j.join(i,`${F()}.reader`),s=!1;try{N.writeFileSync(o,``);let e=j.join(i,`${t.id}.response.json`);N.existsSync(e)||dt(j.join(i,`${t.id}.request.json`),t),s=!0;let c=Date.now()+n;await Be();let l=await a.until(()=>{try{let n=JSON.parse(N.readFileSync(e,`utf8`));if((!t.command||n?.error?.retryable)&&N.rmSync(e,{force:!0}),n?.id!==t.id)throw Error(`Malformed ${r} response id.`);if(n.error)return{ok:!1,retryable:n.error.retryable===!0,detail:String(n.error.message)};if(!(`result`in n))throw Error(`Malformed ${r} response.`);return{ok:!0,retryable:!1,result:n.result,detail:`${r} accepted control.`}}catch(e){if(e.code!==`ENOENT`)throw e;if(!N.existsSync(i))throw Error(`${r} endpoint closed after control publication; acceptance is unknown.`)}},Math.max(0,c-Date.now()));if(l)return l;throw Error(`Timed out waiting for ${r} acknowledgement.`)}catch(e){return{ok:!1,retryable:!s&&e.code===`ENOENT`,detail:e instanceof Error?e.message:String(e)}}finally{a.close(),N.rmSync(o,{force:!0})}}const mt=/^([a-f0-9-]{36})\.(?:req|applying)\.json$/,ht=2**40;function gt(e,t){let n=Re(`sha256`).update(t).digest();return{task:e,generation:0,seq:ht+n.readUInt32BE(0)}}function _t(e){if(!e)return F();if(!e.task||!Number.isInteger(e.generation)||e.generation<0||!Number.isInteger(e.seq)||e.seq<0)throw Error(`Invalid command key`);let t=Re(`sha256`).update(JSON.stringify([e.task,e.generation,e.seq])).digest(`hex`).slice(0,32);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}const vt=[`hint`,`taskId`,`payload`,`approval`,`result`,`runId`,`status`];function yt(e,t){let n=`${e}.${F()}.tmp`;N.writeFileSync(n,JSON.stringify(t),{encoding:`utf8`,flag:`wx`}),N.renameSync(n,e)}async function bt(e,t,n){let{dir:r}=n,i=n.id??F(),a=j.join(r,`${i}.res.json`);N.existsSync(a)||yt(j.join(r,`${i}.req.json`),{kind:e,payload:t});let o=Date.now();for(;!N.existsSync(a);){if(n.timeoutMs&&Date.now()-o>=n.timeoutMs)throw Error(`Worker control timed out`);await new Promise(e=>setTimeout(e,100))}let{result:s,error:c}=JSON.parse(N.readFileSync(a,`utf8`));if(n.keepReply||N.rmSync(a,{force:!0}),c){let{code:e,message:t,...n}=c;throw new L(e,t,n)}return s}function xt(e,t){N.mkdirSync(e,{recursive:!0});let n=new Set,r=async(r,i)=>{let a;try{let n=j.join(e,r);if(!N.lstatSync(n).isFile())throw Error(`mailbox request is not a regular file`);let{kind:o,payload:s}=JSON.parse(N.readFileSync(n,`utf8`)),c=j.join(e,`${i}.applying.json`);N.existsSync(c)||yt(c,{kind:o,payload:s});let l=Object.hasOwn(t,o)?t[o]:void 0;if(!l)throw Error(`unknown mailbox request "${o}"`);a={result:await l(s??{})??null}}catch(e){let t=e instanceof L?e:void 0;a={error:{code:t?.code??`invalid-option`,message:e instanceof Error?e.message:String(e),...Object.fromEntries(vt.flatMap(e=>t?.[e]===void 0?[]:[[e,t[e]]]))}}}try{yt(j.join(e,`${i}.res.json`),a),N.rmSync(j.join(e,`${i}.req.json`),{force:!0}),N.rmSync(j.join(e,`${i}.applying.json`),{force:!0}),n.delete(i)}catch{}},i=setInterval(()=>{let t=[];try{t=N.readdirSync(e)}catch{return}for(let i of t){let t=mt.exec(i)?.[1];if(t){if(N.existsSync(j.join(e,`${t}.res.json`))){N.rmSync(j.join(e,i),{force:!0});continue}n.has(t)||(n.add(t),r(i,t))}}},100);return()=>clearInterval(i)}function St(e){let t=e instanceof Error?e.message:String(e);return/no active turn|active turn.*(?:ended|completed)|turn.*(?:already )?(?:ended|completed)|turn.*not active/i.test(t)}function z(e,t,n){return Object.assign(Error(e),{retryable:t,...n===void 0?{}:{rpcCode:n}})}function Ct(e,t,n,r){if(!e||e.id!==t||e.method!==`turn/steer`&&e.method!==`turn/interrupt`)throw z(`Invalid Codex control request.`,!1);let i=e.params;if(!i||typeof i!=`object`||i.threadId!==n)throw z(`Codex control request does not match its owning thread.`,!1);if(e.method===`turn/interrupt`){if(i.turnId!==r)throw z(`Codex turn/interrupt request does not match its owning active turn.`,!1);return{method:e.method,params:i}}if(i.expectedTurnId!==r)throw z(`Codex turn/steer request does not match its owning active turn.`,!1);let a=i.input;if(!Array.isArray(a)||a.length!==1||a[0]?.type!==`text`||typeof a[0]?.text!=`string`||!a[0].text.trim())throw z(`Invalid Codex turn/steer input schema.`,!1);return{method:e.method,params:i}}async function wt(e,{threadId:t,turnId:n}){return ft(`coder-codex-control-`,async(r,i)=>{if(i)throw z(`Codex owner endpoint is shutting down.`,!0);let a=Ct(r,r.id,t,n);try{let n=await e.request(a.method,a.params);return a.method===`turn/interrupt`&&await e.request(`thread/backgroundTerminals/clean`,{threadId:t}),n}catch(e){throw z(e instanceof Error?e.message:String(e),St(e),e.rpcCode)}})}function Tt(e){if(e?.startsWith(`file:`)&&e.length>5){let t=j.resolve(e.slice(5)),n=j.resolve(I.tmpdir());j.dirname(t)===n&&j.basename(t).startsWith(`coder-codex-control-`)&&N.rmSync(t,{recursive:!0,force:!0})}}async function Et(e,t,n,r=3e3,i){return pt(e,{id:_t(i),method:t,params:n,command:i},r,`Codex control`)}const Dt=`Coder Task`;function Ot(e,t=72){let n=String(e??``).trim().replace(/\s+/g,` `);return n?n.length<=t?n:`${n.slice(0,t-3)}...`:``}function kt(e){let t=Ot(e,56);return t?`${Dt}: ${t}`:Dt}function At(e){return e?.params?.threadId??null}function jt(e){return e?.params?.turnId?e.params.turnId:e?.params?.turn?.id?e.params.turn.id:null}function Mt(e,t){let n=[];for(let r of e.matchAll(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/gm)){let e=t===`delete`,i=Number(e?r[1]:r[3]),a=Number((e?r[2]:r[4])??1);!Number.isFinite(i)||!Number.isFinite(a)||n.push(a<=1?`L${i}`:`L${i}-L${i+a-1}`)}return n}function Nt(e){try{let t=N.readFileSync(e,`utf8`),n=t?t.split(/\r\n|\r|\n/).length-+!!t.endsWith(`
6
+ `):0;return n>0?[n===1?`L1`:`L1-L${n}`]:[]}catch{return[]}}function Pt(e,t,n){let r=typeof e.kind==`string`?e.kind:e.kind?.type??`change`,i=e.path||`(unknown path)`,a=Mt(e.diff??``,r),o=a.length||r!==`add`||!t?a:Nt(i),s=typeof e.kind==`object`&&e.kind?.move_path?` -> ${n?u(n,e.kind.move_path):e.kind.move_path}`:``;return`${r} ${n?u(n,i):i}${s}${o.length?` ${o.join(`, `)}`:``}`}function Ft(e,t=!1,n){return(e.changes??[]).map(e=>Pt(e,t,n)).join(`; `)}function It(e){let t=e.trim().split(` `)[0]??``;return t===`/dev/null`?``:t.replace(/^[ab]\//,``)}function Lt(e,t){let n=new Map,r=``,i=``;for(let t of e.split(/\r?\n/)){if(t.startsWith(`--- `)){r=It(t.slice(4));continue}if(t.startsWith(`+++ `)){i=It(t.slice(4));continue}let e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/.exec(t);if(!e)continue;let a=Number(e[1]),o=Number(e[2]??1),s=Number(e[3]),c=Number(e[4]??1),l=c===0,u=(l?r:i)||i||r||`(unknown path)`,d=l?a:s,f=l?o:c,p=f<=1?`L${d}`:`L${d}-L${d+f-1}`,m=n.get(u)??[];m.push(p),n.set(u,m)}return[...n].map(([e,n])=>`${t?u(t,e):e} ${n.join(`, `)}`).join(`; `)}function Rt(e){if(!e||typeof e!=`object`)return null;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=t(e.inputTokens),r=t(e.cachedInputTokens),i=t(e.outputTokens);return{input:n,cachedInput:r,output:i,total:t(e.totalTokens)||n+r+i}}function zt(e){if(e.tokenUsageByThread.size===0)return null;let t={input:0,cachedInput:0,output:0,total:0};for(let[n,r]of e.tokenUsageByThread){let i=e.tokenUsageBaselineByThread.get(n);t.input+=Math.max(0,r.input-(i?.input??0)),t.cachedInput+=Math.max(0,r.cachedInput-(i?.cachedInput??0)),t.output+=Math.max(0,r.output-(i?.output??0)),t.total+=Math.max(0,r.total-(i?.total??0))}return t}function Bt(e){return String(e??``).replace(/\s+/g,` `).trim()}function B(e){if(!e)return[];if(typeof e==`string`){let t=Bt(e);return t?[t]:[]}if(Array.isArray(e))return e.flatMap(e=>B(e));if(typeof e==`object`){let t=e;if(typeof t.text==`string`)return B(t.text);if(`summary`in t)return B(t.summary);if(`content`in t)return B(t.content);if(`parts`in t)return B(t.parts)}return[]}function Vt(e,t){let n=[];for(let r of[...e,...t]){let e=Bt(r);!e||n.includes(e)||n.push(e)}return n}function V(e,t,n=null,r={}){!e||t==null||e({message:t,phase:n,...r})}function Ht(e,t){t&&V(e,t.message,t.phase??null,t.extra??{})}function Ut(e){return e.replace(/^\/(?:usr\/)?bin\/\w*sh\s+-l?c\s+/,``)}function Wt(e,t){let n=e?.extra?.kind;return!e||n!==`tool`&&n!==`tool-result`||typeof t.id!=`string`?e:{...e,extra:{...e.extra,callId:t.id}}}function H(e){return e==null?``:typeof e==`string`?e:JSON.stringify(e)}function Gt(e){let t=String(e.tool||e.name||e.kind||e.type||`tool`),n=Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null&&![`id`,`type`,`kind`,`name`,`tool`,`status`,`result`,`results`,`output`,`error`,`contentItems`,`success`,`durationMs`,`exitCode`].includes(e))),r=Object.keys(n).length?H(n):``;return{message:r?`${t} ${r}`:t,phase:`investigating`,extra:{kind:`tool`,tool:t}}}function Kt(e,t){switch(e.type){case`commandExecution`:return{message:Ut(String(e.command??``).trim())||`command`,phase:`running`,extra:{kind:`tool`,tool:`command`}};case`fileChange`:return{message:Ft(e,!1,t)||`edit`,phase:`editing`,extra:{kind:`tool`,tool:`edit`}};case`mcpToolCall`:return{message:[`${e.server}/${e.tool}`,H(e.arguments)].filter(Boolean).join(` `),phase:`investigating`,extra:{kind:`tool`,tool:String(e.tool??``)}};case`dynamicToolCall`:return{message:[[e.namespace,e.tool||`tool`].filter(Boolean).join(`/`),H(e.arguments)].filter(Boolean).join(` `),phase:`investigating`,extra:{kind:`tool`,tool:String(e.tool??``)}};case`webSearch`:{let t=e.action,n=Array.isArray(t?.queries)?t.queries.filter(e=>typeof e==`string`&&e.trim()):[],r=n.length?n.join(`; `):String(t?.query||e.query||``).trim()||H(t);return{message:r?`search: ${r}`:`search`,phase:`investigating`,extra:{kind:`tool`,tool:`search`}}}case`agentMessage`:case`reasoning`:case`userMessage`:return null;default:return Gt(e)}}function qt(e,t){switch(e.type){case`agentMessage`:{let t=String(e.text??``).trim();return t?{message:t,phase:null,extra:{kind:`assistant`}}:null}case`reasoning`:{let t=B(e.summary).join(`
7
+ `);return t?{message:t,phase:null,extra:{kind:`reasoning`}}:null}case`commandExecution`:{let t=typeof e.exitCode==`number`?e.exitCode:null;return{message:String(e.aggregatedOutput??``).trim(),phase:`running`,extra:{kind:`tool-result`,tool:`command`,command:String(e.command??``).trim(),durationMs:e.durationMs,...t===null?{isError:e.status!==`completed`}:{exitCode:t}}}}case`fileChange`:return{message:Ft(e,!0,t)||`(details unavailable)`,phase:`editing`,extra:{kind:`tool-result`,tool:`edit`,isError:e.status!==`completed`}};case`mcpToolCall`:return{message:H(e.error??e.result)||`${e.server}/${e.tool} ${e.status}`,phase:`investigating`,extra:{kind:`tool-result`,tool:String(e.tool??``),durationMs:e.durationMs,isError:e.status!==`completed`||e.error!=null}};case`dynamicToolCall`:return{message:H(e.contentItems)||`${e.tool} ${e.status}`,phase:`investigating`,extra:{kind:`tool-result`,tool:String(e.tool??``),durationMs:e.durationMs,isError:e.status!==`completed`||e.success===!1}};case`userMessage`:return null;default:return{message:H(e.error??e.result??e.results??e.output??e.action??e),phase:`investigating`,extra:{kind:`tool-result`,tool:Kt(e,t)?.extra?.tool,durationMs:e.durationMs,isError:e.status===`failed`||e.status===`declined`||e.success===!1||e.error!=null}}}}function Jt(e,t={}){let n,r,i=new Promise((e,t)=>{n=e,r=t});return{threadId:e,rootThreadId:e,threadIds:new Set([e]),threadTurnIds:new Map,turnId:null,bufferedNotifications:[],completion:i,resolveCompletion:n,rejectCompletion:r,finalTurn:null,completed:!1,finalAnswerSeen:!1,pendingCollaborations:new Set,activeSubagentTurns:new Set,completionTimer:null,lastAgentMessage:``,reasoningSummary:[],reasoningStartedAt:new Map,error:null,fileChanges:[],commandExecutions:[],tokenUsageByThread:new Map,tokenUsageBaselineByThread:new Map,lastDiffSummary:``,loggedTokens:0,reportedChanges:new Set,cwd:t.cwd??``,itemIndex:new Map,onProgress:t.onProgress??null,onHeartbeat:t.onHeartbeat??null}}function Yt(e){e.completionTimer&&=(clearTimeout(e.completionTimer),null)}function Xt(e,t=null){e.completed||(Yt(e),e.completed=!0,t?(e.finalTurn=t,e.turnId||=t.id??null):e.finalTurn||={id:e.turnId??`inferred-turn`,status:`completed`},e.resolveCompletion(e))}function Zt(e){e.completed||e.finalTurn||!e.finalAnswerSeen||e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||(Yt(e),e.completionTimer=setTimeout(()=>{e.completionTimer=null,!(e.completed||e.finalTurn||!e.finalAnswerSeen)&&(e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||Xt(e,null))},250),e.completionTimer.unref?.())}function Qt(e,t){let n=At(t);if(!n||!e.threadIds.has(n))return!1;let r=e.threadTurnIds.get(n)??null,i=jt(t);return r===null||i===null||i===r}function $t(e,t,n,r=null){if(t.id&&e.itemIndex.set(t.id,t),t.type===`collabAgentToolCall`){(!r||r===e.threadId)&&(n===`started`||t.status===`inProgress`?e.pendingCollaborations.add(t.id):n===`completed`&&(e.pendingCollaborations.delete(t.id),Zt(e)));for(let n of t.receiverThreadIds??[])e.threadIds.add(n)}if(t.type===`agentMessage`){t.text&&(!r||r===e.threadId)&&(e.lastAgentMessage=t.text.trim(),n===`completed`&&t.phase===`final_answer`&&(e.finalAnswerSeen=!0,Zt(e)));return}if(t.type===`reasoning`&&n===`completed`){e.reasoningSummary=Vt(e.reasoningSummary,B(t.summary));return}if(t.type===`fileChange`&&n===`completed`){e.fileChanges.push(t);return}t.type===`commandExecution`&&n===`completed`&&e.commandExecutions.push(t)}function en(e,t){switch(e.onHeartbeat?.(),t.method){case`thread/started`:e.threadIds.add(t.params.thread.id);break;case`turn/started`:e.threadIds.add(t.params.threadId),e.threadTurnIds.set(t.params.threadId,t.params.turn.id),(t.params.threadId??null)!==e.threadId&&e.activeSubagentTurns.add(t.params.threadId),V(e.onProgress,`Turn started (${t.params.turn.id}).`,`starting`,{kind:`status`,threadId:t.params.threadId??null,turnId:t.params.turn.id??null});break;case`item/started`:t.params.item?.type===`reasoning`&&t.params.item.id&&e.reasoningStartedAt.set(`${t.params.threadId}:${t.params.item.id}`,Date.now()),$t(e,t.params.item,`started`,t.params.threadId??null),Ht(e.onProgress,Wt(Kt(t.params.item,e.cwd),t.params.item));break;case`item/completed`:{let n={...e.itemIndex.get(t.params.item.id),...t.params.item};if($t(e,n,`completed`,t.params.threadId??null),n?.type===`fileChange`)for(let t of n.changes??[])t.path&&e.reportedChanges.add(u(e.cwd,t.path));let r=Wt(qt(n,e.cwd),n);if(r?.extra?.kind===`tool-result`){let t=Kt(n,e.cwd);r.extra={...r.extra,callMessage:n.type===`fileChange`?r.message:t?.message}}if(n?.type===`reasoning`){let i=`${t.params.threadId}:${n.id}`,a=e.reasoningStartedAt.get(i);e.reasoningStartedAt.delete(i),r&&(r.extra={...r.extra,durationMs:Math.max(0,Date.now()-(a??Date.now()))})}Ht(e.onProgress,r);break}case`thread/tokenUsage/updated`:{let n=Rt(t.params?.tokenUsage?.last),r=At(t);r===e.threadId&&t.params?.tokenUsage?.last&&(e.contextTokens=n?.total);let i=Rt(t.params?.tokenUsage?.total??t.params?.tokenUsage);if(i&&r){n&&!e.tokenUsageByThread.has(r)&&e.tokenUsageBaselineByThread.set(r,{input:Math.max(0,i.input-n.input),cachedInput:Math.max(0,i.cachedInput-n.cachedInput),output:Math.max(0,i.output-n.output),total:Math.max(0,i.total-n.total)}),e.tokenUsageByThread.set(r,i);let t=zt(e);t&&(!e.loggedTokens||t.total-e.loggedTokens>=1e3)&&(e.loggedTokens=t.total,e.onProgress?.({kind:`usage`,tokens:t,context:e.contextTokens??null}))}break}case`turn/diff/updated`:{let n=Lt(String(t.params?.diff??``),e.cwd).split(`; `).filter(t=>!e.reportedChanges.has(t.split(` `)[0]??``)).join(`; `);n&&n!==e.lastDiffSummary&&(e.lastDiffSummary=n,V(e.onProgress,`changed: ${n}`,`editing`,{kind:`status`}));break}case`item/autoApprovalReview/completed`:{let n=t.params?.review??{},r=t.params?.action??{},i=Ut(String(r.command??r.type??``).trim());V(e.onProgress,`Auto-review ${n.status}. ${Ot(i,48)}${n.rationale?`. ${Ot(n.rationale,320)}`:``}`,null,{kind:`auto-review`,decision:String(n.status??``),...n.riskLevel?{riskLevel:String(n.riskLevel)}:{},...i?{summary:`run command: ${i}`}:{},...n.rationale?{reason:String(n.rationale)}:{}});break}case`error`:e.error=t.params.error,V(e.onProgress,`Codex error: ${t.params.error.message}`,`failed`,{kind:`error`});break;case`turn/completed`:if((t.params.threadId??null)!==e.threadId){e.activeSubagentTurns.delete(t.params.threadId),Zt(e);break}V(e.onProgress,`Turn ${t.params.turn.status}.`,`finalizing`,{kind:`status`}),Xt(e,t.params.turn)}}async function tn(e,t,n,r={}){let i=Jt(t,r),a=e.notificationHandler;e.setNotificationHandler(e=>{if(!i.turnId){i.bufferedNotifications.push(e);return}if(e.method===`thread/started`){en(i,e);return}if(!Qt(i,e)){a?.(e);return}en(i,e)});let o=r.onApprovalRequest;o&&e.setServerRequestHandler((e,t)=>o(e,t,i));try{let t=await n();i.turnId=t.turn?.id??null,i.turnId&&(i.threadTurnIds.set(i.threadId,i.turnId),await r.onTurnStarted?.(i.turnId));for(let e of i.bufferedNotifications)Qt(i,e)?en(i,e):a?.(e);i.bufferedNotifications.length=0,t.turn?.status&&t.turn.status!==`inProgress`&&Xt(i,t.turn);let o=e.exitPromise?.then(()=>{throw e.exitError??Error(`codex app-server connection closed before the turn completed.`)});return await(o?Promise.race([i.completion,o]):i.completion)}finally{Yt(i),e.setNotificationHandler(a??null),e.setServerRequestHandler(null)}}function nn(e,t,n=[]){return e===`read-only`?t?{type:`readOnly`,networkAccess:t}:null:e!==`workspace-write`||!n.length?null:{type:`workspaceWrite`,writableRoots:n,networkAccess:t??!1,excludeTmpdirEnvVar:!0,excludeSlashTmp:!0}}function rn(e=[],t=[],n=!1){let r=Object.fromEntries((n?[]:t).map(e=>[e,{enabled:!1}])),i=new Set([...t,...e.map(e=>e.name)]);for(let n of e){let e=n.name;if(t.includes(e)){for(let t=1;i.has(e);t++)e=`${n.name}_coder_${t}`;i.add(e)}r[e]={...n.url?{url:n.url,...n.headers?{http_headers:n.headers}:{}}:{command:n.command,args:n.args??[],...n.env?{env:n.env}:{}},default_tools_approval_mode:`approve`}}return Object.keys(r).length?{mcp_servers:r}:{}}function an(e){return e.split(/\r?\n/).map(e=>e.trimEnd()).filter(e=>e&&!e.startsWith(`WARNING: proceeding, even though we could not update PATH:`)).join(`
8
+ `)}async function on(e,t,n={}){let r=n.connect??Fe.connect,i={...n.networkAccess===void 0?{}:{networkAccess:n.networkAccess},nativeMcp:n.nativeMcp??!1,disableBroker:n.disableBroker??!1},a=null;try{a=await r(e,i);let n=await t(a);return await a.close(),n}catch(n){let o=n,s=a?.transport===`broker`||!!process.env.CODER_APP_SERVER_ENDPOINT,c=a?.transport===`broker`&&o?.rpcCode===-32001||s&&(o?.code===`ENOENT`||o?.code===`ECONNREFUSED`);if(a&&=(await a.close().catch(()=>{}),null),!c)throw n;let l=await r(e,{...i,disableBroker:!0});try{return await t(l)}finally{await l.close()}}}function U(e){let t=process.env.CODEX_AUTH_JSON;if(t){let e=j.join(I.homedir(),`.codex`),n=j.join(e,`auth.json`);if(!N.existsSync(n)){N.mkdirSync(e,{recursive:!0,mode:448});try{N.writeFileSync(n,t,{encoding:`utf8`,flag:`wx`,mode:384})}catch(e){if(e.code!==`EEXIST`)throw e}}}let n=fe(`codex`,[`--version`],{cwd:e,env:k()});if(!n.available)return n;let r=fe(`codex`,[`app-server`,`--help`],{cwd:e,env:k()});return r.available?{available:!0,detail:`${n.detail}; app-server runtime available`}:{available:!1,detail:`${n.detail}; app-server runtime unavailable: ${r.detail}`}}async function sn(e){let t=U(e);if(!t.available)return{available:!1,loggedIn:!1,detail:t.detail};let n=null;try{n=await Fe.connect(e,{reuseExistingBroker:!0});let t=await n.request(`account/read`,{refreshToken:!1}),r=t?.account??null;return r?.type===`chatgpt`?{available:!0,loggedIn:!0,detail:r.email?`ChatGPT login active for ${r.email}`:`ChatGPT login active`}:r?.type===`apiKey`?{available:!0,loggedIn:!0,detail:`API key configured`}:t?.requiresOpenaiAuth===!1?{available:!0,loggedIn:!0,detail:`Active provider does not require OpenAI authentication`}:{available:!0,loggedIn:!1,detail:"Not authenticated. Run `codex login`."}}catch(e){let t=P(`codex`,[`login`,`status`],{encoding:`utf8`,env:k()}),n=`${t.stdout??``}${t.stderr??``}`.trim();return t.status===0?{available:!0,loggedIn:!0,detail:n||`Logged in`}:{available:!0,loggedIn:!1,detail:n||(e instanceof Error?e.message:String(e))}}finally{await n?.close().catch(()=>{})}}async function cn(e,{endpoint:t,threadId:n,turnId:r}){if(!n||!r)return{interrupted:!1,detail:`missing threadId or turnId`};let i=await Et(t,`turn/interrupt`,{threadId:n,turnId:r});return i.ok?{interrupted:!0,detail:`Interrupted ${r} on ${n}.`}:{interrupted:!1,detail:i.detail}}async function ln(e,{endpoint:t,threadId:n,turnId:r,text:i,command:a}){if(!n)return{steered:!1,retryable:!0,detail:`missing active threadId`};if(!r)return{steered:!1,retryable:!0,detail:`missing active turnId`};let o=i.trim();if(!o)return{steered:!1,retryable:!1,detail:`empty follow-up`};let s=await Et(t,`turn/steer`,{threadId:n,input:[{type:`text`,text:o,text_elements:[]}],expectedTurnId:r},3e3,a);return s.ok?s.result?.turnId===r?{steered:!0,retryable:!1,detail:`Steered follow-up into ${r} on ${n}.`}:{steered:!1,retryable:!1,detail:`turn/steer returned unexpected turnId ${String(s.result?.turnId??`(missing)`)}; expected ${r}`}:{steered:!1,retryable:s.retryable,detail:s.detail}}async function un(e,t={},n={}){if(!t.availabilityChecked){let t=U(e);if(!t.available)throw Error(`Codex CLI is not available: ${t.detail}`)}let r=t.prompt?.trim();if(!r)throw Error(`A prompt is required.`);let i=process.env.CODER_MACHINE_SANDBOX===`1`&&(t.sandbox??`read-only`)!==`read-only`?`danger-full-access`:t.sandbox,a={sandbox:i??`read-only`},o=t.approvalsReviewer??((t.approvalPolicy??`never`)===`never`?null:`user`),s=t.configOverrides&&Object.keys(t.configOverrides).length?t.configOverrides:null,c=nn(i,t.networkAccess,t.writableRoots),l=async n=>{let i=null,l;A(`codex.config.start`);let u=await n.request(`config/read`,{cwd:e,includeLayers:!1});A(`codex.config.done`);let d=t.customModel?O(t.customModel.alias,t.customModel.entry,n.bridgeUrl??dn()):null,f=t.customModel?.entry.model??t.model??null,p={...d?{}:{model_reasoning_summary:`auto`},...d?.configOverrides,...s,...rn(t.mcpServers,Object.keys(u.config?.mcp_servers??{}),t.nativeMcp),...t.nativeMcp?{}:{"features.apps":!1,"features.plugins":!1},"features.shell_snapshot":!1},m=t.developerInstructions?{developerInstructions:t.developerInstructions}:{},h;if(t.resumeThreadId&&(V(t.onProgress,`Resuming thread ${t.resumeThreadId}.`,`starting`,{kind:`status`}),Ee(t.resumeThreadId)&&await ve(t.resumeThreadId),h=await n.request(`thread/resume`,{threadId:t.resumeThreadId,cwd:e,model:f,modelProvider:d?.modelProvider??null,config:p,approvalPolicy:t.approvalPolicy??`never`,...a,...o?{approvalsReviewer:o}:{},...m}).catch(e=>{V(t.onProgress,Me,`starting`,{kind:`warning`,detail:String(e?.message??e)})})),h)l=h.thread.id;else if(V(t.onProgress,`Starting Codex task thread.`,`starting`,{kind:`status`}),A(`codex.thread.start`),l=(await n.request(`thread/start`,{cwd:e,model:f,modelProvider:d?.modelProvider??null,config:p,approvalPolicy:t.approvalPolicy??`never`,...a,...o?{approvalsReviewer:o}:{},...m,serviceName:`coder_runtime`,ephemeral:t.ephemeral??!1})).thread.id,!(t.ephemeral??!1))try{await n.request(`thread/name/set`,{threadId:l,name:kt(r)})}catch(e){let t=String(e?.message??e??``);if(!t.includes(`unknown variant`)&&!t.includes(`unknown method`))throw e}A(`codex.thread.ready`),V(t.onProgress,`Thread ready (${l}).`,`starting`,{kind:`status`,threadId:l});let g,_=null,v=()=>{_&&n.request(`turn/interrupt`,{threadId:l,turnId:_}).catch(()=>{})};t.signal?.addEventListener(`abort`,v,{once:!0});try{g=await tn(n,l,()=>n.request(`turn/start`,{threadId:l,input:[{type:`text`,text:r,text_elements:[]}],model:f,effort:t.effort??null,outputSchema:t.outputSchema??null,approvalPolicy:t.approvalPolicy??`never`,...o?{approvalsReviewer:o}:{},...c?{sandboxPolicy:c}:{}}),{cwd:e,onProgress:t.onProgress,onHeartbeat:t.onHeartbeat,onApprovalRequest:t.onApprovalRequest,onTurnStarted:async e=>{_=e,t.signal?.aborted&&v(),t.onControlReady&&(i=await wt(n,{threadId:l,turnId:e}),t.onControlReady(i.endpoint,l,e))}}),A(`codex.result`),t.onResult?.({status:g.finalTurn?.status===`completed`?0:1,threadId:l,turnId:g.turnId,finalMessage:g.lastAgentMessage,error:g.error??g.finalTurn?.error??null})}finally{t.signal?.removeEventListener(`abort`,v),await i?.close()}return{status:g.finalTurn?.status===`completed`?0:1,threadId:l,turnId:g.turnId,finalMessage:g.lastAgentMessage,reasoningSummary:g.reasoningSummary,turn:g.finalTurn,error:g.error??g.finalTurn?.error??null,stderr:an(n.stderr),fileChanges:g.fileChanges,tokens:zt(g),contextTokens:g.contextTokens,model:t.customModel?.alias??t.model??null,commandExecutions:g.commandExecutions}},u=async e=>{e.setNoticeHandler?.(e=>V(t.onProgress,e,`starting`,{kind:`status`}));try{let t=await l(e);return ye(t.error?.message)&&await fn(e),t}catch(t){throw ye(ke(t))&&await fn(e),t}},d=()=>on(e,u,{...n,networkAccess:t.networkAccess,nativeMcp:t.nativeMcp}),f=!1,p=()=>(f=!0,V(t.onProgress,`Codex login changed; restarted the Codex app-server and retrying the turn once.`,`starting`,{kind:`status`}),d());try{let e=await d().catch(e=>{if(!ye(ke(e)))throw e;return p()}),n=!e.fileChanges?.length&&!e.commandExecutions.length;!f&&n&&ye(e.error?.message)&&(e=await p());let r=De(e.error?.message,t.model);return r?{...e,error:{...e.error,message:r}}:e}catch(e){let n=De(ke(e),t.model);throw n?Error(n):e}}function dn(){throw Error(`The Codex app-server has no custom-model bridge; restart the Coder broker.`)}async function fn(e){e.transport===`broker`&&await e.request(pe,{}).catch(()=>{})}const W=`@wular/coder`,pn=`https://registry.npmjs.org/${W}/latest`,G={npm:[`npm`,`install`,`-g`,`${W}@latest`],pnpm:[`pnpm`,`add`,`-g`,`${W}@latest`],yarn:[`yarn`,`global`,`add`,`${W}@latest`],bun:[`bun`,`add`,`-g`,`${W}@latest`]};function mn(){return ce(`update-check.json`)}function K(e,t){let n=String(e).split(`.`).map(e=>parseInt(e,10)||0),r=String(t).split(`.`).map(e=>parseInt(e,10)||0);for(let e=0;e<3;e+=1){if((n[e]??0)>(r[e]??0))return 1;if((n[e]??0)<(r[e]??0))return-1}return 0}function hn(){try{return JSON.parse(N.readFileSync(mn(),`utf8`))}catch{return null}}function gn(e){try{N.mkdirSync(ce(),{recursive:!0}),N.writeFileSync(mn(),JSON.stringify(e))}catch{}}function _n(){try{N.rmSync(mn(),{force:!0})}catch{}}function vn(e,t){if(M.env.CODER_NO_UPDATE_CHECK||M.env.CI)return;let n=hn();if(!n?.checkedAt||Date.now()-n.checkedAt>864e5)try{Le(M.execPath,[t,`upgrade`,`refresh`],{detached:!0,stdio:`ignore`}).unref()}catch{}return n?.latest&&K(n.latest,e)>0?n.latest:void 0}async function yn(e){let t=hn()?.latest??null;try{let e=await fetch(pn,{signal:AbortSignal.timeout(3e3),headers:{accept:`application/json`}});if(e.ok){let n=await e.json();n?.version&&(t=n.version)}}catch{}gn({checkedAt:Date.now(),latest:t,current:e})}function bn(e){let t=e;try{t=N.realpathSync(e)}catch{}let n=t.replace(/\\/g,`/`);return/\/\.bun\//.test(n)?{pm:`bun`,command:G.bun}:/\/\.pnpm\//.test(n)||/\/pnpm(-global)?\//i.test(n)||/\/Library\/pnpm\//.test(n)?{pm:`pnpm`,command:G.pnpm}:/\/\.config\/yarn\/global\//.test(n)||/\/yarn\/global\//.test(n)||/\/Yarn\/Data\/global\//.test(n)?{pm:`yarn`,command:G.yarn}:{pm:`npm`,command:G.npm}}var xn=t({MIN_CODEX_VERSION:()=>kn,agentsSkillDir:()=>Cn,ensureCodexInstalled:()=>On,ensureCodexUpToDate:()=>Nn,installAgentsSkill:()=>Tn,installClaudePlugin:()=>Sn,modelVersionWarning:()=>Mn,parseVersion:()=>jn,readAgentsSkillVersion:()=>wn,registerCodexMcp:()=>En,registerCursorMcp:()=>Dn,setupHost:()=>In,setupHostCore:()=>Pn,upgradeCore:()=>Fn});function Sn(e){P(`claude`,[`plugin`,`marketplace`,`remove`,`coder-plugins`],{encoding:`utf8`});let t=P(`claude`,[`plugin`,`marketplace`,`add`,e],{encoding:`utf8`}),n=P(`claude`,[`plugin`,`install`,`coder@coder-plugins`],{encoding:`utf8`}),r=t.status===0&&n.status===0;return{marketplace:e,installed:r,note:r?`Plugin installed; restart any running Claude Code session to load it.`:`Automatic install failed (${(n.stderr||t.stderr||`claude not found`).trim()}); run: claude plugin marketplace add "${e}" && claude plugin install coder@coder-plugins`}}function Cn(){return j.join(I.homedir(),`.agents`,`skills`,`coder`)}function wn(){try{let e=N.readFileSync(j.join(Cn(),`SKILL.md`),`utf8`);return/^\s*version:\s*(\S+)/m.exec(e)?.[1]??null}catch{return null}}function Tn(e){let t=Cn();try{let n=j.join(e,`plugins`,`agents`,`skills`,`coder`);N.rmSync(t,{recursive:!0,force:!0}),N.mkdirSync(t,{recursive:!0}),N.cpSync(n,t,{recursive:!0});let r=j.join(t,`SKILL.md`),i=N.readFileSync(r,`utf8`).replace(`
9
+ ---
10
+ `,`\nmetadata:\n version: ${w()}\n---\n`);return N.writeFileSync(r,i),{marketplace:t,installed:!0,note:`Skill installed to ~/.agents/skills/coder; restart running sessions to load it.`}}catch(e){return{marketplace:t,installed:!1,note:`Skill install failed: ${e instanceof Error?e.message:String(e)}`}}}function En(){let e=`codex`;if(P(`codex`,[`mcp`,`get`,`coder`],{encoding:`utf8`}).status===0)return{marketplace:e,installed:!0,note:`Coder MCP server already registered with Codex.`};let t=P(`codex`,[`mcp`,`add`,`coder`,`--`,`coder`,`mcp`],{encoding:`utf8`});return{marketplace:e,installed:t.status===0,note:t.status===0?`Coder MCP server registered with Codex; restart running sessions to load it.`:`MCP registration failed; run: codex mcp add coder -- coder mcp`}}function Dn(){let e=j.join(I.homedir(),`.cursor`,`mcp.json`);try{let t=N.existsSync(e)?JSON.parse(N.readFileSync(e,`utf8`)):{},n=e=>typeof e==`object`&&!!e&&!Array.isArray(e);if(!n(t)||t.mcpServers!==void 0&&!n(t.mcpServers))throw Error(`Invalid MCP configuration`);let r=t.mcpServers??{};return Object.hasOwn(r,`coder`)?{marketplace:e,installed:!0,note:`Coder MCP server already registered with Cursor.`}:(N.mkdirSync(j.dirname(e),{recursive:!0}),N.writeFileSync(e,JSON.stringify({...t,mcpServers:{...r,coder:{type:`stdio`,command:`coder`,args:[`mcp`]}}},null,2)+`
11
+ `,{mode:384}),{marketplace:e,installed:!0,note:`Coder MCP server registered in ~/.cursor/mcp.json; restart running sessions to load it.`})}catch{return{marketplace:e,installed:!1,note:`MCP registration failed; merge a coder entry with command "coder" and args ["mcp"] into ~/.cursor/mcp.json.`}}}function On(e){if(e.available)return null;let t=P(`npm`,[`install`,`-g`,`@openai/codex@latest`],{encoding:`utf8`});return t.status===0?{installed:!0,note:`codex CLI installed (runs your custom models; no login needed for them)`}:{installed:!1,note:`custom models run on the codex CLI and it is not installed; auto-install failed: ${(t.stderr||`npm not found`).trim()}. Run: npm install -g @openai/codex`}}const kn=`0.159.1`,An={codex:{"gpt-6-astra":`0.154.0`,"gpt-6-sol":`0.156.1`,"gpt-6-luna":`0.156.1`,"gpt-6.1-sol":`0.159.1`},claude:{sonnet:`2.1.197`,fable:`2.1.257`,opus:`2.1.280`}};function jn(e){let t=/(\d+\.\d+\.\d+)/.exec(String(e??``));return t?t[1]:null}function Mn(e,t,n){let r=t?An[e][t]:void 0,i=jn(n.detail);return!r||!i||K(i,r)>=0?null:`${e} ${i} predates ${t} (needs ${r}), so it may fail or run another model. Run: ${e} update`}function Nn(e){if(!e.available)return null;let t=jn(e.detail);if(!t||K(t,`0.159.1`)>=0)return null;let n=P(`codex`,[`update`],{encoding:`utf8`});return n.status!==0&&(n=P(`npm`,[`install`,`-g`,`@openai/codex@latest`],{encoding:`utf8`})),n.status===0?{updated:!0,from:t}:{updated:!1,from:t,note:`codex ${t} is too old for the default codex model (needs >= ${kn}); auto-update failed: ${(n.stderr||`codex/npm not found`).trim()}. Run: codex update`}}async function Pn(e,t={},n){let i=t.hosts??[],a=i.find(e=>![`claude`,`agents`,`codex`,`cursor`].includes(e));if(a)throw new L(`invalid-option`,`Unknown host "${a}". Use claude, agents, codex or cursor.`,{hint:`Codex, Pi, OpenCode, and other Agent Skills hosts: coder setup-host agents`});let o=e=>i.includes(e);n?.();let s=U(e),c=Nn(s);c?.updated&&(s=U(e));let l=s.available?await sn(e):{loggedIn:!1,detail:s.detail},u=J(),d=u.available?Qn():{loggedIn:!1,detail:u.detail},f=r();if(!N.existsSync(f)){let e=s.available?[`codex`,`claude`]:u.available?[`claude`,`codex`]:[`codex`,`claude`];be({...Pe,chain:e})}let m=Ce(),h=o(`claude`)?Sn(m):null,g=o(`agents`)||o(`codex`)||o(`cursor`)?Tn(m):null,_=[];(o(`codex`)||s.available&&(o(`agents`)||!i.length))&&_.push(En()),(o(`cursor`)||!i.length&&N.existsSync(j.join(I.homedir(),`.cursor`)))&&_.push(Dn()),h&&_.push({...h,note:h.installed?`Coder MCP server is declared by the Claude Code plugin.`:`Install the Claude Code plugin to register its Coder MCP server.`});let v=p(e),y=s.available&&l.loggedIn||u.available&&d.loggedIn;return{codex:{available:s.available,detail:s.detail,auth:l.detail,loggedIn:l.loggedIn},...c?{codexUpdate:c}:{},claude:{available:u.available,detail:u.detail,auth:d.detail,loggedIn:d.loggedIn},configFile:f,runtime:Ie(new URL(`../bin/coder.mjs`,import.meta.url)),...h?{claudePlugin:h}:{},...g?{agentsSkill:g}:{},mcp:_,config:v,ready:y}}async function Fn(e={},t){let n=!e.pluginsOnly,r=!e.cliOnly,i=Ce(),a=j.join(i,`plugins/claude/.claude-plugin/plugin.json`),o={cli:w(),claude:s(a)},c={};if(n){let n=bn(re),[r,...i]=e.pm&&G[e.pm]||n.command,a=e.pm??n.pm;t?.(`via ${a}`);let s=P(r,i,{encoding:`utf8`});if(s.error?.code===`ENOENT`)throw new L(`invalid-option`,`${a} not found on PATH. Re-run with --pm <npm|pnpm|yarn|bun>, or update manually: ${r} ${i.join(` `)}`);if(s.status!==0){let e=(s.stderr||s.stdout||``).trim();throw new L(`invalid-option`,`CLI update failed (${a}).${e?`\n${e}`:``}\nRun manually: ${r} ${i.join(` `)}`)}_n();let l=w();c.cli={pm:a,from:o.cli,to:l,changed:l!==o.cli}}if(r){if(e.claude||!e.codex&&J().available){let e=Sn(i);c.claudePlugin={installed:e.installed,note:e.note,from:o.claude,to:s(a)}}if(N.existsSync(Cn())){let e=wn(),t=Tn(i);c.agentsSkill={installed:t.installed,note:t.note,from:e,to:wn()}}}return c}function In(e=[],t={}){return Pn(j.resolve(t.cwd??`.`),{hosts:e})}function Ln(){let e=process.env.CLAUDE_CONFIG_DIR||j.join(I.homedir(),`.claude`);return j.join(e,`projects`)}async function Rn(e,t,n){if(!/^[a-zA-Z0-9_-]+$/.test(e))return null;let r=n?j.join(n,`projects`):Ln(),i=null;for(let n of await N.promises.readdir(r).catch(()=>[])){let a=j.join(r,n,`${e}.jsonl`);if(!N.existsSync(a))continue;let o=N.createReadStream(a,{encoding:`utf8`}),s=ze.createInterface({input:o,crlfDelay:1/0});try{for await(let e of s){let n;try{n=JSON.parse(e)}catch{continue}n.type===`assistant`&&!n.isSidechain&&Date.parse(n.timestamp)>=t&&(i=n.message?.usage??null)}}finally{s.close(),o.destroy()}}return i}function zn(e){if(!e)return!1;let t=Ln(),n=!1;try{for(let r of N.readdirSync(t)){let i=j.join(t,r,`${e}.jsonl`);N.existsSync(i)&&(N.rmSync(i,{force:!0}),n=!0)}}catch{}return n}var Bn=t({buildClaudeMcpConfig:()=>tr,buildClaudeTurnArgs:()=>nr,claudeToolName:()=>Y,claudeVersionEnvironment:()=>Xn,describeClaudeToolUse:()=>Jn,getClaudeAuthStatus:()=>Qn,getClaudeAvailability:()=>J,runClaudeTurn:()=>sr,steerClaudeTurn:()=>or});const Vn=`coder-mcp-status`,Hn=new Map,Un=`CODER_CLAUDE_VERSION`;function Wn(e){let t=e=>e&&typeof e==`object`&&(typeof e.data==`string`||typeof e.blob==`string`||Object.values(e).some(t)),n=e=>typeof e==`string`?e:t(e)||[`image`,`document`,`audio`,`video`,`file`].includes(e?.type)?`[${e?.type??`binary`}]`:typeof e?.text==`string`?e.text:e==null?``:JSON.stringify(e);return Array.isArray(e)?e.map(n).join(``):n(e)}function Gn(e){if(!e)return 0;let t=e.split(/\r\n|\r|\n/);return t.at(-1)===``&&t.pop(),Math.max(1,t.length)}function Kn(e,t,n=!1){if(!t)return[];let r;try{r=N.readFileSync(e,`utf8`)}catch{return[]}let i=[],a=0;for(;a<=r.length;){let e=r.indexOf(t,a);if(e<0)break;let o=Gn(r.slice(0,e))+1,s=Math.max(1,Gn(t));if(i.push(s===1?`L${o}`:`L${o}-L${o+s-1}`),!n)break;a=e+Math.max(t.length,1)}return i.length>4?[...i.slice(0,4),`+${i.length-4} matches`]:i}function qn(e){let t=(typeof e==`string`?e:JSON.stringify(e)??String(e)).replace(/\s+/g,` `).trim();return t.length>80?`${t.slice(0,80)}…`:t}function Jn(e,t,n){let r=String(t.file_path??t.notebook_path??t.path??``),i=r?j.isAbsolute(r)?r:j.resolve(n,r):``,a=r?u(n,i)||r:`(unknown path)`,o=t.path?` in ${u(n,String(t.path))}`:``;if(e===`Write`){let e=Gn(String(t.content??``));return`Write ${a} ${e?`L1-L${e}`:`(empty file)`}`}if(e===`Edit`){let e=Kn(i,String(t.old_string??``),t.replace_all===!0);return`Edit ${a}${e.length?` ${e.join(`, `)}`:``}`}if(e===`MultiEdit`){let e=Array.isArray(t.edits)?t.edits:[],n=e.flatMap(e=>Kn(i,String(e?.old_string??``),e?.replace_all===!0));return`MultiEdit ${a}${n.length?` ${n.join(`, `)}`:``} (${e.length} edits)`}if(e===`NotebookEdit`){let e=t.cell_id??t.cell_number;return`NotebookEdit ${a}${e==null?``:` cell ${e}`}`}if(e===`Read`){let e=Number(t.offset??0),n=Number(t.limit??0);return`Read ${a}${e&&n?` L${e}-L${e+n-1}`:e?` from L${e}`:``}`}if(e===`Bash`)return`Bash ${String(t.command??``).trim()||`(no command)`}`;if(e===`Glob`)return`Glob ${String(t.pattern??``)}${o}`;if(e===`Grep`){let e=t.glob?` (${String(t.glob)})`:``;return`Grep ${String(t.pattern??``)}${o}${e}`}if(e===`Task`)return`Task ${t.subagent_type?`${String(t.subagent_type)}: `:``}${qn(t.description??t.prompt??``)}`;if(e===`WebFetch`)return`WebFetch ${String(t.url??``)}`;if(e===`WebSearch`)return`WebSearch ${String(t.query??``)}`;if(e===`TodoWrite`){let e=Array.isArray(t.todos)?t.todos:[];return`TodoWrite ${e.length} item${e.length===1?``:`s`}`}let s=Object.entries(t??{}).map(([e,t])=>`${e}=${qn(t)}`).join(` `);return s?`${e} ${s}`:e}function q(e){if(!e||typeof e!=`object`)return null;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=t(e.input_tokens),r=t(e.cache_read_input_tokens)+t(e.cache_creation_input_tokens),i=t(e.output_tokens);return{input:n,cachedInput:r,output:i,total:n+r+i}}function Yn(e,t,n){let r=M.platform===`win32`?t[Object.keys(t).sort().find(e=>e.toLowerCase()===`path`)??`PATH`]??M.env.PATH??``:t.PATH??`/usr/bin:/bin`,i=/[\\/]/.test(e)?[``]:[...M.platform===`win32`?[n]:[],...r.split(j.delimiter)],a=M.platform===`win32`&&!j.extname(e)?[``,...(t.PATHEXT??`.EXE;.COM`).split(`;`)]:[``];for(let t of i)for(let r of a){let i=j.resolve(n,t,e+r);try{if(N.accessSync(i,N.constants.X_OK),N.statSync(i).isFile())return N.realpathSync(i)}catch{}}return j.resolve(n,e)}function Xn(e,t){let n=Yn(`claude`,k(e),t),r=Hn.get(n);return{[Un]:r===void 0?void 0:JSON.stringify({executable:n,detail:r})}}function Zn(e,t,n){let r=Yn(e,t,n),i=Hn.get(r);if(i!==void 0)return i;try{let e=JSON.parse(t[Un]??`null`);if(e?.executable===r&&typeof e.detail==`string`)return Hn.set(r,e.detail),e.detail}catch{}return J(e,t,n).detail}function J(e=`claude`,t=M.env,n=M.cwd()){t=k(t);let r=Yn(e,t,n),i=P(e,[`--version`],{encoding:`utf8`,env:t,cwd:n}),a=!i.error&&i.status===0,o=a?String(i.stdout||``).trim():`claude CLI not found on PATH (npm install -g @anthropic-ai/claude-code)`;return Hn.set(r,o),{available:a,detail:o}}function Qn(){if(M.env.CLAUDE_CODE_OAUTH_TOKEN)return{loggedIn:!0,detail:`CLAUDE_CODE_OAUTH_TOKEN configured`};if(M.env.ANTHROPIC_API_KEY)return{loggedIn:!0,detail:`ANTHROPIC_API_KEY configured`};let e=P(`claude`,[`auth`,`status`,`--json`],{encoding:`utf8`,env:k()});if(e.error||e.status!==0)return{loggedIn:!1,detail:`not logged in`};try{let t=JSON.parse(String(e.stdout||``));return t.loggedIn?{loggedIn:!0,detail:[t.email,t.subscriptionType].filter(Boolean).join(`, `)||`logged in`}:{loggedIn:!1,detail:`not logged in`}}catch{return{loggedIn:!1,detail:`unknown`}}}const Y=(e,t)=>[`mcp`,e,...t===void 0?[]:[t]].map(e=>e.replace(/[^A-Za-z0-9_-]/g,`_`)).join(`__`),$n=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,er=`coder-approval`;function tr(e,t){let n=t.permissions??`auto`,r=t.mcpServers??[],i={};n===`auto`&&t.approvalTaskId&&(i[er]={type:`stdio`,command:M.execPath,args:[re,`task`,`mcp`,t.approvalTaskId,`--cwd`,e],env:{[dr]:`1`}});for(let e of r)i[e.name]={...e.url?{type:e.type??`http`,url:e.url,...e.headers?{headers:e.headers}:{}}:{type:`stdio`,command:e.command,args:e.args??[],...e.env?{env:e.env}:{}},...e.alwaysLoad?{alwaysLoad:!0}:{}};return i}function nr(e,t,n,r,i,o,s){let c=[`-p`,`--input-format`,`stream-json`,`--output-format`,`stream-json`,`--verbose`,`--replay-user-messages`],l=jn(i);if(l&&K(l,`2.1.94`)>=0&&c.push(`--thinking-display`,`summarized`),c.push(t.resumeSessionId?`--resume`:`--session-id`,n),t.model&&c.push(`--model`,t.model),t.effort&&c.push(`--effort`,t.effort),t.systemPrompt&&c.push(`--append-system-prompt-file`,o??j.join(t.taskRoot??e,`.claude-system.md`)),t.excludeDynamicSections&&c.push(`--exclude-dynamic-system-prompt-sections`),t.settingSources&&c.push(`--setting-sources`,t.settingSources),t.outputSchema){let{$schema:e,...n}=t.outputSchema;c.push(`--json-schema`,JSON.stringify(n))}let u=t.permissions??`auto`,d=t.additionalDirectories??[],f=u===`read-only`?t.readOnlyAllowedTools??[]:[],p=t.mcpServers??[],m=tr(e,t),h=u===`auto`&&t.approvalTaskId,g=p.flatMap(e=>e.tools?.length?e.tools.map(t=>Y(e.name,t)):[Y(e.name)]),_=Object.keys(m).length?[`--mcp-config`,r??j.join(t.taskRoot??e,`.claude-mcp.json`)]:t.nativeMcp?[]:[`--mcp-config`,`{"mcpServers":{}}`];t.nativeMcp||c.push(`--strict-mcp-config`,`--no-chrome`),h?(c.push(...T.auto,..._,`--permission-prompt-tool`,Y(er,`approval_prompt`)),g.length&&c.push(`--allowedTools`,...g)):f.length?c.push(...a.filter(e=>M.env.CODER_MACHINE_SANDBOX!==`1`||e!==`Bash`),..._,`--allowedTools`,...f,...g):(c.push(...T[u]??T.auto,..._),g.length&&c.push(`--allowedTools`,...g)),h&&c.push(`--disallowedTools`,Y(er,`approval_prompt`));for(let e of d)c.push(`--add-dir`,e);let v=p.filter(e=>e.readOnly),y=t.approvalTaskId?[M.execPath,re,`task`,`hook`,t.approvalTaskId,...v.length?[`--servers`,s??j.join(t.taskRoot??e,`.claude-read-only.json`)]:[],`--cwd`,e].map($n).join(` `):void 0,x=b(u,e,t.allowedNetworkHosts??[],d,M.env[C]!==`1`,t.scratch,t.local??!0,y),S=x?JSON.parse(x):{},w=y?v.map(e=>({matcher:`${Y(e.name)}__.*`,hooks:[{type:`command`,command:y}]})):[],E={...S,...w.length?{hooks:{PreToolUse:[...S.hooks?.PreToolUse??[],...w]}}:{},...t.nativeMcp?{}:{disableClaudeAiConnectors:!0},...t.promptCacheTtl&&l&&K(l,`2.1.242`)>=0?{promptCacheTtl:t.promptCacheTtl}:{}};return Object.keys(E).length&&c.push(`--settings`,JSON.stringify(E)),c}function X(e,t){return Object.assign(Error(e),{retryable:t})}function rr(e,t){let n=t&&_t(t),r=n&&`${n.slice(0,14)}5${n.slice(15,19)}${(Number.parseInt(n[19],16)&3|8).toString(16)}${n.slice(20)}`;return{type:`user`,...r?{uuid:r}:{},message:{role:`user`,content:[{type:`text`,text:e}]}}}function ir(e){let t=!0;return{sendInitial(t,n){return new Promise((r,i)=>{e(`${JSON.stringify(rr(t,n))}\n`,e=>{e?i(e):r()})})},sendSteer(n,r){return t?new Promise((t,i)=>{e(`${JSON.stringify(rr(n,r))}\n`,e=>{if(!e){t();return}let n=e.code,r=n===`EPIPE`||n===`ERR_STREAM_DESTROYED`||n===`ERR_STREAM_WRITE_AFTER_END`;i(X(`Failed to write Claude live steer: ${e.message}`,r))})}):Promise.reject(X(`Claude turn is no longer accepting live input.`,!0))},stopAccepting(){t=!1}}}async function ar(e){return ft(`coder-claude-steer-`,async(t,n)=>{if(n)throw X(`Claude turn is no longer accepting live input.`,!0);let r=typeof t?.params?.text==`string`?t.params.text.trim():``;if(t.method!==`turn/steer`||!r)throw X(`Invalid Claude steer request.`,!1);return await e(r,t.command),{accepted:!0}})}async function or(e,t,n=3e3,r){if(!t.trim())return{steered:!1,retryable:!1,detail:`empty follow-up`};let i=await pt(e,{id:_t(r),method:`turn/steer`,params:{text:t.trim()},command:r},n,`Claude live steer`);return{steered:i.ok&&i.result?.accepted===!0,retryable:i.retryable,detail:i.detail}}async function sr(e,t){let n=await cr(e,t);return!t.resumeSessionId||!n.error?.message?.includes(`No conversation found with session ID`)?n:(t.onProgress?.({kind:`warning`,message:Me}),cr(e,{...t,resumeSessionId:null}))}async function cr(e,t){let n=t.resumeSessionId??F(),r=tr(e,t),i=Object.keys(r).length?j.join(t.taskRoot??e,`.claude-mcp-${F()}.json`):void 0,a=t.systemPrompt?j.join(t.taskRoot??e,`.claude-system-${F()}.md`):void 0,o=(t.mcpServers??[]).filter(e=>e.readOnly),s=o.length?j.join(t.taskRoot??e,`.claude-read-only-${F()}.json`):void 0;for(let[e,n]of[[i,`${JSON.stringify({mcpServers:r})}\n`],[a,t.systemPrompt],[s,JSON.stringify(o)]])e&&(N.mkdirSync(j.dirname(e),{recursive:!0}),N.writeFileSync(e,n,{encoding:`utf8`,flag:`wx`,mode:384}));A(`claude.prepare`,{resume:!!t.resumeSessionId});let c=k({...M.env,...t.env}),l=nr(e,t,n,i,Zn(t.executable??`claude`,c,e),a,s),u=(e=!0)=>{for(let t of[i,a,...e?[s]:[]])if(t)try{N.unlinkSync(t)}catch{}};return t.onProgress?.({kind:`status`,message:`claude turn started (session ${n})`,threadId:n}),new Promise((r,i)=>{let a=Date.now();A(`claude.spawn`);let o=Le(t.executable??`claude`,l,{cwd:e,stdio:[`pipe`,`pipe`,`pipe`],env:c}),s=``,d=``,f=[],p=null,m=n,h=null,g=!1,_=ir((e,t)=>o.stdin.write(e,t)),v=Date.now(),y=new Map,b=0,x=0,S=null,C,w=0,T=n=>{if(!(!n||typeof n!=`object`)){if(u(!1),t.onHeartbeat?.(),n.type===`system`&&n.subtype===`init`&&n.session_id)m=n.session_id,n.mcp_servers?.some(e=>e.status===`failed`)&&o.stdin.write(`${JSON.stringify({type:`control_request`,request_id:Vn,request:{subtype:`mcp_status`}})}\n`);else if(n.type===`control_response`&&n.response?.request_id===Vn)for(let e of n.response.response?.mcpServers??[])e.status===`failed`&&t.onProgress?.({kind:`error`,message:`MCP server ${e.name} failed to start. ${e.error??``}`.trim()});else if(n.type===`stream_event`&&!n.parent_tool_use_id){let e=n.event;e?.type===`message_start`?(C=e.message?.id,S=e.message?.usage):e?.type===`message_delta`&&(S={...S,...e.usage});let t=q(S);x=t?t.input+t.cachedInput:0}else if(n.type===`assistant`||n.type===`user`){let r=n.type===`assistant`?q(n.message?.usage):null;if(n.type===`assistant`&&!n.parent_tool_use_id){(!C||C!==n.message?.id)&&(S=null),C=n.message?.id,(!S||r&&r.input+r.cachedInput>0)&&(S=n.message?.usage);let e=q(S);x=e?e.input+e.cachedInput:0}if(r){b+=r.output;let e=r.input+r.cachedInput+b;(!w||e-w>=1e3)&&(w=e,t.onProgress?.({kind:`usage`,tokens:{...r,output:b,total:e},context:x,threadId:m}))}for(let r of n.message?.content??[])if(r?.type===`tool_use`||r?.type?.endsWith(`_tool_use`)){let n=String(r.name??`Tool`);r.id&&y.set(String(r.id),{name:n,at:Date.now()}),t.onProgress?.({kind:`tool`,tool:n,...r.id?{callId:String(r.id)}:{},message:Jn(n,r.input??{},e),threadId:m})}else if(r?.type===`tool_result`||r?.type?.endsWith(`_tool_result`)){let e=Wn(r.content).trim(),n=r.is_error===!0||r.content?.type?.endsWith(`_error`)===!0,i=r.tool_use_id?y.get(String(r.tool_use_id)):void 0;r.tool_use_id&&y.delete(String(r.tool_use_id)),t.onProgress?.({kind:`tool-result`,...r.tool_use_id?{callId:String(r.tool_use_id)}:{},...i?{tool:i.name,durationMs:Date.now()-i.at}:{},...n?{isError:!0}:{},message:e||(n?`(tool failed with no output)`:`(no output)`),threadId:m})}else n.type===`assistant`&&r?.type===`text`&&typeof r.text==`string`&&r.text.trim()?t.onProgress?.({kind:`assistant`,message:r.text.trim(),threadId:m}):n.type===`assistant`&&r?.type===`thinking`&&typeof r.thinking==`string`&&r.thinking.trim()&&t.onProgress?.({kind:`reasoning`,message:r.thinking.trim(),durationMs:Math.max(0,Date.now()-v),threadId:m})}else n.type===`result`&&(A(`claude.result`),p=n,t.onResult?.({status:n.is_error||f.length?1:0,threadId:n.session_id??m,finalMessage:n.structured_output===void 0?String(n.result??``).trim():JSON.stringify(n.structured_output),error:n.is_error||f.length?{message:f[0]||String(n.result??``)}:null}),n.session_id&&(m=n.session_id),_.stopAccepting(),o.stdin.end());v=Date.now()}};o.stdout.on(`data`,e=>{s+=e;let t;for(;(t=s.indexOf(`
12
+ `))>=0;){let e=s.slice(0,t).trim();if(s=s.slice(t+1),e)try{T(JSON.parse(e))}catch(e){f.push(`Invalid Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}}}),o.stderr.on(`data`,e=>{d+=e});let E=()=>{_.stopAccepting(),o.kill(`SIGTERM`),u();let e=h?.endpoint;e?.startsWith(`file:`)&&N.rmSync(e.slice(5),{recursive:!0,force:!0}),M.exit(143)};M.on(`SIGTERM`,E);let D=()=>{_.stopAccepting(),o.kill(`SIGTERM`)};t.signal?.aborted?D():t.signal?.addEventListener(`abort`,D,{once:!0}),(async()=>{t.onSteerReady&&(h=await ar((e,t)=>_.sendSteer(e,t))),await _.sendInitial(t.prompt,t.command),h&&t.onSteerReady?.(h.endpoint)})().catch(e=>{g||(g=!0,_.stopAccepting(),o.kill(`SIGTERM`),u(),M.removeListener(`SIGTERM`,E),h?.close(),i(e))}),o.on(`error`,e=>{g||(g=!0,_.stopAccepting(),M.removeListener(`SIGTERM`,E),u(),h?.close(),i(Error(`claude spawn failed: ${e.message}`)))}),o.on(`close`,async e=>{if(g)return;g=!0,_.stopAccepting(),M.removeListener(`SIGTERM`,E),u(),A(`claude.exit`),await h?.close(),A(`claude.teardown.done`);let n=s.trim();if(n)try{T(JSON.parse(n))}catch(e){f.push(`Invalid trailing Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}let i=p?.structured_output===void 0?(p?.result??``).trim():JSON.stringify(p.structured_output),o=e!==0||p?.is_error===!0||p==null||f.length>0;A(`claude.usage.start`);let l=q(p?.usage);if(!x&&p){let e=q(await Rn(m,a,c.CLAUDE_CONFIG_DIR).catch(()=>null)),t=e&&e.input+e.cachedInput>0?e:l;x=t?t.input+t.cachedInput:0}A(`claude.usage.done`),r({status:+!!o,threadId:p?.session_id??m,turnId:null,finalMessage:i,tokens:l,contextTokens:x,model:p?.modelUsage&&Object.keys(p.modelUsage).join(`+`)||t.model||null,error:o?{message:f[0]||i||d.trim()||`claude exited ${e}`}:null})})})}const lr=/usage|quota|rate.?limit|429|401|unauthorized|not authenticated|login|insufficient|exhausted|not available|\bat capacity\b|ENOENT/i;function ur(e){return lr.test(e)&&!ue(e)}const dr=`CODER_WORKER`;var fr=class extends Error{engine;detail;constructor(e,t){super(t),this.engine=e,this.detail=t}};function pr(e,t){let n=e.engine,r=!!n,i=e.model,a=e.effort,o=e=>{let n=e?t.models?.[e]:void 0;return n&&m(n)?n:void 0},s=e=>{let n=e?t.models?.[e]:void 0;return n&&ae(n)?n:void 0},c=e=>{try{return _(e,t)}catch(e){throw new L(`invalid-option`,e instanceof Error?e.message:String(e))}};if(o(i)){let e=c(i);e&&(r||(n=e.engine),i=e.model??void 0,a=a??e.effort??void 0)}if(!n&&i&&(i in l?n=`claude`:i in x?n=`codex`:s(i)?n=`custom`:/^(?:claude-|opus|sonnet|haiku|fable)/i.test(i)&&(n=`claude`)),n=n??t.chain[0]??`codex`,n!==`codex`&&n!==`claude`&&n!==`custom`){let e=n in x||n in l||n in(t.models??{})?` "${n}" is a model; use --model ${n}.`:``;throw new L(`invalid-option`,`Invalid --engine "${n}". Use codex, claude, or custom.${e}`)}let u=t.engines[n]??{},f=i??u.model??null,p=a??u.effort??null;if(o(f)){let e=c(f);e&&(r||(n=e.engine),f=e.model,p=a??e.effort??p)}let h=e.permissions??u.permissions??`auto`;try{g(t,f)}catch(e){throw new L(`invalid-option`,e instanceof Error?e.message:String(e))}if(n===`custom`){let e=Object.entries(t.models??{}).filter(([,e])=>ae(e)).map(([e])=>e);if(!f&&e.length===1&&(f=e[0]),!f||!s(f))throw new L(`invalid-option`,f?`No custom model named "${f}". Configured: ${e.join(`, `)||`none`}.`:`No custom model to run: pass --model <name> or set engines.custom.model.`,{hint:`Add one: coder model add <name> --base-url <url> --model <id>`})}let v=n===`claude`;if(!(h in E))throw new L(`invalid-option`,`Invalid --permissions "${h}". Use one of: ${Object.keys(E).join(`, `)}`);if(!v&&p&&!Se.has(p))throw new L(`invalid-option`,`Invalid codex --effort "${p}". Use one of: ${[...Se].join(`, `)}`);if(v&&p&&!d.has(p))throw new L(`invalid-option`,`Invalid claude --effort "${p}". Use one of: ${[...d].join(`, `)}`);return{engine:n,model:f,effort:p,permissions:h}}const{connection:mr,description:hr,...gr}=v.shape,_r=ge({name:le().check(e(1)),...gr}).check(_e(e=>!!e.command!=!!e.url,`one of command or url`)),vr=xe(_r);function yr(e,t={}){let n=e.trim();return/^[\[{]/.test(n)?xr(n):(n===`all`?Object.keys(t):n.split(`,`).map(e=>e.trim()).filter(Boolean)).map(e=>{let n=t[e];if(!n)throw new L(`invalid-option`,`Unknown MCP server "${e}".`,{hint:`configured: ${Object.keys(t).join(`, `)||`none`}; or pass a JSON array`});return{name:e,...n}})}function br(e,t={},n={},r={}){typeof e==`string`&&!e.trim()&&(e=void 0);let i=typeof e==`string`?yr(e,{...t,...n}):e??Object.entries(n).map(([e,t])=>({name:e,...t})),a=[],o=i.filter(e=>e.connection).map(({name:e,connection:t,tools:n})=>({name:e,connection:t,...n?{tools:n}:{}})),s=new Set,c=[];for(let e of i){if(!e.connection||e.resolved){e.connection&&s.add(e.connection),e.repository&&a.push(...Te(e.name,e)),c.push(e);continue}let t=Object.hasOwn(r,e.connection)?r[e.connection]:void 0;if(!t){a.push(`MCP server "${e.name}" skipped because connection "${e.connection}" was not granted to this task.`);continue}if(s.has(e.connection))continue;s.add(e.connection);let n=e.tools?.length?e.tools.filter(e=>!t.tools?.length||t.tools.includes(e)):t.tools;if(e.tools?.length&&!n?.length){a.push(`MCP server "${e.name}" skipped because its tools are not granted by connection "${e.connection}".`);continue}c.push({...t,name:e.name,connection:e.connection,resolved:!0,...n?{tools:n}:{}})}for(let[e,t]of Object.entries(r)){if(s.has(e))continue;let n=c.findIndex(e=>e.name===t.name);n>=0&&c.splice(n,1),c.push({...t,resolved:!0})}return{mcp:c,...o.length?{mcpBindings:o}:{},nativeMcp:typeof e==`string`&&e.trim()===`all`,...a.length?{warnings:a}:{}}}function xr(e){let t;try{t=JSON.parse(e)}catch(e){throw new L(`invalid-option`,`Invalid --mcp JSON: ${e instanceof Error?e.message:String(e)}`)}let r=vr.safeParse(t);if(!r.success)throw new L(`invalid-option`,`Invalid --mcp value: ${n(r.error)}`,{hint:`--mcp '[{"name":"docs","command":"npx","args":["-y","docs-mcp"],"tools":["search"]}]'`});return r.data}function Sr(e,t=M.env,n,r={}){let i=r.cloud??t.CODER_MCP_MODE===`cloud`,a=r.connectionEnv??JSON.parse(t.CODER_MCP_CONNECTION_ENV??`{}`),o=r.onWarning??(e=>M.stderr.write(`coder: ${e}\n`));return(e??[]).flatMap(e=>{let r=e.repository&&!e.resolved;if(r){for(let t of Te(e.name,e))o(t);if(!i&&!je(e))return o(`MCP server "${e.name}" skipped pending local approval. Run coder connection approve ${e.name} in its repository.`),[]}let s=new Set,c=new Set,l=n=>e.resolved?n.replace(/^\$\{(CODER_CONNECTION_[A-F0-9]{24})\}$/,(e,n)=>t[n]??``):n.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g,(e,n,o)=>r&&i?a[n]===null?(c.add(n),``):Object.hasOwn(a,n)?a[n]:(s.add(n),``):t[n]??o??``),u=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,l(t)])),d=r&&!!e.url,f={...e,...e.command?{command:l(e.command)}:{},...e.args?{args:e.args.map(l)}:{},...e.url?{url:d?e.url:l(e.url)}:{},...e.env?{env:u(e.env)}:{},...e.headers?{headers:d?e.headers:u(e.headers)}:{}};if(c.size)return o(`MCP server "${e.name}" skipped because connection variables ${[...c].join(`, `)} are ambiguous.`),[];if(s.size&&o(`MCP server "${e.name}" has unresolved connection variables ${[...s].join(`, `)}; expanded to empty.`),!n||!f.command)return[f];let p=(f.command.includes(j.sep)?[j.resolve(n,f.command)]:(f.env?.PATH??t.PATH??`/usr/bin:/bin`).split(j.delimiter).map(e=>j.resolve(n,e,f.command))).find(e=>{try{return N.accessSync(e,N.constants.X_OK),N.statSync(e).isFile()}catch{return!1}});if(!p)throw new L(`invalid-option`,`MCP server "${e.name}" command cannot be resolved.`);return f.command=N.realpathSync(p),f.args=f.args?.map(e=>{if(e.startsWith(`-`)||j.isAbsolute(e))return e;let t=j.resolve(n,e),r=N.existsSync(t)&&N.statSync(t).isFile();return!r&&!e.startsWith(`./`)&&!e.startsWith(`../`)?e:r?N.realpathSync(t):t}),[f]})}function Cr(e,t=[]){let n=[...new Set(t.map(t=>j.resolve(e,t)))];for(let e of n)if(!N.statSync(e,{throwIfNoEntry:!1})?.isDirectory())throw new L(`invalid-option`,`--add-dir ${e} is not a directory.`);return n}function wr(e){return e===`local`||e===`http`?void 0:`--add-dir ignored: this task runs on a ${e} machine`}function Tr(e,t){return e===`read-only`&&we.test(t??``)}const Er=[`read-only`,`workspace-write`,`auto`];function Dr(e,t,n){if(!t)return n.permissions;if(Er.indexOf(t)>Er.indexOf(n.permissions))throw new L(`invalid-option`,`task "${e??`task`}" asks for ${t} but agent "${n.agent}" is ${n.permissions}: lower the task's permissions or raise the agent's`);return t}function Or(e,t,n={},r=!1){let a=f(e,t),s=N.openSync(j.join(a,`worker.log`),`a`),c={...M.env,...n},l=i(e,t);A(`worker.spawn`,{taskId:t});let u;try{u=Le(M.execPath,[re,`task`,`worker`,t,`--cwd`,e],{cwd:e,detached:!0,stdio:[`ignore`,s,s,`ipc`],env:{...c,...Xn(c,e),[dr]:`1`,CODER_ENGINE_CHECKED:r?`1`:void 0}})}finally{N.closeSync(s)}let d=n=>{let r=i(e,t);if(!r||r.dispatchId!==l?.dispatchId||r.resumedAt!==l?.resumedAt||r.pid!==(u.pid??null)||!Oe.includes(r.status)&&!(r.status===`completed`&&o(e,t)))return;let a=`Task worker exited without finishing: ${n}`;de(e,t,{status:`failed`,error:a,completedAt:new Date().toISOString(),steerClosed:!0,resumeOwner:void 0}),me(e,t,{kind:`error`,message:a})};return u.on(`error`,e=>d(e.message)),u.on(`exit`,(e,t)=>d(t?`signal ${t}`:`exit ${e}`)),u.unref(),u.channel?.unref?.(),de(e,t,{pid:u.pid??null}),u}async function kr(e,t,n,r,a){let o=n.cwd,s=n.availability?.[t.engine===`custom`?`codex`:t.engine]??(t.engine===`claude`?J(`claude`,{...M.env,...n.connectionEnv},o):U(o)),c=t.model?e.models?.[t.model]:void 0;if(!s.available&&c&&ae(c)){let e=On(s);n.onNote?.(e.note),s=U(o)}if(!s.available)throw new fr(t.engine,s.detail);let l=c?null:t.engine===`claude`?Mn(`claude`,t.model,s):Mn(`codex`,se(t.model),s);l&&n.onNote?.(l);let u=n.addDirs??[],d=n.taskId??te(),p=n.resume?.engine===t.engine?n.resume:void 0,m=oe(d);N.mkdirSync(m,{recursive:!0}),it(f(o,d),n.approvals??[]);let g=de(o,d,{status:`queued`,...n.taskId?{dispatchId:F()}:{},name:r.name??null,appendSystem:n.appendSystem??null,promptParts:{cwd:o,...n.agentPrompt,appendSystem:n.appendSystem??void 0,conversation:n.conversation,local:M.env.CODER_MCP_MODE!==`cloud`,scratch:m,writes:t.permissions!==`read-only`,...n.structured||n.outputSchema?{structured:!0}:{}},engine:t.engine,prompt:n.prompt,...n.outputSchema?{outputSchema:n.outputSchema}:{},model:t.model,effort:t.effort,permissions:t.permissions,resumeThreadId:p?.threadId??null,...p?{threadId:p.threadId,...p.previousThreadIds?{previousThreadIds:p.previousThreadIds}:{}}:{},cwd:o,...n.flowRunId?{flowRunId:n.flowRunId}:{},...n.agentId?{agentId:n.agentId}:{},...n.conversation?{conversation:!0}:{},...n.source?{source:n.source}:{},...n.author?{author:n.author}:{},...n.repo?{repo:n.repo}:{},...n.mcp?.length?{mcp:n.mcp}:{},...n.mcpBindings?{mcpBindings:n.mcpBindings}:{},...n.connections?{connections:n.connections}:{},...n.connectionSource?{connectionSource:n.connectionSource}:{},nativeMcp:n.nativeMcp??!1,...u.length?{addDirs:u}:{}});for(let e of new Set(n.mcpWarnings??[]))me(o,d,{kind:`warning`,message:e});n.resume&&!p&&me(o,d,{kind:`warning`,message:Me});let _=j.join(f(o,d),`log.jsonl`),v=N.existsSync(_)?N.statSync(_).size:0,b=Or(o,d,n.connectionEnv,!0);if(n.onWorker?.(d,b),!a)return{taskId:d,task:i(o,d)??g,engine:t.engine,startupCheck:`pending`};let x=Ae(o,d,b),S=ne(_,v),C=!1,w=!1,T=()=>{let e=S().map(e=>{try{return JSON.parse(e)}catch{return{kind:`unknown`}}});return w||=e.some(e=>e.kind===`tool`||e.kind===`reply`),e.some(e=>e.phase!==`starting`&&![`status`,`usage`].includes(e.kind??``))},E=Date.now()+15e3,D,O=g;try{for(;Date.now()<(D===void 0?E:D+5e3)&&(O=i(o,d)??O,!(he.includes(O.status)||y(o,d).at(-1)?.status===0||Ge(f(o,d)).length||(C=T()||C,O.threadId&&(D??=Date.now(),C))));)await x.wait(Math.min(3e4,(D===void 0?E:D+5e3)-Date.now()))}finally{x.close()}if(O.status===`failed`){T();let e=j.join(f(o,d),`result.json`),n=ie(e),r=n?.error?.message??``,i=h(o,d,5).map(e=>e.message??``).join(`
13
+ `),a=r||i;throw Tr(t.permissions,a)?new L(`read-only-unavailable`,a):ur(a)&&!Nr(n,w)?new fr(t.engine,a):new L(`startup-failed`,a,{taskId:d})}return{taskId:d,task:O,engine:t.engine,startupCheck:O.threadId?`passed`:`pending`}}function Ar(e,t,n,r,i){return{error:`${e} failed to start: ${t}`,fallback:{action:`run-native-subagent`,reason:`no-engine-available`,permissions:n,instructions:`Mention the engine failure to the user, including any limit reset time. If your harness has a native subagent facility, spawn one subagent with fallback.task verbatim, prefixed with: "NEVER run git write operations (commit, checkout, stash, reset, push, etc.); leave changes uncommitted." If fallback.permissions is "read-only", append: "Investigate and report without modifying anything." If it is "workspace-write", append: "Never touch anything outside the workspace." Relay its output when it completes. If your harness has no native subagent facility, report the failure and stop; do not implement the task yourself.`,note:`Every coder engine failed to start. Spawn your own native subagent and forward the task verbatim; tell it to never run git write operations (commit, checkout, stash, reset, push, ...) and to honor the permissions.`,...r?{appendSystem:r}:{},task:i}}}async function jr(e,t={}){if(M.env.CODER_WORKER)throw new L(`nested-dispatch`,`Nested dispatch is disabled inside a worker; do the work directly.`);if(e.outputSchema!==void 0&&(!e.outputSchema||typeof e.outputSchema!=`object`||Array.isArray(e.outputSchema)))throw new L(`invalid-option`,`outputSchema must be an object.`);if(!e.prompt.trim())throw new L(`invalid-option`,`Missing task text.`,{hint:[`Usage: coder run "<task text>"`,`Help: coder task run --help`]});e={...e,addDirs:Cr(e.cwd,e.addDirs)};let n=t.config??p(e.cwd),r=br(e.mcp,n.mcp),i={...e,mcp:r.mcp,mcpBindings:e.mcpBindings??r.mcpBindings,mcpWarnings:[...e.mcpWarnings??[],...r.warnings??[]],nativeMcp:e.nativeMcp??r.nativeMcp},a={engine:e.engine,model:e.model,effort:e.effort,permissions:e.permissions},o={name:e.name};for(;;){let r=pr(a,n);try{return await kr(n,r,i,o,t.waitForStartup!==!1)}catch(t){if(!(t instanceof fr))throw t;let i=Mr(t.engine,n);if(!i){let n=Ar(t.engine,t.detail,r.permissions,e.appendSystem,e.prompt);throw new L(`chain-exhausted`,n.error,{payload:n})}e.onFallback?.({engine:t.engine,detail:t.detail,next:i}),a={engine:i,permissions:e.permissions},o={name:void 0}}}}function Mr(e,t){return t.chain.slice(t.chain.indexOf(e)+1).find(e=>e!==`custom`||Object.values(t.models??{}).some(ae))}function Nr(e,t=!1){return!!(t||e?.fileChanges?.length||e?.commandExecutions?.length)}function Pr(e,t,n){if(t.status!==`failed`)return;let r=t.result;if(!r||!ur(r.error?.message??``))return;let i=Date.parse(t.turns.at(-2)?.at??t.task.resumedAt??t.task.createdAt);if(!Nr(r,h(e,t.taskId,2**53-1).some(e=>(e.kind===`tool`||e.kind===`reply`)&&(!e.at||Date.parse(e.at)>=i)))&&!t.turns.at(-1)?.lastReply)return Mr(t.task.engine,n??p(e))??null}function Fr(e,t,n){return n&&(Oe.includes(n.status)||n.status===`failed`&&n.error)?null:ie(j.join(f(e,t),`result.json`))}function Ir(e,t,n=0){if(n===0)return[];let r=h(e,t,2**53-1);return n===`all`?r:D(r,n)}function Lr(e,t,n={}){let r=n.task??i(e,t);if(!r)throw Error(`No task found for "${t}".`);return{taskId:t,status:r.status,result:Fr(e,t,r),steps:Ir(e,t,n.tail),turns:y(e,t),task:r}}async function Rr(e,t,n={}){let r=i(e,t);if(!r)throw Error(`No task found for "${t}".`);let a=await zr(e,r,1e3,n);if(a.reason===`approval`){let e=a.approval;throw new L(`approval-pending`,`Approval needed for task ${t}: ${e.reason}`,{taskId:t,approval:e})}n.onSettle?.();let o=a.task;return{taskId:t,status:o.status,result:Fr(e,t,o),steps:Ir(e,t,n.tail),turns:y(e,t),task:o}}async function zr(e,t,n=1e3,{turn:r,worker:a,signal:o,seen:s=[]}={}){let c=t,l=Ae(e,t.id,a);try{let t=S();for(;;){o?.throwIfAborted(),c=i(e,c.id)??c;let a=r===void 0?void 0:y(e,c.id)[r];c=a?{...c,status:a.status===0?`completed`:`failed`}:ee(e,c,t);let u=Ge(f(e,c.id)).find(e=>!s.includes(e.id));if(u)return{task:c,reason:`approval`,approval:{id:u.id,reason:u.reason,actions:u.actions}};if(he.includes(c.status)&&(r!==void 0||!Ne(e,c)))return{task:c,reason:`terminal`};await l.wait(n,o)}}finally{l.close()}}function Br(e=M.stdout){try{return e.getWindowSize?.()[0]??e.columns}catch{return e.columns}}function Vr(e=M.stdout){try{return e.getWindowSize?.()[1]??e.rows}catch{return e.rows}}function Hr(e){return e>=768&&e<=879||e>=8203&&e<=8207||e>=65024&&e<=65039?0:e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=129791||e>=131072&&e<=262141?2:1}function Ur(e){let t=0;for(let n of e.replace(/\x1b\[[0-9;]*m/g,``))t+=Hr(n.codePointAt(0));return t}function Wr(e,t){let n=0;for(let r=0;r<e.length;){let i=e[r]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(r)):null;if(i){r+=i[0].length;continue}let a=String.fromCodePoint(e.codePointAt(r)),o=Hr(a.codePointAt(0));if(n+o>t)return r;n+=o,r+=a.length}return e.length}function Gr(e,t,n){if(t<4||n<1)return[e];let r=[],i=e;for(;Ur(i)>t;){if(r.length===n-1)return[...r,`${i.slice(0,Wr(i,t-1))}…`];let e=Wr(i,t),a=i.lastIndexOf(` `,e),o=a>t*.66?a:e;r.push(i.slice(0,o).trimEnd()),i=i.slice(o).replace(/^\s+/,``)}return[...r,i]}function Kr(e,t){let n=0,r=``;for(let i=0;i<e.length;){let a=e[i]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(i)):null;if(a){r+=a[0],i+=a[0].length;continue}let o=e.codePointAt(i),s=String.fromCodePoint(o),c=Hr(o);if(n+c>t-1)return`${r}\x1b[0m${Z.dim(`…`)}`;r+=s,n+=c,i+=s.length}return r}function qr(){let e=M.stdin;if(!e.isTTY||!M.stdout.isTTY)return()=>{};e.setRawMode(!0),e.resume();let t=e=>{e.includes(3)&&M.kill(M.pid,`SIGINT`),e.includes(26)&&M.kill(M.pid,`SIGTSTP`)};return e.on(`data`,t),e.unref(),()=>{e.off(`data`,t),e.isTTY&&e.setRawMode(!1),e.pause()}}var Jr=class{stream;quietMs;lines=[];painted=[];paintedWidths=[];paintedCols;resizeTimer;tty;constructor(e=M.stdout,t=250){this.stream=e,this.quietMs=t,this.tty=!!e.isTTY,this.tty&&e.on(`resize`,this.onResize)}set(e){this.lines=e,!(!this.tty||this.resizeTimer)&&this.paint()}commit(e){this.clear(),this.stream.write(e)}clear(){if(!this.painted.length)return;let e=Br(this.stream),t=this.painted.length;e&&this.paintedCols&&e!==this.paintedCols&&(t=this.paintedWidths.reduce((t,n)=>t+Math.max(1,Math.ceil(n/e)),0)),this.stream.write(`\x1b[${t}A\x1b[0J`),this.painted=[],this.paintedWidths=[]}done(){this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=void 0,this.paint()),this.tty&&this.stream.off(`resize`,this.onResize)}paint(){this.clear();let e=Br(this.stream),t=e?this.lines.map(t=>Kr(t,e-1)):this.lines,n=Vr(this.stream);n&&t.length>n-1&&(t=n>1?t.slice(-(n-1)):[]);for(let e of t)this.stream.write(`${e}\n`);this.painted=t,this.paintedWidths=t.map(Ur),this.paintedCols=e}onResize=()=>{this.clear(),this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{this.resizeTimer=void 0,this.paint()},this.quietMs),this.resizeTimer.unref?.()}};function Yr(e){let t=M.env.FORCE_COLOR,n=t!=null&&t!==``&&t!==`0`||t!==`0`&&e.isTTY&&!M.env.NO_COLOR,r=(e,t)=>n?`\x1b[${e}m${t}\x1b[0m`:t;return{blue:e=>r(`34`,e),bold:e=>r(`1`,e),cyan:e=>r(`36`,e),dim:e=>r(`2`,e),light:e=>r(`38;5;246`,e),green:e=>r(`32`,e),red:e=>r(`31`,e),yellow:e=>r(`33`,e)}}const Z=Yr(M.stdout),Q=Yr(M.stderr);function Xr(e,t=Q,n=t.blue,r=`Related`){let i=e.map(e=>{let t=e.search(/(?:\b[A-Z][A-Z0-9_]*=\S+\s+)*coder /);if(t===-1)return{text:e};let n=e.slice(0,t).trim().replace(/:$/,``);return{command:e.slice(t),label:n.charAt(0).toLowerCase()+n.slice(1)}}),a=Math.max(0,...i.map(e=>e.command?.length??0))+2;return[t.bold(`${r}:`),...i.map(e=>e.command===void 0?` ${t.dim(e.text)}`:` ${n(e.label?e.command.padEnd(a):e.command)}${t.dim(e.label)}`)].join(`
14
+ `)}function Zr(e,t={}){let n=typeof t==`number`?t:t.code??1,r=typeof t==`object`?t.hint:null,i=r==null?[]:Array.isArray(r)?r:[r];M.stderr.write(`${Q.red(e)}\n`),i.length&&M.stderr.write(`\n${Xr(i,Q)}\n`),M.exit(n)}function Qr(e){M.stdout.write(`${JSON.stringify(e,null,2)}\n`)}function $r(e,t=Z){return(JSON.stringify(e,null,2)??`null`).split(`
15
+ `).map(e=>e.replace(/"((?:[^"\\]|\\.)*)":/g,(e,n)=>`${t.light(`"${n}"`)}:`).replace(/: (-?\d[\d.eE+-]*|true|false|null)(,?)$/,(e,n,r)=>`: ${t.blue(n)}${r}`)).join(`
16
+ `)}function ei(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h${n%60}m`}function ti(e){let t=Math.max(0,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60)%60,i=Math.floor(t/3600),a=e=>String(e).padStart(2,`0`);return i?`${i}:${a(r)}:${a(n)}`:`${r}:${a(n)}`}function $(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}function ni(e,t){let n=[`in ${$(e.input)}`,...e.cachedInput?[`cached ${$(e.cachedInput)}`]:[],`out ${$(e.output)}`];return`${$(e.total)} (${n.join(` · `)}) on ${t||`default model`}`}function ri(e){return`ctx ${$(e.input+e.cachedInput)} · out ${$(e.output)}`}function ii(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function ai(e,t){let n=[],r=e;for(;r.length>t;){let e=r.lastIndexOf(` `,t);e<=0&&(e=t),n.push(r.slice(0,e).trimEnd()),r=r.slice(e).trimStart()}return n.push(r),n}function oi(e,t,n={}){let r=`bold`in n?{style:n}:n,i=r.style??Z,a=t.length&&typeof t[0]==`object`&&t[0]!==null&&`rows`in t[0]?t:[{rows:t}],o=a.flatMap(e=>e.rows),s=e.length-1,c=e.map((e,t)=>t===s&&!r.border?0:Math.min(e.max??40,Math.max(e.header.length,...o.map(t=>e.value(t).length))));if(r.border){let t=r.width??Br()??120,n=c.slice(0,s).reduce((e,t)=>e+t+3,0)+4,i=Math.max(e[s].header.length,...o.map(t=>e[s].value(t).length));c[s]=Math.max(e[s].header.length,Math.min(i,t-n))}let l=(e,t,n)=>i.light(`${e}${c.map(e=>`─`.repeat(e+2)).join(t)}${n}`),u=e=>r.border?`${i.light(`│`)} ${e.join(` ${i.light(`│`)} `)} ${i.light(`│`)}`:e.join(` `),d=(e,t)=>t===s&&!r.border?e:ii(e,c[t]),f=[];return r.border&&f.push(l(`┌`,`┬`,`┐`)),f.push(i.bold(i.light(u(e.map((e,t)=>d(e.header,t)))))),r.border&&f.push(l(`├`,`┼`,`┤`)),a.forEach((t,n)=>{n&&!r.border&&f.push(``),t.header&&f.push(r.border?`${i.light(`│`)} ${t.header}`:t.header),t.rows.forEach((n,i)=>{r.border&&(i||t.header)&&f.push(l(`├`,`┼`,`┤`));let a=e.map((e,t)=>r.border?ai(e.value(n),c[t]):[e.value(n)]),o=Math.max(...a.map(e=>e.length));for(let t=0;t<o;t++)f.push(u(e.map((e,r)=>{let i=d(a[r][t]??``,r);return e.paint&&a[r][t]!==void 0?e.paint(i,n):i})))})}),r.border&&f.push(l(`└`,`┴`,`┘`)),`${f.join(`
17
+ `)}\n`}function si(e){return` ${Z.bold(Z.green(`✔`))} ${e}`}function ci(e){return` ${Z.bold(Z.red(`✘`))} ${e}`}function li(e,t=0){let n=e.padEnd(t);return e===`running`?Z.green(n):e===`waiting-approval`?Z.yellow(n):e===`failed`||e===`cancelled`?Z.red(n):e===`completed`?Z.blue(n):Z.dim(n)}export{un as $,Lr as A,J as B,dr as C,Ge as Ct,wr as D,L as Dt,jr as E,st as Et,Or as F,On as G,or as H,Pr as I,Fn as J,xn as K,zr as L,Sr as M,pr as N,Tr as O,br as P,cn as Q,Rr as R,Gr as S,at as St,Dr as T,qe as Tt,Ln as U,sr as V,zn as W,yn as X,vn as Y,U as Z,Jr as _,ut as _t,ei as a,xt as at,Vr as b,R as bt,$r as c,Qe as ct,ri as d,lt as dt,ln as et,si as f,We as ft,oi as g,Je as gt,Qr as h,Ye as ht,Zr as i,gt as it,Cr as j,Fr as k,$ as l,ct as lt,li as m,Ue as mt,ii as n,bt as nt,ti as o,nt as ot,Z as p,ot as pt,In as q,Q as r,_t as rt,Xr as s,Ve as st,ci as t,Tt as tt,ni as u,$e as ut,qr as v,Ke as vt,Ar as w,rt as wt,Ur as x,et as xt,Br as y,Ze as yt,Bn as z};
@@ -0,0 +1 @@
1
+ import{G as e,Tr as t,d as n,kr as r}from"./errors-DO_IltpP.js";import{ft as i,st as a}from"./output-SNqdgh9A.js";import o from"node:path";function s(e,t,r){let i=String(r.tool_name??``),o=r.input??r.tool_input??{},s=i===`Bash`?`run command: ${String(o.command??``)||`(unknown command)`}`:`${i||`(unknown tool)`}: ${JSON.stringify(o).slice(0,200)}`;return n(e,t,{kind:`approval-decision`,method:i,decision:`decline`,reason:a,summary:s}),{behavior:`deny`,message:a}}function c(t,r,a){let o=String(a.tool_input?.command??``),s=a.tool_name===`Bash`&&o.trim()?i(e(t,r),o):void 0;return s?(n(t,r,{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(`./output-SNqdgh9A.js`).then(e=>e.z),import(`./mcp-BkwmRHI9.js`)]),f=t(c)?.find(e=>l.startsWith(`${u(e.name)}__`)),p=o.join(e(i,a),`read-only-tools.json`),m=f&&t(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),r(p,{...t(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:(n(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,4 +1,4 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{_ as t}from"./errors-XBA-Ls4n.js";import{Zt as n,p as r,x as i,y as a}from"./output-D95NoAA9.js";import o from"node:path";import s from"node:process";import c from"node:fs";import{spawn as l}from"node:child_process";var u=class extends n{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};function d(e){try{let t=new URL(e).hostname.toLowerCase();return t===`localhost`||t===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(t)}catch{return!1}}function f(e){let t;try{t=new URL(e)}catch{throw new n(`invalid-option`,`Give the server as a URL, e.g. https://agents.example.com.`)}if(t.protocol!==`https:`&&!(t.protocol===`http:`&&d(t.origin)))throw new n(`invalid-option`,`Coder servers require HTTPS unless they are loopback.`,{hint:`Use https://, or http://localhost for a local server.`});if(t.username||t.password||t.search||t.hash)throw new n(`invalid-option`,`The server must be an origin without credentials, query, or fragment.`);return t.toString().replace(/\/+$/,``)}const p=(e,t)=>{let n=new URLSearchParams;`cursor`in t&&typeof t.cursor==`string`&&n.set(`cursor`,t.cursor);for(let[e,r]of Object.entries(t))e!==`cursor`&&r!==void 0&&r!==!1&&r!==``&&n.set(e,r===!0?`1`:Array.isArray(r)?r.join(`,`):String(r));return`${e}?${n}`},m=new Set([`completed`,`failed`,`cancelled`]);var h=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,t,r={}){if(this.cookie=`cookie`in t,this.url=e?f(e):``,!this.cookie&&!this.url)throw new n(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in t?t.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,t){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,t);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,t));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new n(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(!r.ok){let e=new u(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,t){let r=new Headers(t.headers);return t.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.cookie||r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...t,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof n||e.name===`AbortError`?e:new n(`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`)}info(){return this.request(`/api/auth/capabilities`)}linkAccount(e){return this.post(`/connect`,{token:e})}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(p(`/admin/agents`,{...e,...e?.connect?{connect:1}:{}})),get:(e,t)=>this.request(p(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{}})),versions:(e,t={})=>this.request(p(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(p(`/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(p(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(p(`/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(p(`/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)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t}),approve:(e,t,n)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n}),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,t={})=>{let r=-1;for(;;){let i=await this.tasks.stream(e,r);if(!i.ok||!i.body){let t=await this.tasks.get(e);if(m.has(t.status))return t;if(i.status===401)continue;throw new n(`server`,`The task stream answered ${i.status}.`)}let a=!1;for await(let e of g(i.body))if(e.event===`log`){let n=JSON.parse(e.data);r=n.seq,t.onLog?.(n)}else e.event===`end`&&(a=!0);if(a)return this.tasks.get(e)}}};credentials={list:e=>this.request(p(`/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(p(`/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(p(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(p(`/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(p(`/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`)};installations={list:(e,t={})=>this.request(p(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}}))};connections={list:(e,t)=>this.request(p(`/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`}),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(p(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(p(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(p(`/admin/pulls`,{repo:e}))};review(e){return this.post(`/admin/review`,e)}usage(e={}){return this.request(p(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(p(`/admin/usage`,{installation:e}))}};async function*g(e){let t=new TextDecoder,n=``;for await(let r of e){n+=t.decode(r,{stream:!0});let e;for(;(e=n.indexOf(`
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{v as t}from"./errors-DO_IltpP.js";import{Dt as n,p as r,x as i,y as a}from"./output-SNqdgh9A.js";import o from"node:path";import s from"node:process";import c from"node:fs";import{spawn as l}from"node:child_process";var u=class extends n{authenticate;needs;constructor(e,t,n=``,r,i){super(`server`,t,{status:e,...r?{hint:r}:{}}),this.authenticate=n,this.needs=i}};function d(e){try{let t=new URL(e).hostname.toLowerCase();return t===`localhost`||t===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(t)}catch{return!1}}function f(e){let t;try{t=new URL(e)}catch{throw new n(`invalid-option`,`Give the server as a URL, e.g. https://agents.example.com.`)}if(t.protocol!==`https:`&&!(t.protocol===`http:`&&d(t.origin)))throw new n(`invalid-option`,`Coder servers require HTTPS unless they are loopback.`,{hint:`Use https://, or http://localhost for a local server.`});if(t.username||t.password||t.search||t.hash)throw new n(`invalid-option`,`The server must be an origin without credentials, query, or fragment.`);return t.toString().replace(/\/+$/,``)}const p=(e,t)=>{let n=new URLSearchParams;`cursor`in t&&typeof t.cursor==`string`&&n.set(`cursor`,t.cursor);for(let[e,r]of Object.entries(t))e!==`cursor`&&r!==void 0&&r!==!1&&r!==``&&n.set(e,r===!0?`1`:Array.isArray(r)?r.join(`,`):String(r));return`${e}?${n}`},m=new Set([`completed`,`failed`,`cancelled`]);var h=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,t,r={}){if(this.cookie=`cookie`in t,this.url=e?f(e):``,!this.cookie&&!this.url)throw new n(`invalid-option`,`Bearer clients need a server URL.`);this.token=`token`in t?t.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,t){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let r=await this.send(e,t);r.status===401&&this.renewal&&/invalid_token/.test(r.headers.get(`www-authenticate`)??``)&&(this.token=await this.renewal.renew(),r=await this.send(e,t));let i=await r.text().catch(()=>``),a={},o;try{i&&r.status!==204&&(a=JSON.parse(i))}catch{if(r.ok)throw new n(`server`,`The server answered ${r.status} with a body that is not JSON.`);this.cookie&&i&&(o=i)}if(!r.ok){let e=new u(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,t){let r=new Headers(t.headers);return t.body&&!r.has(`content-type`)&&r.set(`content-type`,`application/json`),this.cookie||r.set(`authorization`,`Bearer ${this.token}`),this.organization&&r.set(`x-coder-organization`,this.organization),this.fetchImpl(`${this.url}${e}`,{...t,headers:r,...this.cookie?{credentials:`same-origin`}:{}}).catch(e=>{throw e instanceof n||e.name===`AbortError`?e:new n(`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`)}info(){return this.request(`/api/auth/capabilities`)}linkAccount(e){return this.post(`/connect`,{token:e})}signOut(){return this.post(`/api/auth/sign-out`,{})}agents={list:e=>this.request(p(`/admin/agents`,{...e,...e?.connect?{connect:1}:{}})),get:(e,t)=>this.request(p(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{},...t?.handles?{handles:1}:{}})),versions:(e,t={})=>this.request(p(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:`DELETE`}),preview:(e,t)=>this.request(p(`/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(p(`/admin/tasks`,{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,n)=>this.request(p(`/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(p(`/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)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t}),approve:(e,t,n,r={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:n,...r}),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,t={})=>{let r=-1;for(;;){let i=new AbortController,a=await this.tasks.stream(e,r,i.signal);if(!a.ok||!a.body){let t=await this.tasks.get(e);if(m.has(t.status))return t;if(a.status===401)continue;throw new n(`server`,`The task stream answered ${a.status}.`)}let o=!1;for await(let e of g(a.body))if(e.event===`log`){let n=JSON.parse(e.data);r=n.seq,t.onLog?.(n)}else if(e.event===`end`||e.event===`approval`){o=!0;break}if(o)return this.tasks.get(e)}}};credentials={list:e=>this.request(p(`/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(p(`/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(p(`/admin/apps`,{agent:e})),install:(e,t)=>this.post(p(`/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(p(`/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`)};installations={list:(e,t={})=>this.request(p(`/admin/installations`,{agent:e,limit:t.limit,...t.active?{active:1}:{}}))};connections={list:(e,t)=>this.request(p(`/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`}),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(p(`/admin/mcp-registry`,{q:e}))};flows={list:e=>this.request(p(`/admin/flows`,{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(p(`/admin/pulls`,{repo:e}))};review(e){return this.post(`/admin/review`,e)}usage(e={}){return this.request(p(`/admin/usage/totals`,{...e,since:e.since??Date.now()-6048e5}))}usageRows(e){return this.request(p(`/admin/usage`,{installation:e}))}};async function*g(e){let t=new TextDecoder,n=``;for await(let r of e){n+=t.decode(r,{stream:!0});let e;for(;(e=n.indexOf(`
2
2
 
3
3
  `))>=0;){let t=n.slice(0,e);n=n.slice(e+2);let r=`message`,i,a=[];for(let e of t.split(`
4
4
  `))e.startsWith(`event: `)?r=e.slice(7):e.startsWith(`data: `)?a.push(e.slice(6)):e.startsWith(`id: `)&&(i=e.slice(4));(a.length||i)&&(yield{event:r,data:a.join(`
@@ -0,0 +1 @@
1
+ import{On as e}from"./errors-DO_IltpP.js";import{X as t}from"./output-SNqdgh9A.js";import{command as n}from"./cli.js";const r=n({name:`refresh`,description:`refresh the cached latest version, detached`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,run:()=>t(e())});export{r as commandRefreshUpdate};
@@ -0,0 +1,2 @@
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{n as t}from"./log-view-CfX9lakH.js";var n=e({iso:()=>r,remoteAnswer:()=>u,remoteApprovals:()=>c,remoteResult:()=>o,remoteStep:()=>d,remoteTask:()=>s,remoteTurns:()=>l,replyOf:()=>i});const r=e=>e===void 0?void 0:new Date(e).toISOString();function i(e){let t=(e??``).trim().split(`
2
+ `);for(let e=t.length-1;e>=0;--e){let n=t[e].trim();if(n.startsWith(`{`))try{let e=JSON.parse(n).reply;return typeof e==`string`?e:void 0}catch{return}}}function a(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 a=i(e)??e;return{status:+!t,threadId:null,...a?{finalMessage:a}:{},error:n?{message:n}:null,tokens:r??null}}function o(e){return e.result?a(e.result.output,e.result.ok,e.error,e.tokens):null}function s(e){let{task:t}=e;return{id:t.id,createdAt:r(e.createdAt),updatedAt:r(e.updatedAt),status:e.status===`waiting`?`running`:e.status,name:t.name??null,engine:t.usage?.engine??t.definition?.engine,prompt:t.prompt??t.event?.text,model:o(e)?.model??t.usage?.model??t.definition?.model??null,effort:t.usage?.effort??null,...t.permissions?{permissions:t.permissions}:{},...t.cwd?{cwd:t.cwd}:{},...t.appendSystem?{appendSystem:t.appendSystem}:{},...t.addDirs?.length?{addDirs:t.addDirs}:{},...e.finishedAt===void 0?{}:{completedAt:r(e.finishedAt)},...e.error?{error:e.error}:{},archived:e.archivedAt!==void 0,...e.archivedAt===void 0?{}:{archivedAt:r(e.archivedAt)},agentId:t.agent,source:t.source}}function c(e){let t=e.approval;return(e.approvals??(t?.id?[t]:[])).map(e=>({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}))}function l(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:r(e.finishedAt),prompt:e.prompt,...a(t?.output,t?.ok??!e.error,e.error,void 0)}})}function u(e){let t=s(e),n=o(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:c(e).filter(e=>!e.answered).map(({id:e,reason:t,actions:n})=>({id:e,reason:t,actions:n}))}}function d(e){return{...e.entry??t(e.line)??{kind:e.level===`err`?`error`:`info`,message:e.line},at:e.entry?.at??new Date(e.at).toISOString()}}export{s as a,d as i,c as n,l as o,o as r,n as s,r as t};
@@ -0,0 +1,3 @@
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{Or as t}from"./errors-DO_IltpP.js";import{Dt as n}from"./output-SNqdgh9A.js";import{_ as r,d as i,f as a,g as o,h as s,i as c,l,m as u,p as d,u as f}from"./prompt-CIx4jwQF.js";import{o as p}from"./load-BDlEFetB.js";import{t as m}from"./integrations-I7fRDk_l.js";import{_t as h,a as g,c as _,f as ee,h as te,i as ne,l as re,m as v,p as y,r as b,s as x,t as ie,u as ae,vt as S}from"./build-CmtlB7pX.js";import C from"node:path";import w from"node:process";import{execFile as T}from"node:child_process";import{createHash as E}from"node:crypto";import D from"node:http";import O from"node:fs/promises";import{promisify as oe}from"node:util";const se={"**/":`(?:.*/)?`,"/**":`/.*`,"**":`.*`,"*":`[^/]*`,"?":`[^/]`};function ce(e){return e.split(/\r?\n/).flatMap(e=>{let t=e.trimEnd();if(!t||t.startsWith(`#`))return[];let n=t.startsWith(`!`);n&&(t=t.slice(1));let r=t.endsWith(`/`);r&&(t=t.slice(0,-1));let i=t.replace(/^\//,``).replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*\/|\/\*\*$|\*\*|\*|\?/g,e=>se[e]),a=t.includes(`/`);return[{pattern:RegExp(a?`^${i}$`:`^(?:.*/)?${i}$`),negate:n,directory:r}]})}const k=(e,t,n)=>e.reduce((e,r)=>(!r.directory||n)&&r.pattern.test(t)?!r.negate:e,!1);async function A(e,t,n=``){let r=[];for(let i of await O.readdir(C.join(e,n),{withFileTypes:!0})){let a=n?`${n}/${i.name}`:i.name;i.isDirectory()&&!k(t,a,!0)?r.push(...await A(e,t,a)):i.isFile()&&!k(t,a,!1)&&r.push(a)}return r}async function le(e){return(await oe(T)(`git`,[`-C`,e,`ls-files`,`--cached`,`--others`,`--exclude-standard`,`-z`,`--`,`.`],{maxBuffer:67108864}).catch(()=>void 0))?.stdout.split(`\0`).filter(Boolean)}async function ue(e){let t=await le(e)??await A(e,ce(await O.readFile(C.join(e,`.gitignore`),`utf8`).catch(()=>``))),n={};for(let r of t){if(r===`agent.json`||r===`system.md`)continue;let t=C.join(e,r);(await O.lstat(t).catch(()=>void 0))?.isFile()&&(n[r]=await O.readFile(t,`utf8`))}return n}var j=e({deviceSignIn:()=>z,hasBrowser:()=>de,logoutSession:()=>W,loopbackSignIn:()=>R,refreshSignIn:()=>B,revokeSignIn:()=>V,selectLoginOrganization:()=>H,sessions:()=>G,signIn:()=>U});const M=`openid profile email offline_access organizations:read`,N=e=>`<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>Coder · ${e}</title>
2
+ <style>:root{color-scheme:light dark}body{margin:0;min-height:100vh;display:grid;place-items:center;font:15px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;background:light-dark(#fafafa,#111);color:light-dark(#111,#eee)}main{text-align:center;padding:32px}h1{margin:0 0 8px;font-size:20px}p{margin:0;opacity:.7}</style>
3
+ <main><h1>${e}</h1><p>You can close this tab and return to the terminal.</p></main>`,P=e=>`${e}/.well-known/oauth-cli-client.json`;async function F(e,t){let r=new URL(e).origin,i=await fetch(`${r}/.well-known/oauth-protected-resource`).catch(t=>{throw new n(`login-failed`,`No Coder server answers at ${e}: ${t.message}`)}),a=await i.json().catch(()=>({})),o=Array.isArray(a.authorization_servers)?a.authorization_servers[0]:void 0;if(!i.ok||a.resource!==r||typeof o!=`string`)throw new n(`login-failed`,`${e} does not offer sign-in.`,{hint:`Sign-in needs a Postgres-backed server; see coder docs self-host`});if(t!==void 0&&o!==t)throw new n(`login-failed`,`The server's sign-in issuer has changed. Sign in again before using this session.`);return{config:await _(new URL(o),P(e),void 0,ie(),new URL(o).protocol===`http:`?{execute:[b]}:void 0).catch(e=>{throw new n(`login-failed`,`Wular Auth at ${o} did not answer: ${e.message}`)}),resource:r}}function I(e,t,r){let i=t.claims(),a=t.refresh_token??r?.refreshToken;if(!a)throw new n(`login-failed`,`Wular Auth returned no refresh token.`);return{token:t.access_token,refreshToken:a,expiresAt:Date.now()+(t.expires_in??600)*1e3,issuer:e.serverMetadata().issuer,user:i?{name:typeof i.name==`string`?i.name:``,email:typeof i.email==`string`?i.email:``}:r?.user??{name:``,email:``}}}const L=e=>new n(`login-failed`,e instanceof S||e instanceof h?e.error===`access_denied`?`Sign-in was denied in the browser.`:e.error_description??e.error:e instanceof Error?e.message:String(e));async function R(e,t){let{config:r,resource:i}=await F(e),a=ee(),o=y(),s=D.createServer();await new Promise(e=>s.listen(0,`127.0.0.1`,e));let{port:c}=s.address(),l=`http://127.0.0.1:${c}/callback`;try{let e=new Promise((e,t)=>{let r=setTimeout(()=>t(new n(`login-failed`,`Sign-in timed out.`)),3e5);s.on(`request`,(t,n)=>{let i=new URL(t.url??`/`,l);if(i.pathname!==`/callback`||i.searchParams.get(`state`)!==o){n.writeHead(404).end();return}n.writeHead(200,{"content-type":`text/html; charset=utf-8`}).end(N(i.searchParams.has(`error`)?`Sign-in failed`:`Signed in`)),clearTimeout(r),e(i)})});return t(g(r,{redirect_uri:l,scope:M,resource:i,code_challenge:await x(a),code_challenge_method:`S256`,state:o}).href),I(r,await ne(r,await e,{pkceCodeVerifier:a,expectedState:o},{resource:i}).catch(e=>{throw L(e)}))}finally{s.close(),s.closeAllConnections()}}async function z(e,t){let{config:n,resource:r}=await F(e);try{let e=await re(n,{scope:M,resource:r});return t(e.user_code,e.verification_uri_complete??e.verification_uri),I(n,await ae(n,e,{resource:r}))}catch(e){throw L(e)}}async function B(e,t){let{config:r,resource:i}=await F(e,t.issuer);try{return I(r,await v(r,t.refreshToken,{resource:i}),t)}catch(e){if(e instanceof S&&(e.error===`invalid_grant`||e.error===`invalid_client`))return;throw new n(`server`,`Wular Auth did not refresh the session: ${e instanceof Error?e.message:String(e)}`)}}async function V(e,t){let{config:n}=await F(e,t.issuer);n.serverMetadata().revocation_endpoint&&await te(n,t.refreshToken,{token_type_hint:`refresh_token`})}async function H(e,t,r){if(!e.length)throw new n(`login-failed`,`This account belongs to no workspace.`);if(t){let r=e.find(e=>e.slug===t);if(!r)throw new n(`login-failed`,`You are not a member of workspace "${t}".`);return r}if(e.length<=1)return e[0];if(!r)throw new n(`login-failed`,`Choose a workspace for this server.`,{hint:`Pass --workspace <slug>.`});let i=await r(e);return e.find(e=>e.slug===i)}const de=()=>!w.env.SSH_CONNECTION&&(w.platform!==`linux`||!!(w.env.DISPLAY||w.env.WAYLAND_DISPLAY));async function U(e,t={}){let r=t.device?await z(e,t.onCode??(()=>{})):await R(e,t.open??c),i=await fetch(`${e}/me`,{headers:{authorization:`Bearer ${r.token}`}}).catch(t=>{throw new n(`login-failed`,`No Coder server answers at ${e}: ${t.message}`)}),a=await i.json().catch(()=>({}));if(!i.ok)throw new n(`login-failed`,`Signed in, but the server refused the token.`);let o=await H(a.organizations??[],t.organization,t.chooseOrganization);return{...r,...o?{organization:o}:{},at:Date.now()}}async function W(e){let t=a(),r=t[e];if(!r)throw new n(`login-failed`,`Not signed in to ${e}.`);return await V(e,r).catch(()=>void 0),delete t[e],s(t),{ok:!0,server:e}}const G={async login(e={}){let t=K(e),n=await U(t,e);return e.save!==!1&&s({...a(),[t]:n}),{...n,server:t}},logout:(e={})=>W(K(e)),status:()=>Object.fromEntries(Object.entries(a()).map(([e,t])=>[e,{user:t.user,organization:t.organization,at:t.at}]))};function fe(e,n){let r=n,i;return{expiresAt:()=>r.expiresAt,async renew(){return i||=t(`${d()}.${E(`sha256`).update(e).digest(`hex`)}.lock`,()=>pe(e,r)).finally(()=>{i=void 0}),r=await i,r.token}}}async function pe(e,t){let r=e=>e&&e.refreshToken!==t.refreshToken?e:void 0,i=r(a()[e]);if(i&&i.expiresAt>t.expiresAt)return i;let o=await B(e,t),c=a();if(o){let n={...t,...o};return s({...c,[e]:n}),n}let l=r(c[e]);if(l)return l;throw delete c[e],s(c),new n(`login-failed`,`Signed out of ${e}.`,{hint:`Sign in again: coder auth login`})}var me=e({addCredential:()=>Z,coderClient:()=>J,connect:()=>q,credentials:()=>$,loginCredential:()=>Q,pushAgents:()=>Y,serverFor:()=>K});function K(e={}){let t=u(e.server);if(!l(t)){if(!e.yes)throw new n(`invalid-option`,`First use of Coder server ${new URL(t).origin} needs confirmation.`,{hint:`Inspect the origin, then pass yes: true.`});f(t)}return t}function q(e={}){let t=K(e);return J(t,{token:e.token,missingHint:`auth.login({ server: '${t}' })`,organization:e.organization})}function J(e,{token:t,missingHint:a,organization:s}={}){let c=u(e),l=i(c),d=l?.token,f=w.env.ADMIN_TOKEN,p=t??d??f;if(p&&p===f&&!r(c))throw new n(`invalid-option`,`ADMIN_TOKEN cannot be sent to a non-loopback server.`);if(!p)throw new n(`login-failed`,`Not signed in to ${c}.`,{...a?{hint:a}:{}});return new o(c,{token:p},{organization:s??l?.organization?.slug,renewal:l&&p===d?fe(c,l):void 0})}async function Y(e,t,r){let i=(await p(t,m)).filter(e=>!e.builtin),a=r?i.filter(e=>e.id===r):i;if(r&&!a.length)throw new n(`invalid-option`,`No workspace agent named "${r}".`);let o=[];for(let t of a)o.push(await e.agents.put(t.id,{definition:t.definition,systemPrompt:await O.readFile(C.join(t.dir,`system.md`),`utf8`).catch(()=>``),files:await ue(t.dir),name:t.name,description:t.definition.description}));return o}const he=/^[A-Z_][A-Z0-9_]*$/,X=(e,t)=>new n(`invalid-option`,e,t?{hint:t}:{});async function ge(){let e=``;for await(let t of w.stdin)e+=t.toString();return e.replace(/\r?\n$/,``)}async function Z(e){let t=e.env;if(!t)throw X(`Missing required --env NAME.`,`Like --env ANTHROPIC_API_KEY`);if(!he.test(t))throw X(`Invalid environment variable name ${JSON.stringify(t)}.`);let n=e.value===`-`?await ge():e.value??w.env[t];if(!n)throw X(`Environment variable ${t} is not set.`);return q(e).credentials.add({env:{[t]:n},workspace:e.workspace,noCheck:e.noCheck})}async function Q(e,t={}){if(e!==`claude`&&e!==`codex`)throw X(`Name the engine to sign in to.`,`Usage: coder credentials login <claude|codex>`);let n=q(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 $={list:(e={})=>q(e).credentials.list(),add:Z,remove:(e,t={})=>q(t).credentials.remove(e,t),login:Q};export{K as a,me as i,$ as n,G as o,Y as r,j as s,q as t};
@@ -1 +1 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{Zt as t}from"./output-D95NoAA9.js";import{t as n}from"./remote-CDm0YUU3.js";import{t as r}from"./serve-Bzs_lEg-.js";var i=e({addRunner:()=>o,addRunnerFields:()=>d,listRunners:()=>a,pairRunner:()=>s,removeRunner:()=>u,runners:()=>f,testRunner:()=>l,updateRunner:()=>c});const a=(e={})=>n(e).runners.list(),o=(e,t={})=>n(t).runners.add(e),s=(e,t={})=>n(t).runners.pair(e),c=(e,t,r={})=>n(r).runners.update(e,t),l=(e,t={})=>n(t).runners.test(e),u=(e,t={})=>n(t).runners.remove(e);async function d(e,r){let i=n(r),{catalog:a}=await i.runners.list(),o=a.find(t=>t.kind===e);if(!o)throw new t(`invalid-option`,`Unknown runner kind.`);if(!o.available)throw new t(`invalid-option`,o.reason??`Runner unavailable.`);let s={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),i=e.slice(n+1),a=o.fields.find(e=>e.key===r);if(!a)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(a.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(i)||!process.env[i.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);s[r]=process.env[i.slice(4)]}else s[r]=i}let c=r.scope??((await i.me()).user?`personal`:`workspace`);if(c!==`personal`&&c!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return o.connect===`pair`?i.runners.pair({name:r.name,scope:c}):i.runners.add({kind:o.kind,name:r.name??o.name,scope:c,config:s})}const f={list:a,add:o,pair:s,update:c,default:(e,t={})=>c(e,{default:!0},t),test:l,rename:(e,t,n={})=>c(e,{name:t},n),remove:u,serve:r};export{f as n,i as t};
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{Dt as t}from"./output-SNqdgh9A.js";import{t as n}from"./remote-HUZCWgfl.js";import{t as r}from"./serve-NQykWAKV.js";var i=e({addRunner:()=>o,addRunnerFields:()=>d,listRunners:()=>a,pairRunner:()=>s,removeRunner:()=>u,runners:()=>f,testRunner:()=>l,updateRunner:()=>c});const a=(e={})=>n(e).runners.list(),o=(e,t={})=>n(t).runners.add(e),s=(e,t={})=>n(t).runners.pair(e),c=(e,t,r={})=>n(r).runners.update(e,t),l=(e,t={})=>n(t).runners.test(e),u=(e,t={})=>n(t).runners.remove(e);async function d(e,r){let i=n(r),{catalog:a}=await i.runners.list(),o=a.find(t=>t.kind===e);if(!o)throw new t(`invalid-option`,`Unknown runner kind.`);if(!o.available)throw new t(`invalid-option`,o.reason??`Runner unavailable.`);let s={};for(let e of r.field??[]){let n=e.indexOf(`=`);if(n<1)throw new t(`invalid-option`,`Use --field key=value.`);let r=e.slice(0,n),i=e.slice(n+1),a=o.fields.find(e=>e.key===r);if(!a)throw new t(`invalid-option`,`Unknown runner field ${r}.`);if(a.secret){if(!/^env:[A-Z_][A-Z0-9_]*$/.test(i)||!process.env[i.slice(4)])throw new t(`invalid-option`,`Read ${r} from the environment with --field ${r}=env:VARIABLE.`);s[r]=process.env[i.slice(4)]}else s[r]=i}let c=r.scope??((await i.me()).user?`personal`:`workspace`);if(c!==`personal`&&c!==`workspace`)throw new t(`invalid-option`,`Scope must be personal or workspace.`);return o.connect===`pair`?i.runners.pair({name:r.name,scope:c}):i.runners.add({kind:o.kind,name:r.name??o.name,scope:c,config:s})}const f={list:a,add:o,pair:s,update:c,default:(e,t={})=>c(e,{default:!0},t),test:l,rename:(e,t,n={})=>c(e,{name:t},n),remove:u,serve:r};export{f as n,i as t};
package/dist/runner.json CHANGED
@@ -1 +1 @@
1
- {"hash":"ad5ff9d9ab44490cae8d66b86737343fa71c33a6f8847d9a0d5630ac6aa6dacc"}
1
+ {"hash":"d018df456c5dbf5a2db515a8db282d4f05c4d59614005bbd4165ded587ea0c97"}
package/dist/runner.tgz CHANGED
Binary file
@@ -0,0 +1,36 @@
1
+ import{Rt as e,qi as t}from"./core-DwsAMCnL.js";import{En as n,Nt as r,_r as i,dr as a,mr as o}from"./errors-DO_IltpP.js";import{m as s}from"./slack-BtKvW_4v.js";import{t as c}from"./integrations-I7fRDk_l.js";import{n as l,t as u}from"./task-iuYQ0zAK.js";import{n as d,t as ee}from"./base64url-CsVsW4Id.js";import{_ as te,g as f,h as ne,l as p}from"./http-Cg8PSe-c.js";import m from"node:path";import h from"node:process";import{existsSync as g,readFileSync as re}from"node:fs";import{execFile as ie}from"node:child_process";import{createCipheriv as _,createDecipheriv as v,createHash as ae,createHmac as oe,randomBytes as y,randomUUID as b}from"node:crypto";import x,{isIP as S}from"node:net";import{readFile as se}from"node:fs/promises";import{lookup as ce}from"node:dns/promises";import{request as le}from"node:https";const ue=a({env:o(i(),i().check(e(1)))}),C=`plain`;function w(e,t=`SERVER_ENCRYPTION_KEY`){if(!e)return;let n=Buffer.from(e,`base64`);if(n.length!==32)throw Error(`${t} must be a base64-encoded 32-byte key`);return n}function T(e){return w(e.encryptionKey)}function E(e){let t=w(e);return t?ae(`sha256`).update(t).digest().readInt32BE(0):0}function D(e){return[[e.encryptionKey,`SERVER_ENCRYPTION_KEY`],[e.previousEncryptionKey,`SERVER_ENCRYPTION_KEY_PREVIOUS`]].filter(e=>!!e[0]).map(([e,t])=>({value:w(e,t),version:E(e)}))}function O(e){let t=ue.safeParse(e);if(!t.success||!Object.keys(t.data.env).length)throw Error(`Invalid engine credential`);return t.data}function de(e,t){let n=T(e);if(!n)return{iv:C,tag:``,ciphertext:Buffer.from(JSON.stringify(O(t))).toString(`base64`)};let r=y(12),i=_(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(O(t)),`utf8`),i.final()]);return{iv:r.toString(`base64`),tag:i.getAuthTag().toString(`base64`),ciphertext:a.toString(`base64`)}}function fe(e,t){if(t.iv===C)return O(JSON.parse(Buffer.from(t.ciphertext,`base64`).toString(`utf8`)));for(let n of D(e))try{let e=v(`aes-256-gcm`,n.value,Buffer.from(t.iv,`base64`));return e.setAuthTag(Buffer.from(t.tag,`base64`)),O(JSON.parse(Buffer.concat([e.update(Buffer.from(t.ciphertext,`base64`)),e.final()]).toString(`utf8`)))}catch{}throw Error(`Stored credential was sealed with an unavailable encryption key`)}function pe(e,t){let n=T(e);if(!n)return`${C}.${Buffer.from(JSON.stringify(t)).toString(`base64`)}`;let r=y(12),i=_(`aes-256-gcm`,n,r),a=Buffer.concat([i.update(JSON.stringify(t),`utf8`),i.final()]);return[r,i.getAuthTag(),a].map(e=>e.toString(`base64`)).join(`.`)}function k(e,t){if(t.startsWith(`${C}.`))return JSON.parse(Buffer.from(t.slice(6),`base64`).toString(`utf8`));let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=v(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),JSON.parse(Buffer.concat([e.update(i),e.final()]).toString(`utf8`))}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function me(e,t){if(t.startsWith(`${C}.`))return 0;let[n,r,i]=t.split(`.`).map(e=>Buffer.from(e,`base64`));for(let t of D(e))try{let e=v(`aes-256-gcm`,t.value,n);return e.setAuthTag(r),e.update(i),e.final(),t.version}catch{}throw Error(`Stored secret was sealed with an unavailable encryption key`)}function he(e,t,n={}){let r=`coder-${e.id.replace(/[^a-zA-Z0-9_.-]/g,`-`).slice(0,48)}-${Date.now()}`;t={...t,CODER_RUNNER_IMAGE:n.image??`ghcr.io/muzam1l/coder-runner:latest`,CODER_RUNNER_TARBALL_URL:U(t.CODER_SERVER)};let i=Object.keys(t).flatMap(e=>[`-e`,e]);return{args:[`run`,`-d`,`--name`,r,`--memory`,String(n.memory??`4g`),`--cpus`,String(n.cpus??2),`--pids-limit`,String(n.pidsLimit??512),`--network`,n.network??`bridge`,...i,n.image??`ghcr.io/muzam1l/coder-runner:latest`,`sh`,`-c`,G(``,`for binary in node bun git curl tar claude codex github-mcp-server; do command -v "$binary" >/dev/null 2>&1 || { printf "Docker image %s is missing required binary %s\\n" "$CODER_RUNNER_IMAGE" "$binary"; exit 127; }; done`),`coder-task`,e.id,W],env:t}}var ge=class{options;kind=`local-docker`;constructor(e={}){this.options=e}async start(e,t){let n=he(e,{...t,CODER_INBOX_SOCKET:l},this.options),r=await f(`docker`,n.args,{PATH:h.env.PATH??``,...n.env});if(r.code!==0)throw Error(r.stderr.trim()||`docker run failed`);return r.stdout.trim()}async status(e){let t=await f(`docker`,[`inspect`,`--format`,`{{.State.Running}} {{.State.ExitCode}}`,e],{PATH:h.env.PATH??``});if(t.code!==0)return{state:`exited`};let[n,r]=t.stdout.trim().split(/\s+/);return n===`true`?{state:`running`}:{state:`exited`,code:Number(r)||0}}async stop(e){await f(`docker`,[`rm`,`-f`,e],{PATH:h.env.PATH??``})}async push(e,t){let n=await f(`docker`,[`exec`,`-e`,`CODER_INBOX_MESSAGES`,e,`node`,`-e`,u],{PATH:h.env.PATH??``,CODER_INBOX_MESSAGES:JSON.stringify(t)});if(n.code!==0)throw Error(`Docker inbox delivery failed`);return JSON.parse(n.stdout)}},_e=t({GithubActionsRunner:()=>M,actionsWorkflow:()=>A});function A(){return`name: Coder agent
2
+ run-name: Coder agent \${{ inputs.task }}
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ task: { required: true, type: string }
7
+ server: { required: true, type: string }
8
+ token: { required: true, type: string }
9
+ mode: { required: true, type: string }
10
+ tarball: { required: true, type: string }
11
+ jobs:
12
+ run:
13
+ runs-on: ubuntu-latest
14
+ container: ${V}
15
+ steps:
16
+ - run: |
17
+ sh -c '${G().replaceAll(`'`,`'\\''`)}' coder-task "$TASK" '${W.replaceAll(`'`,`'\\''`).trim().replaceAll(`
18
+ `,` `)}'
19
+ env:
20
+ TASK: \${{ inputs.task }}
21
+ CODER_SERVER: \${{ inputs.server }}
22
+ CODER_TASK_TOKEN: \${{ inputs.token }}
23
+ CODER_INBOX_MODE: \${{ inputs.mode }}
24
+ CODER_RUNNER_TARBALL_URL: \${{ inputs.tarball }}
25
+ `}const j=e=>ee(e);var M=class{options;kind=`github-actions`;fetcher;constructor(e={}){this.options=e,this.fetcher=e.fetch??fetch}async request(e,t={},n=1e4){if(!this.options.token)throw Error(`RUNNER_CONFIG.token is required for github-actions`);let r=AbortSignal.timeout(n);for(let n=0;;n++){let i=await this.fetcher(`https://api.github.com${e}`,{...t,signal:r,redirect:`manual`,headers:{accept:`application/vnd.github+json`,authorization:`Bearer ${this.options.token}`,"content-type":`application/json`,"user-agent":`coder`,"x-github-api-version":`2022-11-28`,...t.headers}});if((t.method??`GET`)!==`GET`||n===2||i.status!==429&&i.status<500)return i;let a=Number(i.headers.get(`retry-after`));await i.body?.cancel(),await new Promise((e,t)=>{let i=()=>{clearTimeout(s),r.removeEventListener(`abort`,o)},o=()=>{i(),t(r.reason)},s=setTimeout(()=>{i(),e()},Number.isFinite(a)&&a>0?a*1e3:100*2**n);r.addEventListener(`abort`,o,{once:!0}),r.aborted&&o()})}}async start(e,t){let n=this.options.repo??(e.event?.repo&&`${e.event.repo.owner}/${e.event.repo.name}`);if(!n)throw Error(`The github-actions runner requires a repository`);let r=Date.now()+(this.options.lookupTimeoutMs??25e3),i=encodeURIComponent(this.options.workflow??`coder-agent.yml`),a=e.event?.repo,o=this.options.ref??(a&&`${a.owner}/${a.name}`===n?a.defaultBranch:void 0);if(!o){let e=await this.request(`/repos/${n}`,{},Math.max(1,r-Date.now()));if(!e.ok)throw Error(`GitHub repository lookup failed: ${e.status}`);let t=await e.json();if(!t.default_branch)throw Error(`GitHub repository has no default branch`);o=t.default_branch}let s=await this.request(`/repos/${n}/actions/workflows/${i}/dispatches`,{method:`POST`,headers:{"x-github-api-version":`2026-03-10`},body:JSON.stringify({ref:o,inputs:{task:e.id,server:t.CODER_SERVER,token:t.CODER_TASK_TOKEN,mode:t.CODER_INBOX_MODE,tarball:U(t.CODER_SERVER)}})},Math.max(1,r-Date.now()));if(s.status!==200)throw Error(`GitHub workflow dispatch failed: ${s.status}`);let c=await s.json();if(!Number.isSafeInteger(c.workflow_run_id)||c.workflow_run_id<=0)throw Error(`GitHub workflow dispatch returned no run id`);return d({repo:n,run:c.workflow_run_id})}async status(e){let{repo:t,run:n}=j(e),r=await this.request(`/repos/${t}/actions/runs/${n}`);if(r.status===404)return{state:`exited`,code:1};if(!r.ok)throw Error(`GitHub workflow status failed: ${r.status}`);let i=await r.json();return i.status===`completed`?{state:`exited`,code:i.conclusion===`success`?0:1}:{state:`running`}}async stop(e){let{repo:t,run:n}=j(e),r=await this.request(`/repos/${t}/actions/runs/${n}/cancel`,{method:`POST`});if(r.status!==202&&r.status!==409)throw Error(`GitHub workflow cancellation failed: ${r.status}`)}};function ve(e){if(!S(e))return!0;if(S(e)===6){let t=new URL(`https://[${e}]/`).hostname.slice(1,-1).split(`::`),n=t[0]?t[0].split(`:`):[],r=t[1]?t[1].split(`:`):[],i=[...n,...Array(8-n.length-r.length).fill(`0`),...r].map(e=>parseInt(e,16));if(i.every(e=>e===0)||i.slice(0,7).every(e=>e===0)&&i[7]===1||(i[0]&65024)==64512||(i[0]&65472)==65152||(i[0]&65280)==65280)return!0;let a;if(i.slice(0,5).every(e=>e===0)&&(i[5]===0||i[5]===65535))a=i.slice(6);else if(i.slice(0,4).every(e=>e===0)&&i[4]===65535&&i[5]===0)a=i.slice(6);else if((i[4]===0||i[4]===512)&&i[5]===24318)a=i.slice(6);else if(i[0]===100&&i[1]===65435&&i.slice(2,6).every(e=>e===0))a=i.slice(6);else if(i[0]===8194)a=i.slice(1,3);else if(i[0]===8193&&(i[1]===0||i[1]===3512)||i[0]===100&&i[1]===65435&&i[2]===1)return!0;if(!a)return!1;e=a.flatMap(e=>[e>>8,e&255]).join(`.`)}let t=e.split(`.`).map(Number);return t[0]===0||t[0]===10||t[0]===127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&t[1]===168||t[0]===192&&t[1]===0&&(t[2]===0||t[2]===2)||t[0]===198&&t[1]>=18&&t[1]<=19||t[0]===198&&t[1]===51&&t[2]===100||t[0]===203&&t[1]===0&&t[2]===113||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]>=224}var N=class{options;kind=`http`;base;fetcher;resolver;constructor(e){if(this.options=e,!e?.url)throw Error(`The http runner requires RUNNER_CONFIG.url`);if(this.base=new URL(`${e.url.replace(/\/+$/,``)}/`),this.base.protocol!==`https:`)throw Error(`The http runner requires an HTTPS URL`);if(this.base.username||this.base.password)throw Error(`The http runner URL cannot contain credentials`);if(!e.secret)throw Error(`RUNNER_CONFIG.secret is required for the http runner`);this.fetcher=e.fetch,this.resolver=e.lookup??ce}async safe(){let e=this.base.hostname.replace(/^\[|\]$/g,``),t=S(e)?[{address:e,family:S(e)}]:await this.resolver(e,{all:!0});if(!t.length)throw Error(`The http runner resolved no address`);if(t.some(e=>ve(e.address)))throw Error(`The http runner refuses private and metadata addresses`);return t[0]}send(e,t,n){return this.fetcher?this.fetcher(e,t):new Promise((r,i)=>{let a=(this.options.request??le)(e,{method:t.method,headers:t.headers,signal:t.signal??void 0,agent:!1,lookup:(e,t,r)=>{t.all?r(null,[n]):r(null,n.address,n.family)}},e=>{let t=[];e.on(`data`,e=>t.push(Buffer.from(e))),e.on(`error`,i),e.on(`end`,()=>r(new Response(e.statusCode===204?null:Buffer.concat(t),{status:e.statusCode})))});a.on(`error`,i),a.end(t.body)})}async request(e,t=`GET`,n,r){let i=await this.safe(),a=n===void 0?``:JSON.stringify(n),o=String(Date.now()),s=y(16).toString(`base64url`),c=oe(`sha256`,this.options.secret).update(`${a}.${o}.${s}`).digest(`base64url`),l=await this.send(new URL(e.replace(/^\//,``),this.base),{method:t,redirect:`manual`,headers:{...this.options.headers,"content-type":`application/json`,"x-coder-timestamp":o,"x-coder-nonce":s,"x-coder-signature":c},...a?{body:a}:{},signal:r??AbortSignal.timeout(e===`/start`?3e4:1e4)},i);if(l.status>=300&&l.status<400)throw Error(`The http runner refuses redirects`);if(!l.ok)throw Error(`HTTP runner request failed: ${l.status}`);if(l.status===204)return;let u=await l.text();return u?JSON.parse(u):void 0}health(e){return this.request(`/health`,`GET`,void 0,e)}async start(e,t){let n=await this.request(`/start`,`POST`,{task:e.id,env:t});if(!n.handle)throw Error(`HTTP runner returned no handle`);return n.handle}status(e){return this.request(`/status/${encodeURIComponent(e)}`)}async stop(e){await this.request(`/stop/${encodeURIComponent(e)}`,`POST`,{})}push(e,t){return this.request(`/messages/${encodeURIComponent(e)}`,`POST`,{entries:t})}};const P=e=>ee(e),F=18e5,I=864e5,ye={"eu-north-1":`arn1`,"ap-south-1":`bom1`,"eu-west-3":`cdg1`,"us-east-2":`cle1`,"af-south-1":`cpt1`,"eu-west-1":`dub1`,"eu-central-1":`fra1`,"sa-east-1":`gru1`,"ap-east-1":`hkg1`,"ap-northeast-1":`hnd1`,"us-east-1":`iad1`,"ap-northeast-2":`icn1`,"ap-northeast-3":`kix1`,"eu-west-2":`lhr1`,"us-west-2":`pdx1`,"us-west-1":`sfo1`,"ap-southeast-1":`sin1`,"ap-southeast-2":`syd1`,"ca-central-1":`yul1`};function be(e){if(!e)return;let t=(()=>{try{return new URL(e).hostname}catch{return``}})();return Object.entries(ye).find(([e])=>t.includes(e))?.[1]}const L=[{name:`ANTHROPIC_API_KEY`,host:`api.anthropic.com`,header:`x-api-key`,prefix:``},{name:`OPENAI_API_KEY`,host:`api.openai.com`,header:`authorization`,prefix:`Bearer `}],xe=`brokered`,R={claude:{api:`api.anthropic.com`,account:[`claude.ai`,`platform.claude.com`]},codex:{api:`api.openai.com`,account:[`auth.openai.com`,`chatgpt.com`]}};function Se(e,t){let n=R[e],r=t.CLAUDE_CODE_OAUTH_TOKEN||t.CODEX_AUTH_JSON,i=[t.ANTHROPIC_BASE_URL,t.OPENAI_BASE_URL].filter(e=>e&&URL.canParse(e));return[...n?[n.api,...r?n.account:[]]:[],...i.map(e=>new URL(e).hostname)]}function Ce(e={},t,n=L){let r={};for(let t of n)e[t.name]&&((r[t.host]??={})[t.header]=`${t.prefix}${e[t.name]}`);let i=Object.entries(r).map(([e,t])=>[e,[{transform:[{headers:t}]}]]);if(!t)return i.length?{allow:{...Object.fromEntries(i),"*":[]}}:void 0;let a=[...new Set(t.filter(e=>x.isIP(e)))],o=t.filter(e=>!x.isIP(e)).map(e=>[e,[]]);return{allow:{...Object.fromEntries(o),...Object.fromEntries(i)},...a.length?{subnets:{allow:a.map(e=>`${e}/${x.isIPv6(e)?128:32}`)}}:{}}}function we(e){return[...[e.CODER_SERVER,e.CODER_RUNNER_TARBALL_URL].filter(e=>e&&URL.canParse(e)).map(e=>new URL(e).hostname),...Object.values(c).flatMap(e=>e.tools.installHosts??[])]}function Te(e,t,n){return Ce(t,n.hosts&&[...we(e),...n.hosts],n.brokered)}async function Ee(){try{let{Sandbox:e,Snapshot:t}=await import(`@vercel/sandbox`);return{create:t=>e.create(t),get:t=>e.get(t),deleteSnapshot:async e=>(await t.get(e)).delete()}}catch{throw Error(`The vercel-sandbox runner requires @vercel/sandbox in the adapter app.`)}}function z(e){return e&&typeof e==`object`&&`response`in e&&e.response instanceof Response?e.response.status:void 0}function De(e){if(z(e)!==410||!e||typeof e!=`object`||!(`json`in e))return!1;let t=e.json;if(!t||typeof t!=`object`||!(`error`in t))return!1;let n=t.error;return!!n&&typeof n==`object`&&`code`in n&&n.code===`snapshot_not_found`}var B=class extends Error{snapshotId;constructor(e,t,n){super(e,n),this.snapshotId=t}},Oe=class{options;kind=`vercel-sandbox`;sandboxes=new Map;constructor(e={}){this.options=e}api(){return this.options.sandbox?Promise.resolve(this.options.sandbox):Ee()}async sandbox(e){for(let[e,t]of this.sandboxes)t.expiresAt<=this.now()&&this.sandboxes.delete(e);return this.sandboxes.get(e)?.sandbox??(await this.api()).get({...this.auth(),name:e})}now(){return(this.options.now??Date.now)()}auth(){return{...this.options.token?{token:this.options.token,projectId:this.options.projectId??process.env.VERCEL_PROJECT_ID,teamId:this.options.team??process.env.VERCEL_TEAM_ID}:{}}}base(e){return{...e?{source:{type:`snapshot`,snapshotId:e}}:this.options.image?{image:this.options.image}:{},...this.options.region?{region:this.options.region}:{},...this.auth(),resources:{vcpus:this.options.vcpus??1},persistent:!1}}snapshotKey(e){let t=e.event?.repo;if(!t)return;let n=[H(),this.options.image??null,e.event.appId,e.event.installationId,t.owner,t.name];return`repo:${this.options.region??``}:${s(JSON.stringify(n))}`}async stopSandbox(e){try{await e.stop()}finally{this.sandboxes.delete(e.name)}}async withSandbox(e,t){let n;try{if(n=typeof e==`string`?await this.sandbox(e):e,n.status!==`running`&&n.status!==`pending`)throw new B(`Vercel Sandbox ${n.name} is ${n.status}`);return await t(n)}catch(t){let r=z(t);throw(r===404||r===410)&&typeof e==`string`&&this.sandboxes.delete(e),r===410||!n&&typeof e==`string`&&r===404?new B(t instanceof Error?t.message:`Vercel Sandbox expired`,void 0,{cause:t}):t}}withSnapshotLock(e,t){let n=this.options.snapshots;return n.withLock?n.withLock(e,t):t(n)}async finalizeSnapshot(e,t){let n=this.now(),r=b(),i=await this.withSnapshotLock(e,async i=>{let a=await i.get(e)??{};if(!a.build||a.lease&&a.lease.expiresAt>n||t?.build&&(a.build.sandbox!==t.build.sandbox||a.build.command!==t.build.command||a.build.startedAt!==t.build.startedAt))return a;let o={...a,lease:{owner:r,expiresAt:n+F}};return await i.put(e,o),o});if(i.lease?.owner!==r||!i.build)return i;let{build:a,lease:o,...s}=i,c={...s,build:a};try{c=await this.withSandbox(a.sandbox,async e=>{let t=await e.getCommand(a.command);if(t.exitCode===null&&n-a.startedAt<F)return c;if(t.exitCode===0){let r=/^coder-snapshot (\S+)$/m.exec(await t.stdout())?.[1];if(r&&r===i.sha)return await this.stopSandbox(e).catch(()=>{}),{...s,checkedAt:n};let a=await e.snapshot({expiration:I});return this.sandboxes.delete(e.name),{...s,snapshotId:a.snapshotId,...r?{sha:r}:{},checkedAt:n}}return await this.stopSandbox(e).catch(()=>{}),{...s,failedAt:n}})}catch(t){if(t instanceof B){let{failedAt:e,...t}=s;c=t}else console.error(`coder server: snapshot ${e} failed; tasks start without a new one`,t),await this.withSandbox(a.sandbox,e=>this.stopSandbox(e)).catch(()=>{}),c={...s,failedAt:n}}let l=await this.withSnapshotLock(e,async t=>{let n=await t.get(e)??{};return n.lease?.owner===r?(await t.put(e,c),c):n});return l===c&&s.snapshotId&&c.snapshotId!==s.snapshotId&&await this.deleteSnapshot(s.snapshotId),l}async deleteSnapshot(e){try{await(await this.api()).deleteSnapshot({...this.auth(),snapshotId:e})}catch(t){[404,410].includes(z(t)??0)||console.error(`coder server: could not delete replaced snapshot ${e}`,t)}}async snapshot(e,t,n,r){if(!this.options.snapshots)return;let i=await this.finalizeSnapshot(e);if(i.build)return i.snapshotId;let a=this.now(),o=b(),s=await this.withSnapshotLock(e,async t=>{let r=await t.get(e)??{},i=!r.snapshotId||n&&a-(r.checkedAt??0)>=9e5,s=r.failedAt!==void 0&&a-r.failedAt<36e5;if(r.build||r.lease&&r.lease.expiresAt>a||!i||s)return r;let c={...r,lease:{owner:o,expiresAt:a+F}};return await t.put(e,c),c});if(s.lease?.owner!==o)return s.snapshotId;let c,l;try{c=await t(s.snapshotId)}catch(t){t instanceof B?l=t:console.error(`coder server: snapshot ${e} failed; tasks start without a new one`,t)}let u=await this.withSnapshotLock(e,async t=>{let n=await t.get(e)??{};if(n.lease?.owner!==o)return n;let{lease:r,...i}=n,s={...i,...c?{build:{sandbox:c.sandbox,command:c.command,startedAt:a}}:l?{}:{failedAt:a}};return await t.put(e,s),s});if(c)if(u.build?.sandbox===c.sandbox&&u.build.command===c.command){let t=(async()=>{await c.wait(),await this.finalizeSnapshot(e,u)})().catch(()=>{});r?.(t)}else await this.withSandbox(c.sandbox,e=>this.stopSandbox(e)).catch(()=>{});if(l)throw l;return u.snapshotId}async detached(e,t,n={}){let r=await(await this.api()).create({...this.base(e),timeout:this.options.timeoutMs??18e5,...n}).catch(t=>{throw e&&De(t)?new B(t.message,e,{cause:t}):t});if(!t.env?.CODER_PREPARE){for(let[e,t]of this.sandboxes)t.expiresAt<=this.now()&&this.sandboxes.delete(e);this.sandboxes.size>=1e3&&this.sandboxes.delete(this.sandboxes.keys().next().value),this.sandboxes.set(r.name,{sandbox:r,expiresAt:this.now()+Number(n.timeout??this.options.timeoutMs??F)})}try{let e=await this.withSandbox(r,e=>e.runCommand({...t,detached:!0}));return{sandbox:r.name,command:e.cmdId,wait:()=>e.wait({signal:AbortSignal.timeout(F)})}}catch(e){throw this.sandboxes.delete(r.name),await this.stopSandbox(r).catch(()=>{}),e}}async start(e,t,n,i={}){t={...t,[r]:`1`,CODER_RUNNER_TARBALL_URL:U(t.CODER_SERVER),CODER_RUNNER_HASH:H()};let a=Te(t,n,i),o=t=>({cmd:`sh`,args:[`-c`,G(te().map(e=>`sudo sh -c '${e.replaceAll(`'`,`'\\''`)}'`).join(` && `),``,`setpriv --inh-caps=-all --ambient-caps=-all bun`),`coder-task`,e.id,W],env:t});for(let n=0;;n++){let r;try{r=this.snapshotKey(e);let n=r?await this.snapshot(r,e=>this.detached(e,o({...t,CODER_PREPARE:`1`})),!0,i.waitUntil).catch(e=>{if(e instanceof B)throw e;console.error(`coder server: snapshot ${r} failed; starting without one`,e)}):void 0,s=e=>this.detached(e,o({...t,CODER_INBOX_SOCKET:l}),{...a?{networkPolicy:a}:{},...i.timeoutMs?{timeout:i.timeoutMs}:{}}),c=n?await s(n).catch(e=>{if(e instanceof B)throw e;return console.error(`coder server: starting from snapshot ${n} failed`,e),s()}):await s();return d({sandbox:c.sandbox,command:c.command})}catch(e){if(!(e instanceof B))throw e;if(r&&e.snapshotId&&this.options.snapshots){let t=e.snapshotId;await this.withSnapshotLock(r,async e=>{let n=await e.get(r);if(n?.snapshotId!==t)return;let{snapshotId:i,sha:a,checkedAt:o,failedAt:s,...c}=n;await e.put(r,c)})}if(n===2)throw e}}}async status(e){let t=P(e);try{let e=await this.sandbox(t.sandbox);if(e.status===`pending`)return{state:`running`};if(e.status!==`running`)return this.sandboxes.delete(t.sandbox),{state:`exited`,code:1};let n=await e.getCommand(t.command);return n.exitCode===null?{state:`running`}:{state:`exited`,code:n.exitCode}}catch(e){throw[404,410].includes(z(e)??0)&&this.sandboxes.delete(t.sandbox),e}}async push(e,t){return this.withSandbox(P(e).sandbox,async e=>{let n=await e.runCommand({cmd:`node`,args:[`-e`,u],detached:!1,env:{CODER_INBOX_MESSAGES:JSON.stringify(t)}}),r=await n.stdout();if(n.exitCode!==0)throw Error(`Sandbox inbox delivery failed`);return JSON.parse(r)})}async stop(e){let t=P(e).sandbox;try{await(await this.sandbox(t)).stop()}finally{this.sandboxes.delete(t)}}};const V=`ghcr.io/muzam1l/coder-runner:latest`;function H(){let e=new URL(`./runner.json`,import.meta.url),{hash:t}=JSON.parse(re(g(e)?e:m.join(n,`dist/runner.json`),`utf8`));if(typeof t!=`string`||!/^[a-f0-9]{64}$/.test(t))throw Error(`The runner package is missing; run bun run build.`);return t}function U(e){return`${e.replace(/\/+$/,``)}/runner/${H()}.tgz`}async function ke(e,t,r){if(r.file!==`${H()}.tgz`)return p();try{let e=new URL(`./runner.tgz`,import.meta.url),t=await se(g(e)?e:m.join(n,`dist/runner.tgz`));return new Response(t,{headers:{"content-type":`application/gzip`,"cache-control":`public, max-age=31536000, immutable`}})}catch(e){if(e.code===`ENOENT`)return p();throw e}}const W=`
26
+ const [file, id] = process.argv.slice(1);
27
+ const lines = require('fs').readFileSync(file, 'utf8').split('\\n').map(line => line.trim()).filter(Boolean);
28
+ const error = 'The machine failed: ' + lines.slice(-6).join(' ').slice(-800);
29
+ const login = process.env.CODER_LOGIN;
30
+ const url = process.env.CODER_SERVER.replace(/\\/+$/, '') + (login ? '/logins/' : '/tasks/') + encodeURIComponent(id) + (login ? '' : '/result');
31
+ fetch(url, {
32
+ method: 'POST', signal: AbortSignal.timeout(10000),
33
+ headers: { authorization: 'Bearer ' + process.env.CODER_TASK_TOKEN, 'content-type': 'application/json' },
34
+ body: JSON.stringify(login ? { error } : { status: 'failed', error, machine: true }),
35
+ }).then(response => { if (!response.ok) process.exitCode = 1; }).catch(() => { process.exitCode = 1; });
36
+ `;function G(e=``,t=``,n=`bun`){let r=[`rm -rf .coder-runner/package && tar -xzf .coder-runner/package.tgz -C .coder-runner`,`mkdir -p .coder-runner/bin`,`printf '#!/bin/sh\nexec ${n} "$(dirname "$0")/../package/bin/coder.mjs" "$@"\n' > .coder-runner/bin/coder`,`chmod +x .coder-runner/bin/coder`].join(` && `),i=`node -e 'const fs=require("fs"),crypto=require("crypto");process.exit(/^[a-f0-9]{64}$/.test(process.env.CODER_RUNNER_HASH||"")&&crypto.createHash("sha256").update(fs.readFileSync(".coder-runner/package.tgz")).digest("hex")===process.env.CODER_RUNNER_HASH?0:1)'`,a=[`mkdir -p .coder-runner`,'curl -fsSL --retry 2 --connect-timeout 10 --max-time 30 "${CODER_RUNNER_TARBALL_URL:?Runner package URL is required}" -o .coder-runner/package.tgz',`{ [ -z "$CODER_RUNNER_HASH" ] || ${i}; }`,r,...e?[e]:[],`printf "%s" "$CODER_RUNNER_HASH" > .coder-runner/hash`].join(` && `),o=`[ -n "$CODER_RUNNER_HASH" ] && [ -f .coder-runner/package.tgz ] && [ "$(cat .coder-runner/hash 2>/dev/null)" = "$CODER_RUNNER_HASH" ] && ${i}`;return[`out=$(mktemp)`,`{ (${[...t?[t]:[],`if ${o}; then ${r}; else ${a}; fi`,`PATH="$PWD/.coder-runner/bin:$PATH" CODER_NO_UPDATE_CHECK=1 ${n} .coder-runner/package/bin/coder.mjs agent run --task "$1"`].join(` && `)}) 2>&1; echo $? >"$out.status"; } | tee "$out"`,`status=$(cat "$out.status")`,`[ "$status" = 0 ] || { [ -n "$CODER_PREPARE" ] || { if command -v node >/dev/null 2>&1; then node -e "$2" "$out" "$1"; else bun -e "$2" "$out" "$1"; fi; }; }`,`rm -f "$out" "$out.status"`,`exit "$status"`].join(`; `)}const Ae=[`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`];function K(e,t=``){return{get:n=>e.get(`snapshot`,`${t}${n}`),put:(n,r)=>e.put(`snapshot`,`${t}${n}`,r,{ttlMs:I}),withLock:(n,r)=>e.withAppLock(`snapshot:${t}${n}`,e=>r({get:n=>e.get(`snapshot`,`${t}${n}`),put:(n,r)=>e.put(`snapshot`,`${t}${n}`,r,{ttlMs:I})}))}}function je(e){let t=e.kind;return e.local===!1&&(t===`local`||t===`local-docker`)?{}:{[t]:q(t,e)}}function q(e,t){let n=t.config??{};if(e===`local`)return new ne(t.workDir);if(e===`local-docker`)return new ge(n);if(e===`vercel-sandbox`)return new Oe({...t.sandbox,...n});if(e===`github-actions`)return new M({...n,...t.fetch?{fetch:t.fetch}:{}});if(typeof n.url!=`string`||typeof n.secret!=`string`)throw Error(`HTTP runner requires a URL and secret`);return new N({url:n.url,secret:n.secret,...t.fetch?{fetch:t.fetch}:{}})}function J(e,t){return e.scope===`workspace`||!!(t&&e.owner===t)}function Y(e){return e.local?`local`:`default`}async function Me(e,t={}){let n=t.runner??t.agent;if(n===Y(e))return{runner:e.config.runner};let r=(await e.store.list(`runner`,{visibleTo:t.requester,...n?{runner:n}:{defaults:!0}})).filter(({value:n})=>J(n,t.requester)&&(e.local||n.kind!==`local`&&n.kind!==`local-docker`)),i=n?r.find(({id:e,value:t})=>e===n||t.name===n):r.find(({value:e})=>e.scope===`personal`&&e.default)??r.find(({value:e})=>e.scope===`workspace`&&e.default);if(n&&!i)throw Error(`Unknown runner "${n}".`);return i?{runner:i.value.kind,runnerId:i.id}:{runner:e.config.runner}}function X(e,t,n){let r={...t.config,...k(e.config,t.secret)};return q(t.kind,{workDir:e.config.workDir,config:r,fetch:e.fetch,sandbox:{...n?{snapshots:K(e.store,`runner:${n}:`)}:{}}})}async function Z(e,t){if(!t.runnerId)return e.runners[t.runner];let n=await e.store.get(`runner`,t.runnerId);if(!n||n.kind!==t.runner||!e.local&&(n.kind===`local`||n.kind===`local-docker`)){e.settings?.runnerInstances?.delete(t.runnerId);return}k(e.config,n.secret);let r=(e.settings??={}).runnerInstances??=new Map,i=JSON.stringify([n.kind,n.config,n.secret]),a=r.get(t.runnerId);return a?.signature!==i&&(a={signature:i,runner:X(e,n,t.runnerId)},r.set(t.runnerId,a)),a.runner}const Q=e=>`runner-deleted:${e}`;async function Ne(e,t,n){if(t.runner!==`http`||!t.runnerId){await(await Z(e,t))?.remove?.(t.id,n);return}let r=t.runnerId;await e.store.withAppLock(`runners:${e.organizationId}`,async e=>{let n=await e.get(`snapshot`,Q(r));await e.put(`snapshot`,Q(r),{deletedTasks:[...n?.deletedTasks??[],t.id]})})}async function Pe(e,t,n=[]){let r=await e.get(`snapshot`,Q(t)),i=(r?.deletedTasks??[]).filter(e=>!n.includes(e));return!r||i.length===r.deletedTasks.length||(i.length?await e.put(`snapshot`,Q(t),{deletedTasks:i}):await e.delete(`snapshot`,Q(t))),i}function Fe(e,t){if(Object.keys(t).some(t=>!e.fields.some(e=>e.key===t)))throw Error(`Unknown runner field`);for(let n of e.fields)if(!n.optional&&!t[n.key]?.trim())throw Error(`${n.label} is required`);if(e.kind===`http`){if(t.secret.length<32)throw Error(`Secret must contain at least 32 characters`);new N({url:t.url,secret:t.secret})}if(e.kind===`github-actions`&&!/^[\w.-]+\/[\w.-]+$/.test(t.repo))throw Error(`Repository must be owner/repo`);if(e.kind===`local-docker`&&t.cpus&&!(Number(t.cpus)>0&&Number.isFinite(Number(t.cpus))))throw Error(`CPUs must be positive`)}var $=class extends Error{};async function Ie(e,t){let n=Date.now(),r=new AbortController,i,a=new Promise((t,n)=>{i=setTimeout(()=>{r.abort(),n(new $(`Runner check timed out`))},e.runnerTimeoutMs??5e3)});try{return{ok:!0,detail:await Promise.race([a,(async()=>{let n=t?.kind??e.config.runner,i=t?{...t.config,...k(e.config,t.secret)}:e.config.runnerConfig??{};if(n===`local`){if(!e.local)throw new $(`Local runners require a local server`);return`This machine is available`}if(n===`http`){let n=t?X(e,t):e.runners.http;if(!(n instanceof N)||!(await n.health(r.signal)).ok)throw new $(`Runner health check failed`);return`Runner is reachable`}if(n===`local-docker`){if(!e.local)throw new $(`Docker runners require a local server`);return await new Promise((t,n)=>{(e.runnerExec??ie)(`docker`,[`info`],{timeout:5e3,signal:r.signal},e=>e?n(new $(`Docker is unavailable`)):t())}),`Docker is available`}let a=async t=>{let n=await(e.fetch??fetch)(t,{signal:r.signal,redirect:`manual`,headers:{authorization:`Bearer ${i.token}`,accept:`application/json`,"user-agent":`coder`}});if(!n.ok)throw new $(`Runner check failed with HTTP ${n.status}`);return n};if(n===`github-actions`){let e=String(i.repo).split(`/`).map(encodeURIComponent).join(`/`);return await a(`https://api.github.com/repos/${e}`),await a(`https://api.github.com/repos/${e}/actions/workflows/${encodeURIComponent(String(i.workflow))}`),`Repository and workflow are accessible`}let o=await(await a(`https://api.vercel.com/v2/teams?limit=100`)).json();if(!Array.isArray(o.teams))throw new $(`Invalid team response`);if(i.team&&!o.teams.some(e=>e.id===i.team||e.slug===i.team))throw new $(`Team is not accessible`);return`Teams are accessible`})()]),ms:Date.now()-n}}catch(e){return{ok:!1,detail:e instanceof $?e.message:`Runner check failed`,ms:Date.now()-n}}finally{clearTimeout(i)}}export{fe as C,E as D,pe as E,me as O,_e as S,de as T,R as _,Q as a,N as b,ke as c,Z as d,Ie as f,xe as g,L as h,je as i,K as l,J as m,Ae as n,Pe as o,Fe as p,Me as r,Ne as s,V as t,Y as u,Se as v,k as w,A as x,be as y};