@wular/coder 0.4.11 → 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 (485) hide show
  1. package/README.md +4 -2
  2. package/dist/actions-D12xDiQS.js +4 -0
  3. package/dist/{adapter-DYxjaefw.js → adapter-Bz0E-DAY.js} +2 -2
  4. package/dist/{adapter-CkL4PqXE.js → adapter-CsacmMmv.js} +1 -1
  5. package/dist/adapter-DzpdWewB.js +1 -0
  6. package/dist/{agent-6GooVMsq.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-BhpnOCbn.js +1 -0
  11. package/dist/base64url-CsVsW4Id.js +1 -0
  12. package/dist/builtin/coder/agent.json +0 -1
  13. package/dist/builtin/coder/system.md +1 -1
  14. package/dist/chat-CSepnsrK.js +13 -0
  15. package/dist/cli.js +19 -1
  16. package/dist/{client-sqXb-y09.js → client-C4QCT6cG.js} +2 -2
  17. package/dist/cmd-BHZwhrfa.js +118 -0
  18. package/dist/connection-BkYTuJjV.js +1 -0
  19. package/dist/context-zhSlmXOp.js +7 -0
  20. package/dist/dash/standalone/node_modules/contextjsx/dist/index.mjs +1 -0
  21. package/dist/dash/standalone/node_modules/contextjsx/dist/jsx-runtime.mjs +1 -0
  22. package/dist/dash/standalone/node_modules/contextjsx/dist/src-BJ0QFeB8.mjs +2 -0
  23. package/dist/dash/standalone/node_modules/contextjsx/package.json +70 -0
  24. package/dist/dash/standalone/server/build-index.json +1 -1
  25. package/dist/dash/standalone/server/manifest.json +1302 -1282
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/turn.6bb73458768e222e.js +129 -0
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.0de14cb4e30bd70d.js → index.de1f1311bab4252f.js} +12 -6
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{defaults.1b615366c56838a1.js → defaults.e972c134a1ae918f.js} +3 -5
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.60308a11f7001eb7.js → log-view.ec6391dbf3063330.js} +40 -48
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.be791a5eaf328738.js → load.30ed8c28774a1a82.js} +4 -4
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.0fbfdba5254f7ae5.js → page.04762872666a6f0a.js} +1 -1
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.70913bd4075da914.js → page.118a70787eff1761.js} +23 -3
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.5f88059c03cf82b4.js → page.d066b77dd3187026.js} +9 -9
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.b7392d534ce0410e.js → layout.b26006f060cd48f0.js} +9 -9
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.5aae24bbfd90c434.js → page.4b23e9df21433bd3.js} +10 -10
  44. 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
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.91c992fdd3b4a493.js → page.4048048acb374c67.js} +35 -23
  46. 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
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.eb707a9e32718374.js → agent-settings-form.ee0bb2dc4d403ec3.js} +9 -9
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.ad1a4c9b000d269a.js → loading.0e3641f3e4abaa7c.js} +1 -1
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.9ec1ec08ba05da59.js → page.649b4ba135ded99b.js} +7 -7
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.dd9088a4581b1d65.js → loading.195e168e8e41d797.js} +1 -1
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.71dc042821133e82.js → page.96f7573208644f40.js} +1 -1
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.8f998a9c511e1fb3.js → loading.905293c9aa9afbc9.js} +2 -2
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.45e18b6dc3019af4.js → page.5f2b8585db8b27ad.js} +4 -4
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.c8d76988c734dda2.js → versions-list.8700f0106f4e8c15.js} +1 -1
  55. 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
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.e3179ddf20a7e55d.js → page.e898c4b5ef16ecb0.js} +7 -7
  57. 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
  58. 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
  59. 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
  60. 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
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.62cb8207218e6437.js → editor.471af698b8060eba.js} +32 -21
  62. 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
  63. 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
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.dffb05f2d256d81a.js → page.880bdac7fe843635.js} +5 -5
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.393cf7429eea189e.js → layout.81f7e055829854a3.js} +5 -5
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.09bf294d753ee9d7.js +115 -0
  67. 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
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.24a1987405ed7b17.js → page.fe608b8e661aba1d.js} +1 -1
  69. 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
  70. 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. 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
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.56520888d5270b88.js → loading.76f851da5cc5268d.js} +5 -5
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.25b29e72df84806b.js → page.ddb594bb6567ee13.js} +6 -6
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.51fbeac76459433a.js +240 -0
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.f2e902c8208b2e78.js → task-view.3276538e8306fd8a.js} +28 -28
  89. 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
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.b0bb1faaac8e0b6c.js → composer.dbf06b05c5e2eba3.js} +9 -9
  91. 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
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.a0c68180db5fb4c1.js → task.f089c1c122ed6dd2.js} +17 -4
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.b52a49fb5faeefd0.js → tasks-list.5a00d69851dae119.js} +37 -22
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.80f9c9a42ecae854.js → tasks-section.36e70c93f7d0feee.js} +7 -7
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.20b5c22658eae312.js → page.185b1ba0c803db3f.js} +4 -4
  96. 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
  97. 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
  98. 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
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.185dbc99875e208a.js → layout.296d70b95894209f.js} +1 -1
  100. 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
  101. 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
  102. 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
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e2915852cf82c86b.js → stream.c32d78562f75db25.js} +1 -1
  104. 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
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.180765bdadf6d602.js → back.d6109e72fbd04b45.js} +2 -2
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.572ad93c7707ab27.js → org.d3abfd4053b711ce.js} +1 -1
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.c1281f9b12854210.js → confirm.29e198be34578222.js} +1 -1
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.3a452a262f040973.js → filter.81bb9a5c60cd1089.js} +1 -1
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.25d53e5b41b9c4e5.js → modal.0b69c7fd9db025b9.js} +1 -1
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.a08dc08338d080e9.js → segmented.633abe26ff760e37.js} +1 -1
  111. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.17cffebfc3103b9f.js → sentinel.0ddf515b8f09ef9f.js} +1 -1
  112. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.66b2e54963f6901b.js → tabs.1600a0b563a5c7dd.js} +1 -1
  113. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.24036899654de6df.js → toolbar.8b3a460a65edf85a.js} +1 -1
  114. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.b9a5c37272250e82.js → action.67dd6f8ab1ae067d.js} +1 -1
  115. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.a3928fa2dcd27b75.js → client.78267fa3d7905d17.js} +1 -1
  116. package/dist/dash/standalone/static/assets/chunks/action-a76e495fb39a73d3.js +1 -0
  117. package/dist/dash/standalone/static/assets/chunks/{agent-pills-bd32cb89331aff7e.js → agent-pills-4d3c6a2aa9eb1522.js} +1 -1
  118. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-f7231a66e391f6b6.js +1 -0
  119. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-a45b95908d62f926.js → agent-toggle-d7d27123f2070f18.js} +1 -1
  120. package/dist/dash/standalone/static/assets/chunks/{agents-grid-9f79b5074899c8be.js → agents-grid-185ecb3d86c6c447.js} +1 -1
  121. package/dist/dash/standalone/static/assets/chunks/{back-b0cd2b85c9d8403e.js → back-e29cb10f5548ddae.js} +1 -1
  122. package/dist/dash/standalone/static/assets/chunks/{combo-1050768988cd0347.js → combo-702c94817bf6ac17.js} +1 -1
  123. package/dist/dash/standalone/static/assets/chunks/composer-56ebf36d63400423.js +1 -0
  124. package/dist/dash/standalone/static/assets/chunks/{composer-87f138e21d68370d.js → composer-a686289a79f64bae.js} +1 -1
  125. package/dist/dash/standalone/static/assets/chunks/composer-data-f46a9bc7a14b4f9a.js +1 -0
  126. package/dist/dash/standalone/static/assets/chunks/{confirm-01d5814b1c5f7721.js → confirm-a78147b6ecef3847.js} +1 -1
  127. package/dist/dash/standalone/static/assets/chunks/connect-apps-696726aedab42c96.js +1 -0
  128. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-49098298b3a82647.js → connect-repositories-7770ab805160028d.js} +1 -1
  129. package/dist/dash/standalone/static/assets/chunks/connections-list-07559f145f3e3da3.js +1 -0
  130. package/dist/dash/standalone/static/assets/chunks/{copy-5db9d328f8f65d82.js → copy-bdc60bdafe336316.js} +1 -1
  131. package/dist/dash/standalone/static/assets/chunks/create-link-426b0a5871ee41dd.js +1 -0
  132. package/dist/dash/standalone/static/assets/chunks/credentials-list-f07d090410104148.js +1 -0
  133. package/dist/dash/standalone/static/assets/chunks/{custom-range-fdf1946aac09cfc3.js → custom-range-6618f32ef6cd4e80.js} +1 -1
  134. package/dist/dash/standalone/static/assets/chunks/editor-0860e370cbfc6b03.js +6 -0
  135. package/dist/dash/standalone/static/assets/chunks/engines-list-31b9bb7885924b05.js +1 -0
  136. package/dist/dash/standalone/static/assets/chunks/{field-c530e261587d94df.js → field-bb8191aa02d07282.js} +1 -1
  137. package/dist/dash/standalone/static/assets/chunks/instructions-06b63e558f879da5.js +1 -0
  138. package/dist/dash/standalone/static/assets/chunks/{instructions-3ea5afeea1992bf2.js → instructions-2d9fbcbfadac4f40.js} +1 -1
  139. package/dist/dash/standalone/static/assets/chunks/list-2773686bf8df64c7.js +1 -0
  140. package/dist/dash/standalone/static/assets/chunks/models-list-03611e64b6a07efe.js +1 -0
  141. package/dist/dash/standalone/static/assets/chunks/{notice-8939183c8a889bae.js → notice-d14fdac28139c0a8.js} +1 -1
  142. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-d3ba8ef89c59f801.js +1 -0
  143. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-6323cb5300b6d3c9.js → outcome-dialog-fde11a52c282301d.js} +1 -1
  144. package/dist/dash/standalone/static/assets/chunks/platform-actions-2a71c62b9f7eaef3.js +1 -0
  145. package/dist/dash/standalone/static/assets/chunks/platform-actions-70600c9943320152.js +1 -0
  146. package/dist/dash/standalone/static/assets/chunks/runners-list-edf536eb8003eab5.js +1 -0
  147. package/dist/dash/standalone/static/assets/chunks/{runtime-71b727f8f5906f08-1.js → runtime-6e12333f12903a62-1.js} +1 -1
  148. package/dist/dash/standalone/static/assets/chunks/secrets-list-e86122f73525ff95.js +1 -0
  149. package/dist/dash/standalone/static/assets/chunks/segmented-0b6dc6b93c35e0f5.js +1 -0
  150. package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +1 -0
  151. package/dist/dash/standalone/static/assets/chunks/shared-init-b281027d465e004f.js +5 -0
  152. package/dist/dash/standalone/static/assets/chunks/shared-init-c3bd249cf1eca6d1.js +2 -0
  153. package/dist/dash/standalone/static/assets/chunks/side-toggle-9b3af821cfe4c824.js +1 -0
  154. package/dist/dash/standalone/static/assets/chunks/{tail-81b69d49bfebfd4c.js → tail-f8804b80cf32f8d0.js} +1 -1
  155. package/dist/dash/standalone/static/assets/chunks/task-a37e7c26e82eb77d.js +1 -0
  156. package/dist/dash/standalone/static/assets/chunks/task-actions-705395565f2d83b8.js +1 -0
  157. package/dist/dash/standalone/static/assets/chunks/task-view-cb21169f38b56d15.js +6 -0
  158. package/dist/dash/standalone/static/assets/chunks/tasks-list-d7dccfd7e0623ae0.js +1 -0
  159. package/dist/dash/standalone/static/assets/chunks/{versions-list-fbeed95c0b4e5f0f.js → versions-list-f8f2e71df691efda.js} +1 -1
  160. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-71b727f8f5906f08-0.js → wular-pnext-6e12333f12903a62-0.js} +1 -1
  161. package/dist/dash/standalone/static/assets/create-param-id-c2c756f652f2fc30.css +1 -0
  162. package/dist/dash/standalone/static/assets/{dash-param-org-account-9471bec93c444232.css → dash-param-org-account-702f8a1b213e4026.css} +1 -1
  163. package/dist/dash/standalone/static/assets/dash-param-org-agents-aad2f9f93c06e9ab.css +1 -0
  164. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-f9dcbcec36586f2b.css +1 -0
  165. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-8ff47f5d622c1f9b.css +1 -0
  166. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-907036d553cfeb36.css +1 -0
  167. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cc77badad15f00c.css +1 -0
  168. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-705d7c15868b4fd6.css +1 -0
  169. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-04e189c045098772.css +1 -0
  170. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-76fcd1ce7b3dae71.css +1 -0
  171. package/dist/dash/standalone/static/assets/{dash-param-org-bcfa3de29341d5ba.css → dash-param-org-eccb6bb9297a53e6.css} +1 -1
  172. package/dist/dash/standalone/static/assets/dash-param-org-operator-635a121f7a9a95bd.css +1 -0
  173. package/dist/dash/standalone/static/assets/{dash-param-org-settings-6d6902345d88a687.css → dash-param-org-settings-a3297dc4d9e0c961.css} +1 -1
  174. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-bcb06f81d9e8268d.css +1 -0
  175. package/dist/dash/standalone/static/assets/{dash-param-org-setup-173efecd7b990c2e.css → dash-param-org-setup-df4be8b188b9777f.css} +1 -1
  176. package/dist/dash/standalone/static/assets/dash-param-org-tasks-16f9866a1b4801cd.css +1 -0
  177. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-02ae551dcd852b57.css +1 -0
  178. package/dist/dash/standalone/static/assets/dash-param-org-usage-f2175403069aab99.css +1 -0
  179. package/dist/dash/standalone/static/assets/{global-87e1762113874559.css → global-e1de614478b64717.css} +1 -1
  180. package/dist/dash/standalone/static/assets/pnext-client-0dc829ba60df5c26.js +1 -0
  181. package/dist/dash/standalone/static/assets/pnext-client-14d191f7f1da6602.js +1 -0
  182. package/dist/dash/standalone/static/assets/pnext-client-169eaa63783b71fd.js +1 -0
  183. package/dist/dash/standalone/static/assets/pnext-client-1e34cfefafa70fac.js +1 -0
  184. package/dist/dash/standalone/static/assets/pnext-client-285d61f00a80f40b.js +1 -0
  185. package/dist/dash/standalone/static/assets/pnext-client-35b89c3ba23ee845.js +1 -0
  186. package/dist/dash/standalone/static/assets/pnext-client-6c42784e005d4b87.js +1 -0
  187. package/dist/dash/standalone/static/assets/pnext-client-6cd93f9bd4cf6ffd.js +1 -0
  188. package/dist/dash/standalone/static/assets/pnext-client-7355f473fade532d.js +1 -0
  189. package/dist/dash/standalone/static/assets/pnext-client-815c3c297f75efb0.js +1 -0
  190. package/dist/dash/standalone/static/assets/pnext-client-87fe73c10a4dc33c.js +1 -0
  191. package/dist/dash/standalone/static/assets/pnext-client-98b56a142d441260.js +1 -0
  192. package/dist/dash/standalone/static/assets/pnext-client-b4bafe68a40f720b.js +1 -0
  193. package/dist/dash/standalone/static/assets/pnext-client-bf61ff39bdc0db48.js +1 -0
  194. package/dist/dash/standalone/static/assets/pnext-client-c9fa86c244813f74.js +1 -0
  195. package/dist/dash/standalone/static/assets/pnext-client-d2e7a75e16221224.js +1 -0
  196. package/dist/dash/standalone/static/assets/pnext-client-d34e774405ea8da8.js +1 -0
  197. package/dist/dash/standalone/static/assets/pnext-client-d511822afdb41d1d.js +1 -0
  198. package/dist/dash/standalone/static/assets/pnext-client-e113aa2f25ecfe01.js +1 -0
  199. package/dist/dash/standalone/static/assets/{pnext-client-e4c659a371f4cd79.js → pnext-client-eb62f461d0c32266.js} +1 -1
  200. package/dist/discover-CHfF4cEz.js +1 -0
  201. package/dist/docs-KHc0_gFX.js +2 -0
  202. package/dist/drive-Bwl7Bjme.js +1 -0
  203. package/dist/emit-BrkJJPUE.js +11 -0
  204. package/dist/env-6Y-NNnYD.js +1 -0
  205. package/dist/errors-DO_IltpP.js +16 -0
  206. package/dist/exec-BmTa0vcO.js +4 -0
  207. package/dist/executor-ufWRqhdS.js +11 -0
  208. package/dist/flow/builtin/review/index.d.ts +2 -0
  209. package/dist/flow/builtin/review/index.js +16 -0
  210. package/dist/flow/index.d.ts +1 -1
  211. package/dist/flow/index.js +1 -1
  212. package/dist/hook-CIipj9MJ.js +1 -0
  213. package/dist/http-Cg8PSe-c.js +1 -0
  214. package/dist/{types-C6NAqGqn.d.ts → index-ChcxzFdB.d.ts} +734 -285
  215. package/dist/integrations-I7fRDk_l.js +4 -0
  216. package/dist/lib/broker.js +2 -2
  217. package/dist/load-BDlEFetB.js +2 -0
  218. package/dist/local-COlczLwI.js +5 -0
  219. package/dist/log-view-CfX9lakH.js +4 -0
  220. package/dist/maintenance-CKCIWOvn.js +1 -0
  221. package/dist/{match-BwcxeAZF.js → match-CufHAZQH.js} +1 -1
  222. package/dist/mcp-BkwmRHI9.js +2 -0
  223. package/dist/mcp-CGU7aoJ-.js +1 -0
  224. package/dist/mcp-DAHbhfUh.js +13 -0
  225. package/dist/models-CzggS7p2.js +1 -0
  226. package/dist/output-SNqdgh9A.js +17 -0
  227. package/dist/permission-MWFjKxqX.js +1 -0
  228. package/dist/prompt-CIx4jwQF.js +8 -0
  229. package/dist/refresh-CxsaX5R9.js +1 -0
  230. package/dist/remote-C9Hj2cby.js +2 -0
  231. package/dist/remote-HUZCWgfl.js +3 -0
  232. package/dist/runner-DYysY1-G.js +1 -0
  233. package/dist/runner.json +1 -1
  234. package/dist/runner.tgz +0 -0
  235. package/dist/runners-CfaGE0nV.js +36 -0
  236. package/dist/schema.d.ts +1 -1
  237. package/dist/schema.js +8 -1
  238. package/dist/sdk.d.ts +12733 -4
  239. package/dist/sdk.js +1 -1
  240. package/dist/serve-DdAdw7Su.js +4 -0
  241. package/dist/serve-NQykWAKV.js +1 -0
  242. package/dist/serve-vKNqVaVy.js +12 -0
  243. package/dist/slack-BtKvW_4v.js +5 -0
  244. package/dist/task-CFxs0E_J.js +1 -0
  245. package/dist/task-iuYQ0zAK.js +7 -0
  246. package/dist/tools-B6ZxcqRi.js +2 -0
  247. package/dist/tools-FVop8XYG.js +1 -0
  248. package/dist/tools-search-kjKKolwp.js +1 -0
  249. package/dist/turn-DQ13lkPF.js +2 -0
  250. package/dist/types-DPtbvoo3.js +1 -0
  251. package/dist/types-DmThhjcW.js +1 -0
  252. package/dist/views-CMHXBMJp.js +3 -0
  253. package/dist/{wire-nJ7sEi-M.js → wire-C9CupY_A.js} +1 -1
  254. package/dist/worker-BQpx1dPr.js +9 -0
  255. package/dist/worker-sTJL2eoe.js +1 -0
  256. package/docs/access.md +33 -0
  257. package/docs/agents/coder.md +0 -11
  258. package/docs/agents/index.md +18 -20
  259. package/docs/cli/agent.md +137 -0
  260. package/docs/cli/auth.md +48 -0
  261. package/docs/cli/connection.md +89 -0
  262. package/docs/cli/credentials.md +58 -0
  263. package/docs/cli/flow.md +158 -0
  264. package/docs/cli/index.md +139 -0
  265. package/docs/cli/model.md +118 -0
  266. package/docs/cli/runner.md +92 -0
  267. package/docs/cli/server.md +89 -0
  268. package/docs/cli/task.md +273 -0
  269. package/docs/config.md +5 -15
  270. package/docs/flows.md +1 -7
  271. package/docs/mcp.md +8 -8
  272. package/docs/models.md +7 -6
  273. package/docs/review.md +4 -0
  274. package/docs/sdk.md +29 -29
  275. package/docs/self-host.md +25 -25
  276. package/package.json +3 -1
  277. package/plugins/agents/skills/coder/SKILL.md +16 -1
  278. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  279. package/plugins/claude/.mcp.json +5 -0
  280. package/plugins/claude/skills/dispatch/SKILL.md +16 -1
  281. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  282. package/plugins/cursor/skills/coder/SKILL.md +16 -1
  283. package/dist/actions-Cwe3IDVs.js +0 -2
  284. package/dist/adapter-Bi768A94.js +0 -1
  285. package/dist/add-B6vPKZEr.js +0 -1
  286. package/dist/add-n6c9OINP.js +0 -2
  287. package/dist/add-v1Pv00HX.js +0 -1
  288. package/dist/add-wC8ByRgM.js +0 -6
  289. package/dist/agent-BkxXgha0.js +0 -1
  290. package/dist/alias-A8ObWElH.js +0 -2
  291. package/dist/app-CaxTL1H3.js +0 -1
  292. package/dist/approvals-h5lytkey.js +0 -2
  293. package/dist/approve-BNhg0MLi.js +0 -2
  294. package/dist/approve-BiHM8kSo.js +0 -1
  295. package/dist/apps-BNe86LfS.js +0 -367
  296. package/dist/archive-CMHRsVYf.js +0 -4
  297. package/dist/archive-H2B7Me8E.js +0 -3
  298. package/dist/args-CURX44CA.js +0 -1
  299. package/dist/ask-D8TIVhPl.js +0 -4
  300. package/dist/auth-BSMPjhnz.js +0 -1
  301. package/dist/auth-D3quZAKT.js +0 -1
  302. package/dist/chat-3AvUDOwf.js +0 -13
  303. package/dist/chat-bridge-BmqYsASZ.js +0 -2
  304. package/dist/cli-BBlH53hA.js +0 -9
  305. package/dist/config-K6Rrjsee.js +0 -3
  306. package/dist/connection-B-IB8tlP.js +0 -1
  307. package/dist/connection-BXBDeoax.js +0 -1
  308. package/dist/create-CP_JmJnh.js +0 -1
  309. package/dist/credentials-BRFajC0d.js +0 -1
  310. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/event-prompt.87f064ca0141e796.js +0 -30
  311. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a244f3199e7cf09c.js +0 -144
  312. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.587da79d68ab8d14.js +0 -151
  313. package/dist/dash/standalone/static/assets/chunks/action-fc8716cda7527d8c.js +0 -1
  314. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-f5576a2c50fce094.js +0 -1
  315. package/dist/dash/standalone/static/assets/chunks/composer-8f0e8b1d07e74aad.js +0 -1
  316. package/dist/dash/standalone/static/assets/chunks/composer-data-5fed6c271a4791ca.js +0 -1
  317. package/dist/dash/standalone/static/assets/chunks/connect-apps-857dc9fa3f6f5bbc.js +0 -1
  318. package/dist/dash/standalone/static/assets/chunks/connections-list-46d48443d8fc8a0d.js +0 -1
  319. package/dist/dash/standalone/static/assets/chunks/create-link-6b6e9eeac436c4af.js +0 -1
  320. package/dist/dash/standalone/static/assets/chunks/credentials-list-3cccc85ef335cb22.js +0 -1
  321. package/dist/dash/standalone/static/assets/chunks/defaults-52f30e83d7666f7a.js +0 -1
  322. package/dist/dash/standalone/static/assets/chunks/editor-d2460c315bb1fd32.js +0 -6
  323. package/dist/dash/standalone/static/assets/chunks/engines-list-0159c8baa0b3e711.js +0 -1
  324. package/dist/dash/standalone/static/assets/chunks/instructions-d8884576a18e6cdb.js +0 -1
  325. package/dist/dash/standalone/static/assets/chunks/list-b67ce61483dd6acb.js +0 -1
  326. package/dist/dash/standalone/static/assets/chunks/models-list-98c956ba00913a73.js +0 -1
  327. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-be3fbe8c4b43d180.js +0 -1
  328. package/dist/dash/standalone/static/assets/chunks/platform-actions-aafbf038008de64f.js +0 -1
  329. package/dist/dash/standalone/static/assets/chunks/platform-actions-ed27388f722b4a4c.js +0 -1
  330. package/dist/dash/standalone/static/assets/chunks/runners-list-a13d0f8f6583c6d2.js +0 -1
  331. package/dist/dash/standalone/static/assets/chunks/secrets-list-53a0c079492199c9.js +0 -1
  332. package/dist/dash/standalone/static/assets/chunks/segmented-a3642b8169857fb1.js +0 -1
  333. package/dist/dash/standalone/static/assets/chunks/shared-init-6cad28f8cc696d91.js +0 -2
  334. package/dist/dash/standalone/static/assets/chunks/shared-init-71b727f8f5906f08-2.js +0 -1
  335. package/dist/dash/standalone/static/assets/chunks/shared-init-94883db7bc70a5a8.js +0 -5
  336. package/dist/dash/standalone/static/assets/chunks/side-toggle-a2f67a8671a0309b.js +0 -1
  337. package/dist/dash/standalone/static/assets/chunks/task-95daa40d39de664f.js +0 -1
  338. package/dist/dash/standalone/static/assets/chunks/task-actions-25c70b47b5a53cd2.js +0 -1
  339. package/dist/dash/standalone/static/assets/chunks/task-view-e5ee0ada38552918.js +0 -5
  340. package/dist/dash/standalone/static/assets/chunks/tasks-list-d58f3063ae31d9d2.js +0 -1
  341. package/dist/dash/standalone/static/assets/create-param-id-da3f7e20689fe51a.css +0 -1
  342. package/dist/dash/standalone/static/assets/dash-param-org-agents-64500e78caae32df.css +0 -1
  343. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-c067c22928a2d7cc.css +0 -1
  344. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-9dec87710e04f949.css +0 -1
  345. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-779c474301e04440.css +0 -1
  346. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-c7d594b5232630c2.css +0 -1
  347. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-a80e62570716fdb9.css +0 -1
  348. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-ce278252012297b9.css +0 -1
  349. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-d3b6d701eb8e1403.css +0 -1
  350. package/dist/dash/standalone/static/assets/dash-param-org-operator-b7bc6447cc27c9ce.css +0 -1
  351. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-85c7af9a89eef06e.css +0 -1
  352. package/dist/dash/standalone/static/assets/dash-param-org-tasks-ae0bc03f468e63cc.css +0 -1
  353. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-7325d8cff5be3592.css +0 -1
  354. package/dist/dash/standalone/static/assets/dash-param-org-usage-517b2a7ae462ac57.css +0 -1
  355. package/dist/dash/standalone/static/assets/pnext-client-037852a9f274c8c8.js +0 -1
  356. package/dist/dash/standalone/static/assets/pnext-client-10eac8df53f62104.js +0 -1
  357. package/dist/dash/standalone/static/assets/pnext-client-12635905e9754177.js +0 -1
  358. package/dist/dash/standalone/static/assets/pnext-client-12955733c71cc641.js +0 -1
  359. package/dist/dash/standalone/static/assets/pnext-client-26999113ea61d5b9.js +0 -1
  360. package/dist/dash/standalone/static/assets/pnext-client-27b6e4b7d1697094.js +0 -1
  361. package/dist/dash/standalone/static/assets/pnext-client-34fec171024dd082.js +0 -1
  362. package/dist/dash/standalone/static/assets/pnext-client-44eb6d4096f7e875.js +0 -1
  363. package/dist/dash/standalone/static/assets/pnext-client-4c558a168b95d9b1.js +0 -1
  364. package/dist/dash/standalone/static/assets/pnext-client-5d21f3dd3f4407af.js +0 -1
  365. package/dist/dash/standalone/static/assets/pnext-client-5fe04a4e1dff28a3.js +0 -1
  366. package/dist/dash/standalone/static/assets/pnext-client-88bbc009041aa776.js +0 -1
  367. package/dist/dash/standalone/static/assets/pnext-client-b36106c6b8a6cd35.js +0 -1
  368. package/dist/dash/standalone/static/assets/pnext-client-b47dda1cd4cfac04.js +0 -1
  369. package/dist/dash/standalone/static/assets/pnext-client-b556f5611fdcf545.js +0 -1
  370. package/dist/dash/standalone/static/assets/pnext-client-b8485144ca29d436.js +0 -1
  371. package/dist/dash/standalone/static/assets/pnext-client-c5c3c90b3518c5a8.js +0 -1
  372. package/dist/dash/standalone/static/assets/pnext-client-f139547dc55d7d76.js +0 -1
  373. package/dist/dash/standalone/static/assets/pnext-client-fd280710b31af681.js +0 -1
  374. package/dist/default-Ojx5oFuw.js +0 -1
  375. package/dist/delete-D1hEPpsk.js +0 -2
  376. package/dist/delete-UyzcQPoG.js +0 -4
  377. package/dist/disable-Dml_Slph.js +0 -1
  378. package/dist/discover-CyIfIBGD.js +0 -3
  379. package/dist/dispatch-CFZ9Crvg.js +0 -8
  380. package/dist/docs-BUHKbQjM.js +0 -2
  381. package/dist/docs-CvjWiada.js +0 -2
  382. package/dist/drive-BqunNi9n.js +0 -1
  383. package/dist/enable-xye-Nanc.js +0 -1
  384. package/dist/env-BgE9ipvN.js +0 -1
  385. package/dist/exec-Cprez703.js +0 -3
  386. package/dist/executor-3QMa-XRY.js +0 -11
  387. package/dist/flow/builtin/review.d.ts +0 -2
  388. package/dist/flow/builtin/review.js +0 -12
  389. package/dist/flow-CtillCQY.js +0 -1
  390. package/dist/history-C53URBjs.js +0 -8
  391. package/dist/http-CDZKt5ln.js +0 -1
  392. package/dist/hub-B0WCXtsP.js +0 -2
  393. package/dist/init-HdSVUozH.js +0 -1
  394. package/dist/integrations-BdLs4W6o.js +0 -1
  395. package/dist/integrations-IGnXBrPw.js +0 -2
  396. package/dist/list-1IMeVNg3.js +0 -1
  397. package/dist/list-BTjIMvNs.js +0 -1
  398. package/dist/list-BlOB32n6.js +0 -4
  399. package/dist/list-CZGTVKcS.js +0 -4
  400. package/dist/list-CquHtsmW.js +0 -3
  401. package/dist/list-CxjPT0Il.js +0 -1
  402. package/dist/list-DvFVuGT_.js +0 -1
  403. package/dist/list-gFnOS9Hk.js +0 -2
  404. package/dist/load-Q9fL4VC6.js +0 -2
  405. package/dist/local-Bzdmzc1o.js +0 -5
  406. package/dist/log-view-CL3_S0IQ.js +0 -3
  407. package/dist/login-C723kHh6.js +0 -1
  408. package/dist/login-Dq3r6gh6.js +0 -1
  409. package/dist/logout-DEg0aTmq.js +0 -1
  410. package/dist/maintenance-DYOstY6V.js +0 -1
  411. package/dist/mcp-CKqinFkk.js +0 -1
  412. package/dist/mcp-Dsl3Xdd3.js +0 -13
  413. package/dist/mcp-server-BlP9lACI.js +0 -1
  414. package/dist/model-Bs27g5EX.js +0 -1
  415. package/dist/models-Cb0ZTKZ7.js +0 -1
  416. package/dist/output-BKeyLbvt.js +0 -5
  417. package/dist/prompt-PEgcMJO7.js +0 -8
  418. package/dist/prompts-Bj4Fbd_n.js +0 -78
  419. package/dist/push-DpEW4XbQ.js +0 -1
  420. package/dist/reconnect-BmP_XXDv.js +0 -1
  421. package/dist/refresh-SHNJq9Cx.js +0 -1
  422. package/dist/remote-D3JZ4MMQ.js +0 -3
  423. package/dist/remove-BZZgJq8Z.js +0 -1
  424. package/dist/remove-CId1EwPg.js +0 -1
  425. package/dist/remove-Ci87WQq0.js +0 -1
  426. package/dist/remove-DxCv9BB4.js +0 -1
  427. package/dist/rename-DJaf5SwH.js +0 -1
  428. package/dist/result-BesDQ-b1.js +0 -5
  429. package/dist/result-D0dpv2O_.js +0 -18
  430. package/dist/resume-2Y0uC5MM.js +0 -3
  431. package/dist/review-DIm9oK_W.js +0 -7
  432. package/dist/review-Dxs-idTn.d.ts +0 -566
  433. package/dist/rotate-key-CS1G6ReH.js +0 -1
  434. package/dist/run-BKUd6B8S.js +0 -2
  435. package/dist/run-DjTTb8oA.js +0 -5
  436. package/dist/run-UPW-7pKo.js +0 -2
  437. package/dist/runner-BLS_ReEw.js +0 -1
  438. package/dist/runner-BM_98EQl.js +0 -1
  439. package/dist/runners-DyLnqHKy.js +0 -36
  440. package/dist/schema-CjHmulYJ.js +0 -8
  441. package/dist/sdk-B4Cl0Hbw.d.ts +0 -12551
  442. package/dist/serve-BApfeXk8.js +0 -12
  443. package/dist/serve-DE1cKoGa.js +0 -1
  444. package/dist/serve-lF97RlpX.js +0 -2
  445. package/dist/serve-mXTjboT1.js +0 -1
  446. package/dist/server-CUsxAflx.js +0 -1
  447. package/dist/setup-host-tlsilI6C.js +0 -6
  448. package/dist/show-Dn7zTz-9.js +0 -1
  449. package/dist/show-uyUpeqa9.js +0 -1
  450. package/dist/slack-DhPhLuWb.js +0 -5
  451. package/dist/status-D_1VGn9F.js +0 -1
  452. package/dist/steer-CMp-a7v2.js +0 -4
  453. package/dist/stop-C7YjN2sB.js +0 -1
  454. package/dist/stop-D8G7AtdY.js +0 -3
  455. package/dist/task-DJ6nruuA.js +0 -1
  456. package/dist/task-DeFLNmQH.js +0 -1
  457. package/dist/task-bkoi8_NN.js +0 -7
  458. package/dist/test-BD9rvefN.js +0 -1
  459. package/dist/tools-CdWkwI1g.js +0 -1
  460. package/dist/types-D_xnfP7m.js +0 -1
  461. package/dist/unalias-bL5t8Isc.js +0 -1
  462. package/dist/update-DIYW08ME.js +0 -2
  463. package/dist/upgrade-3fH6dGJw.js +0 -2
  464. package/dist/usage-Dr8F0xt0.js +0 -1
  465. package/dist/views-CE2d9x6T.js +0 -5
  466. package/dist/watch-BiyN4NxE.js +0 -5
  467. package/dist/watch-DJXu13jK.js +0 -9
  468. package/dist/worker-CHD_OiQS.js +0 -1
  469. package/dist/worker-KfrTK_Dk.js +0 -2
  470. package/dist/workflow-C21qQ4rT.js +0 -1
  471. package/docs/agents/prompt.md +0 -231
  472. package/docs/cli.md +0 -155
  473. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.0a735590a5412ea6.js → errors.1bd0542d832ae0c0.js} +0 -0
  474. /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
  475. /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
  476. /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
  477. /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
  478. /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
  479. /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
  480. /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
  481. /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
  482. /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
  483. /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
  484. /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
  485. /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
@@ -1,3 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{Bn as t,Jt as n,Pt as r,Qn as i,S as a,Vt as o,W as s,Xn as c,c as l,fn as u,l as d,lr as f,mt as p,nn as m,p as h,pr as g,pt as _,s as v,un as y,wt as b}from"./prompts-Bj4Fbd_n.js";import{B as x,I as S,U as C,c as w,d as ee,l as te,n as T,p as E,r as ne,s as D}from"./dispatch-CFZ9Crvg.js";import{d as O,l as k,m as A,o as j,u as M}from"./load-Q9fL4VC6.js";import{t as N}from"./integrations-IGnXBrPw.js";import{i as P}from"./dist-DAnSqY1s.js";import{a as F,s as I}from"./actions-Cwe3IDVs.js";import{r as L}from"./executor-3QMa-XRY.js";import{REVIEW_PLATFORM as R,postReview as z,resolveReviewTarget as re}from"./flow/builtin/review.js";import{a as ie,o as ae,s as B,u as V}from"./mcp-Dsl3Xdd3.js";import H from"node:path";import U from"node:process";import{readFileSync as oe,readdirSync as se,realpathSync as ce,writeFileSync as le}from"node:fs";import W from"node:fs/promises";var ue=e({AGENT_TASK_PREFIX:()=>G,agentDeveloperInstructions:()=>Se,agentInstructions:()=>Ce,agentTaskOptions:()=>xe,builtinArgs:()=>ye,builtinTaskArgs:()=>_e,defaultTask:()=>Te,execAgent:()=>ge,isConversation:()=>$,localAgentAccess:()=>be,postReply:()=>Y,postReplyParts:()=>J,postTurnReply:()=>X,reactToMessage:()=>me,replyParts:()=>fe,startAgentMailbox:()=>Ee,taskFromEvent:()=>K,threadReply:()=>q,waitForAgentTask:()=>Z});const G=`agent:`;function K(e,t,n){let r=N[n.integration];return{id:`local-${n.deliveryId}-${e.id}`,source:n.integration,agent:e.id,flow:t,runner:`local`,event:n,definition:e.definition,...e.usage?{usage:e.usage}:{},tools:r?{[n.integration]:r.tools.presets[k(e)]}:{}}}function de(e){return e.normalize(`NFKC`).toLowerCase().replace(/[“”„‟«»‘’‚‛"'`]/g,``).replace(/[‐‑‒–—―−]/g,`-`).replace(/[.!?,;:…]+(?=\s|$)/g,``).replace(/\s+/g,` `).trim()}function q(e,t,n,r){let i=t?.finalMessage?.trim(),a=e.event&&N[e.event.integration]?.progressReplies,o=r?.lastReply?.trim();if(i&&i.replace(/^`+|`+$/g,``).trim()!==`__EMPTY__`&&!t?.error)return{text:i,problem:!1,...!a&&o&&de(i)===de(o)?{duplicate:!0}:{}};let s=t?.error?.message?.trim()??``;if(t?.error&&o&&!a)return{text:``,problem:!0,duplicate:!0};if(n)return{text:s,problem:!1};if(t&&!t.error){if(a&&o)return{text:o,problem:!1};if(r?.lastReply?.trim()||V(r?.prompt,e.context?.mustReply??e.event?.mustReply,r?.steers)===!1)return{text:``,problem:!1,skipped:!0};let t=e.taskUrl?` [See the task](${e.taskUrl})`:``;return{text:`${_}${t}`,problem:!1}}return{text:e.failureReply??s,problem:!0}}function fe(e,t){if(!t||e.length<=t)return[e];let n=[],r=``,i=!1,a=()=>{r.trim()&&n.push(r.trimEnd()),r=``};for(let o of e.split(/\n\n/)){r&&!i&&`${r}\n\n${o}`.length>t&&a();let e=r?`${r}\n\n${o}`:o;for(;e.length>t;){let r=e.lastIndexOf(`
2
- `,t),i=r>0?r:t;n.push(e.slice(0,i).trimEnd()),e=e.slice(i).replace(/^\n/,``)}r=e,(o.match(/^```/gm)??[]).length%2==1&&(i=!i)}return a(),n}async function J(e,t,n,r,i=!1){let a=[],o=i&&e.adapter.postProgress;for(let i of fe(t,n))a.push(o?await o.call(e.adapter,e.id,i):r&&e.adapter.reply?await e.reply(r,{markdown:i}):await e.post({markdown:i}));return a}async function Y(e,t,n,r,i=e.id,a=!1,o=!1,s){let c=s??await pe(e,t,r,i),l=c.adapter,u=l.postProblem;if(a&&u){let e=(await u.call(l,c.id,n))?.id;return e?[e]:[]}return(await J(c,n,e.replyLimit,t.chat?.message?.id,o)).flatMap(e=>e.id?[e.id]:[])}async function X(e,t,n,r){let i=H.join(m(e,t),`post-${n}.json`),a=f(i);if(a)return a;le(i,`null`,{flag:`wx`});let o=await r();return g(i,o),o}async function pe(e,t,n,r){if(!t.chat)throw Error(`The ${t.integration} event has no conversation`);let[{Chat:i},{LocalChatState:a}]=await Promise.all([import(`./dist-DAnSqY1s.js`).then(e=>e.a),import(`./chat-bwKd3y6V.js`).then(e=>e.r)]),o=await e.adapter({fetch,appId:t.appId.slice(e.id.length+1),name:r,installationId:t.installationId,token:async()=>n,privateState:()=>new a}),s=new i({userName:r,adapters:{[e.id]:o},state:new a,logger:`error`});return await s.initialize(),s.thread(t.chat.thread.id)}async function me(e,t,n){if(!n)throw Error(`This turn has no message to react to; give a message id`);let r=P.fromSlack(P.fromGChat(t).name);await e.adapter.addReaction(e.id,n,r)}function he(e,t){return Object.fromEntries(Object.keys(e.tools).map(n=>[n,t[ae(n)]??(n===e.event?.integration?t.APP_TOKEN:void 0)]))}async function ge(e){let{cwd:i,flow:c}=e,l=s(i),d=await j(i,N),f=e.task;!f&&e.taskFile&&(f={...JSON.parse(await W.readFile(H.resolve(i,e.taskFile),`utf8`)),flow:c});let h=d.find(t=>t.id===e.agent);if(f&&(h={id:f.agent,name:f.definition.name??f.agent,definition:A(f.agent,f.definition),...f.usage?{usage:f.usage}:{},...f.files?{files:f.files}:{},builtin:!1}),!h)throw Error(`No agent named "${e.agent}".`);f??=await ve(i,h,c,e);let _=f.event,v=_&&N[_.integration];if(_&&!v)throw Error(`Unknown integration "${_.integration}".`);let y=t(e.connections??{},e.connectionEnv),x=ie(f,e.toolEnvironment?.tokens??he(f,U.env),e.replyEndpoint,e.toolEnvironment?.native);if(c==="default"){let t=e.post!==!1&&!!v,a=e.postToken??U.env.APP_TOKEN,s=t?pe(v,_,a,f.author??v.id):void 0;s?.catch(()=>{});let d=Te(h,f),S=e.resumeTaskId&&o(i,e.resumeTaskId)?.engine,T=w(S&&S!==O(h).engine?{engine:S}:O(h),l),D=te(f.mcp?.join(`,`),l.mcp,h.definition.mcp,y.mcp),k=[...Object.values(x.mcp),...D.mcp],A=e.resumeTurn??(e.resumeTaskId?n(i,e.resumeTaskId).length:0),j,M=e.resumeTaskId??e.taskId??r(),N=f.engineChain??[T.engine],P=Math.max(0,N.indexOf(T.engine)),F=!1;for(let e of N.slice(0,P))b(i,M,{kind:`warning`,message:`${e} skipped because no applicable credential is connected`});let I,L;for(;;){let t=N[P];T=w(F?{engine:t}:{...O(h),engine:t},l);let r=!1;try{if(await e.onEngine?.(t)===!1)throw new C(`chain-exhausted`,`No applicable credential is connected for ${t}`);F&&u(i,M,{status:`queued`,pid:null,threadId:null,resumeThreadId:null,resumedAt:new Date().toISOString(),error:void 0,completedAt:void 0}),I=e.resumeTaskId?{taskId:e.resumeTaskId}:await ne({onWorker:(t,n)=>{j=n,e.onWorker?.(t,n)},availability:e.availability,taskId:M,...e.resume?{resume:e.resume}:{},mcp:k,mcpBindings:D.mcpBindings,mcpWarnings:D.warnings,nativeMcp:D.nativeMcp,connectionEnv:{...y.env,...x.env},connections:f.connections,cwd:i,agentId:f.agent,...$(f)?{conversation:!0}:{},...f.author?{author:f.author}:{},..._?.repo?{repo:`${_.repo.owner}/${_.repo.name}`}:{},...e.source?{source:e.source}:{name:`${G}${f.id}`,source:f.source},engine:T.engine,model:T.model??void 0,effort:T.effort??void 0,permissions:f.permissions??T.permissions,agentPrompt:d.agentPrompt,prompt:d.prompt,outputSchema:f.context?.outputSchema,wait:!0},f.engineChain?{config:{...l,chain:[T.engine]},waitForStartup:!1}:{}),await e.onTask?.(I.taskId,A),L=await Z(i,I.taskId,e.onApproval,(e,t)=>E(e,t,{turn:A,worker:j}))}catch(t){if(!f.engineChain||!(t instanceof C)||t.code!==`chain-exhausted`)throw t;r=!0;let a=t.payload?.error??t.message,o=u(i,M,{status:`failed`,engine:T.engine,prompt:d.prompt,error:a,pid:null}),s={status:1,threadId:null,error:{message:a}};g(H.join(m(i,o.id),`result.json`),s),await W.appendFile(H.join(m(i,o.id),`results.jsonl`),JSON.stringify({...s,prompt:d.prompt})+`
3
- `),I={taskId:o.id},await e.onTask?.(o.id,A),L={taskId:o.id,task:o,status:`failed`,result:s,turns:n(i,o.id),steps:[]}}let a=r?N[P+1]??null:f.engineChain?ee(i,L,{...l,chain:N}):void 0;if(a!==void 0&&b(i,M,{kind:`warning`,message:`${T.engine} skipped because ${L.result?.error?.message??`the engine could not start`}`}),a==null)break;A=n(i,I.taskId).length,j&&await new Promise(e=>{if(j.exitCode!==null||j.signalCode)return e();j.once(`exit`,()=>e())}),P++,F=!0,e={...e,resumeTaskId:void 0,resume:void 0}}let R=n(i,I.taskId)[A],{text:z,problem:re,skipped:ie,duplicate:ae}=R?q(f,R,!1,R):q(f,L.result,L.status===`cancelled`);ie&&t&&b(i,I.taskId,{kind:`status`,message:p});let B=t&&!!z&&!ae,V=B?await X(i,I.taskId,A,async()=>Y(v,_,z,a,f.author,re,!1,await s)):[];return{ok:L.status===`completed`,flow:c,reply:z,posted:B,...V.length?{postedMessages:V}:{},taskId:I.taskId,turn:A,tokens:L.result?.tokens??void 0}}let S=a(c,i),T=S.scope===`builtin`?{...await _e(f,h,e.post!==!1),cwd:i,...f.args}:f.args??_,D=await L(S.path,{cwd:i,...e.taskId?{runId:e.taskId}:{},args:T,ceiling:{agent:h.id,permissions:f.permissions??w(O(h),l).permissions},...e.postToken?{integrationToken:e.postToken}:{},connections:{mcp:{...y.mcp,...x.mcp},env:{...y.env,...x.env},ids:f.connections??[]}},{...e.onTask?{onEvent:t=>{t.kind===`task-start`&&e.onTask(t.taskId)}}:{},...e.onStart?{onStart:e.onStart}:{}});return{ok:!0,flow:c,runId:D.runId,result:D.result,tokens:D.tokens}}async function Z(e,t,n,r=E,i){let a,o=y(e,t);try{for(;;)try{return await r(e,t)}catch(e){if(!(e instanceof C)||e.code!==`approval-pending`||!n)throw e;if(e.approval?.id!==a){a=e.approval?.id,await n(e.approval);continue}await(i?i():o.wait(3e4))}}finally{o.close()}}async function _e(e,t,n=!0){if(!e.event)throw Error(`built-in flows need a GitHub pull request event`);return{...await ye(e.event,t,e.context,e.author,n),...O(t),...e.permissions?{permissions:e.permissions}:{}}}async function ve(e,t,n,r){if(r.taskFile){let t=JSON.parse(await W.readFile(H.resolve(e,r.taskFile),`utf8`));return{...t,flow:n,tools:t.tools??{}}}if(!r.eventFile)throw Error(`Missing --task or --event file.`);return K(t,n,JSON.parse(await W.readFile(H.resolve(e,r.eventFile),`utf8`)))}function ye(e,t,n,r,i=!0){let a=N[e.integration]?.repos?.pullRequest(e);if(!a)throw Error(`built-in flows need a pull request event`);return{pr:a,post:i,...r?{author:r}:{}}}async function be(e,t){let n=(await j(e,N).catch(()=>[])).find(e=>e.id===t);return n?k(n):`read`}async function xe(e,t,n,r,a){let o=await j(e,N),l=o.find(e=>e.id===t);if(!l)throw new C(`invalid-option`,`No agent named "${t}".`,{hint:`Agents here: ${o.map(e=>e.id).join(`, `)}`});let{definition:u,usage:d}=l,f=r===void 0?await c(i(d?.connections,a),void 0,void 0,k(l)):void 0,p=u.mcp??{},m=te(n,s(e).mcp,p,r??f?.mcp);return{engine:d?.engine??u.engine,model:d?.model??u.model,effort:d?.effort??u.effort,permissions:d?.permissions??u.permissions,developer:Se(l),...m,mcpWarnings:m.warnings,connections:d?.connections,...f?{connected:f}:{}}}const Q=48e3;function Se(e,t){return v({description:e.definition.description,instructions:Ce(e),notes:t?.instructions})}function Ce(e){if(!e.dir)return we(e.files??{});let t;try{t=se(e.dir).filter(e=>e.endsWith(`.md`))}catch{return``}t.sort((e,t)=>e===`system.md`?-1:t===`system.md`?1:e.localeCompare(t));let n=``;for(let r of t){let t=`### ${r}\n\n${oe(H.join(e.dir,r),`utf8`).trim()}\n`;if(n+=t.slice(0,Q-n.length),n.length===Q)break}return n.trimEnd()}function we(e){let t=Object.keys(e).filter(e=>e.endsWith(`.md`));t.sort((e,t)=>e===`system.md`?-1:t===`system.md`?1:e.localeCompare(t));let n=``;for(let r of t){let t=`### ${r}\n\n${e[r].trim()}\n`;if(n+=t.slice(0,Q-n.length),n.length===Q)break}return n.trimEnd()}const $=e=>!!(e.event&&e.source===e.event.integration);function Te(e,t){let{event:n,context:r}=t,i=$(t),a=t.prompt===void 0?r?.user:void 0,o=n&&N[n.integration],s=t.prompt===void 0?n?l([n],a):``:h(t.prompt,n?.repo,n&&o?.repos?.pullRequest(n));return{agentPrompt:{developer:Se(e,r),...i?{platform:{name:n.integration,prompt:o?.prompt},events:M(e.definition.integrations[n.integration])}:{},access:k(e)},prompt:d(r?.messages??[],s)}}function Ee(e,t){let n=S(e,t);if(!n)return()=>{};let r={agent:t.agentId,permissions:t.permissions??`auto`},i=ce(e),a=new Map((t.mcp??[]).map(e=>[e.name,e])),s=t.connectionSource??(t.connections?`server`:void 0),c=e=>{if(!e.command)return e;let[t]=D([e],U.env,i);if(!t)throw Error(`MCP server "${e.name}" is not approved.`);return{...e,command:t.command,args:t.args}},l=e=>{try{return ce(e)}catch{return null}},u=[e,...t.addDirs??[]].flatMap(e=>l(H.resolve(e))??[]),d=e=>u.some(t=>e===t||e.startsWith(t+H.sep)),f=new Map,p=new Set,m=()=>{let e=B(D(t.mcp),R);return e?{token:e}:{}};return x(n,{async dispatch(e){let n=e.name??`task`;if(e.mcp!==void 0&&(typeof e.mcp!=`string`||/^[\[{]/.test(e.mcp.trim())))throw new C(`invalid-option`,`Mailbox MCP selections must be server names.`);let o=(e.mcp??``).split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e===`all`?void 0:a.get(e);if(!t)throw new C(`invalid-option`,`MCP server "${e}" is not authorized for agent "${r.agent}".`);return c(t)});for(let e of t.connections??[]){let t=[...a.values()].find(t=>t.connection===e||!t.connection&&t.name===e);t&&!o.some(e=>e.name===t.name)&&o.push(c(t))}let u=H.resolve(String(e.cwd??i));if(l(u)!==l(i)&&o.some(e=>e.command))throw new C(`invalid-option`,`Inherited stdio MCP servers do not allow a cwd override.`);let p=[u,...(e.addDirs??[]).map(e=>H.resolve(u,e))],m=p.find(e=>!l(e));if(m)throw new C(`invalid-option`,`task "${n}" asks for ${m}, which does not exist`);let[h,...g]=p.map(e=>l(e)),_=[h,...g].find(e=>!d(e));if(_)throw new C(`invalid-option`,`task "${n}" asks for ${_}, outside the workspace of agent "${r.agent}"`);let v=await ne({prompt:String(e.prompt??``),outputSchema:e.outputSchema,cwd:h,engine:e.engine,model:e.model,effort:e.effort,mcp:o,connections:t.connections,connectionSource:s,permissions:T(n,e.permissions,r),name:e.name,system:e.system,addDirs:g,flowRunId:e.flowRunId,wait:!0},{fromMailbox:!0});return f.set(v.taskId,h),{taskId:v.taskId}},async steer(e){let n=f.get(e.taskId);if(!n)throw new C(`invalid-option`,`No task "${e.taskId}" started by this flow.`);let a=o(n,e.taskId);if(!a)throw new C(`invalid-option`,`No task "${e.taskId}".`);return I(n,a,String(e.text??``),{...s===`server`?{resolveConnections:F(t.mcp,i,c)}:{},model:e.model,effort:e.effort,permissions:e.permissions?T(a.name,e.permissions,r):void 0})},async wait(e){let t=f.get(e.taskId);if(!t)throw new C(`invalid-option`,`No task "${e.taskId}" started by this flow.`);let n=await E(t,e.taskId);return{status:n.status,result:n.result,model:n.task.model??null,next:ee(t,n)??null}},review(n){if(n.op===`resolveTarget`){let{repo:r,...i}=n.input??{};if(!t.repo&&!/^\d+$/.test(String(i.pr)))throw new C(`invalid-option`,`review target must be a pull request number in this task's repository`);let a=re({...i,cwd:e,...t.repo?{repo:t.repo}:{},...t.author?{author:t.author}:{}},m());return a.pr&&p.add(`${a.pr.repo}#${a.pr.number}`),a}if(n.op!==`post`)throw new C(`invalid-option`,`unknown review action "${n.op}"`);if(!p.has(`${n.input?.repo}#${n.input?.pr}`))throw new C(`invalid-option`,`review post: pull request was not resolved by this task`);return z({...n.input,cwd:e},m())}})}export{Y as a,me as c,Z as d,ue as i,K as l,xe as n,J as o,ge as r,X as s,G as t,q as u};
@@ -1,11 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{$t as t,An as n,Dt as r,Lt as i,Nt as a,Qt as o,S as s,St as c,Ut as l,Vt as u,W as d,Wt as f,Yt as ee,d as p,dr as m,hn as h,or as te,sr as ne,u as re}from"./prompts-Bj4Fbd_n.js";import{L as g,R as _,U as v,d as ie,l as ae,n as oe,p as se,r as ce}from"./dispatch-CFZ9Crvg.js";import{r as le,s as ue}from"./output-BKeyLbvt.js";import{c as de,s as fe}from"./actions-Cwe3IDVs.js";import{t as pe}from"./log-view-CL3_S0IQ.js";import{createRequire as me}from"node:module";import y from"node:path";import b from"node:process";import{fileURLToPath as he,pathToFileURL as x}from"node:url";import S from"node:fs";import{spawn as ge,spawnSync as _e}from"node:child_process";import ve,{randomUUID as ye}from"node:crypto";import be from"node:os";import{AsyncLocalStorage as xe}from"node:async_hooks";function C(e){return typeof e!=`object`||!e?JSON.stringify(e)??`null`:Array.isArray(e)?`[${e.map(C).join(`,`)}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${C(e[t])}`).join(`,`)}}`}function Se(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function w(e,t){return ve.createHash(`sha256`).update(`${e}\0${C(t)}`).digest(`hex`)}function T(e){return S.existsSync(e)?S.readFileSync(e,`utf8`).split(/\r?\n/).filter(Boolean).map(e=>{try{return JSON.parse(e)}catch{return null}}).filter(e=>e!==null):[]}var Ce=class{file;recorded;seq=0;constructor(e,t){this.file=t,this.recorded=e.map(e=>({...e})),S.writeFileSync(t,``,`utf8`)}write(e){e.seq=this.seq++,S.appendFileSync(this.file,`${JSON.stringify(e)}\n`,`utf8`)}replay(...e){let t=this.recorded.find(t=>!t.consumed&&e.includes(t.fingerprint));if(!t)return null;t.consumed=!0;let{consumed:n,...r}=t;return this.write(r),r}record(e){this.write({...e,seq:0})}},we=e({archiveRun:()=>A,archiveRuns:()=>Le,collectFlowRuns:()=>Ue,deleteRun:()=>j,deleteRuns:()=>Re,driveRun:()=>Oe,flowSteps:()=>He,flowTaskIds:()=>z,generateRunId:()=>D,latestRun:()=>R,listArchivedRuns:()=>L,listRuns:()=>I,readFlowRecord:()=>P,readRawRecord:()=>M,reconcileRun:()=>N,resumeRun:()=>Ne,runDirFor:()=>k,runResult:()=>Fe,startRun:()=>Me,unarchiveRun:()=>ze,watchRun:()=>E,writeFlowRecord:()=>F});function Te(){try{return _e(`bun`,[`--version`],{stdio:`ignore`}).status===0}catch{return!1}}function Ee(e,t){if(!e.endsWith(`.ts`)||b.versions.bun||b.features.typescript)return;if(!Te())throw new v(`invalid-option`,`This flow is a TypeScript file (${e}) and this Node cannot run TypeScript.`,{hint:[`Upgrade to Node 23.6+ or install bun: https://bun.sh`,`Or write the flow as .mjs / .js`]});let r=_e(`bun`,[n,...t],{stdio:`inherit`});b.exit(r.status??1)}function De(e){let t=!1,n=n=>{t||(t=!0,(async()=>{let{runId:t}=e;b.stderr.write(`\n[flow] Stopping run ${t}. No new tasks will dispatch.\n`);let r=n?e.runningIds():await St(t,e.runningIds());r.length&&b.stderr.write(`[flow] ${n?`left running`:`stopped tasks`}: ${r.join(`, `)}\n`),b.stderr.write(`\n${ue([`Resume: coder flow resume ${t}`],le)}\n`),e.requestStop(),b.exit(130)})())};b.once(`SIGINT`,()=>n(!1)),b.once(`SIGTERM`,()=>n(!0))}async function Oe(e,t){let n=M(e);if(!n)throw Error(`No flow run "${e}".`);try{await kt(n,t,{onStart:De})}catch(t){throw Z(e,t instanceof Error?t.message:String(t)),t}}function ke(e,t,r){let i=e.script.endsWith(`.ts`)&&!b.versions.bun&&!b.features.typescript;if(i&&!Te())throw Error(`TypeScript flows need bun or Node 23.6+.`);let a=S.openSync(y.join(k(e.runId),`flow.log`),`a`),o=ge(i?`bun`:b.execPath,[n,`flow`,`drive`,e.runId,`--cwd`,t],{detached:!0,stdio:[`ignore`,a,a],env:b.env});return o.unref(),S.closeSync(a),{runId:e.runId,status:`running`,...r?{watch:E(e.runId,{bootPid:o.pid})}:{}}}async function Ae(e,t,n){try{return await n()}catch(n){if(!(n instanceof v)||n.code!==`flow-failed`)throw n;let r=t?`
2
- [flow] dry-run ended early: a downstream step depends on real task output (stub it or run for real).`:``;throw new v(`flow-failed`,`[flow] ${e} ${n.runId} failed: ${n.message}${r}`,{runId:n.runId,hint:`Resume${e===`resume`?` again`:``}: coder flow resume ${n.runId}`})}}function je(e,t){let n=e?P(e):R();if(!n)throw new v(`flow-failed`,e?`No flow run "${e}".`:t,{hint:`Run one: coder flow run <name>`});return n}async function Me(e,t={},n={}){if(t.detached){if(!t.dryRun)return ke(Y(e,t),t.cwd?y.resolve(t.cwd):b.cwd(),t.wait);Ee(s(e,t.cwd?y.resolve(t.cwd):b.cwd()).path,b.argv.slice(2))}return Ae(`run`,t.dryRun,()=>$(e,t,n))}async function Ne(e,t={},n={}){let r=je(e,`No flow runs to resume.`);if(t.detached){if(!t.dryRun)return ke(Y(``,t,r.runId),t.cwd?y.resolve(t.cwd):b.cwd(),t.wait);Ee(r.script,b.argv.slice(2))}return Ae(`resume`,t.dryRun,()=>Ot(r.runId,t,n))}function Pe(e){let t=y.join(k(e),`events.jsonl`);return S.existsSync(t)?S.readFileSync(t,`utf8`).split(`
3
- `).filter(Boolean).flatMap(e=>{try{return[JSON.parse(e)]}catch{return[]}}):[]}function Fe(e,t={}){let n=e?P(e):R();return n?{...n,steps:He(n.runId,t.tail),journal:T(y.join(k(n.runId),`journal.jsonl`)).map(e=>({kind:e.kind,taskId:e.taskId,tokens:e.tokens})),events:Pe(n.runId)}:null}function E(e,t={}){let n=je(e,`No flow runs yet.`);return{record:n,events:wt(n.runId,t.bootPid,{tail:t.tail}),final(){let e=Fe(n.runId,{tail:0});if(!e)throw new v(`flow-failed`,`[flow] run ${n.runId} vanished while following.`,{hint:`Recent runs: coder flow list`});return e}}}function Ie(e){let t=P(e);if(!t)throw new v(`flow-failed`,`No flow run "${e}".`,{hint:`Recent runs: coder flow list`});if(t.status===`running`)throw new v(`flow-failed`,`Run ${t.runId} is still running.`,{runId:t.runId,hint:`Stop it first: coder flow stop ${t.runId}`});return t}function Le(e,t={}){if(t.allStopped){let e=I().filter(e=>e.status!==`running`);for(let t of e)A(t);let t=e.map(e=>e.runId);return{archived:t,count:t.length}}if(!e)throw new v(`invalid-option`,`Missing run id.`,{hint:[`Archive one: coder flow archive <run-id>`,`Archive all stopped: coder flow archive --all-stopped`]});let n=Ie(e);return A(n),{runId:n.runId,archived:!0}}function Re(e,t={}){if(t.allArchived){let e=L().filter(e=>j(e.runId)).map(e=>e.runId);return{deleted:e,count:e.length}}if(!e)throw new v(`invalid-option`,`Missing run id.`,{hint:[`Delete one: coder flow delete <run-id>`,`Delete all archived: coder flow delete --all-archived`]});let n=Ie(e);return{runId:n.runId,deleted:j(n.runId)}}function D(){return`flow-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}function O(){let e=_();return t(e)}function k(e){r(e,`flow run id`);let t=y.join(O(),e);if(S.existsSync(y.join(t,`flow.json`)))return t;let n=y.join(o(),e);return S.existsSync(y.join(n,`flow.json`))?n:t}function A(e){let t=k(e.runId),n=y.join(o(),e.runId);t!==n&&ne(t,n);let r={...e,archived:!0,archivedAt:e.archivedAt??new Date().toISOString()};return F(n,r),r}function ze(e){let t=k(e.runId),n=y.join(O(),e.runId);t!==n&&ne(t,n);let r={...e,archived:void 0,archivedAt:void 0};return F(k(e.runId),r),r}function j(e){let t=k(e);return S.existsSync(y.join(t,`flow.json`))?(S.rmSync(t,{recursive:!0,force:!0}),!0):!1}function M(e){if(!i(e))return null;let t=y.join(k(e),`flow.json`);if(!S.existsSync(t))return null;try{return JSON.parse(S.readFileSync(t,`utf8`))}catch{return null}}function N(e,t=l){return e.status!==`running`||!e.pid||Q(e,t)?e:(Z(e.runId,`orchestrator died`),M(e.runId)??e)}function P(e){let t=M(e);return t?N(t):null}function F(e,t){S.writeFileSync(y.join(e,`flow.json`),`${JSON.stringify(t,null,2)}\n`,`utf8`)}function Be(e){let t=[];try{t=S.readdirSync(e)}catch{return[]}let n=[],r=f();for(let i of t)try{n.push(N(JSON.parse(S.readFileSync(y.join(e,i,`flow.json`),`utf8`)),r))}catch{}return n}const Ve=(e,t)=>String(t.startedAt).localeCompare(String(e.startedAt));function I(){return Be(O()).sort(Ve)}function L(){return Be(o()).sort(Ve)}function R(){return[...I(),...L()].sort(Ve)[0]??null}function z(e){let t=T(y.join(k(e),`journal.jsonl`));return[...new Set([...t.flatMap(e=>e.kind===`task`&&e.taskId?[e.taskId]:[]),...Pe(e).flatMap(e=>e.kind===`task-start`?[e.taskId]:[])])]}function He(e,t=`all`){if(t===0)return[];let n=T(y.join(k(e),`journal.jsonl`)).filter(e=>e.kind===`task`),r=b.cwd(),i=f(),a=z(e).flatMap(e=>{let t=u(r,e);return t?[ee(r,t,i)]:[]}),o=new Map(a.map(e=>[e.id,e])),s=e=>e?.name??e?.prompt?.replace(/\s+/g,` `).trim().slice(0,60)??null,c=n.map(e=>{let t=e.taskId?o.get(e.taskId):void 0;return{taskId:e.taskId??null,name:s(t),status:t?.status??e.result?.status??`?`,tokens:e.tokens??null}}),l=new Set(c.map(e=>e.taskId));for(let t of a)t.flowRunId===e&&!l.has(t.id)&&c.push({taskId:t.id,name:s(t),status:t.status,tokens:null});return t===`all`?c:c.slice(-t)}function Ue(e={}){let t=e.limit===`all`?void 0:e.limit,n;n=e.archived?L():I().filter(e=>e.status===`running`||c(e.endedAt??e.startedAt)<=18e5||(A(e),!1));let r=t===void 0?0:Math.max(0,n.length-t);return{runs:t===void 0?n:n.slice(0,t),clipped:r}}function B(e,t){e&&(S.appendFileSync(y.join(e.runDir,`events.jsonl`),`${JSON.stringify(t)}\n`,`utf8`),e.hooks.onEvent?.(t))}const We=globalThis,V=We.__coderFlowCtxALS??=new xe,H=We.__coderFlowScopeALS??=new xe;function Ge(){return H.getStore()?.args}function Ke(){return V.getStore()?.integrationToken}function U(){return H.getStore()?.depth??0}var qe=class{limit;active=0;queue=[];constructor(e){this.limit=e}async run(e){this.active<this.limit?this.active+=1:await new Promise(e=>this.queue.push(e));try{return await e()}finally{let e=this.queue.shift();e?e():--this.active}}};function Je(e,t){if(!t.tokens)return;let n=t.model??`default`;e.ledger[n]=pe(e.ledger[n]??null,t.tokens)}function Ye(e){return!!e&&typeof e.safeParse==`function`}async function Xe(e){try{let t=await import(`./zod-BoqHoRCH.js`).then(e=>e.n);if(typeof t.toJSONSchema==`function`)return t.toJSONSchema(e)}catch{}return null}function Ze(e){let t=e.trim(),n=t.match(/```(?:json)?\s*([\s\S]*?)```/i);n&&(t=n[1].trim());let r=t.indexOf(`{`);if(r===-1)throw Error(`no JSON object found in reply`);let i=0,a=!1,o=!1;for(let e=r;e<t.length;e+=1){let n=t[e];if(a){o?o=!1:n===`\\`?o=!0:n===`"`&&(a=!1);continue}if(n===`"`)a=!0;else if(n===`{`)i+=1;else if(n===`}`&&(--i,i===0))return JSON.parse(t.slice(r,e+1))}throw Error(`unterminated JSON object in reply`)}function W(e,t){if(!Ye(e))return{ok:!0,data:t};let n=e.safeParse(t);if(n.success)return{ok:!0,data:n.data};let r=n.error?.issues??n.error?.errors??[];return{ok:!1,errors:Array.isArray(r)?r.map(e=>`${(e.path??[]).join(`.`)||`(root)`}: ${e.message}`).join(`; `):String(n.error)}}function Qe(e,t,n){return{cwd:t,engine:e.engine,model:e.model,effort:e.effort,mcp:e.mcp,permissions:n?.ceiling?oe(e.name,e.permissions,n.ceiling):e.permissions,name:e.name,system:e.system,addDirs:e.addDirs,wait:!0,flowRunId:n?.runId}}function $e(e,t){return{taskId:e,status:t.status,output:t.result?.finalMessage||t.result?.error?.message||``,tokens:t.result?.tokens??null,model:t.result?.model??t.model}}async function et(e,t,n){n?.running.add(t);try{if(_())return await g(`wait`,{taskId:t});let n=await se(e,t);return{status:n.status,result:n.result,model:n.task.model??null,next:ie(e,n)??null}}finally{n?.running.delete(t)}}async function tt(e,t,n,r){let i=r?.cwd??b.cwd();if(_())await g(`steer`,{taskId:e,text:t,...n});else{let a=u(i,e);if(!a)throw new v(`invalid-option`,`No task "${e}".`);await fe(a.cwd??i,a,t,{...r?.connections?{resolveConnections:async e=>({mcp:Object.fromEntries(Object.entries(r.connections.mcp).filter(([t])=>e.includes(t))),env:r.connections.env,warnings:[]})}:{},model:n.model,effort:n.effort,permissions:r?.ceiling&&n.permissions?oe(a.name,n.permissions,r.ceiling):n.permissions})}return $e(e,await et(i,e,r))}async function nt(e,t,n,r){let i=t.cwd?y.resolve(t.cwd):n?.cwd??b.cwd(),o=t.returns&&!r?[t.system,re(null)].filter(Boolean).join(`
4
-
5
- `):t.system,s;for(;;){let c={prompt:e,...Qe(t,i,n),system:o,...r?{outputSchema:r}:{},...s?{engine:s,model:void 0,effort:void 0}:{}},l=!!_(),f=n?.connections?ae(c.mcp,d(i).mcp,{},n.connections.mcp):void 0,ee=r=>{let o=u(i,r),s=o?a(o):void 0;B(n,{kind:`task-start`,taskId:r,name:t.name,prompt:e,engine:s,depth:U()})},p=l?await g(`dispatch`,c):await ce({...c,onWorker:ee,...n?.connections?{...f,mcpWarnings:f?.warnings,connectionEnv:n.connections.env,connections:n.connections.ids,connectionSource:`server`}:{},onFallback:e=>K(`${e.engine} failed to start. Falling back to ${e.next}. ${e.detail.replace(/\s+/g,` `).slice(0,140)}`)});l&&ee(p.taskId);let m=await et(i,p.taskId,n);if(m.next){let e=m.next;B(n,{kind:`task-end`,taskId:p.taskId,status:`failed`,tokens:null}),s=e;continue}return $e(p.taskId,m)}}async function rt(e,t,n,r=null){if(n?.dryRun){b.stdout.write(`\n[dry-run] task${t.name?` (${t.name})`:``}:\n${e}\n`);let n={...t,returns:t.returns?`<schema>`:void 0};return b.stdout.write(`[dry-run] opts: ${JSON.stringify(n)}\n`),{taskId:`dry`,status:`completed`,output:`[dry-run]`,data:void 0,tokens:null,model:t.model??null}}let i=await nt(e,t,n,r);if(i.status!==`completed`){let e={...i,data:void 0};throw new v(`task-failed`,`Task ${i.taskId} ${i.status}: ${i.output||`no output`}`,{taskId:i.taskId,result:e})}let a=i.output,o=i.tokens,s;if(t.returns){let e;try{e=W(t.returns,Ze(a))}catch(t){e={ok:!1,errors:t instanceof Error?t.message:String(t)}}if(e.ok)s=e.data;else{let r=await tt(i.taskId,p(e.errors),{},n);a=r.output||a,o=pe(o,r.tokens);try{let e=W(t.returns,Ze(a));if(!e.ok)throw Error(e.errors);s=e.data}catch(e){let t={taskId:i.taskId,status:`completed`,output:a,data:void 0,tokens:o,model:i.model};throw new v(`task-failed`,`Task ${i.taskId} produced no valid structured output: ${e instanceof Error?e.message:String(e)}`,{taskId:i.taskId,result:t})}}}return{taskId:i.taskId,status:`completed`,output:a,data:s,tokens:o,model:i.model}}async function it(e,t,n){let r=e.journal.replay(t);if(r)return r.result;if(++e.taskCount>e.maxTasks)throw Error(`Flow exceeded --max-tasks (${e.maxTasks}). Raise it with --max-tasks, or fix a runaway loop; the run is resumable.`);return e.semaphore.run(async()=>{let r=new Date().toISOString(),i;try{i=await n()}catch(t){let n=t instanceof v?t.result:void 0;throw n&&B(e,{kind:`task-end`,taskId:n.taskId,status:n.status===`completed`?`failed`:n.status,tokens:n.tokens}),t}return Je(e,i),e.dryRun||B(e,{kind:`task-end`,taskId:i.taskId,status:i.status,tokens:i.tokens}),e.journal.record({kind:`task`,fingerprint:t,result:i,taskId:i.taskId,tokens:i.tokens,startedAt:r,endedAt:new Date().toISOString()}),i})}async function at(e,t={}){let n=V.getStore(),r=t.returns?await Xe(t.returns):null,i=()=>rt(e,t,n,r);if(!n)return i();let{returns:a,...o}=t;return it(n,w(`task`,Se({prompt:e,...o,returns:a?r??`<schema>`:void 0})),i)}async function ot(e,t,n={}){let r=V.getStore(),i=async()=>{if(r?.dryRun)return b.stdout.write(`\n[dry-run] steer ${e}:\n${t}\n`),{taskId:e,status:`completed`,output:`[dry-run]`,tokens:null,model:n.model??null};let i=await tt(e,t,n,r);if(i.status!==`completed`)throw new v(`task-failed`,`Task ${e} ${i.status}: ${i.output||`no output`}`,{taskId:e,result:i});return i};return r?it(r,w(`steer`,Se({taskId:e,text:t,...n})),i):i()}const G=262144;function st(e){let t=[];for(let n=e;;){t.push(y.join(n,`node_modules`,`.bin`));let e=y.dirname(n);if(e===n)break;n=e}let n=b.platform===`win32`?`;`:`:`;return{...b.env,PATH:[...t,b.env.PATH??``].join(n)}}async function ct(e,t){return new Promise(n=>{let r=ge(e,{shell:!0,cwd:t,env:st(t)}),i=``,a=e=>{i.length>=G||(i+=e,i.length>=G&&(i=`${i.slice(0,G)}\n... [gate output truncated]`))};r.stdout?.on(`data`,a),r.stderr?.on(`data`,a),r.on(`error`,e=>n({ok:!1,code:1,output:String(e.message??e).trim()})),r.on(`close`,e=>n({ok:e===0,code:e??0,output:i.trim()}))})}async function lt(e,t={}){let n=V.getStore(),r=t.cwd?y.resolve(t.cwd):n?.cwd??b.cwd();if(!n)return ct(e,r);let i=w(`gate`,{cmd:e,cwd:t.cwd}),a=n.journal.replay(i);if(a)return a.result;if(n.dryRun){b.stdout.write(`\n[dry-run] gate: ${e}\n`);let t={ok:!0,code:0,output:``};return n.journal.record({kind:`gate`,fingerprint:i,result:t,startedAt:new Date().toISOString(),endedAt:new Date().toISOString()}),t}let o=new Date().toISOString(),s=`gate-${b.pid}-${ye()}`,c=U();B(n,{kind:`gate-start`,gateId:s,cmd:e,depth:c});let l=await ct(e,r);return B(n,{kind:`gate`,gateId:s,cmd:e,ok:l.ok,code:l.code,depth:c}),n.journal.record({kind:`gate`,fingerprint:i,result:l,startedAt:o,endedAt:new Date().toISOString()}),l}async function ut(e,...t){return Promise.all(e.map(async(e,n)=>{let r=e;for(let[i,a]of t.entries())try{r=await a(r,e,n)}catch(e){return K(`stage ${i+1} failed: ${e instanceof Error?e.message:String(e)}`),null}return r}))}function K(e){let t=V.getStore();B(t,{kind:`log`,message:e,depth:U()}),(!t||b.stderr.isTTY&&!t.hooks.onEvent)&&b.stderr.write(`[flow] ${e}\n`)}const dt=me(import.meta.url);function q(e){let t=y.dirname(he(import.meta.url));for(;y.basename(t)!==`dist`&&y.dirname(t)!==t;)t=y.dirname(t);return y.basename(t)===`dist`?x(y.join(t,e)).href:null}function ft(e){if(e===`zod`||e.startsWith(`zod/`)){let e=q(`zod.js`)??new URL(`./zod.js`,import.meta.url).href;if(S.existsSync(he(e)))return e}if(!(e===`@wular/coder`||e===`@wular/coder/flow`||e===`zod`||e.startsWith(`zod/`)))return null;try{return x(dt.resolve(e)).href}catch{}return e===`@wular/coder/flow`?q(`flow/index.js`):e===`@wular/coder`?q(`sdk.js`):null}const pt=/(\bfrom\s+|\bimport\s+|\bimport\s*\(\s*)(['"])([^'"]+)\2/g;function mt(e){return e.replace(pt,(e,t,n,r)=>{let i=ft(r);return i?`${t}${n}${i}${n}`:e})}async function ht(e){e=S.realpathSync(e);let t=H.getStore(),n=t.imports??={dirs:new Set,node:!1};if(b.versions?.bun){if(n.dirs.has(e))return;n.dirs.add(e);let{plugin:t}=await import(`bun`),r=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);t({name:`coder-flow:${e}`,setup(e){e.onLoad({filter:RegExp(`^${r}/(?!.*node_modules/).*\\.m?[jt]sx?$`)},e=>({contents:mt(S.readFileSync(e.path,`utf8`)),loader:y.extname(e.path).replace(/^\.m?/,``)}))}});return}if(n.node)return;n.node=!0;let{register:r}=await import(`node:module`),i=Object.fromEntries([`@wular/coder`,`@wular/coder/flow`,`zod`].flatMap(e=>{let t=ft(e);return t?[[e,t]]:[]})),a=`const urls = ${JSON.stringify(i)}, parent = ${JSON.stringify(import.meta.url)};
6
- export function resolve(spec, ctx, next) {
7
- if (spec.startsWith('zod/') && urls.zod) return { url: urls.zod, shortCircuit: true };
8
- if (urls[spec]) return { url: urls[spec], shortCircuit: true };
9
- return next(spec, spec.startsWith('zod/') ? { ...ctx, parentURL: parent } : ctx);
10
- }`;r(`data:text/javascript,${encodeURIComponent(a)}`)}async function gt(e,t,n){try{return await import(x(e).href)}catch(e){let r=e instanceof Error?e.message:String(e);throw t===`.ts`&&!b.versions?.bun&&/Unknown file extension|Unexpected token|SyntaxError|Cannot parse|import type|interface/i.test(r)?Error(`Could not run ${y.basename(n)}: TypeScript flows need bun. Run under \`bun\`, or write the flow as .mjs/.js.`):e}}async function _t(e){if(!S.existsSync(e))throw Error(`Cannot read flow file: ${e}`);return await ht(y.dirname(e)),gt(e,y.extname(e),e)}async function J(e,t,n){let r=H.getStore();r.args=t??{};let i=await _t(e),a=V.getStore();a?.flowConcurrency&&!r.depth&&typeof i.concurrency==`number`&&(a.semaphore.limit=Math.max(1,i.concurrency),n&&(n.concurrency=a.semaphore.limit,F(a.runDir,n)));let o=i.args,s=r.args;if(Ye(o)){let e=W(o,t??{});if(!e.ok)throw Error(`Invalid flow args: ${e.errors}`);s=e.data,r.args=s}let c=i.default;return typeof c==`function`?c(s):c}async function vt(e,t){let n=V.getStore(),r=n?.cwd??b.cwd(),i=s(e,r);if(!n)return H.run({args:t??{},depth:0},()=>J(i.path,t));let a=H.getStore();if(a&&a.depth>=1)throw Error(`flow("${e}") nesting is one level deep; a sub-flow cannot call flow().`);let o=w(`flow`,{name:i.name,args:t??{}}),c=n.journal.replay(o);if(c)return c.result;let l=new Date().toISOString();B(n,{kind:`flow-start`,name:i.name,depth:(a?.depth??0)+1});let u=await H.run({args:t??{},depth:(a?.depth??0)+1,imports:a?.imports},()=>J(i.path,t));return n.journal.record({kind:`flow`,fingerprint:o,result:u,startedAt:l,endedAt:new Date().toISOString()}),u}var yt=e({drivePreparedRun:()=>kt,markRunFailed:()=>Z,orchestratorAlive:()=>Q,pidAlive:()=>bt,prepareRun:()=>Y,resumeFlow:()=>Ot,review:()=>At,runFlowByName:()=>$,stopFlowTasks:()=>St,stopRun:()=>Ct,streamFlowCore:()=>wt});function Y(e,t={},n,r){let i,a,o;if(n){let e=P(n);if(!e)throw Error(`No flow run "${n}".`);e.archived&&ze(e),i=e.name,a=e.script,o=t.args??e.args}else{let n=s(e,t.cwd?y.resolve(t.cwd):b.cwd());i=n.name,a=n.path,o=t.args??{}}let c=n??t.runId??D(),l=k(c);S.mkdirSync(l,{recursive:!0});let u={runId:c,name:i,script:a,args:o,status:`running`,startedAt:new Date().toISOString(),concurrency:Math.max(1,t.concurrency??be.cpus().length),maxTasks:Math.max(1,t.maxTasks??be.cpus().length*10),taskCount:0,ledger:{},...r?{pid:r,pidStartedAt:new Date().toISOString()}:{},...t.concurrency===void 0?{}:{concurrencySet:!0}};return F(l,u),u}function X(e,t,n){F(e,{...t,endedAt:new Date().toISOString(),pid:void 0,pidStartedAt:void 0,...n})}function Z(e,t){let n=M(e);!n||n.status!==`running`||X(k(e),n,{status:`failed`,error:t})}function bt(e){try{return b.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function Q(e,t=l){if(!e.pid||!bt(e.pid))return!1;let n=t(e.pid),r=Date.parse(e.pidStartedAt??``);return n===null||!Number.isFinite(r)||n<=r+6e4}function xt(e){return z(e).filter(e=>{let t=u(b.cwd(),e);return t&&!h.includes(t.status)})}async function St(e,t=[]){let n=b.cwd(),r=[];for(let i of new Set([...xt(e),...t])){let e=u(n,i);if(!(!e||h.includes(e.status)))try{await de(n,e),r.push(i)}catch{}}return r}async function Ct(e,t={}){let n=e?P(e):R();if(!n)throw new v(`flow-failed`,e?`No flow run "${e}".`:`No flow runs.`,{hint:`Run one: coder flow run <name>`});if(n.status!==`running`)throw new v(`flow-failed`,`Run ${n.runId} is not running.`,{runId:n.runId,hint:`Result: coder flow result ${n.runId}`});let r=k(n.runId);if(!Q(n))return X(r,n,{status:`failed`,error:`orchestrator died`}),{runId:n.runId,status:`failed`,stoppedTasks:[],keptTasks:xt(n.runId)};let i=xt(n.runId),a=m(r);try{b.kill(n.pid,t.keepTasks?`SIGTERM`:`SIGINT`)}catch(e){throw a.close(),e}let o=await a.until(()=>{let e=M(n.runId);return e?.status===`running`?void 0:e},5e3);if(!o||o.status===`running`)throw new v(`flow-failed`,`Run ${n.runId} did not stop within 5s.`,{runId:n.runId,hint:`Check it: coder flow result ${n.runId}`});let s=b.cwd(),c=[],l=[];for(let e of i){let t=u(s,e);t&&(t.status===`cancelled`?c.push(e):h.includes(t.status)||l.push(e))}return{runId:n.runId,status:o.status,stoppedTasks:c,keptTasks:l}}async function*wt(e,t,n={}){let r=m(k(e));try{let i=y.join(k(e),`events.jsonl`),a=n.tail??`all`,o=0;if(a!==`all`)try{o=Math.max(0,S.readFileSync(i,`utf8`).split(`
11
- `).length-1-a)}catch{}let s=te(i),c=()=>{let e=[];for(let t of s()){if(o>0){--o;continue}try{e.push(JSON.parse(t))}catch{}}return e},l=f(),u=M(e);for(;(!u||u.status===`running`)&&(yield*c(),u=M(e)??u,!(u&&u.status!==`running`));){let n=u?.pid?!Q(u,l):t!==void 0&&!bt(t);if(u&&(u.pid||t!==void 0)&&n){Z(e,`orchestrator died`);break}await r.wait(1e3)}yield*c()}finally{r.close()}}function Tt(e,t,n,r,i){let a=i?{...i,pid:b.pid,pidStartedAt:new Date().toISOString()}:Y(e,t,r,b.pid),{runId:o}=a,s=k(o);i&&F(s,a),S.writeFileSync(y.join(s,`events.jsonl`),``,`utf8`);let c=y.join(s,`journal.jsonl`),l=r?T(c):[],u=new Ce(l,c),d={runId:o,runDir:s,cwd:t.cwd?y.resolve(t.cwd):b.cwd(),journal:u,semaphore:new qe(a.concurrency),flowConcurrency:t.concurrency===void 0,maxTasks:a.maxTasks,dryRun:t.dryRun??!1,ledger:{},running:new Set,taskCount:0,stopping:!1,hooks:n,...t.integrationToken?{integrationToken:t.integrationToken}:{},...t.connections?{connections:t.connections}:{},...t.ceiling?{ceiling:t.ceiling}:{}};return{record:a,ctx:d,markStopped:()=>{d.stopping=!0,X(s,a,{status:`stopped`,concurrency:d.semaphore.limit,taskCount:d.taskCount,ledger:d.ledger})},replayable:l.length}}async function Et(e){let{ctx:t,record:n}=e,{runDir:r,runId:i}=t,{script:a,name:o,args:s}=n;try{let e=await V.run(t,()=>H.run({args:s??{},depth:0},()=>J(a,s,n)));return X(r,n,{status:`completed`,concurrency:t.semaphore.limit,taskCount:t.taskCount,ledger:t.ledger,result:e}),{runId:i,name:o,status:`completed`,result:e,tokens:t.ledger,taskCount:t.taskCount}}catch(e){throw t.stopping||X(r,n,{status:`failed`,concurrency:t.semaphore.limit,taskCount:t.taskCount,ledger:t.ledger,error:e instanceof Error?e.message:String(e)}),e instanceof v&&(e.code===`chain-exhausted`||e.code===`approval-pending`)?(e.runId??=i,e):new v(`flow-failed`,e instanceof Error?e.message:String(e),{runId:i})}}async function Dt(e,t,n,r,i){let a=Tt(e,t,n,r,i);return n.onStart?.({runId:a.ctx.runId,requestStop:a.markStopped,runningIds:()=>[...a.ctx.running]}),a.replayable&&B(a.ctx,{kind:`replay`,count:a.replayable}),Et(a)}function $(e,t={},n={}){return Dt(e,t,n)}function Ot(e,t={},n={}){return Dt(``,t,n,e)}function kt(e,t,n){return Dt(``,{cwd:t,concurrency:e.concurrencySet?e.concurrency:void 0,maxTasks:e.maxTasks},n,e.runId,e)}const At={async run(e={}){let t=await $(`review`,{cwd:e.cwd,args:e});return{...t.result,runId:t.runId}}};export{Me as C,we as S,Oe as _,Ct as a,Ne as b,vt as c,ut as d,ot as f,Re as g,Ue as h,St as i,lt as l,Le as m,At as n,Ke as o,at as p,$ as r,Ge as s,yt as t,K as u,D as v,E as w,Fe as x,P as y};
@@ -1,2 +0,0 @@
1
- import { C as repositoryRules, D as reviewFingerprints, E as reviewCli, S as postReview, T as review, _ as description, a as ReviewExec, b as ownReviewComments, c as ReviewPostSummary, d as ReviewSummary, f as ReviewTarget, g as concurrency, h as changedLines, i as ReviewAuth, l as ReviewResult, m as args, n as REVIEW_PLATFORM, o as ReviewPostFinding, p as ReviewTargetInput, r as ReviewArgs, s as ReviewPostInput, t as Finding, u as ReviewServices, v as fingerprint, w as resolveReviewTarget, x as parseGithubPr, y as lastReviewSummary } from "../../review-Dxs-idTn.js";
2
- export { Finding, REVIEW_PLATFORM, ReviewArgs, ReviewAuth, ReviewExec, ReviewPostFinding, ReviewPostInput, ReviewPostSummary, ReviewResult, ReviewServices, ReviewSummary, ReviewTarget, ReviewTargetInput, args, changedLines, concurrency, review as default, description, fingerprint, lastReviewSummary, ownReviewComments, parseGithubPr, postReview, repositoryRules, resolveReviewTarget, reviewCli, reviewFingerprints };
@@ -1,12 +0,0 @@
1
- import{h as e,m as t}from"../../prompts-Bj4Fbd_n.js";import{L as n,R as r}from"../../dispatch-CFZ9Crvg.js";import{o as i}from"../../executor-3QMa-XRY.js";import{Ft as a,Gn as o,Kn as s,Nn as c,Ot as l,Pn as u,ir as d,zt as f}from"../../zod-BoqHoRCH.js";import p from"node:path";import{existsSync as m,readFileSync as h,realpathSync as g}from"node:fs";import{execFileSync as _}from"node:child_process";import{createHash as v}from"node:crypto";import{CoderError as y,task as b}from"@wular/coder/flow";const x=`Review a code change.`,S=u({pr:d([c(),s()]).optional(),base:s().optional(),head:s().optional(),since:s().optional(),post:f().optional(),author:s().optional(),path:a(s()).optional(),exclude:a(s()).optional(),engine:s().optional(),model:s().optional(),effort:l([`low`,`medium`,`high`]).optional(),cwd:s().optional()}),C=4,w=l([`critical`,`major`,`minor`,`nit`]),T=l([`correctness`,`security`,`reliability`,`performance`,`maintainability`,`testing`,`documentation`]),ee=o({file:s(),line:c().int().positive(),severity:w,category:T,summary:s(),failure_scenario:s()}),E={critical:0,major:1,minor:2,nit:3};function D(e){let t=new Map,n=``;for(let r of e.split(`
2
- `)){r.startsWith(`+++ `)&&(n=r.slice(4).replace(/^b\//,``).split(` `)[0]);let e=r.match(/^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@/);if(!e||n===`/dev/null`)continue;let i=Number(e[1]),a=e[2]===void 0?1:Number(e[2]);a>0&&t.set(n,[...t.get(n)??[],[i,i+a-1]])}return t}function O(e,t,n){return v(`sha1`).update(`${e}\n${n}\n${t.trim()}`).digest(`hex`)}function k(e,t,n){try{let r=e(`git`,[`show`,`${t}:${n}`]);return r.length>32e3?`${r.slice(0,32e3)}\n[truncated]`:r}catch{return}}function A(e,t){return[`AGENTS.md`,`CLAUDE.md`,`.coder/review.md`].flatMap(n=>{let r=k(e,t,n);return r?.trim()?[[n,r]]:[]})}function j(e){for(let t of[[`symbolic-ref`,`--short`,`refs/remotes/origin/HEAD`],[`rev-parse`,`--verify`,`origin/main`],[`rev-parse`,`--verify`,`origin/master`]])try{let n=e(`git`,t).trim();return e(`git`,[`merge-base`,`HEAD`,t[0]===`symbolic-ref`?n:t[2]]).trim()}catch{}throw new y(`invalid-option`,`Could not detect origin default branch; pass base.`)}async function te(e,t,r,i){if(t.pr===void 0){let n=e(`git`,[`rev-parse`,t.head??`HEAD`]).trim();return{baseSha:t.base?e(`git`,[`rev-parse`,t.base]).trim():j(e),headSha:n,...t.since?{since:t.since}:{}}}let a={pr:t.pr,cwd:r,...t.since?{since:t.since}:{},...t.author?{author:t.author}:{}};return ne(i)?n(`review`,{op:`resolveTarget`,input:a}):X(a,i)}function ne(e){return!!r()&&!e.token&&!e.exec}const M=e=>[`--`,...e.include.map(e=>`:(top)${e}`),...e.exclude.map(e=>`:(top,exclude)${e}`)];function N(e,t){return!t||e.startsWith(t)?e.slice(t.length):!e||t.startsWith(`${e}/`)?``:void 0}function re(e,t,n,r){let i=new Map;for(let a of e(n,[`ls-files`,`--others`,`--exclude-standard`,`--full-name`,`-z`,...M(n)]).split(`\0`)){if(a.endsWith(`/`)){r.push(`Skipped ${n.prefix}${a.slice(0,-1)} because it is a nested repository, not a submodule.`);continue}let e=``;try{a&&(e=h(p.join(t,n.prefix,a),`utf8`))}catch{}let o=e?e.split(`
3
- `).length-+!!e.endsWith(`
4
- `):0;o&&i.set(a,[[1,o]])}return i}const P=(e,t,n)=>D(e(t,[`diff`,`--no-ext-diff`,`--find-renames`,`--ignore-submodules=all`,`-U0`,t.head?`${n}..${t.head}`:n,...M(t)]));function F(e,t,n,r,i){let a=e(n,[`diff`,`--raw`,`-z`,`--no-abbrev`,`--no-renames`,`--ignore-submodules=none`,n.head?`${n.base}..${n.head}`:n.base]).split(`\0`),o=[];for(let s=0;s+1<a.length;s+=2){let[c,l,u,d]=a[s].slice(1).split(` `),f=`${n.prefix}${a[s+1]}`,h=r(`${f}/`);if(l!==`160000`||!h)continue;if(!m(p.join(t,f,`.git`))){i.push(`Skipped submodule ${f} because it is not initialized.`);continue}let g={prefix:`${f}/`,base:``,...h},_=()=>e(g,[`hash-object`,`-t`,`tree`,`--stdin`],``).trim(),v=t=>e(n,[`ls-tree`,`--full-tree`,t,a[s+1]]).match(/^160000 commit (\S+)/)?.[1],y={...g,base:c===`160000`?u:_(),...n.head?{head:d}:{},...n.since?{since:v(n.since)??_()}:{}},b=[y.base,y.head,y.since].find(t=>{if(!t)return!1;try{return e(y,[`cat-file`,`-e`,`${t}^{tree}`]),!1}catch{return!0}});b?i.push(`Skipped submodule ${f} because commit ${b} is not fetched.`):o.push(y,...F(e,t,y,r,i))}return o}async function I(r,s={}){if(r.pr!==void 0&&(r.base||r.head))throw new y(`invalid-option`,`pr cannot be combined with base or head.`);if(r.post&&r.pr===void 0)throw new y(`invalid-option`,`post requires pr.`);let c=Date.now(),l=p.resolve(r.cwd??process.cwd()),u=s.exec??B(l),d=s.integrationToken??i(),f={...d?{token:d}:{},...s.exec?{exec:s.exec}:{}},{pr:m,baseSha:_,headSha:v,since:x}=await te(u,r,l,f),S=r.pr===void 0&&!r.head,C=g(u(`git`,[`rev-parse`,`--show-toplevel`]).trim()),w=(e,t,n)=>u(`git`,e.prefix?[`-C`,p.join(C,e.prefix),...t]:t,n),T=g(l),D=e=>p.relative(C,p.resolve(T,e)).split(p.sep).join(`/`),k=(r.path??[]).map(D),j=(r.exclude??[]).map(D),I=e=>{let t=(k.length?k:[``]).map(t=>N(t,e)).filter(e=>e!==void 0),n=j.map(t=>N(t,e));if(!(!t.length||n.includes(``)))return{include:t,exclude:n.filter(e=>e!==void 0)}},L=I(``);if(!L)throw new y(`invalid-option`,`exclude leaves nothing to review.`);let R=[],z={prefix:``,base:_,...S?{}:{head:v},...x?{since:x}:{},...L},V=[z,...F(w,C,z,I,R)],H=new Map,U=new Map,W=new Set;for(let e of V){let t=S?re(w,C,e,R):new Map,n=t=>{try{return w(e,[`show`,`${e.since}:${t}`])!==h(p.join(C,e.prefix,t),`utf8`)}catch{return!0}};for(let[n,r]of[...P(w,e,e.base),...t])H.set(e.prefix+n,r);if(e.since)for(let[r,i]of[...P(w,e,e.since),...[...t].filter(([e])=>n(e))])U.set(e.prefix+r,i);for(let n of t.keys())W.add(e.prefix+n)}let G=H;if(x){let e=(e,t)=>t.some(([t,n])=>e[0]<=n&&e[1]>=t);G=new Map([...U].map(([t,n])=>[t,n.filter(n=>e(n,H.get(t)??[]))]).filter(([,e])=>e.length))}if(S&&!G.size)return{findings:[],summary:{baseSha:_,headSha:v,worktree:S,files:0,model:null,elapsedMs:Date.now()-c,...R.length?{warnings:R}:{}}};let K=r.effort??`medium`,q={engine:r.engine,model:r.model,effort:r.effort,permissions:`read-only`,cwd:l,system:e(K,A(u,_))},J=[...G].map(([e,t])=>`- ${e} (${W.has(e)?`untracked, `:``}lines ${t.map(([e,t])=>e===t?e:`${e}-${t}`).join(`, `)})`).join(`
5
- `),Y=e=>(G.get(e.file)??[]).some(([t,n])=>e.line>=t&&e.line<=n),X=o({findings:a(ee.superRefine((e,t)=>{Y(e)||t.addIssue({code:`custom`,path:[`line`],message:`${e.file}:${e.line} is not a changed line; use a line from the changed files list`})}))}),ae=x??_,oe=e=>{let t=e.prefix?` -C ${p.relative(T,p.join(C,e.prefix))}`:``,n=k.length||j.length?` ${M(e).map(e=>e===`--`?e:`'${e}'`).join(` `)}`:``,r=e.since??e.base;return`git${t} diff ${e.head?`${r}..${e.head}`:r}${n}`},se=V.slice(1).filter(e=>[...G.keys()].some(t=>t.startsWith(e.prefix))).map(e=>({prefix:e.prefix,command:oe(e)})),ce=await(s.reviewTask??b)(t({from:ae,...S?{}:{head:v},command:oe(z),submodules:se,files:J}),{...q,name:`Review`,returns:X}),Z=new Map,le=[...V].sort((e,t)=>t.prefix.length-e.prefix.length),ue=(e,t)=>{if(!Z.has(e)){let t=le.find(t=>e.startsWith(t.prefix)),n=e.slice(t.prefix.length),r=``;try{r=t.head?w(t,[`show`,`${t.head}:${n}`]):h(p.join(C,t.prefix,n),`utf8`)}catch(t){console.error(`coder review: ${e} could not be read for its fingerprint`,t)}Z.set(e,r.split(`
6
- `).map(e=>e.trim()))}let n=Z.get(e),r=n.slice(0,t-1).reverse().find(Boolean)??``,i=n.slice(t).find(Boolean)??``;return[r,n[t-1]??``,i].join(`
7
- `)},Q=ce.data.findings.map(e=>({...e,fingerprint:O(e.file,ue(e.file,e.line),e.category)})).sort((e,t)=>E[e.severity]-E[t.severity]),$={baseSha:_,headSha:v,worktree:S,files:G.size,model:ce.model,elapsedMs:Date.now()-c},de={findings:Q,summary:$};if(r.post&&m){let e=e=>V.some(t=>t.prefix&&e.file.startsWith(t.prefix)),t=Q.filter(e).length;t&&R.push(`Did not post ${t} submodule finding${t===1?``:`s`} because the pull request diff has no lines for them.`);let r={...$,author:m.author},i={repo:m.repo,pr:m.number,cwd:l,findings:Q.filter(t=>!e(t)),summary:r,...x?{since:x}:{}};$.posted=ne(f)?await n(`review`,{op:`post`,input:i}):ie(i,f)}return R.length&&($.warnings=R),de}const L=`github`,R=/<!-- coder-review:fp=([a-f0-9]{40}) -->/g,z=/<!-- coder-review:summary head=([^\s>]+) -->/;function B(e=process.cwd(),t){let n=t?{...process.env,GH_TOKEN:t}:process.env;return(t,r,i)=>_(t,r,{cwd:e,env:n,input:i,encoding:`utf8`,maxBuffer:67108864,stdio:[`pipe`,`pipe`,`pipe`]})}function V(e,t,n){let r=e(`gh`,t,n===void 0?void 0:`${JSON.stringify(n)}\n`);return r.trim()?JSON.parse(r):void 0}const H=(e,t)=>V(e,[`api`,t,`--paginate`,`--slurp`]).flat();function U(e){if(typeof e==`number`)return{number:e};if(/^\d+$/.test(e))return{number:Number(e)};let t=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);if(!t)throw new y(`invalid-option`,`pr must be a PR number or GitHub PR URL, got "${e}".`,{hint:`Use base/head for a local review on any host.`});return{number:Number(t[3]),repo:`${t[1]}/${t[2]}`}}function W(e){return new Set(e.flatMap(e=>[...e.body?.matchAll(R)??[]].map(e=>e[1])))}function G(e){for(let t of[...e].reverse()){let e=t.body?.match(z);if(e)return{id:t.id,head:e[1]}}}function K(e,t){return e.filter(e=>e.user?.login===t)}function q(e,t,n){return K(H(e,t),n)}function J(e,t,n,r){return G(q(e,`repos/${t}/issues/${n}/comments`,r))}function Y(e,t){try{return e(`git`,[`cat-file`,`-e`,t]),!0}catch{return!1}}function X(e,t={}){if(!e.author&&t.token)throw Error(`GitHub review task is missing its author`);let n=U(e.pr);if(e.repo&&n.repo&&n.repo.toLowerCase()!==e.repo.toLowerCase())throw new y(`invalid-option`,`pull request is in ${n.repo}, not in this task's repository ${e.repo}`);let r=t.exec??B(e.cwd,t.token),i=e.repo??n.repo,a=i?[`-R`,i]:[],o=V(r,[`pr`,`view`,String(n.number),...a,`--json`,`baseRefOid,headRefOid,url`]),s=i??new URL(o.url).pathname.split(`/`).slice(1,3).join(`/`);r(`git`,[`fetch`,`-q`,`https://github.com/${s}.git`,o.baseRefOid,o.headRefOid]);let c=e.author??V(r,[`api`,`user`]).login,l=e.since??J(r,s,n.number,c)?.head;return{pr:{number:n.number,repo:s,author:c},baseSha:o.baseRefOid,headSha:o.headRefOid,...l&&Y(r,l)?{since:l}:{}}}function ie(e,t={}){let n=t.exec??B(e.cwd,t.token),{repo:r,pr:i,findings:a,summary:o,since:s}=e,c=W(q(n,`repos/${r}/pulls/${i}/comments`,o.author)),l=a.filter(e=>!c.has(e.fingerprint));l.length&&V(n,[`api`,`repos/${r}/pulls/${i}/reviews`,`--method`,`POST`,`--input`,`-`],{commit_id:o.headSha,event:`COMMENT`,body:`Coder review: ${l.length} finding${l.length===1?``:`s`}.`,comments:l.map(e=>({path:e.file,line:e.line,side:`RIGHT`,body:`**[${e.severity.toUpperCase()}]** ${e.summary}\n\n${e.failure_scenario}\n\n<!-- coder-review:fp=${e.fingerprint} -->`}))});let u=e=>a.filter(t=>t.severity===e).length,d=s?`Reviewed changes after \`${s}\` through \`${o.headSha}\`.`:`Reviewed through \`${o.headSha}\`.`,f=`<!-- coder-review:summary head=${o.headSha} -->
8
- ## Coder review
9
-
10
- Findings in this run. Critical ${u(`critical`)} · Major ${u(`major`)} · Minor ${u(`minor`)} · Nit ${u(`nit`)}${o.model?` · Model ${o.model}`:``} · Elapsed ${(o.elapsedMs/1e3).toFixed(1)}s
11
-
12
- ${l.length?`Posted ${l.length} new inline comment${l.length===1?``:`s`}.`:`No new inline comments; every finding above was already posted.`} ${d}`,p=J(n,r,i,o.author);return V(n,[`api`,p?`repos/${r}/issues/comments/${p.id}`:`repos/${r}/issues/${i}/comments`,`--method`,p?`PATCH`:`POST`,`--input`,`-`],{body:f}),l.length}export{L as REVIEW_PLATFORM,S as args,D as changedLines,C as concurrency,I as default,x as description,O as fingerprint,G as lastReviewSummary,K as ownReviewComments,U as parseGithubPr,ie as postReview,A as repositoryRules,X as resolveReviewTarget,B as reviewCli,W as reviewFingerprints};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-BBlH53hA.js";const t=e(`flow`,{drive:async()=>(await import(`./drive-BqunNi9n.js`)).commandDrive,run:async()=>(await import(`./run-DjTTb8oA.js`)).commandRun,list:async()=>(await import(`./list-BlOB32n6.js`)).commandList,ls:async()=>(await import(`./list-BlOB32n6.js`)).commandList,discover:async()=>(await import(`./discover-CyIfIBGD.js`)).commandDiscover,result:async()=>(await import(`./result-BesDQ-b1.js`)).commandResult,watch:async()=>(await import(`./watch-BiyN4NxE.js`)).commandWatch,stream:async()=>(await import(`./watch-BiyN4NxE.js`)).commandWatch,stop:async()=>(await import(`./stop-D8G7AtdY.js`)).commandStop,resume:async()=>(await import(`./resume-2Y0uC5MM.js`)).commandResume,archive:async()=>(await import(`./archive-H2B7Me8E.js`)).commandArchive,delete:async()=>(await import(`./delete-UyzcQPoG.js`)).commandDelete},{menu:[{usage:`run <name|path> [--wait] [--args ...]`,blurb:`run a flow in the background (--wait to follow it live)`},{usage:`list`,blurb:`recent flow runs (by default running + just stopped)`},{usage:`discover`,blurb:`list flows runnable here (workspace + global)`},{usage:`result [run-id]`,blurb:`progress and result of a run`},{usage:`watch [run-id]`,blurb:`watch a run live (replay + follow)`},{usage:`stop [run-id]`,blurb:`stop a run and its still-running tasks`},{usage:`resume [run-id]`,blurb:`continue a stopped or edited run`},{usage:`archive <run-id> | --all-stopped`,blurb:`hide a run (or all stopped) from the list`},{usage:`delete <run-id> | --all-archived`,blurb:`delete a run's record (or all archived)`}],description:[`Orchestrate many coder tasks with a plain TypeScript file: dispatch, gates,`,`concurrency, journaling, and resume. Flows live in .coder/flows/ (workspace)`,"or ~/.coder/flows/ (global). See `coder docs flows`."]},{aliases:{stream:`watch`,ls:`list`},hint:`Run a flow: coder flow run <name>`});export{t as commandFlow};
@@ -1,8 +0,0 @@
1
- import{C as e,gn as t,lr as n,nn as r,pr as i}from"./prompts-Bj4Fbd_n.js";import a from"node:path";import o from"node:fs";import s from"node:readline";const c=/^[A-Za-z0-9-]{1,128}$/;function l(e){return[...new Set([...e.previousThreadIds??[],...e.threadId?[e.threadId]:[]])]}async function u(s,c){if(!/^[a-zA-Z0-9_-]+$/.test(c))return[];let l=s.engine===`claude`,u=l?e():t(),d=s.id?a.join(r(s.cwd??``,s.id),`history-files.json`):void 0,f=JSON.stringify([s.engine,u,c]),p=d?n(d)??{}:{},m=p[f];if(m?.length&&m.every(e=>e.startsWith(`${u}${a.sep}`)&&o.existsSync(e)))return m;let h=[],g=async(e,t)=>{for(let n of await o.promises.readdir(e,{withFileTypes:!0}).catch(()=>[])){let r=a.join(e,n.name);n.isDirectory()&&t?await g(r,t-1):n.isFile()&&(l?n.name===`${c}.jsonl`:n.name.endsWith(`-${c}.jsonl`))&&h.push(r)}};return l?await g(u,1):(await g(a.join(u,`sessions`),3),await g(a.join(u,`archived_sessions`),0)),d&&h.length&&i(d,{...p,[f]:h}),h}function d(e,t){let n=t?e.message:e.type===`response_item`?e.payload:void 0;if(!n||!t&&n.type===`reasoning`)return;let r=n.content,i=Array.isArray(r)?r:[],a=n.role??(n.type?.endsWith(`_output`)?`tool`:`assistant`),o=i.filter(e=>e.type===`tool_use`).map(e=>String(e.id)),s=i.filter(e=>e.type===`tool_result`).map(e=>String(e.tool_use_id));[`function_call`,`custom_tool_call`].includes(n.type)&&o.push(String(n.call_id)),[`function_call_output`,`custom_tool_call_output`].includes(n.type)&&s.push(String(n.call_id));let c=typeof r==`string`?r:i.length?i.map(e=>typeof e.text==`string`?e.text:JSON.stringify(e)).join(`
2
- `):JSON.stringify(n);return{speaker:s.length&&!o.length?`tool`:a,time:String(e.timestamp??``),text:c,calls:o,results:s,startsExchange:a===`user`&&!s.length,reply:a===`assistant`&&(t?i.some(e=>e.type===`text`)||typeof r==`string`:n.type===`message`)}}async function*f(e,t){for(let n of await u(e,t)){let t=o.createReadStream(n,{encoding:`utf8`}),r=s.createInterface({input:t,crlfDelay:1/0});try{for await(let t of r){let n;try{n=JSON.parse(t)}catch{continue}let r=d(n,e.engine===`claude`);r&&(yield r)}}finally{r.close(),t.destroy()}}}async function p(e,{exchanges:t=6,maxBytes:n=2e4}={}){if(!e.threadId)return{text:``,exchanges:0};let r=[],i=``,a=0,o=!1,s=new Set,c=()=>{if(a>n)r.length=0;else if(i&&o&&!s.size)for(r.push(i);r.length>t||Buffer.byteLength(r.join(`
3
-
4
- `))>n;)r.shift();i=``,a=0,o=!1,s.clear()};for await(let t of f(e,e.threadId)){if(t.startsExchange&&!s.size&&c(),!i&&!t.startsExchange)continue;for(let e of t.calls)s.add(e);for(let e of t.results)s.delete(e);t.reply&&(o=!0);let e=`[${t.time}] ${t.speaker}\n${t.text}`;a+=Buffer.byteLength(e)+2,a<=n?i+=`${i?`
5
-
6
- `:``}${e}`:i=`[exchange exceeds the recent history budget]`}return a>n&&(i=``),c(),{text:r.join(`
7
-
8
- `),exchanges:r.length}}async function m(e,{query:t,from:n=0,limit:r=10}={}){if(t!==void 0&&(typeof t!=`string`||!t.length||t.length>500))throw Error(`Provide a query of 1 to 500 characters`);if(!Number.isSafeInteger(n)||n<0)throw Error(`Provide from as a nonnegative message index`);if(!Number.isInteger(r)||r<1||r>20)throw Error(`Provide a limit of 1 to 20 messages`);let i=[],a=t?.toLowerCase(),o=0;for(let t of l(e))for await(let s of f(e,t)){let e=o++;if(e<n)continue;let t=a===void 0?0:s.text.toLowerCase().indexOf(a);if(t<0)continue;if(i.length===r)return{messages:i,next:i[i.length-1].index+1};let c=Math.max(0,t-200);i.push({index:e,speaker:s.speaker,time:s.time,text:s.text.slice(c,c+1200)})}return{messages:i}}export{u as a,p as i,l as n,m as r,c as t};
@@ -1 +0,0 @@
1
- import{An as e}from"./prompts-Bj4Fbd_n.js";import{t}from"./integrations-IGnXBrPw.js";import{a as n,i as r,l as i,s as a}from"./task-bkoi8_NN.js";import o from"node:path";import s from"node:process";import c from"node:fs";import{execFile as l,spawn as u}from"node:child_process";import d from"node:fs/promises";import{promisify as f}from"node:util";import{Readable as p}from"node:stream";import{pipeline as m}from"node:stream/promises";const h=e=>Buffer.from(JSON.stringify(e)).toString(`base64url`),g=e=>JSON.parse(Buffer.from(e,`base64url`).toString(`utf8`)),_=f(l);async function v(e){if(s.platform===`linux`){let t=await d.readFile(`/proc/${e}/stat`,`utf8`).catch(()=>``);return t.slice(t.lastIndexOf(`)`)+2).split(` `)[19]}return(await _(`ps`,[`-p`,String(e),`-o`,`lstart=`]).catch(()=>void 0))?.stdout.trim()||void 0}function y(e){let t=g(e);if(!Number.isInteger(t.pid)||typeof t.dir!=`string`||typeof t.started!=`string`)throw Error(`Invalid local runner handle`);return t}var b=class{workDir;kind=`local`;children=new Map;constructor(e){this.workDir=e}async start(t,i){await d.mkdir(this.workDir,{recursive:!0});let l=await d.mkdtemp(o.join(this.workDir,`task-`)),f=t.runner===`local`?r(t):void 0,p=c.openSync(o.join(l,`runner.log`),`a`);await d.mkdir(o.join(l,`bin`)),await d.writeFile(o.join(l,`bin/coder`),`#!/bin/sh\nexec "${s.execPath}" "${e}" "$@"\n`,{mode:493});let m=u(s.execPath,[e,`agent`,`run`,`--task`,t.id],{cwd:l,detached:!0,env:{PATH:[o.join(l,`bin`),s.env.PATH??``].join(o.delimiter),HOME:s.env.HOME??``,TMPDIR:s.env.TMPDIR??``,...s.env.CODER_HOME?{CODER_HOME:s.env.CODER_HOME}:{},...i,...f?{CODER_CHECKOUT_CACHE:f}:{},CODER_INBOX_SOCKET:n(l)},stdio:[`ignore`,p,p]});await new Promise((e,t)=>{m.once(`spawn`,e),m.once(`error`,t)}),c.closeSync(p);let g={child:m};this.children.set(m.pid,g),m.once(`close`,e=>{g.code=e,a(o.join(l,`repo`)).catch(e=>console.error(`coder runner: checkout cleanup failed`,e))}),m.unref();let _=await v(m.pid);if(!_)throw Error(`Could not identify the local runner process`);return h({pid:m.pid,dir:l,started:_})}async status(e){let{pid:t,dir:n,started:r}=y(e),i=this.children.get(t);if(i?.code===void 0)try{if(s.kill(t,0),await v(t)===r)return{state:`running`}}catch{}return await a(o.join(n,`repo`)),{state:`exited`,...i?.code==null?{}:{code:i.code}}}async stop(e){let{pid:t,started:n}=y(e);if(await v(t)===n)try{s.kill(-t,`SIGTERM`)}catch{try{s.kill(t,`SIGTERM`)}catch{}}}async push(e,t){let{pid:r,dir:a,started:o}=y(e);if(await v(r)!==o)throw Error(`The task process exited`);return i(n(a),t)}};function x(e,t,n={}){return new Promise((r,i)=>{let a=u(e,t,{env:n,stdio:[`ignore`,`pipe`,`pipe`]}),o=``,s=``;a.stdout.on(`data`,e=>o+=String(e)),a.stderr.on(`data`,e=>s+=String(e)),a.once(`error`,i),a.once(`close`,e=>r({code:e,stdout:o,stderr:s}))})}function S(){return Object.values(t).flatMap(e=>e.tools.install?[`(${e.tools.install})`]:[])}function C(e,t=200,n={}){return new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`,...n}})}const w=e=>e.searchParams.has(`cursor`);function T(e){if(e)try{return g(e)}catch{return}}const E=e=>T(e.searchParams.get(`cursor`));function D(e,t=50,n=200){let r=Number(e.searchParams.get(`limit`)??t);return Number.isInteger(r)&&r>0?Math.min(r,n):t}function O(e,t,n){let r=e.slice(0,t);return{items:r,...e.length>t?{next:h(n(r.at(-1)))}:{}}}const k=(e,t=302)=>new Response(null,{status:t,headers:{location:e}}),A=()=>new Response(`Forbidden`,{status:403}),j=()=>new Response(`Not found`,{status:404,headers:{"content-type":`text/plain; charset=utf-8`}}),M=()=>new Response(`Method not allowed`,{status:405}),N=e=>k(`/login?return=${encodeURIComponent(`${e.pathname}${e.search}`)}`),P=e=>e.startsWith(`/api/auth`)?65536:/\/tasks\/[^/]+\/history$/.test(e)?4194304:1048576;async function F(e,t,n){let r=Number(t??0);if(Number.isFinite(r)&&r>n)throw Object.assign(Error(`Payload too large`),{status:413});let i=[],a=0;for await(let t of e){if(a+=t.byteLength,a>n)throw Object.assign(Error(`Payload too large`),{status:413});i.push(t)}let o=new Uint8Array(a),s=0;for(let e of i)o.set(e,s),s+=e.byteLength;return o}function I(e){let t=new Headers;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,Array.isArray(r)?r.join(`, `):r);return t}function L(e,t){let n=e.url??`/`,r=e.method===`GET`||e.method===`HEAD`?void 0:p.toWeb(e);return new Request(`http://${e.headers.host??`localhost`}${n}`,{method:e.method,headers:I(e.headers),body:r,duplex:`half`,signal:t})}function R(e,{admit:t=()=>!0}={}){return async(n,r)=>{if(!t(n))return void r.writeHead(404).end(`Not found`);let i=new AbortController,a=()=>{n.socket.destroyed&&i.abort()};r.once(`close`,()=>i.abort()),a();try{let t=await e(L(n,i.signal),n.socket.remoteAddress?.replace(/^::ffff:/,``));a();let o=Object.fromEntries(t.headers.entries()),s=t.headers.getSetCookie();s.length&&(o[`set-cookie`]=s),r.writeHead(t.status,o),t.body?await m(p.fromWeb(t.body),r).catch(()=>{}):r.end()}catch(e){if(r.headersSent)return void r.destroy();let t=typeof e==`object`&&e&&`status`in e;t||console.error(`coder server: request failed`,e);let n=t?e instanceof Error?e.message:String(e):`Internal server error`;r.writeHead(t?Number(e.status):500,{"content-type":`application/json`}),r.end(JSON.stringify({error:n}))}}}async function z(e,t){if(e.method===`GET`||e.method===`HEAD`||!e.body)return e;try{let n=await F(e.body,e.headers.get(`content-length`)??void 0,t);return new Request(e.url,{method:e.method,headers:e.headers,body:n.byteLength?Buffer.from(n):void 0,signal:e.signal})}catch(e){if(e.status===413)return new Response(`Payload too large`,{status:413});throw e}}export{S as _,C as a,M as c,D as d,w as f,x as g,b as h,A as i,j as l,N as m,E as n,z as o,k as p,T as r,R as s,P as t,O as u,g as v,h as y};
@@ -1,2 +0,0 @@
1
- import{Nn as e,Vt as t,Zn as n}from"./prompts-Bj4Fbd_n.js";import{s as r}from"./dispatch-CFZ9Crvg.js";import{i}from"./cli-BBlH53hA.js";import{c as a}from"./args-CURX44CA.js";import{r as o,t as s}from"./mcp-server-BlP9lACI.js";async function c(e,t=6e4){let r=AbortSignal.timeout(t),i=await n(e,fetch,r).catch(t=>{throw r.aborted?Error(`MCP server ${e.name} did not start in time`):t});try{return{spec:e,client:i,tools:(await i.tools()).filter(t=>(!e.tools?.length||e.tools.includes(t.name))&&(!e.readOnly||t.annotations?.readOnlyHint===!0))}}catch(t){throw await i.close().catch(()=>{}),r.aborted?Error(`MCP server ${e.name} did not start in time`):t}}function l(e,t){let n=(t??``).toLowerCase().split(/\s+/).filter(Boolean);return e.filter(e=>{let t=`${e.name} ${e.description??``}`.toLowerCase();return n.every(e=>t.includes(e))})}function u(e,t=c){let n=new Map(e.map(e=>[e.name,e])),r=new Map,i=e=>{let i=n.get(String(e??``));if(!i)throw Error(`Unknown server "${e}". Servers: ${[...n.keys()].join(`, `)||`none`}`);let a=r.get(i.name);return a||(a=t(i).catch(e=>{throw r.delete(i.name),e}),r.set(i.name,a)),a};return{find_tools:{description:`Find tools on one of the servers listed in your prompt by words from their names or descriptions; empty query lists them all. Returns each match with one line and its input schema.`,inputSchema:s({server:`string`,query:`string`},[`server`],{server:`A server name from the prompt.`,query:`Words that the tool name or description contain, such as "issue list".`}),annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},handler:async e=>{let{spec:t,tools:n}=await i(e.server),r=l(n,typeof e.query==`string`?e.query:void 0),a=e=>e.map(e=>e.name).join(`, `)||`none`;return r.length?r.length>25?`${r.length} tools on ${t.name} match; narrow the query. Names: ${a(r)}`:r.map(e=>({name:e.name,description:(e.description??``).split(`
2
- `)[0].trim(),inputSchema:e.inputSchema??{type:`object`}})):`No tool on ${t.name} matches. Its tools: ${a(n)}`}},call_tool:{description:`Call a tool found with find_tools; returns the server's result as is.`,inputSchema:s({server:`string`,tool:`string`,args:`object`},[`server`,`tool`],{server:`A server name from the prompt.`,tool:`A tool name find_tools returned.`,args:`The tool's arguments, matching its input schema.`}),handler:async e=>{let{spec:t,client:n,tools:r}=await i(e.server),a=String(e.tool??``);if(!r.some(e=>e.name===a))throw Error(`No tool "${a}" on ${t.name}; find it with find_tools first`);let o=await n.rpc(`tools/call`,{name:a,arguments:e.args&&typeof e.args==`object`?e.args:{}});return o&&typeof o==`object`&&Array.isArray(o.content)?o:JSON.stringify(o)}}}}function d(e,n){let i=t(e,n);if(!i)throw Error(`No task "${n}"`);return r(i.mcp,process.env,void 0,{onWarning:e=>process.stderr.write(`coder hub: ${e}\n`)}).filter(e=>!e.alwaysLoad)}const f=i({name:`task hub`,options:{cwd:a},args:1,run:({args:t,cwd:n})=>o(`coder`,u(d(n,t[0])),void 0,void 0,e())});export{f as commandTaskHub};
@@ -1 +0,0 @@
1
- import{a as e,n as t,o as n,r}from"./prompt-PEgcMJO7.js";import{i}from"./cli-BBlH53hA.js";import{p as a,s as o}from"./output-BKeyLbvt.js";import{c as s,n as c,t as l}from"./args-CURX44CA.js";import u from"node:path";import d from"node:process";const f={read:`Read-only`,write:`Read-write`};function p(e,t){let n=a,{id:r,samples:i,integrations:s}=e;d.stdout.write(`Created ${n.cyan(t)}.\n`);let c=s.length?[`1. Write ${t}/system.md. Try it with no server: coder task run --agent ${r} "<task>"`,`2. Run it on a server: coder dash on this machine reads it from this repo; a cloud server imports it from the dashboard or with coder agent push.`,`3. On the dashboard, create the agent's app on each platform it uses (${s.join(`, `)}) from its Platforms tab, and install it.`,`4. Fire an event by hand, or leave --server out to run it offline: coder agent run ${r} ${i[0]??`<event.json>`} --server <url>`,`Guide: https://github.com/muzam1l/coder/blob/main/docs/agents/index.md`,`Agents: coder docs agents`]:[`1. Write ${t}/system.md. Try it with no server: coder task run --agent ${r} "<task>"`,`2. Give the agent a platform under "integrations" in ${t}/agent.json, then run init again or follow the guide: coder agent integrations list`,`Guide: https://github.com/muzam1l/coder/blob/main/docs/agents/index.md`,`Agents: coder docs agents`];d.stdout.write(`\n${o(c,n)}\n`)}async function m(r){let{regexError:i}=await import(`./agent-6GooVMsq.js`).then(e=>e.t),{INTEGRATIONS:o}=await import(`./integrations-IGnXBrPw.js`).then(e=>e.r),{PRESETS:s}=await import(`./types-D_xnfP7m.js`).then(e=>e.n),c=a;d.stdout.write(`Creating ${c.cyan(`.coder/agents/${r}`)}. Pick what the agent listens to and what it may do; flags skip these questions.\n\n`);let l=await e({title:`Integrations`,hint:`Platforms the agent listens to and acts on. Add or remove them later in agent.json.`,multi:!0,selected:[Object.keys(o)[0]],options:Object.values(o).map(e=>({value:e.id,hint:e.description}))}),u={},p={};for(let e of l){let t=o[e],r=Object.keys(t.events),a=await n({title:`${e} events`,hint:`What wakes the agent on ${e}; each event runs the agent with that event as its prompt.`,multi:!0,required:!0,selected:r.filter(e=>!t.events[e].noisy),options:Object.entries(t.events).map(([e,t])=>({value:e,hint:t.description,...t.noisy?{input:{label:`match`,value:`^help\\b`,placeholder:`tab to add a match`,validate:i}}:{}}))});u[e]=a.values,p[e]=a.inputs}let[m]=await e({title:`Access`,hint:`What the agent may do on its platforms and connections; Read-write allows every tool.`,selected:[`write`],options:s.map(e=>({value:e,label:f[e]}))}),h=await t(`Display name`,r,void 0,`Shown in replies and app names.`);return{...h===r?{}:{name:h},integrations:l,events:u,matches:p,access:m}}const h=i({name:`agent init`,help:{usage:`coder agent init [id] [--integrations a,b] [--events a,b] [--access <mode>] [--name <text>] [--description <text>] [--permissions <mode>] [--yes]`,summary:"Create .coder/agents/<id>/ with an agent.json built from the integration catalog, a system.md to write the prompt in, and one sample event per integration for `coder agent run`. Asks for the id, integrations, events, and access when run in a terminal without them.",flags:[[`--integrations <a,b>`,`platforms the agent listens to (see coder agent integrations list)`],[`--events <a,b>`,`events that start tasks, applied to each integration that has them (default: mention)`],[`--access <mode>`,`read or write, on its platforms and connections (default: write)`],[`--name <text>`,`display name used in replies (default: the id)`],[`--description <text>`,`one line for agent list`],[`--permissions <mode>`,`engine permission mode (default: read-only)`],[`--yes`,`skip the questions and take the defaults`]],examples:[[`coder agent init`,`answer the questions, id included`],[`coder agent init triage --integrations github --events issue,mention --access read`,`no questions`]]},options:{...l,name:s,description:s,integrations:s,events:s,access:s,permissions:s,match:s,yes:c},args:1,run:async({options:e,args:[n],cwd:i})=>{let{agents:a}=await import(`./agent-6GooVMsq.js`).then(e=>e.t),o=r()&&!e.yes;return a.init(n,{...e,cwd:i,permissions:e.permissions,...o?{askId:e=>t(`Agent id`,``,e,`Folder name under .coder/agents and the name used in commands.`)}:{},...o&&!e.integrations?{askPicks:m}:{}})},json:(e,{cwd:t})=>({id:e.id,dir:u.relative(t,e.dir),files:e.files,samples:e.samples}),print:(e,{cwd:t})=>p(e,u.relative(t,e.dir))});export{h as commandAgentInit};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-BBlH53hA.js";const t=e(`agent integrations`,{list:async()=>(await import(`./list-DvFVuGT_.js`)).commandIntegrationsList,ls:async()=>(await import(`./list-DvFVuGT_.js`)).commandIntegrationsList,show:async()=>(await import(`./show-Dn7zTz-9.js`)).commandIntegrationsShow},{menu:[{usage:`list`,blurb:`list integrations with their events and tools`},{usage:`show <id>`,blurb:`events and tools of one integration`}],description:[`The platforms an agent can listen to and act on: their events and tool presets.`]},{aliases:{ls:`list`}});export{t as commandAgentIntegrations};
@@ -1,2 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{c as t,d as n,o as r,r as i,s as a}from"./slack-DhPhLuWb.js";import{randomUUID as o}from"node:crypto";async function s(e,t){let r=new URLSearchParams(await e.text()),i=Object.fromEntries(t.map(e=>[e,r.get(e)?.trim()??``])),a=t.filter(e=>!i[e]);if(a.length)throw new n(`invalid-field`,a[0],`Missing ${a.join(`, `)}`);return i}async function c(e,t,r=fetch,i=Date.now()){let a=await r(e,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)}),o=await a.json().catch(()=>({}));if(!a.ok||!o.access_token)throw new n(`platform-error`,o.error??String(a.status),`${new URL(e).host} refused the token request: ${o.error_description??o.error??a.status}`);return{accessToken:o.access_token,...o.refresh_token?{refreshToken:o.refresh_token}:{},...o.expires_in?{expiresAt:i+o.expires_in*1e3}:{},...o.id_token?{idToken:o.id_token}:{}}}async function l(e,t,n,r=Date.now()){if(!e)throw Error(`The installation has no token; connect it again from the dashboard`);let i=JSON.parse(e);if(!i.refreshToken||(i.expiresAt??1/0)-3e5>r)return i.accessToken;let{idToken:a,...o}=await t(i.refreshToken),s={...o,refreshToken:o.refreshToken??i.refreshToken},c=await n?.(JSON.stringify(s));return c?JSON.parse(c).accessToken:s.accessToken}const u=`https://api.linear.app/oauth/token`,d=[`clientId`,`clientSecret`,`webhookSecret`],f=e=>e.replace(/\/$/,``);async function p(e,t,n){let r=await n(`https://api.linear.app/graphql`,{method:`POST`,headers:{authorization:`Bearer ${e}`,"content-type":`application/json`},body:JSON.stringify({query:t})}),i=await r.json().catch(()=>({}));if(!r.ok||!i.data)throw Error(`Linear refused the query: ${r.status}`);return i.data}function m(e,t,n,r,i=!1){return`https://linear.app/oauth/authorize?${new URLSearchParams({client_id:e.clientId,redirect_uri:t,response_type:`code`,scope:r?`read,write,app:mentionable,app:assignable`:i?`read,write`:`read`,state:n,...r?{actor:`app`}:{}})}`}function h(e,t,r,i){let a=new URL(e.url).searchParams.get(`code`);if(!a)throw new n(`missing-code`);let{clientId:o,clientSecret:s}=t;return c(u,{grant_type:`authorization_code`,code:a,redirect_uri:r,client_id:o,client_secret:s},i)}function g(e,t,n){let r=new URLSearchParams(n?{"oauth.client_name":n}:{});return r.set(`developer.name`,f(e).replace(/^https?:\/\//,``)),r.set(`oauth.client_uri`,f(e)),r.append(`oauth.redirect_uris`,`${f(e)}/install/linear/callback`),r.append(`oauth.redirect_uris`,`${f(e)}/connect/linear/callback`),r.set(`webhook.enabled`,`true`),r.set(`webhook.url`,`${f(e)}/hooks/linear?app=${t}`),r.set(`webhook.resourceTypes`,`AgentSessionEvent`),`https://linear.app/settings/api/applications/new?${r}`}const _={builtin:`shared`,createStep:(e,{name:t}={},n=o())=>({intro:`Linear runs the agent as an app of your own OAuth application.`,link:g(e,n,t),steps:[{text:`Open the link signed in to Linear, check the form and click **Create**.`},{text:`Copy the client ID, the client secret and the webhook signing secret into the fields below.`}],notes:[`The link fills in the name, the callback URLs and the webhook.`,`To install the app in other Linear workspaces, make it public in its Linear settings.`],hidden:{key:n},fields:[{name:`clientId`,label:`Client ID`,placeholder:`9f3c2a7d1e8b4c6a0d5e7f1a2b3c4d5e`,required:!0},{name:`clientSecret`,label:`Client secret`,placeholder:`4b1e9c7a2d0f8e3c5a6b9d1f0e2c4a7b`,required:!0},{name:`webhookSecret`,label:`Webhook signing secret`,hint:`shown with the webhook settings`,placeholder:`lin_wh_…`,required:!0}],submit:`Create Linear app`}),settingsUrl:()=>`https://linear.app/settings/api`,values:(e,{publicUrl:t,definition:n})=>({url:`https://linear.app/settings/api`,label:`Open application`,lines:[{text:`Application name`,copy:n.name??e.agent},{text:`Callback URL`,copy:`${f(t)}/install/linear/callback`},{text:`Callback URL`,copy:`${f(t)}/connect/linear/callback`},{text:`Webhook URL`,copy:`${f(t)}/hooks/linear?app=${e.id.slice(e.id.indexOf(`:`)+1)}`},{text:`Webhook resource types`,copy:`AgentSessionEvent`}]}),async createCallback(e,{state:t,definition:r}){let{key:i,...a}=await s(e,[...d,`key`]);if(!/^[0-9a-f-]{36}$/.test(i))throw new n(`invalid-field`,`key`);return{platformAppId:i,name:r.name??t.agent,credentials:a}},accountUrl:({login:e})=>`https://linear.app/${encodeURIComponent(e)}`,installUrl(e,t,{publicUrl:n,state:r}){return m(t,`${f(n)}/install/linear/callback`,r,!0)},async installCallback(e,{credentials:t,publicUrl:n,fetch:r}){let{idToken:i,...a}=await h(e,t,`${f(n)}/install/linear/callback`,r),{organization:o,viewer:s}=await p(a.accessToken,`query { organization { id name urlKey } viewer { id } }`,r);return{platformInstallId:o.id,account:{login:o.urlKey},token:JSON.stringify(a),self:s.id}}},v={authorizeUrl:(e,{publicUrl:t,state:n,access:r})=>m(e,`${f(t)}/connect/linear/callback`,n,!1,!!r),async exchange(e,t,{publicUrl:n,fetch:r,access:i}){let{idToken:a,...o}=await h(e,t,`${f(n)}/connect/linear/callback`,r),{viewer:s}=await p(o.accessToken,`query { viewer { id displayName } }`,r);return{id:s.id,login:s.displayName,...i?{token:JSON.stringify(o)}:{}}},async access(e,t,{fetch:n,now:r}){let{clientId:i,clientSecret:a}=t,o;return{accessToken:await l(e,e=>c(u,{grant_type:`refresh_token`,refresh_token:e,client_id:i,client_secret:a},n,r),async e=>{o=e},r),...o?{refreshed:o}:{}}}};function y(e,t,n,r){let{clientId:i,clientSecret:a}=t;return l(e.token,e=>c(u,{grant_type:`refresh_token`,refresh_token:e,client_id:i,client_secret:a},r),n)}const b={read:[`read`],write:[`read`,`write`]};function x(e,t,n){return{name:`linear`,url:`https://mcp.linear.app/mcp${e.includes(`write`)?``:`/readonly`}`,headers:{Authorization:`Bearer ${n}`},credentialFields:{header:`Authorization`}}}const S={id:`linear`,brand:{color:`#222326`,icon:`M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z`,svg:`<svg xmlns="http://www.w3.org/2000/svg" fill="#222326" viewBox="0 0 100 100" style="fill:light-dark(#222326,#fff)"><path d="M 1.23 61.52 c -0.22 -0.95 0.91 -1.55 1.6 -0.86 L 39.33 97.18 c 0.69 0.69 0.09 1.82 -0.86 1.6 C 20.05 94.45 5.55 79.95 1.23 61.52 Z M 0 46.89 c -0.02 0.28 0.09 0.56 0.29 0.76 L 52.35 99.71 c 0.2 0.2 0.48 0.31 0.76 0.29 2.37 -0.15 4.69 -0.46 6.96 -0.93 0.76 -0.16 1.03 -1.1 0.48 -1.65 L 2.58 39.45 c -0.55 -0.55 -1.49 -0.29 -1.65 0.48 -0.47 2.27 -0.78 4.59 -0.93 6.96 Z M 4.21 29.71 c -0.17 0.37 -0.08 0.81 0.21 1.1 l 64.78 64.78 c 0.29 0.29 0.73 0.37 1.1 0.21 1.79 -0.8 3.52 -1.69 5.19 -2.68 0.55 -0.33 0.64 -1.09 0.18 -1.54 L 8.44 24.34 c -0.45 -0.45 -1.21 -0.37 -1.54 0.18 -0.99 1.67 -1.89 3.4 -2.68 5.19 Z M 12.66 18.07 c -0.37 -0.37 -0.39 -0.96 -0.04 -1.35 C 21.78 6.46 35.11 0 49.95 0 77.59 0 100 22.41 100 50.05 c 0 14.84 -6.46 28.17 -16.72 37.34 -0.39 0.35 -0.98 0.33 -1.35 -0.04 L 12.66 18.07 Z"/></svg>`},name:`Linear`,description:`Agent sessions on Linear issues: mentions and assignments`,installLabel:`Connect Linear`,use:`Mention @{handle} or delegate an issue to it.`,answersEveryPrompt:!0,progressReplies:!0,sample:`linear:2f1e6a1c-0000-4000-8000-000000000001:s:5b7d3c2a-0000-4000-8000-000000000002`,prompt:[`A conversation is a Linear agent session on an issue.`,`get_issue reads the issue by its id or identifier, such as ENG-123.`,`reply posts progress in the agent session; your final message completes it. save_comment posts an issue comment outside the session.`,`Replies are Markdown about the issue; link pull requests you open.`].join(`
2
- `),events:{mention:{description:`Agent session started or prompted by mentioning or assigning the agent`,on:`mention`,addressed:!0}},tools:{presets:b,server:x},hosts:[`api.linear.app`,`mcp.linear.app`],get app(){return _},auth:{canWrite:r,token:(e,t,n,{save:r,fetch:i}={})=>y(e,t,r,i),get user(){return v}},target(e,t){let n=new URL(e.url).searchParams.get(`app`),r;try{r=JSON.parse(t).organizationId}catch{return}return n&&typeof r==`string`?{app:n,installation:r}:void 0},adapter:async e=>(await import(`./adapter-DYxjaefw.js`)).linearAdapter(e),ownEvents(e,t,n,r){let i=JSON.parse(t);if(i.type!==`OAuthApp`||i.action!==`revoked`)return;let o=r.webhookSecret;return a(t,e.headers.get(`linear-signature`),o)&&i.organizationId&&i.oauthClientId===n.id.slice(7)?{uninstalled:`${n.id}:${i.organizationId}`}:{invalid:!0}},event(e,t,n){t.startTyping(`Reading the issue`).catch(()=>{});let r=n.raw.agentSessionPromptContext;return{type:e,actor:{id:n.author.userId,login:n.author.userName},...r?{promptContext:r.slice(0,16384)}:{}}}};var C=e({INTEGRATIONS:()=>w,enabledIntegrations:()=>T,repositoryReader:()=>E});const w={slack:i,github:t,linear:S};function T(e){if(!e)return w;let t=e.filter(e=>!w[e]);if(t.length)throw Error(`Unknown integration ${t.join(`, `)} in SERVER_INTEGRATIONS; pick from ${Object.keys(w).join(`, `)}`);return Object.fromEntries(e.map(e=>[e,w[e]]))}const E=e=>Object.values(e).find(e=>e.repos);export{T as n,C as r,w as t};
@@ -1 +0,0 @@
1
- import{i as e,t}from"./cli-BBlH53hA.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{n as i,o as a}from"./args-CURX44CA.js";import o from"node:process";function s(e){if(!e.length)return void o.stdout.write(`${r.dim(`No engine credentials.`)}\n`);o.stdout.write(`${n([{header:`variable`,value:e=>e.subscription?`${e.name} subscription`:e.name,paint:e=>r.cyan(e)},{header:`scope`,value:e=>e.scope},{header:`value`,value:e=>e.masked},{header:`account`,value:e=>[e.account?.email,e.account?.plan].filter(Boolean).join(` `)}],e,r)}\n`)}const c=e({name:`credentials list`,globalFlags:{cwd:!1},help:{usage:`coder credentials list [--server [url]] [--json]`,flags:[t]},options:{json:i,server:a,yes:i},run:async({options:e})=>{let{credentials:t}=await import(`./remote-D3JZ4MMQ.js`).then(e=>e.i);return t.list(e)},print:s});export{c as commandCredentialsList};
@@ -1 +0,0 @@
1
- import{i as e,t}from"./cli-BBlH53hA.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{runnerOptions as i}from"./remove-DxCv9BB4.js";import a from"node:process";function o({items:e}){if(!e.length)return void a.stdout.write(`${r.dim(`No runners.`)}\n`);a.stdout.write(`${n([{header:`id`,value:e=>e.id,paint:e=>r.cyan(e)},{header:`name`,value:e=>e.name},{header:`scope`,value:e=>e.scope},{header:`status`,value:e=>e.online?`online`:`offline`},{header:`kind`,value:e=>e.kind},{header:`default`,value:e=>e.default?`yes`:``}],e,r)}\n`)}const s=e({name:`runner list`,globalFlags:{cwd:!1},help:{usage:`coder runner list [--server [url]] [--json]`,flags:[t]},options:i,run:async({options:e})=>{let{listRunners:t}=await import(`./runner-BM_98EQl.js`).then(e=>e.t);return t(e)},print:o});export{s as commandRunnerList};
@@ -1,4 +0,0 @@
1
- import{St as e}from"./prompts-Bj4Fbd_n.js";import{i as t}from"./cli-BBlH53hA.js";import{a as n,g as r,l as i,m as a,p as o,s}from"./output-BKeyLbvt.js";import{n as c,r as l,t as u}from"./args-CURX44CA.js";import d from"node:process";const f=t({name:`flow list`,help:{usage:`coder flow list [--archived] [--limit N] [--json]`,summary:`List recent flow runs, most recent first: running runs plus ones that ended
2
- within the last 30 minutes. Older runs auto-archive and move to --archived.`,flags:[[`--archived`,`show archived runs (auto-archived or via flow archive)`],[`--limit <n|all>`,`show at most n runs (default all)`]]},options:{...u,archived:c,limit:l},run:async({options:e})=>{let{collectFlowRuns:t}=await import(`./executor-3QMa-XRY.js`).then(e=>e.S);return t(e)},json:e=>e.runs,print:(e,{options:t})=>p(e,t)});function p({runs:t,clipped:c},l){if(!t.length){d.stdout.write(l.archived?`No archived flow runs.
3
- `:`No recent flow runs.
4
- `),d.stdout.write(`\n${s([`Run one: coder flow run <name>`,`Runnable flows: coder flow discover`],o)}\n`);return}let u=o;d.stdout.write(`${r([{header:`run-id`,value:e=>e.runId,max:28,paint:e=>u.cyan(e)},{header:`name`,value:e=>e.name,max:30},{header:`status`,value:e=>e.status,paint:(e,t)=>a(t.status,e.length)},{header:`tasks`,value:e=>`${e.taskCount} tasks`,paint:e=>u.light(e)},{header:`tokens`,value:e=>{let t=Object.values(e.ledger).reduce((e,t)=>e+t.total,0);return t?`${i(t)} tok`:`-`},paint:e=>u.light(e)},{header:`age`,value:t=>n(e(t.startedAt)),paint:e=>u.light(e)}],t,u)}\n`),c&&d.stdout.write(u.dim(`\n... ${c} more not shown (--limit ${l.limit})\n`)),d.stdout.write(`\n${s([`Result: coder flow result <run-id>`,`Tasks: coder list`,`Runnable flows: coder flow discover`],u)}\n`)}export{f as commandList};
@@ -1,4 +0,0 @@
1
- import"./prompts-Bj4Fbd_n.js";import{i as e,r as t}from"./cli-BBlH53hA.js";import{a as n,g as r,m as i,p as a,s as o}from"./output-BKeyLbvt.js";import{c as s,n as c,r as l,s as u}from"./args-CURX44CA.js";import{o as d}from"./result-D0dpv2O_.js";import f from"node:path";import p from"node:process";function m(e){if(!e.length)return void p.stdout.write(`No server tasks.
2
- `);let t=a;p.stdout.write(r([{header:`task-id`,value:e=>e.task.id,paint:e=>t.cyan(e)},{header:`status`,value:e=>e.status,paint:(e,t)=>i(t.status,e.length)},{header:`agent`,value:e=>e.task.agent},{header:`source`,value:e=>e.task.source},{header:`request`,value:e=>(e.task.prompt??(e.task.event?`${e.task.event.type}: ${e.task.event.text}`:`-`)).slice(0,80)},{header:`reply`,value:e=>d(e)??`-`}],e,t))}function h(e,t,s){let c=a;if(!e.length){let n=t.archived?`archived tasks`:t.running?`running tasks`:t.stopped?`recently stopped tasks`:`recent tasks`;p.stdout.write(`No ${n}.\n`),e.archived&&p.stdout.write(`\n${o([`${e.archived} archived: coder task list --archived [--limit N]`],c)}\n`);return}let l=[{header:`task-id`,value:e=>e.taskId,paint:e=>c.cyan(e),max:28},{header:`status`,value:e=>e.status,paint:(e,t)=>i(t.status,e.length),max:16},{header:`engine`,value:e=>(e.engine===`custom`&&e.model?e.model:(e.engine??`-`)+(e.model?`/${e.model}`:``))+(e.effort?`/${e.effort}`:``),paint:e=>c.light(e),max:26},{header:`cwd`,value:e=>e.cwd?f.basename(e.cwd):`-`,paint:e=>c.light(e),max:24},{header:`name`,value:e=>{let t=e.archived?` ${c.dim(`(archived)`)}`:``;return`${e.name?e.name:c.light(e.prompt)}${e.idleMs!==null&&e.idleMs>=12e4?` ${(e.idleMs>6e5?c.red:c.dim)(`· idle ${n(e.idleMs)}`)}`:``}${t}`}}],u=[],d=new Map;for(let t of e){if(!t.flowRunId){let e=u.at(-1);e&&!e.header?e.rows.push(t):u.push({rows:[t]});continue}let e=d.get(t.flowRunId);if(!e){let n=s(t.flowRunId);e={header:n?`(${c.bold(t.flowRunId)} ${n.status}. Flow ${n.name})`:`(${c.bold(t.flowRunId)} flow)`,rows:[]},d.set(t.flowRunId,e),u.push(e)}e.rows.push(t)}p.stdout.write(r(l,u,c)),e.clipped&&p.stdout.write(c.dim(`\n... ${e.clipped} more not shown (--limit ${t.limit===`all`?void 0:t.limit})\n`));let m=[`Result: coder task result <task-id>`];t.archived||m.push(`Older tasks: coder task list --archived [--limit N]`),p.stdout.write(`\n${o(m,c)}\n`)}const g=e({name:`task list`,help:{usage:`coder task list [--running] [--stopped] [--archived [--limit N]] [--server [url]]`,summary:`List recent tasks across all workspaces, most recent first: running tasks plus
3
- ones stopped within the last 30 minutes. Older stopped tasks auto-archive and
4
- move to --archived. Shortcut: \`coder list\`.`,flags:[[`--running`,`show only running tasks`],[`--stopped`,`show only recently stopped tasks (not yet archived)`],[`--archived`,`show only archived tasks (auto-archived or via task archive)`],[`--limit <n|all>`,`show at most n tasks (default all)`],[`--dir <dir>`,`only tasks launched in that workspace`],t]},options:{cwd:s,dir:s,limit:l,json:c,running:c,stopped:c,archived:c,...u},run:async({options:e})=>{let{tasks:t}=await import(`./task-DJ6nruuA.js`).then(e=>e.t);return t.list({...e,organization:e.workspace})},async print(e,{options:t}){if(t.server!==void 0)return m(e);let{readFlowRecord:n}=await import(`./executor-3QMa-XRY.js`).then(e=>e.S);h(e,t,n)}});export{g as commandTasks};
@@ -1,3 +0,0 @@
1
- import{i as e,n as t}from"./cli-BBlH53hA.js";import{p as n,s as r}from"./output-BKeyLbvt.js";import{t as i}from"./models-Cb0ZTKZ7.js";import{n as a}from"./add-wC8ByRgM.js";import o from"node:process";const s=e({name:`model list`,help:{usage:`coder model list [--json]`,summary:`List built-in aliases, configured custom models, and user aliases. Only custom\nmodels are probed.\n\n${t}`},options:a,run:({cwd:e})=>i.list({cwd:e}),print:c});function c(e){let i=n,a=e=>e?` ${i.dim(`(disabled)`)}`:``,s=[],c=(e,t)=>{s.push(i.bold(e));for(let e of t)`overrides`in e?s.push(` ${e.disabled?i.dim(`∅`):i.cyan(`↳`)} ${e.alias.padEnd(14)} ${i.dim(`-> ${e.spec} (overrides ${e.overrides})`)}${a(e.disabled)}`):`builtin`in e?s.push(` ${e.disabled?i.dim(`∅`):i.green(`✔`)} ${e.alias.padEnd(14)} ${i.dim(`-> ${e.model}`)}${a(e.disabled)}`):s.push(` ${e.disabled?i.dim(`∅`):i.cyan(`↳`)} ${e.alias.padEnd(14)} ${i.dim(`-> ${e.spec}`)}${a(e.disabled)}`);s.push(``)};c(`Codex models`,e.codex),c(`Claude models`,e.claude),s.push(i.bold(`Custom models`),``),e.custom.length||s.push(i.dim(` None.`));for(let{name:t,probe:n,...r}of e.custom){let e=r.disabled?i.dim(`∅`):n.reachable?i.green(`✔`):i.red(`✘`);s.push(` ${e} ${t.padEnd(14)} ${r.model} ${i.dim(`@ ${r.baseUrl}. ${n.detail}`)}${a(r.disabled)}`)}if(s.push(``),e.toggles){s.push(i.bold(`Other`),``);for(let t of e.toggles)s.push(` ${t.disabled?i.dim(`∅`):i.green(`✔`)} ${t.name.padEnd(14)} ${i.dim(`raw model id`)}${a(t.disabled)}`);s.push(``)}s.push(...t.split(`
2
- `),``,r([`Add a custom model: coder model add <name> --base-url <url> --model <id> [--env-key VAR]`,`Alias a model, e.g. fast codex:luna: coder model alias <name> <spec>`,`Run with a model: coder run --model <name> "<task>"`],i)),o.stdout.write(`${s.join(`
3
- `)}\n`)}export{s as commandModelList};
@@ -1 +0,0 @@
1
- import{i as e,r as t}from"./cli-BBlH53hA.js";import{g as n,p as r,s as i}from"./output-BKeyLbvt.js";import{s as a,t as o}from"./args-CURX44CA.js";import{describe as s}from"./add-n6c9OINP.js";import c from"node:process";function l({connections:e,declared:t}){let a=r;c.stdout.write(e.length?n([{header:`name`,value:e=>e.id,paint:e=>a.cyan(e)},{header:`connects`,value:e=>s(e),paint:e=>a.light(e)},{header:`access`,value:e=>e.access===`read`?`Read-only`:e.access?`Read-write`:`Default`},{header:`for`,value:e=>e.mine?`you`:e.owner?e.owner:`workspace`},{header:`status`,value:e=>e.status}],e,a):`${a.dim(`No connections.`)}\n`),t.length&&c.stdout.write(`\n${a.bold(`Declared in this repository`)}\n${n([{header:`name`,value:e=>e.name,paint:e=>a.cyan(e)},{header:`in`,value:e=>e.source},{header:`runs`,value:e=>e.target,paint:e=>a.light(e)},{header:`here`,value:e=>e.approved?`approved`:`needs approval`}],t,a)}`);let o=[...t.filter(e=>!e.approved).map(e=>`Approve: coder connection approve ${e.name}`),...e.length?[]:[`Add one: coder connection add <name> --env <NAME>`]];o.length&&c.stdout.write(`\n${i(o,a)}\n`)}const u=e({name:`connection list`,help:{usage:`coder connection list [--server [url]] [--json] [--cwd <dir>]`,summary:`Your connections, and the MCP servers this repository and its agents declare with whether each is approved on this machine.`,flags:[t]},options:{...o,...a},run:async({options:e,cwd:t})=>{let{connection:n}=await import(`./connection-B-IB8tlP.js`).then(e=>e.n);return n.list({...e,cwd:t})},print:l});export{u as commandConnectionList};
@@ -1 +0,0 @@
1
- import{i as e}from"./cli-BBlH53hA.js";import{g as t,p as n,s as r}from"./output-BKeyLbvt.js";import{n as i}from"./args-CURX44CA.js";import a from"node:process";function o(e){let i=n;a.stdout.write(t([{header:`id`,value:e=>e.id,paint:e=>i.cyan(e)},{header:`description`,value:e=>e.description},{header:`events`,value:e=>e.events.join(`, `)},{header:`tools`,value:e=>e.tools.join(`, `)}],e,{style:i,border:!0})),a.stdout.write(`\n${r([`Event descriptions and the tools each preset allows: coder agent integrations show <id>`],i)}\n`)}const s=e({name:`agent integrations list`,globalFlags:{cwd:!1},help:{usage:`coder agent integrations list [--json]`,summary:"One row per integration: its id, the events an agent can wire, and every tool it offers; `show` splits the tools by preset."},options:{json:i},run:async()=>{let{agents:e}=await import(`./agent-6GooVMsq.js`).then(e=>e.t);return e.integrations.list()},print:o});export{s as commandIntegrationsList};
@@ -1,2 +0,0 @@
1
- import{i as e,r as t}from"./cli-BBlH53hA.js";import{g as n,p as r,s as i}from"./output-BKeyLbvt.js";import{s as a,t as o}from"./args-CURX44CA.js";import s from"node:process";const c=e=>`builtin`in e,l=e=>e.map(e=>c(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,description:e.definition.description??null}:{id:e.id,name:e.name,source:e.source,version:e.currentVersion,description:e.description??null});function u(e,t){if(!e.length)return void s.stdout.write(`No agents configured.
2
- `);let a=r;s.stdout.write(n([{header:`id`,value:e=>e.id,paint:e=>a.cyan(e)},{header:`name`,value:e=>e.name},{header:`source`,value:e=>e.source,paint:e=>a.light(e)},...t?[{header:`version`,value:e=>String(e.version)}]:[],{header:`description`,value:e=>e.description??`-`}],e,a)),!t&&s.stdout.write(`\n${i([`An agent's settings, events, and tools: coder agent show <id>`,`Scaffold a new agent in this repo: coder agent init <id>`],a)}\n`)}const d=e({name:`agent list`,help:{usage:`coder agent list [--server [url]] [--json] [--cwd <dir>]`,summary:`Without --server, one row per built-in and workspace agent. With --server, list the agent records and current versions owned by that Coder server.`,flags:[t]},options:{...o,...a},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-6GooVMsq.js`).then(e=>e.t);return n.list({...e,cwd:t,organization:e.workspace})},json:e=>l(e),print:(e,{options:t})=>u(l(e),t.server!==void 0)});export{d as commandAgentList,c as isLocal};
@@ -1,2 +0,0 @@
1
- import{Rt as e,en as t,qi as n}from"./core-DwsAMCnL.js";import{At as r,Er as i,G as a,Or as o,W as s,_r as c,an as l,at as u,br as d,et as ee,gr as f,hr as p,jr as m,kr as h,vr as g,wr as _}from"./prompts-Bj4Fbd_n.js";import v from"node:path";import{fileURLToPath as y}from"node:url";import b from"node:fs";var x={name:`Coder`,description:`Answers engineering questions, reviews pull requests, and makes requested changes.`,permissions:`workspace-write`,integrations:{github:{events:{pull_request:{flow:`review`,permissions:`read-only`},mention:!0,issue:!0,comment:{match:`[Cc]oder`}}},slack:{events:{mention:!0,dm:!0,command:!0,channel:{match:`[Cc]oder`}}},linear:{events:{mention:!0}}}};const S=h().check(t(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),C=f([`low`,`medium`,`high`]),w=f([`read-only`,`workspace-write`,`auto`]),T=f([`read`,`write`]),E=o({flow:_(S),match:_(h().check(e(1))),permissions:_(w),actAs:_(d(`requester`))}),D=o({events:_(m([c(h()),i(h(),m([S,E,d(!0)]))]))}),te=o({$schema:_(h()),name:_(h().check(e(1))),description:_(h()),engine:_(h()),runner:_(h().check(e(1))),model:_(h()),effort:_(C),permissions:_(w),access:_(T),mcp:_(i(S,a)),integrations:p(i(h(),D),{})}),ne=o({allowedEvents:_(c(h()))}),O=o({connections:_(c(h())),engine:_(h()),model:_(h()),effort:_(C),permissions:_(w),access:_(T),integrations:_(i(h(),ne)),disabled:_(g())}),k=i(S,m([g(),O]));function A(e){return e.issues.map(e=>`${e.path.map(String).join(`.`)||`(root)`}: ${e.message}`).join(`; `)}function j(e){let t=e?.mcp;return!t||typeof t!=`object`?e:{...e,mcp:Object.fromEntries(Object.entries(t).map(([e,t])=>{if(!t||typeof t!=`object`)return[e,t];let{repository:n,...r}=t;return[e,r]}))}}function M(e,t,n=!0){let r=te.safeParse(j(t));if(!r.success)throw Error(`Invalid agent definition "${e}": ${A(r.error)}`);let{$schema:i,...a}=r.data;return u(a.mcp,n),a}function N(e){if(e===void 0)return{};let t=k.safeParse(e);if(!t.success)throw Error(`Invalid agents usage: ${A(t.error)}`);return t.data}function P(e){return e?.events?Array.isArray(e.events)?e.events:Object.keys(e.events):[]}function F(e,t){if(!e?.events)return;if(Array.isArray(e.events))return e.events.includes(t)?{}:void 0;if(!Object.prototype.hasOwnProperty.call(e.events,t))return;let n=e.events[t];return n===!0?{}:typeof n==`string`?{flow:n}:n}function re(e,t){let n=[],r=Object.keys(t).sort().join(`, `)||`none`;for(let i of e){for(let[e,a]of Object.entries(i.definition.integrations)){let o=`agents.${i.id}.integrations.${e}`,s=t[e];if(!s){n.push(`${o}: unknown integration; valid: ${r}`);continue}let c=Object.keys(s.events).sort().join(`, `)||`none`;for(let e of P(a)){e in s.events||n.push(`${o}.events.${e}: unknown event; valid: ${c}`);let t=F(a,e)?.match;if(t!==void 0)try{new RegExp(t)}catch{n.push(`${o}.events.${e}.match: invalid regex`)}}}for(let[e,a]of Object.entries(i.usage?.integrations??{})){let o=`agents.${i.id}.integrations.${e}`,s=t[e];if(!s){n.push(`${o}: unknown integration; valid: ${r}`);continue}let c=Object.keys(s.events).sort().join(`, `)||`none`;for(let e of a.allowedEvents??[])e in s.events||n.push(`${o}.allowedEvents: unknown event "${e}"; valid: ${c}`)}}return n}function I(e){return e.definition.access===`read`||e.usage?.access===`read`?`read`:`write`}function L(e,t){let n=P(e.definition.integrations[t]),r=e.usage?.integrations?.[t]?.allowedEvents;return r===void 0?n:n.filter(e=>r.includes(e))}function R(e){return{engine:e.usage?.engine??e.definition.engine,model:e.usage?.model??e.definition.model,effort:e.usage?.effort??e.definition.effort,permissions:e.usage?.permissions??e.definition.permissions??`read-only`}}const z={"read-only":0,"workspace-write":1,auto:2};function B(e,t){return t&&z[t]<=z[e]?t:e}var V=n({AgentLoadError:()=>H,agentsFromSources:()=>Y,assertNotReserved:()=>X,builtinDefinitions:()=>K,defaultAgent:()=>q,loadAgents:()=>$,repoAgentOverride:()=>Q}),H=class extends Error{};const U=y(new URL(`./builtin/coder/`,import.meta.url)),W={coder:{json:x,builtin:!0,dir:U,systemPrompt:b.readFileSync(v.join(U,`system.md`),`utf8`)}};function G(e,t=!1){let n={},r;try{r=b.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return n}for(let i of r){let r=v.join(e,i),a=v.join(r,`agent.json`);b.statSync(a,{throwIfNoEntry:!1})?.isFile()&&(n[i]={json:JSON.parse(b.readFileSync(a,`utf8`)),builtin:t,dir:r})}return n}function K(){return W}function q(){return`coder`}function J(e,t){let n=Object.entries(e.integrations).flatMap(([e,n])=>{let r=t[e]?.events;if(!r)return[];let i=Array.isArray(n.events)?n.events.filter(e=>e in r):n.events&&Object.fromEntries(Object.entries(n.events).filter(([e])=>e in r));return[[e,{...n,...i?{events:i}:{}}]]});return{...e,integrations:Object.fromEntries(n)}}function Y(e,t,n){let r=N(e.usage),i=Object.keys(r).filter(t=>!(t in e.definitions));if(i.length){let t=Object.keys(e.definitions).sort().join(`, `)||`none`;throw Error(`Invalid agents:\n agents.${i.sort().join(`, agents.`)}: no agent definition; known ids: ${t}`)}let a=[];for(let[n,i]of Object.entries(e.definitions)){let o=r[n],s=o===!1?{disabled:!0}:o,c=typeof s==`object`&&s.disabled;if(c&&!e.includeDisabled)continue;let l;try{l=M(n,i.json,i.repository??!i.builtin)}catch(e){if(c)continue;throw new H(e instanceof Error?e.message:String(e))}let u=i.builtin?J(l,t):l;a.push({id:n,name:u.name??n,definition:u,...typeof s==`object`?{usage:s}:{},...i.dir?{dir:i.dir}:{},builtin:i.builtin})}let o=re(a.filter(e=>!e.usage?.disabled),t);if(o.length)throw new H(`Invalid agents:\n ${o.join(`
2
- `)}`);return a}function X(e){let t=e.filter(e=>e in K()).sort();if(t.length)throw Error(`Invalid agents:\n agents.${t.join(`, agents.`)}: built-in agent ids are reserved`)}function Z(e){let t=ee(l(v.resolve(e)));return{file:t,usage:b.existsSync(t)?JSON.parse(b.readFileSync(t,`utf8`)).agents??{}:{}}}function Q(e,t,n){let{file:r,usage:i}=Z(e),a=i[t],o=typeof a==`boolean`?!a:a?.disabled;return o===void 0||o===n?void 0:r}async function $(e,t,{includeDisabled:n=!1}={}){e=v.resolve(e);let i={...K()},a=G(r(`agents`));for(let e of Object.values(a))e.repository=!1;let o=G(v.join(e,`.coder`,`agents`));X([...Object.keys(a),...Object.keys(o)]),Object.assign(i,a,o);let c={...s(e).agents},{usage:l}=Z(e);for(let e of Object.keys(c))!(e in i)&&!(e in l)&&delete c[e];return Y({definitions:i,usage:c,includeDisabled:n},t,e)}export{q as a,Q as c,R as d,F as f,L as g,N as h,K as i,I as l,M as m,Y as n,$ as o,B as p,X as r,V as s,H as t,P as u};
@@ -1,5 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{At as t,Ln as n,Nn as r,dr as i,en as a,tn as o}from"./prompts-Bj4Fbd_n.js";import{i as s,m as c,n as l,o as u}from"./load-Q9fL4VC6.js";import{t as d}from"./integrations-IGnXBrPw.js";import f from"node:path";import p from"node:fs";import{execFile as ee}from"node:child_process";import{randomUUID as te}from"node:crypto";import{isDeepStrictEqual as m}from"node:util";const h=(e,t=``)=>`token:${e}:${t}`,g=e=>`token-drop:${e}`;var ne=e({agentProblems:()=>D,agentWithVersion:()=>x,diskFiles:()=>k,ensureBuiltinAgents:()=>M,getAgent:()=>v,getVersion:()=>b,listAgents:()=>y,publishAgent:()=>S,publishVersion:()=>C,seedBuiltinAgent:()=>A,seedBuiltinAgents:()=>j,setAgentSettings:()=>w,toAgent:()=>O,versionKey:()=>_});const _=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function v(e,t){return e.get(`agent`,t)}async function y(e){return(await e.list(`agent`)).map(e=>e.value)}async function b(e,t,n){let r=n??(await v(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,_(t,r))}async function x(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function S(e,t,n){let r=c(t.id,t.definition),i=t.files&&Object.keys(t.files).length?t.files:void 0;return e.publishAgent({id:t.id,name:t.name??r.name??t.id,...t.description??r.description?{description:t.description??r.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:0,createdAt:n,updatedAt:n},{agent:t.id,version:0,definition:r,systemPrompt:t.systemPrompt,...i?{files:i}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n})}async function C(e,t,n,r){if(!r)return(await S(e,t,n)).version;let i=c(t.id,t.definition),a=t.files&&Object.keys(t.files).length?t.files:void 0,o=r?r.record:await v(e,t.id),s=r?r.version:o?await b(e,t.id,o.currentVersion):void 0,l=(e,r)=>({id:t.id,name:t.name??i.name??t.id,...t.description??i.description?{description:t.description??i.description}:{},source:t.source,...t.repo?{repo:t.repo}:{},...t.path?{path:t.path}:{},currentVersion:e,...o?.settings?{settings:o.settings}:{},createdAt:o?.createdAt??n,updatedAt:r}),u=e=>m(e.definition,i)&&e.systemPrompt===t.systemPrompt&&m(e.files,a);if(s&&u(s)){let r=l(s.version,o.updatedAt);return m(o,r)||await e.put(`agent`,t.id,l(s.version,n)),s}o||await e.put(`agent`,t.id,l(0,n));let d;for(let r=(o?.currentVersion??0)+1;d={agent:t.id,version:r,definition:i,systemPrompt:t.systemPrompt,...a?{files:a}:{},...t.commit?{commit:t.commit}:{},...t.origin?{source:t.origin}:{},importedFrom:t.importedFrom,createdAt:n},!await e.create(`agentversion`,_(t.id,r),d);r++){let n=await e.get(`agentversion`,_(t.id,r));if(n&&u(n)){d=n;break}}let f=await v(e,t.id);return(!f||f.currentVersion<d.version)&&await e.put(`agent`,t.id,l(d.version,n)),d}async function w(e,t,n,r=Date.now()){let i=await v(e,t);if(!i)throw Error(`No agent named "${t}".`);let a={...i,settings:n,updatedAt:r};return await e.put(`agent`,t,a),a}const T=[`read-only`,`workspace-write`,`auto`];function E(e,t,n,r){if(!t&&!n)return;let i=t??{},a=n??{},o=new Set([...Object.keys(i.integrations??{}),...Object.keys(a.integrations??{})]),s=Object.fromEntries([...o].map(e=>{let t=i.integrations?.[e],n=a.integrations?.[e],r=t?.allowedEvents&&n?.allowedEvents?t.allowedEvents.filter(e=>n.allowedEvents.includes(e)):n?.allowedEvents??t?.allowedEvents;return[e,r?{allowedEvents:r}:{}]})),c=i.permissions??e.permissions??`read-only`,l=a.permissions,u=l&&T.indexOf(l)<=T.indexOf(c)?l:c,d=i.access===`read`||a.access===`read`?`read`:a.access??i.access;return{...i,...a,permissions:u,...d?{access:d}:{},...o.size?{integrations:s}:{},...i.connections!==void 0||a.connections!==void 0?{connections:i.connections&&a.connections?i.connections.filter(e=>a.connections.includes(e)):a.connections??i.connections}:{}}}function D(e,t,n){if(e.problems?.length)return e.problems;if(!t)return[`No version ${e.currentVersion} for agent "${e.id}".`];try{return l({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:e.settings?{[e.id]:e.settings}:void 0,includeDisabled:!0},n),[]}catch(e){return[e instanceof Error?e.message:String(e)]}}function O(e,t,n,r=d){let i=E(t.definition,void 0,e.settings,r),a=E(t.definition,i,n,r),[o]=l({definitions:{[e.id]:{json:t.definition,builtin:e.source===`builtin`}},usage:a?{[e.id]:a}:void 0},r);if(!o)throw Error(`Agent "${e.id}" is disabled.`);return{...o,files:{...t.files??{},"system.md":t.systemPrompt}}}function k(e,t=``){let n={};for(let r of p.readdirSync(f.join(e,t),{withFileTypes:!0})){let i=t?`${t}/${r.name}`:r.name;r.isDirectory()?Object.assign(n,k(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=p.readFileSync(f.join(e,i),`utf8`))}return n}async function A(e,t,n,i){let a=s()[n];return a?await C(e,{id:n,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${r()}`},t,i)!==i.version:!1}async function j(e,t,n){let r=n??await Promise.all(Object.keys(s()).map(t=>x(e,t))),i=!1;for(let n of Object.keys(s()))await A(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function M(e,t){let n=e.settings??={};return n.builtinAgents||=j(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}const N=3e4;var P=class extends Error{};function F(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const I=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function L(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-BNe86LfS.js`).then(e=>e.wt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function R(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new P(`Installation "${t}" is bound through another app.`)}function z(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function B(e,t){let n=e.sending?.count??0;return t===void 0?n:e.items.findIndex((e,r)=>r<n&&e.admission===t)+1}function V(e,t,n,r){let{sending:i,...a}=e,o=t?B(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+N}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:z(s,s.owner,[],s.at)}function H(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:te()},a=i.version??i.messages.length+i.more,o=i.messages.map((e,t)=>({sequence:t+1,...e}));if(t)return{...i,version:a+1,messages:o.length<50?[...o,{...t,sequence:a+1}]:o,more:i.more+(o.length<50?0:1)};if(i.epoch!==r)return i;let s=Math.max(i.acknowledged??0,Math.min(n,a)),c=o.filter(e=>e.sequence>s);return{...i,version:a,acknowledged:s,messages:c,more:a-s-c.length}}function U(e){let{sending:t,...n}=e;return z({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,t){let n=`${e}:${t}`,r=i();return this.recordEvents.addEventListener(n,r.notify),{...r,close:()=>{this.recordEvents.removeEventListener(n,r.notify),r.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(I(e,t),()=>L(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||t.id>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t){let{publishVersion:n}=await Promise.resolve().then(()=>ne);return this.withAppLock(`agent:${e.id}`,async()=>{let r=(await this.listAgentsWithVersions(e.id))[0]??{},i=await n(this,{...e,definition:t.definition,systemPrompt:t.systemPrompt,files:t.files,commit:t.commit,origin:t.source,importedFrom:t.importedFrom},e.updatedAt,r);return{record:await this.get(`agent`,e.id),version:i,unchanged:i.version===r.record?.currentVersion}})}async listCredentials(e){return(await this.list(`credential`)).filter(({value:t})=>!t.owner||t.owner===e.owner).slice(0,e.limit)}async installationApp(e){let t=await this.get(`installation`,e);if(!t||t.deletedAt)return;let n=await this.get(`app`,t.app);return n?{installation:t,app:n}:void 0}async getApps(e){return(await Promise.all([...new Set(e)].map(async e=>({id:e,value:await this.get(`app`,e)})))).filter(e=>!!e.value)}async updateMetadata(e,t,n){let r=await this.get(e,t);return r?(await this.put(e,t,{...r,...n}),!0):!1}async listHistory(e){return(await this.list(`history`,{prefix:`${e}:`})).map(({value:{engine:e,conversation:t,savedAt:n}})=>({engine:e,conversation:t,savedAt:n})).sort((e,t)=>e.savedAt-t.savedAt)}async conversationState(e){let[t,n,r]=await Promise.all([this.get(`delivery`,e),this.get(`delivery`,`since:${e}`),this.get(`delivery`,`batch:${e}`)]),i=t&&await this.get(`task`,t.taskId);return{record:t,unseen:n,batch:r,...i?.task.flow==="default"?{status:i}:{}}}async markConversation(e,t,n,r,i){let a=await this.get(`delivery`,e);a?.taskId===t&&await this.put(`delivery`,e,{...a,at:r,seen:n},{ttlMs:i})}async heldTokens(e,t){let n={held:new Map,drops:new Map};for(let t of e)for(let e of await this.list(`snapshot`,{prefix:h(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(g(r),(await this.get(`snapshot`,g(r)))?.drop);return n}async holdToken(e){(await Promise.all(e.drops.map(async e=>(await this.get(`snapshot`,e.key))?.drop===e.drop))).every(Boolean)&&await this.put(`snapshot`,e.key,e.value,{ttlMs:e.ttlMs})}saveTaskSecrets(e,t){return this.withAppLock(`connections:${e}`,async n=>{let r=await n.get(`task`,e),i=!!(r&&![`completed`,`failed`,`cancelled`].includes(r.status));if(i)for(let e of t)await n.put(`snapshot`,e.id,{secret:e.value,expiresAt:e.expiresAt},{ttlMs:Math.max(1,e.expiresAt-this.now())});return i})}async dispatchState(e){let{key:t,owner:n,at:r,ttlMs:i}=e.delivery,a=this.live(`delivery`).get(t)?.value,o=a?.pending!==void 0&&(!a.owner||(a.at??0)+i<=r);return a&&!o?{claimed:!1}:(await this.put(`delivery`,t,{at:r,owner:n,pending:a?.pending??!0},a?.pending&&a.pending!==!0?{}:{ttlMs:i}),{claimed:!0})}async usageTotals(e){let{sumUsageTotals:t}=await import(`./apps-BNe86LfS.js`).then(e=>e.wn);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-BNe86LfS.js`).then(e=>e.wn);return n((await this.list(`usage`)).map(e=>e.value),e,t).totals}bucket(e){let t=this.values.get(e);return t||(t=new Map,this.values.set(e,t)),t}changed(e){}read(e,t){let n=t;if(e!==`app`||!n.shared)return t;let r=this.live(`app`).get(n.shared)?.value;return{...n,credentials:r?.credentials??``}}live(e){let t=this.bucket(e),n=this.now();for(let[e,r]of t)r.expiresAt!==void 0&&r.expiresAt<=n&&t.delete(e);return t}async get(e,t){let n=this.live(e).get(t);return n&&this.read(e,n.value)}async patchLogin(e,t,n={}){let r=this.live(`login`).get(e),i=r?.value;if(!i||!(i.expiresAt>this.now())||Object.entries(n).some(([e,t])=>Array.isArray(t)?!t.includes(i[e]):i[e]!==t))return;let a={...i,...t};return a.input===null&&delete a.input,r.value=a,this.recordEvents.dispatchEvent(new Event(`login:${e}`)),a}async completeLogin(e,t,n){let{completeLogin:r}=await import(`./apps-BNe86LfS.js`).then(e=>e.wt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&R([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>F(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:H(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=H(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=z(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=U(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+N,count:r.items.length,more:r.more,mustReply:r.mustReply}},a=n.expiresAt;return this.bucket(`delivery`).set(e,{value:i,expiresAt:a}),this.changed(`delivery`),r})}async finishBatch(e,t,n,r){let i=this.live(`delivery`).get(e),a=i?.value;if(a?.sending?.owner!==t)return!1;let o=V(a,n,r,this.now());return this.bucket(`delivery`).set(e,{value:o,expiresAt:i.expiresAt}),this.changed(`delivery`),!0}async take(e,t,n){let r=this.live(e),i=r.get(t);if(!(!i||Object.entries(n??{}).some(([e,t])=>i.value[e]!==t)))return r.delete(t),this.changed(e),this.read(e,i.value)}},re=e({LocalStore:()=>X,deleteLocalAgent:()=>$,syncLocalAgents:()=>Z,writeLocalAgent:()=>Q});const G=new Set([`app`,`installation`,`runner`]),K=new Set([`connection`,`credential`]),q=new Set([`agent`,`agentversion`]);function J(e,t){try{return JSON.parse(p.readFileSync(e,`utf8`))}catch(e){if(e.code===`ENOENT`)return t;throw e}}function Y(e,t){p.mkdirSync(f.dirname(e),{recursive:!0});let n=`${e}.${process.pid}.tmp`;try{p.writeFileSync(n,t,{mode:384}),p.renameSync(n,e)}finally{p.rmSync(n,{force:!0})}}var X=class extends W{connections;revisions=new Map;logBuckets=new Map;writes=Promise.resolve();constructor(e=Date.now,t=()=>new n){super(e),this.connections=t}withAppLock(e,t){return e.startsWith(`connection:`)||e.startsWith(`connection-import:`)?this.connections().withLock(()=>t(this),e.replace(/^connection:/,``)):super.withAppLock(e,t)}withConfigLock(e){return super.withConfigLock(e)}withCredential(e,t,n){let r=()=>L(this,e,t,n);return e===`credential`?this.connections().withLock(r,I(e,t)):super.withAppLock(I(e,t),r)}get appsFile(){return t(`apps.json`)}get deliveriesFile(){return f.join(o(``),`deliveries.json`)}serial(e,t=!1){let n=this.writes.then(()=>t?this.connections().withLock(async()=>e()):e());return this.writes=n.catch(()=>{}),n}apps(){return J(this.appsFile,{})}recordsFile(e){return e===`delivery`?this.deliveriesFile:e===`usage`?a():e===`snapshot`?f.join(o(``),`snapshots.json`):f.join(o(``),`runner`,`${e}.json`)}bucket(e){let t=super.bucket(e);if(G.has(e)||K.has(e)||q.has(e)||e===`tasklog`)return t;let n=this.recordsFile(e),r=p.statSync(n,{throwIfNoEntry:!1}),i=r?`${r.ino}:${r.mtimeMs}:${r.size}`:``;if(this.revisions.get(e)!==i){for(let n of t.keys())(e!==`snapshot`||!n.startsWith(`connection`))&&t.delete(n);for(let[e,r]of Object.entries(J(n,{})))t.set(e,r);this.revisions.set(e,i)}return t}changed(e){!G.has(e)&&!K.has(e)&&!q.has(e)&&e!==`tasklog`&&Y(this.recordsFile(e),`${JSON.stringify(Object.fromEntries([...this.bucket(e)].filter(([t])=>e!==`snapshot`||!t.startsWith(`connection`))))}\n`)}logFile(e){return f.join(o(``),`runner`,`logs`,`${encodeURIComponent(e)}.jsonl`)}loadLog(e){let t=this.logBuckets.get(e);if(t)return t;t=new Map;try{let n=p.readFileSync(this.logFile(e),`utf8`);for(let e of n.split(`
2
- `).filter(Boolean)){let{id:n,...r}=JSON.parse(e);t.set(n,r)}}catch(e){if(e.code!==`ENOENT`)throw e}return this.logBuckets.set(e,t),t}entries(e){if(e===`connection`)return this.connections().list().map(e=>[e.id,e]);if(e===`credential`)return this.connections().credentials().map(e=>[e.id,e.value]);if(G.has(e)){let t=this.apps(),n=Object.entries(t[e]??{});return e===`app`?n.map(([e,n])=>{let r=n,i=r.shared?t.app?.[r.shared]:void 0;return[e,r.shared?{...r,credentials:i?.credentials??``}:r]}):n}return[]}refuse(e){throw Error(`A local server keeps no ${e} records`)}async get(e,t){if(e===`connection`)return this.connections().get(t);if(e===`tasklog`){let e=this.loadLog(t.slice(0,t.lastIndexOf(`:`))).get(t);return e&&(e.expiresAt===void 0||e.expiresAt>this.now())?e.value:void 0}return!G.has(e)&&!K.has(e)?super.get(e,t):this.entries(e).find(([e])=>e===t)?.[1]}async completeLogin(){return this.refuse(`login`)}async patchLogin(){return this.refuse(`login`)}async put(e,t,n,r={}){if(e===`tasklog`)return this.putMany(e,[{id:t,value:n}],r);if(!G.has(e)&&!K.has(e))return super.put(e,t,n,r);await this.serial(()=>this.write(e,t,n),K.has(e))}write(e,t,n){if(e===`connection`){this.connections().put(n);return}if(e===`credential`&&t!==`claude`&&t!==`codex`){this.connections().putCredential(t,n);return}if(G.has(e)){let r=this.apps();e===`installation`&&R(Object.entries(r.installation??{}),t,n),e===`app`&&n.shared&&(n={...n,credentials:``}),r[e]={...r[e],[t]:n},Y(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else this.refuse(e)}remove(e,t){if(e===`connection`){let e=this.connections(),n=!!e.get(t);return e.delete(t),n}if(e===`credential`){let e=this.connections(),n=e.credentials().some(e=>e.id===t);return e.deleteCredential(t),n}if(G.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],Y(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}return!1}async putMany(e,t,n={}){if(e===`tasklog`){let e=new Map;for(let{id:r,value:i}of t){let t=r.slice(0,r.lastIndexOf(`:`)),a=e.get(t)??[];a.push(JSON.stringify({id:r,value:i,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})),e.set(t,a)}for(let[t,n]of e){let e=this.logFile(t);p.mkdirSync(f.dirname(e),{recursive:!0}),p.appendFileSync(e,`${n.join(`
3
- `)}\n`,{mode:384})}for(let{id:e,value:r}of t)this.loadLog(e.slice(0,e.lastIndexOf(`:`))).set(e,{value:r,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})}else if(!G.has(e)&&!K.has(e))await super.putMany(e,t,n);else for(let r of t)await this.put(e,r.id,r.value,n)}async list(e,t={}){if(e===`tasklog`){let e=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0;if(e!==void 0)this.loadLog(e);else{let e=f.dirname(this.logFile(``));if(p.existsSync(e))for(let t of p.readdirSync(e))t.endsWith(`.jsonl`)&&this.loadLog(decodeURIComponent(t.slice(0,-6)))}return(e===void 0?[...this.logBuckets.values()]:[this.loadLog(e)]).flatMap(e=>[...e]).filter(([e,n])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)&&(n.expiresAt===void 0||n.expiresAt>this.now())).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([e,t])=>({id:e,value:t.value}))}if(!G.has(e)&&!K.has(e))return super.list(e,t);let n=e===`installation`&&t.agent?this.apps().app:void 0;return this.entries(e).filter(([e])=>(!t.prefix||e.startsWith(t.prefix))&&(!t.after||e>t.after)).filter(([e,r])=>F(e,r,t,n?.[r.app]?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([n,r])=>{let i=r;return{id:n,value:(e===`connection`&&t.secrets&&(t.secrets===`all`||i.provider===`mcp`&&i.auth===`oauth`)?this.connections().get(n):void 0)??r}})}async delete(e,t){if(e===`tasklog`){let e=t.slice(0,t.lastIndexOf(`:`)),n=this.loadLog(e);n.delete(t),Y(this.logFile(e),[...n].map(([e,t])=>JSON.stringify({id:e,...t})).join(`
4
- `)+`
5
- `);return}if(!G.has(e)&&!K.has(e)){await super.delete(e,t),e===`task`&&(p.rmSync(this.logFile(t),{force:!0}),this.logBuckets.delete(t));return}await this.serial(()=>this.remove(e,t),K.has(e))}async create(e,t,n,r={}){return e===`tasklog`?this.serial(async()=>!await this.get(e,t)&&(await this.put(e,t,n,r),!0)):!G.has(e)&&!K.has(e)?super.create(e,t,n,r):this.serial(()=>!this.entries(e).some(([e])=>e===t)&&(this.write(e,t,n),!0),K.has(e))}async take(e,t,n){return!G.has(e)&&!K.has(e)&&e!==`tasklog`?super.take(e,t,n):this.serial(async()=>{let r=await this.get(e,t);if(!(r===void 0||Object.entries(n??{}).some(([e,t])=>r[e]!==t)))return e===`tasklog`?await this.delete(e,t):this.remove(e,t),r},K.has(e))}};function ie(e){let t=f.resolve(e);for(;!p.existsSync(f.join(t,`.git`));){let e=f.dirname(t);if(e===t)return Promise.resolve(void 0);t=e}return new Promise(t=>ee(`git`,[`log`,`-1`,`--format=%H`,`--`,`.`],{cwd:e},(e,n)=>t(e?void 0:n.trim()||void 0)))}async function Z(e,n,r,i){let a=await u(n,r,{includeDisabled:!0}),o=await Promise.all(a.filter(e=>!i||e.id===i).map(async n=>{let r=n.usage?{settings:n.usage}:{};if(n.builtin){let{record:t,version:i}=await x(e,n.id);if(!t)return;let a={...t,settings:void 0,...r,local:!0};return await e.put(`agent`,n.id,a),{record:a,version:i}}if(!n.dir)return;let i=await ie(n.dir),a=p.statSync(f.join(n.dir,`agent.json`)),o=f.join(n.dir,`system.md`),s={agent:n.id,version:1,definition:n.definition,systemPrompt:p.existsSync(o)?p.readFileSync(o,`utf8`):``,files:k(n.dir),...i?{commit:i}:{},importedFrom:`local:${n.dir}`,createdAt:a.mtimeMs},c={id:n.id,name:n.name,...n.definition.description?{description:n.definition.description}:{},source:f.resolve(n.dir)===t(`agents`,n.id)?`home`:`repo`,path:n.dir,currentVersion:1,...r,local:!0,...i?{commit:i}:{},createdAt:a.birthtimeMs||a.mtimeMs,updatedAt:a.mtimeMs};return await e.put(`agentversion`,_(n.id,1),s),await e.put(`agent`,n.id,c),{record:c,version:s}}));if(!i){let t=new Set(a.map(e=>e.id));for(let n of await y(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return o.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function Q(e,n,r,i){let a=(await u(e,n,{includeDisabled:!0})).find(e=>e.id===r&&!e.builtin)?.dir??t(`agents`,r),o={...i.files,"agent.json":`${JSON.stringify(i.definition,null,2)}\n`,"system.md":i.systemPrompt};for(let[e,t]of Object.entries(o))p.mkdirSync(f.dirname(f.join(a,e)),{recursive:!0}),p.writeFileSync(f.join(a,e),t)}async function $(e,n,r){let i=(await u(e,n,{includeDisabled:!0})).find(e=>e.id===r&&!e.builtin);if(!i?.dir)throw Error(`No local agent named "${r}".`);return f.resolve(i.dir)===t(`agents`,r)&&(p.rmSync(i.dir,{recursive:!0}),!0)}export{g as C,O as S,S as _,Q as a,j as b,R as c,P as d,D as f,b as g,v as h,Z as i,L as l,M as m,$ as n,W as o,x as p,re as r,z as s,X as t,N as u,C as v,h as w,w as x,A as y};
@@ -1,3 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";var t=e({LogView:()=>s,addTokens:()=>n,isApproval:()=>r,logEntry:()=>o,stripCwd:()=>a});function n(e,t){return t?e?{input:e.input+t.input,cachedInput:e.cachedInput+t.cachedInput,output:e.output+t.output,total:e.total+t.total}:{...t}:e}const r=e=>e.includes(`approval`)||e===`sidecar-decision`||e===`auto-review`,i=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g;function a(e,t){return t?e.split(`${t}/`).join(``).split(t).join(`.`):e}function o(e){try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){let e=`kind`in t&&typeof t.kind==`string`?t.kind:void 0,n=`message`in t&&typeof t.message==`string`?t.message:void 0;if(e!==void 0||n!==void 0)return{...t,kind:e,message:n,at:`at`in t&&typeof t.at==`string`?t.at:void 0}}}catch{}}var s=class{cwd;opts;prevKind=null;lastAssistant=``;lastToolText=``;openCalls=[];callIds=new WeakMap;approval;approvals=new Map;lastUsageTotal=0;constructor(e,t={}){this.cwd=e,this.opts=t}get lastAssistantMessage(){return this.lastAssistant}reduce(e){let t=e.entry,n=t?String(t.kind??`status`):`line`,i=t?n===`tool-result`?this.close(e,t):r(n)?this.decide(e,t,n):void 0:void 0;if(i)return this.prevKind=n,[i];let o={seq:e.seq,at:e.at,kind:`status`,title:``,sourceKind:n,separated:!1,tone:`muted`};if(!t)o.kind=e.level===`err`?`error`:e.level===`sys`?`status`:`line`,o.title=a(e.line,this.cwd),e.level===`err`&&(o.tone=`error`);else if(n===`usage`){let e=t.tokens;if(!e)return[];let n=this.lastUsageTotal>0,r=e.total-this.lastUsageTotal;if(!n||r<Math.max(2e4,this.lastUsageTotal*.2))return this.lastUsageTotal=Math.max(this.lastUsageTotal,e.total),[];this.lastUsageTotal=e.total,o.kind=`usage`,o.tokens=e,o.title=`ctx ${l(e.input+e.cachedInput)} · out ${l(e.output)}`}else if(n===`approval-decision`&&t.decision===`escalate`||n===`approval-escalated`){let e=a(t.summary?String(t.summary):``,this.cwd),r=/^(?:run command: |Run command\. |Apply file changes\. |\w+: )?([\s\S]*)$/.exec(e)[1],i=String(t.method??``),s=i&&!i.includes(`/`)?i:this.openCalls.at(-1)?.tool,c=r.startsWith(`{`)?``:r.split(/\s+/)[0],l=a(t.reason?String(t.reason):``,this.cwd);o.kind=`approval`,o.title=[`Approval`,[s,c].filter(Boolean).join(` `)].filter(Boolean).join(` · `),o.detail=[r,l&&`Policy · ${l}`].filter(Boolean).join(`
2
- `),o.state=n===`approval-escalated`?`waiting`:`escalated`,n===`approval-escalated`?this.approvals.set(String(t.approvalId),o):this.approval=o}else if(r(n)&&(t.decision||!t.message)){o.kind=`approval`;let e=n===`sidecar-decision`?`sidecar`:n===`auto-review`?`auto-review`:`approval`,r=t.riskLevel?`(${String(t.riskLevel)} risk)`:``,i=a(t.summary?String(t.summary):``,this.cwd),s=i.slice(i.indexOf(`: `)+2),c=i&&s&&this.lastToolText.includes(s)?``:i,l=c?``:String(t.method??``);o.title=`${[e,String(t.decision??``),r,l].filter(Boolean).join(` `)}${c?` · ${c}`:``}`,o.detail=a(t.reason?String(t.reason):``,this.cwd)}else{let e=t.message?String(t.message):n===`tool-result`?`(no output)`:String(t.tool||t.kind||``);if(!e&&!(n===`tool-result`&&(t.exitCode!=null||t.isError)))return[];o.title=a(e,this.cwd),n===`assistant`?(o.kind=`assistant`,o.tone=void 0,this.lastAssistant=o.title):n===`error`||n===`steer`?(o.kind=n,o.tone=n===`error`?`error`:`warning`):n===`reasoning`?(o.kind=`reasoning`,o.durationMs=typeof t.durationMs==`number`?t.durationMs:0):n===`tool`?(o.kind=`tool`,t.tool&&(o.tool=String(t.tool)),this.lastToolText=o.title,t.callId&&this.callIds.set(o,String(t.callId)),this.openCalls.push(o)):n===`tool-result`&&(o.kind=`tool-result`,o.title=this.output(e),o.exitCode=typeof t.exitCode==`number`?t.exitCode:void 0,o.tone=o.exitCode!==void 0&&o.exitCode!==0||t.isError===!0?`error`:`muted`,o.durationMs=typeof t.durationMs==`number`?t.durationMs:0,t.tool&&(o.tool=String(t.tool)))}return this.prevKind!==null&&(o.separated=[`assistant`,`error`,`steer`].includes(n)||n===`reasoning`&&this.prevKind!==`reasoning`||n===`tool`&&[`assistant`,`reasoning`].includes(this.prevKind)),this.prevKind=n,[o]}close(e,t){let n=t.tool?String(t.tool):void 0,r=t.callId?this.openCalls.findIndex(e=>this.callIds.get(e)===String(t.callId)):-1,i=t.callId?r:n?this.openCalls.findIndex(e=>e.tool===n):this.openCalls.length-1;if(i<0)return;let[o]=this.openCalls.splice(i,1),s=typeof t.exitCode==`number`?t.exitCode:void 0,c=typeof t.durationMs==`number`?t.durationMs:e.at-o.at||0;return{...o,title:t.callMessage?a(String(t.callMessage),this.cwd):o.title,result:{ok:!s&&t.isError!==!0,exitCode:s,durationMs:Math.max(0,c),detail:this.output(t.message?String(t.message):``)}}}decide(e,t,n){let r=String(t.approvalId??``),i=t.decision===`accept`;if(n===`sidecar-decision`&&this.approval){let n=a(t.reason?String(t.reason):``,this.cwd),r={...this.approval,detail:[this.approval.detail,n&&`Sidecar · ${n}`].filter(Boolean).join(`
3
- `)};return t.decision===`escalate`?this.approval=r:(this.approval=void 0,c(r,e,`${i?`accepted`:`denied`} by sidecar`,i))}if(n===`approval-escalated`&&this.approval){let e={...this.approval,state:`waiting`};return this.approval=void 0,this.approvals.set(r,e),e}let o=this.approvals.get(r);if(!(!o||n!==`approval-answered`&&n!==`approval-timeout`))return this.approvals.delete(r),n===`approval-timeout`?c(o,e,`timed out`,!1):c(o,e,`${i?`accepted`:`denied`} by reviewer`,i)}output(e){return a(this.opts.keepAnsi?e:e.replace(i,``),this.cwd)}};function c(e,t,n,r){return{...e,state:n,result:{ok:r,durationMs:Math.max(0,t.at-e.at||0),detail:``}}}function l(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}export{o as n,t as r,n as t};
@@ -1 +0,0 @@
1
- import{i as e,t}from"./cli-BBlH53hA.js";import{p as n,r,s as i}from"./output-BKeyLbvt.js";import{n as a,o}from"./args-CURX44CA.js";import s from"node:process";import c from"node:readline/promises";function l(e){e.url&&s.stderr.write(`Open ${n.cyan(e.url)}\n`),e.code&&s.stderr.write(`Enter the code ${n.bold(e.code)}\n`)}async function u(){let e=c.createInterface({input:s.stdin,output:s.stderr}),t=(await e.question(`Paste the code from the sign-in page `)).trim();return e.close(),t}function d(e){if(e.state===`failed`)return void s.stderr.write(`${r.red(e.error??`Sign-in failed.`)}\n\n${i([`Try again`],r)}\n`);s.stdout.write(`Signed in. Your ${n.bold(e.engine)} subscription is saved.\n`)}const f=e({name:`credentials login`,globalFlags:{cwd:!1},help:{usage:`coder credentials login <claude|codex> [--server [url]] [--json]`,summary:`Runs the official claude or codex sign-in on the server's runner, prints the sign-in link or device code, and waits. Claude asks you to paste the code the sign-in page shows. The result replaces your subscription for that engine. Needs CLAUDE_SUBSCRIPTIONS=1 or CODEX_SUBSCRIPTIONS=1 on the server.`,flags:[t]},options:{json:a,server:o,yes:a},args:1,run:async({options:e,args:[t]})=>{let{loginCredential:n}=await import(`./remote-D3JZ4MMQ.js`).then(e=>e.i);return n(t,{...e,onStart:e=>s.once(`SIGINT`,()=>void e().finally(()=>s.exit(130))),onOpen:l,code:u})},print:d,exit:(e,{options:t})=>!t.json&&e.state===`failed`?1:void 0});export{f as commandCredentialsLogin};
@@ -1 +0,0 @@
1
- import{U as e}from"./dispatch-CFZ9Crvg.js";import{a as t,i as n,r}from"./prompt-PEgcMJO7.js";import{i,r as a}from"./cli-BBlH53hA.js";import{p as o}from"./output-BKeyLbvt.js";import{c as s,i as c,n as l}from"./args-CURX44CA.js";import u from"node:process";const d=t=>{throw t instanceof e&&t.code===`login-failed`?new e(`invalid-option`,t.message,t.hint?{hint:t.hint}:{}):t},f=i({name:`auth login`,globalFlags:{cwd:!1},help:{usage:`coder auth login [--server [url]] [--workspace <slug>] [--device] [--json]`,summary:`Sign in with Wular Auth in your browser. The CLI keeps the tokens in ~/.coder/session.json, and commands that talk to a server then act as you.`,flags:[a,[`--device`,`show a code to approve on another device; the default without a local browser`]],env:[[`CODER_SERVER`,`the server to use instead of https://coder.wular.ai`]],examples:[[`coder auth login`,`sign in to the hosted service`],[`coder auth login --server https://agents.example.com`,`sign in to a self-hosted server`]]},options:{json:l,server:c,workspace:s,yes:l,device:l},run:async({options:e})=>{let{hasBrowser:i,sessions:a}=await import(`./remote-D3JZ4MMQ.js`).then(e=>e.s);return a.login({server:e.server,yes:e.yes,device:e.device||!i(),open:e=>{u.stdout.write(`Opening your browser to sign in. If it does not open, visit\n${o.light(e)}\n`),n(e)},onCode:(e,t)=>u.stdout.write(`Confirm this code in your browser: ${o.bold(e)}\n${o.light(t)}\n`),organization:e.workspace,...r()?{chooseOrganization:async e=>{let[n]=await t({title:`Workspace`,hint:`Commands for this server use this workspace by default.`,options:e.map(e=>({value:e.slug,label:e.name,hint:e.slug}))});return n}}:{}}).catch(d)},json:e=>({server:e.server,user:e.user,organization:e.organization}),print:e=>{let t=o;u.stdout.write(`${t.green(`✔`)} Signed in to ${t.bold(e.server)} as ${e.user.email}${e.organization?` ${t.dim(`· ${e.organization.name}`)}`:``}\n`)}});export{f as commandLogin,d as ownHint};
@@ -1 +0,0 @@
1
- import{i as e,r as t}from"./cli-BBlH53hA.js";import{i as n,n as r}from"./args-CURX44CA.js";import{ownHint as i}from"./login-Dq3r6gh6.js";import a from"node:process";const o=e({name:`auth logout`,globalFlags:{cwd:!1},help:{usage:`coder auth logout [--server [url]] [--json]`,summary:`Revoke the saved session for that server at Wular Auth and forget its tokens.`,flags:[t]},options:{json:r,server:n,yes:r},run:async({options:e})=>{let{sessions:t}=await import(`./remote-D3JZ4MMQ.js`).then(e=>e.s);return t.logout(e).catch(i)},print:e=>a.stdout.write(`Signed out of ${e.server}.\n`)});export{o as commandLogout};
@@ -1 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{U as t}from"./dispatch-CFZ9Crvg.js";import{Dt as n,xn as r,zn as i}from"./apps-BNe86LfS.js";import{n as a}from"./env-BgE9ipvN.js";import{C as o,T as s,w as c,x as l}from"./runners-DyLnqHKy.js";import{L as u,M as d,d as f,i as p,l as m,z as h}from"./schema-CjHmulYJ.js";import g from"node:process";var _=e({rotateKey:()=>y});async function v(e){try{return await e()}catch(e){throw e instanceof t?e:new t(`server`,e instanceof Error?e.message:String(e))}}function y(e={}){return v(async()=>{let _=a(e.env??g.env);if(!_.encryptionKey)throw new t(`invalid-option`,`SERVER_ENCRYPTION_KEY is required to rotate keys.`,{hint:`Set the new key in SERVER_ENCRYPTION_KEY and the old key in SERVER_ENCRYPTION_KEY_PREVIOUS.`});let v=await i(_);try{let e=new Set([v.defaultOrganizationId]);if(v.connection){let t=v.connection.db,[n,i,a]=await Promise.all([t.selectDistinct({id:f.organizationId}).from(f),t.select({key:p.key}).from(p).where(h(p.key,`o:%,"config"]:workspace`)),t.select({key:p.key}).from(p).where(h(p.key,`o:%,"connection"]:%`))]);for(let t of n)e.add(t.id);for(let t of i){let n;try{n=JSON.parse(t.key.slice(2,-10))}catch{continue}Array.isArray(n)&&n.length===2&&typeof n[0]==`string`&&n[1]===`config`&&t.key===r(n[0],`config`,`workspace`)&&e.add(n[0])}for(let t of a){let n=t.key.lastIndexOf(`,"connection"]:`);try{let r=JSON.parse(t.key.slice(2,n+14));Array.isArray(r)&&r.length===2&&typeof r[0]==`string`&&r[1]===`connection`&&e.add(r[0])}catch{}}}let t=0;for(let r of e)t+=await n(v.store(r),_);let i=v.connection?.db,a=c(_.encryptionKey);for(let e of i?await i.select().from(m).where(u(m.token)):[])s(_,e.token)!==a&&(await i.update(m).set({token:o(_,l(_,e.token))}).where(d(m.id,e.id)),t++);return{moved:t}}finally{await v.close()}})}export{y as n,_ as t};
@@ -1 +0,0 @@
1
- import{A as e,Nn as t,Vt as n,W as r,a as i,an as a,fr as o,i as s,lr as c,nn as l,pr as u,wt as d}from"./prompts-Bj4Fbd_n.js";import{_ as f,g as p,v as m}from"./dispatch-CFZ9Crvg.js";import{i as h}from"./cli-BBlH53hA.js";import{c as g}from"./args-CURX44CA.js";import{r as _}from"./mcp-server-BlP9lACI.js";import v from"node:path";import{spawn as y}from"node:child_process";import{randomUUID as b}from"node:crypto";function x(e){return v.join(e,`sidecar.json`)}function S(e){return c(x(e))??{sessionId:null,declineStreak:0}}function C(t,n,r,i){return[`-p`,i,`--output-format`,`json`,`--model`,`sonnet`,`--effort`,`low`,`--strict-mcp-config`,`--no-chrome`,`--mcp-config`,`{"mcpServers":{}}`,`--settings`,`{"disableClaudeAiConnectors":true}`,r?`--resume`:`--session-id`,n,...e,`--add-dir`,t]}function w(e,t,n,r,i){let a=C(t,n,r,i);return new Promise((t,n)=>{let r=y(`claude`,a,{cwd:e,stdio:[`ignore`,`pipe`,`pipe`]}),i=``,o=``,s=setTimeout(()=>{r.kill(`SIGKILL`),n(Error(`sidecar call timed out`))},12e4);r.stdout.on(`data`,e=>i+=e),r.stderr.on(`data`,e=>o+=e),r.on(`error`,e=>{clearTimeout(s),n(e)}),r.on(`close`,e=>{if(clearTimeout(s),e!==0){n(Error(`sidecar claude exited ${e}: ${o.trim().slice(0,200)}`));return}try{let e=JSON.parse(i);if(e.is_error){n(Error(`sidecar turn errored: ${String(e.result??``).slice(0,200)}`));return}t(String(e.result??``))}catch{n(Error(`sidecar returned unparseable output`))}})})}function T(e){let t=e.match(/\{[^{}]*"decision"[^{}]*\}/);if(!t)return null;try{let e=JSON.parse(t[0]);if(e.decision===`accept`||e.decision===`decline`||e.decision===`escalate`)return{decision:e.decision,reason:String(e.reason??``)}}catch{}return null}async function E(e,t,n){try{return await o(v.join(t,`sidecar.lock`),async()=>{let r=S(t);if(r.declineStreak>=3)return{decision:`escalate`,reason:`sidecar decline streak; needs human review`};if(!r.sessionId){let a=b();await w(e,t,a,!1,i(n.taskGoal,v.join(t,`log.jsonl`))),r.sessionId=a,u(x(t),r)}let a=T(await w(e,t,r.sessionId,!0,s(n.summary)));return a?.decision===`decline`?r.declineStreak+=1:a?.decision===`accept`&&(r.declineStreak=0),u(x(t),r),a??{decision:`escalate`,reason:`sidecar verdict unparseable`}},9e4,12e4)}catch(e){return{decision:`escalate`,reason:`sidecar unavailable: ${e instanceof Error?e.message:String(e)}`}}}const D=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]);async function O(e,t,i){let o=String(i.tool_name??``),s=i.input??i.tool_input??{},c=a(e),u=l(e,t),h=r(e),g=n=>d(e,t,n),_,v;if(o===`Bash`){let e=String(s.command??``);v=`run command: ${e||`(unknown command)`}`,_=p(e,{allowedNetworkHosts:h.approvals.allowedNetworkHosts})}else if(D.has(o)){let e=String(s.file_path??s.notebook_path??``);v=`${o}: ${e||`(unknown path)`}`,_=f(e?[e]:[],c)}else v=`${o||`(unknown tool)`}: ${JSON.stringify(s).slice(0,200)}`,_={decision:`escalate`,reason:`tool needs approval: ${o}`};g({kind:`approval-decision`,method:o,decision:_.decision,reason:_.reason,summary:v});let y=_.decision,b=_.reason;if(y===`escalate`){let r=await E(e,u,{taskGoal:n(e,t)?.prompt??null,summary:v});g({kind:`sidecar-decision`,decision:r.decision,reason:r.reason,summary:v}),r.decision===`escalate`?(y=await m(u,{method:`claude/${o}`,summary:v,params:{tool_name:o,input:s}},{timeoutMs:h.approvals.escalationTimeoutMs,onEvent:g}),b=`escalated for human review`):(y=r.decision,b=r.reason)}return y===`accept`?{behavior:`allow`,updatedInput:s}:{behavior:`deny`,message:`Denied by coder policy: ${b}`}}const k={approval_prompt:{description:`Coder approval policy for claude permission prompts.`,inputSchema:{type:`object`,additionalProperties:!0},handler:(e,{cwd:t,taskId:n})=>O(t,n,e).catch(e=>({behavior:`deny`,message:`coder mcp tool failed: ${e instanceof Error?e.message:String(e)}`}))}},A=h({name:`task mcp`,options:{cwd:g},args:1,run:({args:e,cwd:n})=>_(`coder`,k,{cwd:n,taskId:e[0]},void 0,t())});export{A as commandTaskMcp};
@@ -1,13 +0,0 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{An as t,Bn as n,C as r,Ct as i,gn as a}from"./prompts-Bj4Fbd_n.js";import{t as o}from"./integrations-IGnXBrPw.js";import{r as s}from"./history-C53URBjs.js";import{t as c}from"./mcp-server-BlP9lACI.js";import l from"node:path";import u from"node:process";import{randomUUID as d}from"node:crypto";import f from"node:os";import p from"node:fs/promises";const m=e=>e.replace(/&(amp|lt|gt);/g,(e,t)=>({amp:`&`,lt:`<`,gt:`>`})[t]);function h(e=``,t=!1){let n=/<event>\n([^]*?)\n<\/event>/g;if(!t&&(!e.trimStart().startsWith(`<event>`)||e.replace(n,``).trim()))return;let r=[];for(let[,i]of e.matchAll(n))try{let e=JSON.parse(m(i));if(!e||typeof e!=`object`||Array.isArray(e)){if(!t)return;continue}r.push(e)}catch(e){if(console.error(`coder: unreadable event prompt`,e),!t)return}return r.length?r:void 0}function g(e,t,n=[]){let r=[e??``,...n].flatMap(e=>(h(e,!0)??[]).flatMap(e=>typeof e.mustReply==`boolean`?[e.mustReply]:[]));return r.length?r.includes(!0):t}var _=e({agentToolServer:()=>x,agentTools:()=>v,gitToolEnvironment:()=>k,handleKey:()=>S,historyToolServer:()=>M,hubbedToolServers:()=>O,nativeToolEnvironment:()=>E,serverToken:()=>C,taskToolServers:()=>T,tokenEnvName:()=>y,toolServerToken:()=>w,turnToolServers:()=>D});function v(e){return e===`history`?j:void 0}function y(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const b=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function x(e,n,r){let{name:i,tools:a,repos:s}=o[e],{readOnly:c,...l}=a.server(n,r.event,r.token),d=Object.entries(l.env??{}).find(([,e])=>e===r.token)?.[0],f=n.some(e=>!a.presets.read.includes(e))?`write`:`read`;return{...l,name:b(S(e,r.account)),integration:e,...r.account?{account:r.account}:{},description:r.account?`${i} ${r.account}`:`${i}, the account this task started in`,access:f,...c&&l.command?{command:u.execPath,args:[t,`agent`,`tools`,e],readOnly:c}:{},...d?{credentialFields:{env:d}}:{},...s?.credentialUsername?{gitCredential:!0}:{}}}const S=(e,t)=>t?`${e}:${t}`:e;function C(e){if(!e?.integration||!o[e.integration])return;let t=x(e.integration,[],{token:`\0`}),n=Object.entries(t.env??{}).find(([,e])=>e===`\0`)?.[0],r=t.credentialFields?.header;return n?e.env?.[n]||void 0:r?e.headers?.[r]?.replace(/^Bearer /,``):void 0}function w(e,t){return C(e.find(e=>e.name===t))}function T(e,t,n=[]){let r=new Set,i=new Set(n);return Object.entries(t).flatMap(([t,n])=>{let[a,s]=t.split(/:(.*)/),c=e.tools[a];if(!o[a]||!n||!c?.length)return[];let l=x(a,c,{token:n,...e.event?{event:e.event}:{},...s?{account:s}:{}});i.has(t)&&l.access===`read`&&delete l.gitCredential;let u=l.name;for(let e=2;r.has(u);e++)u=`${l.name}-${e}`;return r.add(u),[{...l,name:u}]})}function E(e,t,r,i=[]){return n(Object.fromEntries([...T(e,t,i).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:history`,{name:`history`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}]]:[]]))}function D(e,t,n){let r=n.find(e=>e.name===`history`&&!e.command&&!e.url),i=n.filter(e=>e!==r);return e.conversation?[M(l.join(t,`job.json`),r?.env),...i]:i}function O(e,n,r){let i=r.filter(e=>e.alwaysLoad);if(i.length===r.length)return r;let a=Object.fromEntries(Object.entries(u.env).filter(e=>/^(?:PATH|CODER_(?:HOME|CONNECTION_[A-F0-9]{24}|MCP_[A-Z_]+))$/.test(e[0])&&e[1]!==void 0));return[...i,{name:`coder`,command:u.execPath,args:[t,`task`,`hub`,n,`--cwd`,e],env:a,tools:[`find_tools`,`call_tool`],alwaysLoad:!0}]}async function k(e){let t=e.flatMap(e=>{let t=e.integration?o[e.integration]?.repos:void 0,n=e.gitCredential&&t?.credentialUsername&&C(e);return n&&!/[\r\n]/.test(n)?t.cloneHosts.map(r=>({host:r,username:t.credentialUsername,password:n,...e.account?{owner:e.account.toLowerCase()}:{}})):[]});if(!t.length)return{env:{},close:async()=>{}};let n=await p.mkdtemp(l.join(f.tmpdir(),`coder-git-`)),r=l.join(n,`credential.cjs`);try{await p.writeFile(l.join(n,`tokens.json`),JSON.stringify(t),{mode:384}),await p.writeFile(r,`const fs = require('node:fs');
2
- let input = '';
3
- process.stdin.on('data', data => input += data);
4
- process.stdin.on('end', () => {
5
- if (process.argv[2] !== 'get') return;
6
- const fields = Object.fromEntries(input.trim().split('\\n').map(line => { const at = line.indexOf('='); return [line.slice(0, at), line.slice(at + 1)]; }));
7
- const entries = JSON.parse(fs.readFileSync(require('node:path').join(__dirname, 'tokens.json'), 'utf8'));
8
- const owner = (fields.path || '').split('/')[0].toLowerCase();
9
- const hosted = entries.filter(entry => fields.protocol === 'https' && fields.host === entry.host);
10
- const credential = hosted.find(entry => entry.owner === owner) || hosted.find(entry => !entry.owner) || hosted[0];
11
- if (credential) process.stdout.write('username=' + credential.username + '\\npassword=' + credential.password + '\\n');
12
- });
13
- `,{mode:384});let e=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,i=Number(u.env.GIT_CONFIG_COUNT??0);if(!Number.isInteger(i)||i<0||i>1e3)throw Error(`Invalid git config count`);return{env:{GIT_CONFIG_COUNT:String(i+3),[`GIT_CONFIG_KEY_${i}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${i}`]:``,[`GIT_CONFIG_KEY_${i+1}`]:`credential.helper`,[`GIT_CONFIG_VALUE_${i+1}`]:`!${e(u.execPath)} ${e(r)}`,[`GIT_CONFIG_KEY_${i+2}`]:`credential.useHttpPath`,[`GIT_CONFIG_VALUE_${i+2}`]:`true`},close:()=>p.rm(n,{recursive:!0,force:!0})}}catch(e){throw await p.rm(n,{recursive:!0,force:!0}),e}}async function A(e,t,n=fetch){let r=u.env.CODER_REPLY_URL,i=u.env.CODER_REPLY_TOKEN;if(!r||!i)throw Error(`This task has no conversation to post to`);let a=JSON.stringify({id:d(),...t});for(let t=0;;t++){let o;try{o=await n(`${r}/${e}`,{method:`POST`,headers:{authorization:`Bearer ${i}`,"content-type":`application/json`},body:a,signal:AbortSignal.timeout(6e4)})}catch(e){if(t<2)continue;throw e}let s=await o.json().catch(()=>void 0);if(!o.ok)throw Error(s?.error??`The conversation ${e} failed (${o.status})`);return{ok:!0}}}const j={reply:{description:`Post a reply now, during your turn, such as before longer work. Your final message is a reply too; never send the same text twice.`,inputSchema:{type:`object`,properties:{text:{type:`string`,description:`Markdown to post.`}},required:[`text`]},handler:async(e,t)=>{let n=u.env.CODER_HISTORY_TASK;if(!n)throw Error(`CODER_HISTORY_TASK is not set`);if(!JSON.parse(await p.readFile(n,`utf8`)).conversation)throw Error(`Only conversation tasks can reply`);if(typeof e.text!=`string`||!e.text.trim())throw Error(`Reply text is required`);let r=e.text.trim(),a=await A(`reply`,{text:r},t?.fetch);return i(l.dirname(n),{kind:`reply`,message:r}),a}},react:{description:`React to a message in this conversation with an emoji, by default the one that started your turn.`,inputSchema:{type:`object`,properties:{emoji:{type:`string`,description:`An emoji name such as thumbsup, or the emoji itself.`},message:{type:`string`,description:`A message id from the conversation.`}},required:[`emoji`]},handler:async(e,t)=>{let n=u.env.CODER_HISTORY_TASK;if(!n)throw Error(`CODER_HISTORY_TASK is not set`);let r=JSON.parse(await p.readFile(n,`utf8`));if(!r.conversation)throw Error(`Only conversation tasks can react`);if(typeof e.emoji!=`string`||!e.emoji.trim())throw Error(`Emoji is required`);if(e.message!==void 0&&(typeof e.message!=`string`||!e.message.trim()))throw Error(`Message id must be a non-empty string`);let i=h(r.currentPrompt??r.prompt??``,!0)?.[0],a=e.message??i?.message?.id??i?.messages?.[0]?.id;if(i&&!a)throw Error(`This turn has no message to react to; give a message id`);return A(`react`,{emoji:e.emoji.trim(),...a?{message:a}:{}},t?.fetch)}},history:{description:"Search or read this task's earlier conversation, including your tool calls and results, oldest first. With query, the messages containing that exact text; without, the messages from `from` on.",inputSchema:c({query:`string`,from:`number`,limit:`number`},[],{query:`Exact text to find, case-insensitive, 1 to 500 characters: a word or phrase from the message, not a question.`,from:`Message index to start at; default the oldest, or after the last match.`,limit:`Messages to return, 1 to 20; default 10.`}),annotations:{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},handler:async e=>{let t=u.env.CODER_HISTORY_TASK;if(!t)throw Error(`CODER_HISTORY_TASK is not set`);let n=JSON.parse(await p.readFile(t,`utf8`));return s(n,e)}}};function M(e,n={}){return{name:`history`,command:u.execPath,args:[t,`agent`,`tools`,`history`],env:{...n,CODER_HISTORY_TASK:e,CODEX_HOME:a(),CLAUDE_CONFIG_DIR:l.dirname(r())},tools:Object.keys(j),alwaysLoad:!0}}export{E as a,D as c,_ as i,h as l,S as n,y as o,O as r,w as s,k as t,g as u};
@@ -1 +0,0 @@
1
- import e from"node:readline";async function t(t,n,r,i={input:process.stdin,write:e=>process.stdout.write(`${e}\n`)},a=`1`){let o=e=>i.write(JSON.stringify(e)),s=e.createInterface({input:i.input,terminal:!1}),c=new Set,l,u=async(e,t)=>{let i=n[String(t?.name??``)],a,s=!1;try{if(!i)throw Error(`unknown tool: ${t?.name}`);let n=await i.handler(t?.arguments??{},r);if(n&&typeof n==`object`&&Array.isArray(n.content)){o({jsonrpc:`2.0`,id:e,result:n});return}a=typeof n==`string`?n:JSON.stringify(n)}catch(e){s=!0,a=e instanceof Error?e.message:String(e)}o({jsonrpc:`2.0`,id:e,result:{content:[{type:`text`,text:a}],isError:s}})};for await(let e of s){if(!e.trim())continue;let r;try{r=JSON.parse(e)}catch{continue}let{id:i,method:d,params:f}=r;if(d===`initialize`)o({jsonrpc:`2.0`,id:i,result:{protocolVersion:f?.protocolVersion??`2024-11-05`,capabilities:{tools:{}},serverInfo:{name:t,version:a}}});else if(d===`tools/list`)o({jsonrpc:`2.0`,id:i,result:{tools:Object.entries(n).map(([e,t])=>({name:e,description:t.description,inputSchema:t.inputSchema,...t.annotations?{annotations:t.annotations}:{}}))}});else if(d===`tools/call`){let e=u(i,f);c.add(e),e.then(()=>c.delete(e),t=>{c.delete(e),l=t,s.close()})}else i!==void 0&&o({jsonrpc:`2.0`,id:i,result:{}})}if(await Promise.all(c),l)throw l}function n(e,t=Object.keys(e),n={}){return{type:`object`,properties:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{type:t,...n[e]===void 0?{}:{description:n[e]}}])),...t.length?{required:t}:{}}}async function r(t,n={input:process.stdin,write:e=>process.stdout.write(`${e}\n`)}){let{spawn:r}=await import(`node:child_process`);if(!t.command)throw Error(`A stdio MCP server is required`);let i=r(t.command,t.args??[],{env:{...process.env,...t.env},stdio:[`pipe`,`pipe`,`inherit`]}),a=new Set,o=new Set,s=e.createInterface({input:n.input,terminal:!1}),c=e.createInterface({input:i.stdout,terminal:!1}),l=new Promise((e,t)=>{i.once(`error`,t),i.once(`close`,n=>n?t(Error(`MCP server exited with status ${n}`)):e())}),u=()=>{i.kill(),s.close()};process.once(`SIGTERM`,u),process.once(`SIGINT`,u);let d;l.catch(()=>s.close()),i.stdin.on(`error`,()=>s.close());let f=(async()=>{for await(let e of c){let t=JSON.parse(e);if(t.method===`notifications/tools/list_changed`&&a.clear(),o.delete(t.id)&&t.result){t.result.tools=(t.result.tools??[]).filter(e=>typeof e.name==`string`&&e.annotations?.readOnlyHint===!0);for(let e of t.result.tools)a.add(e.name)}n.write(JSON.stringify(t))}s.close()})();f.catch(()=>s.close());try{for await(let e of s){if(!e.trim())continue;let t=JSON.parse(e);if(t.method===`tools/call`&&!a.has(t.params?.name)){n.write(JSON.stringify({jsonrpc:`2.0`,id:t.id,error:{code:-32601,message:`Tool is not marked read-only`}}));continue}t.method===`tools/list`&&(t.params?.cursor||a.clear(),o.add(t.id)),i.stdin.write(`${e}\n`)}i.stdin.end(),d=setTimeout(()=>i.kill(`SIGKILL`),2e3),await Promise.all([f,l])}finally{d&&clearTimeout(d),process.removeListener(`SIGTERM`,u),process.removeListener(`SIGINT`,u),i.kill(`SIGKILL`),s.close(),c.close()}}export{r as n,t as r,n as t};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-BBlH53hA.js";const t=e(`model`,{list:async()=>(await import(`./list-CquHtsmW.js`)).commandModelList,ls:async()=>(await import(`./list-CquHtsmW.js`)).commandModelList,add:async()=>(await import(`./add-wC8ByRgM.js`).then(e=>e.t)).commandModelAdd,update:async()=>(await import(`./update-DIYW08ME.js`)).commandModelUpdate,remove:async()=>(await import(`./remove-CId1EwPg.js`).then(e=>e.n)).commandModelRemove,disable:async()=>(await import(`./disable-Dml_Slph.js`)).commandModelDisable,enable:async()=>(await import(`./enable-xye-Nanc.js`)).commandModelEnable,alias:async()=>(await import(`./alias-A8ObWElH.js`)).commandModelAlias,unalias:async()=>(await import(`./unalias-bL5t8Isc.js`)).commandModelUnalias},{menu:[{usage:`list`,blurb:`list built-ins, custom models, and aliases`},{usage:`add <name> --base-url <url> --model <id> [--env-key VAR]`,blurb:`connect a model`},{usage:`update <name> [--base-url|--model|--env-key]`,blurb:`change a model in place`},{usage:`remove <name>`,blurb:`delete a custom model`},{usage:`disable <name>`,blurb:`turn off a model (built-in, custom, or alias)`},{usage:`enable <name>`,blurb:`re-enable a disabled model`},{usage:`alias <name> <spec>`,blurb:`name a spec, e.g. fast codex:luna`},{usage:`unalias <name>`,blurb:`remove an alias`}],description:["Manage the models coder can dispatch to. `add` connects any OpenAI-compatible",`endpoint (Ollama, vLLM, OpenRouter, ...) as the custom engine, alongside the`,"built-in codex/claude models. Name your own shortcuts with `alias`",`(e.g. fast -> codex:luna); disable/enable turns any model off and on.`]});export{t as commandModel};
@@ -1 +0,0 @@
1
- import{B as e,D as t,E as n,H as r,K as i,M as a,U as o,V as s,W as c,Y as l,j as u,q as d,rt as f,z as p}from"./prompts-Bj4Fbd_n.js";import{A as m,U as h,w as g}from"./dispatch-CFZ9Crvg.js";import{t as _}from"./wire-nJ7sEi-M.js";import v from"node:path";import y from"node:process";const b=new Set([`codex`,`claude`,`custom`]);async function x(t,n={}){let r=`key`in n?n.key:t.envKey?y.env[t.envKey]:void 0,i=n.fetch??fetch,a=e(t.baseUrl,`models`),o=null;for(let e of a)try{let n=await i(e,{headers:r?{Authorization:`Bearer ${r}`}:{},signal:AbortSignal.timeout(5e3)});if(!n.ok){o=n.status===404?{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable (no model list to verify against)`}:{reachable:!1,modelListed:null,models:null,detail:`${e} -> HTTP ${n.status}`};continue}let a=await n.json().catch(()=>null),s=Array.isArray(a?.data)?a.data.map(e=>e.id).filter(e=>typeof e==`string`):null;if(!s)return{reachable:!0,modelListed:null,models:null,detail:`endpoint reachable`};if(!t.model)return{reachable:!0,modelListed:null,models:s,detail:`endpoint reachable; ${s.length} models listed`};let c=s.includes(t.model);return{reachable:!0,modelListed:c,models:s,detail:c?`endpoint reachable; model "${t.model}" listed`:`endpoint reachable, but "${t.model}" is not in its model list`}}catch(t){o={reachable:!1,modelListed:null,models:null,detail:`${e} unreachable (${t instanceof Error?t.message:String(t)})`}}return o}function S(e,t){f(e,e=>{e.models=e.models??{},t(e.models)})}function C(e){let n=e.models??{},i=Object.entries(n).filter(e=>o(e[1])),c=e=>`${e.provider}:${e.model}${e.effort?`:${e.effort}`:``}`,l=Object.entries(n).filter(e=>s(e[1])).map(([e,n])=>{let i=n.provider===`claude`?t:a,o=i[n.model]??n.model,s=r(e)?e:Object.entries(i).find(([,e])=>e===o)?.[0];return{name:e,spec:c(n),replaces:s,disabled:!!n.disabled}}),u=new Map;for(let e of l)e.replaces&&(e.name===e.replaces||!u.has(e.replaces))&&u.get(e.replaces)?.name!==e.replaces&&u.set(e.replaces,e);let d=e=>!!n[e]?.disabled,f=l.filter(e=>![...u.values()].some(t=>t.name===e.name));return{models:n,endpoints:i,providerRows:(e,t)=>[...Object.entries(t).map(([e,t])=>{let n=u.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(n).filter(([e,t])=>!o(t)&&!s(t)&&!r(e)).map(([e,t])=>({name:e,disabled:!!t.disabled})),disabled:d}}async function w(e){let{endpoints:n,providerRows:r,toggledSlugs:i}=C(c(e)),o=await Promise.all(n.map(async([e,t])=>({name:e,...t,probe:await x(t)})));return{codex:r(`codex`,a),claude:r(`claude`,t),custom:o,...i.length?{toggles:i}:{}}}async function T(e,t,n,r){let i=await _(t),a=i?.wireApi===`responses`;i?(t.wireApi=i.wireApi,t.baseUrl=i.baseUrl??t.baseUrl):delete t.wireApi,S(n,n=>{n[e]=t});let o=await x(t),s=g(m(r)),c=m(r);return{name:e,entry:t,file:n,probe:o,codex:c,install:s,nativeResponses:a,keyMissing:!!(t.envKey&&!y.env[t.envKey]),ready:o.reachable&&c.available}}const E=`Usage: coder model add <name> --base-url <url> --model <id> [--env-key VAR]`,D=`Usage: coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR]`,O=`Usage: coder model alias <name> <spec> (e.g. coder model alias fast codex:luna)`,k=`List them: coder model list`;function A(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(b.has(e)||t===`model`&&r(e))throw new h(`invalid-option`,`"${e}" is reserved; pick another name.`)}async function j(e,t,n){A(t,`model`,E);let r=c(e).models?.[t];if(r)throw new h(`invalid-option`,o(r)?`Custom model "${t}" already exists.`:`"${t}" is already configured as an ${s(r)?`alias`:`entry`}; remove it first.`,{hint:`Change it: coder model update ${t} [--base-url|--model|--env-key], or remove it first.`});if(!n.baseUrl||!n.model)throw new h(`invalid-option`,`Missing --base-url or --model.`,{hint:E});return T(t,{baseUrl:i(n.baseUrl),model:n.model,...n.envKey?{envKey:n.envKey}:{}},p(e,n.workspace),e)}async function M(e,t,n){let r=t?c(e).models?.[t]:void 0,a=r&&o(r)?r:void 0;if(!t||!a)throw new h(`invalid-option`,t?`No custom model named "${t}".`:`Missing model name.`,{hint:t?k:D});if(!n.baseUrl&&!n.model&&!n.envKey)throw new h(`invalid-option`,`Nothing to update: pass --base-url, --model, or --env-key.`,{hint:D});return T(t,{...a,...n.baseUrl?{baseUrl:i(n.baseUrl)}:{},...n.model?{model:n.model}:{},...n.envKey?{envKey:n.envKey}:{}},p(e,n.workspace),e)}function N(e,t,n={}){if(!t||!c(e).models?.[t])throw new h(`invalid-option`,t?`No custom model named "${t}".`:`Missing model name.`,{hint:t?k:`Usage: coder model remove <name>`});let r=p(e,n.workspace);return f(r,e=>l(e,t)),{removed:t,file:r}}function P(e,r,i,s={}){A(r,`alias`,O);let l=c(e),f=l.models?.[r];if(f&&o(f))throw new h(`invalid-option`,`"${r}" is a custom model name; pick another alias name.`);if(!i)throw new h(`invalid-option`,`Missing alias spec.`,{hint:O});let m;try{m=d(i,l)}catch(e){throw new h(`invalid-option`,e instanceof Error?e.message:String(e),{hint:O})}if(!m||!m.model)throw new h(`invalid-option`,`Alias spec "${i}" does not resolve to a model.`,{hint:O});if(m.engine===`custom`)throw new h(`invalid-option`,`"${i}" names a custom model, which is already dispatchable by name; aliases target codex/claude models.`);let g=i.split(`:`).some(e=>u.has(e.trim())||n.has(e.trim())),_=m.engine===`claude`?t:a,v={provider:m.engine,model:_[m.model]??m.model,...g&&m.effort?{effort:m.effort}:{}},y=p(e,s.workspace);return S(y,e=>{e[r]=v}),{alias:r,...v,file:y}}function F(e,t,n={}){let r=t?c(e).models?.[t]:void 0;if(!t||!r||!s(r))throw new h(`invalid-option`,t?`No alias named "${t}".`:`Missing alias name.`,{hint:t?k:`Usage: coder model unalias <name>`});let i=p(e,n.workspace);return f(i,e=>l(e,t)),{unaliased:t,file:i}}function I(e,t,n,r={}){if(!t)throw new h(`invalid-option`,`Missing model name.`,{hint:`Usage: coder model ${n?`disable`:`enable`} <name>`});let i=!!c(e).models?.[t],a=p(e,r.workspace);return S(a,e=>{let r=e[t];if(!r){n?e[t]={disabled:!0}:i&&(e[t]={disabled:!1});return}o(r)||s(r)?n?r.disabled=!0:delete r.disabled:n?r.disabled=!0:delete e[t]}),{name:t,disabled:n,file:a}}const L={add:(e,t)=>j(v.resolve(t.cwd??`.`),e,t),update:(e,t)=>M(v.resolve(t.cwd??`.`),e,t),remove:(e,t={})=>N(v.resolve(t.cwd??`.`),e,t),list:(e={})=>w(v.resolve(e.cwd??`.`)),alias:(e,t,n={})=>P(v.resolve(n.cwd??`.`),e,t,n),unalias:(e,t={})=>F(v.resolve(t.cwd??`.`),e,t),disable:(e,t={})=>I(v.resolve(t.cwd??`.`),e,!0,t),enable:(e,t={})=>I(v.resolve(t.cwd??`.`),e,!1,t)};export{x as n,L as t};
@@ -1,5 +0,0 @@
1
- import e from"node:process";function t(t=e.stdout){try{return t.getWindowSize?.()[0]??t.columns}catch{return t.columns}}function n(t=e.stdout){try{return t.getWindowSize?.()[1]??t.rows}catch{return t.rows}}function r(e){return e>=768&&e<=879||e>=8203&&e<=8207||e>=65024&&e<=65039?0:e>=4352&&e<=4447||e>=11904&&e<=42191||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65072&&e<=65103||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=129791||e>=131072&&e<=262141?2:1}function i(e){let t=0;for(let n of e.replace(/\x1b\[[0-9;]*m/g,``))t+=r(n.codePointAt(0));return t}function a(e,t){let n=0;for(let i=0;i<e.length;){let a=e[i]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(i)):null;if(a){i+=a[0].length;continue}let o=String.fromCodePoint(e.codePointAt(i)),s=r(o.codePointAt(0));if(n+s>t)return i;n+=s,i+=o.length}return e.length}function o(e,t,n){if(t<4||n<1)return[e];let r=[],o=e;for(;i(o)>t;){if(r.length===n-1)return[...r,`${o.slice(0,a(o,t-1))}…`];let e=a(o,t),i=o.lastIndexOf(` `,e),s=i>t*.66?i:e;r.push(o.slice(0,s).trimEnd()),o=o.slice(s).replace(/^\s+/,``)}return[...r,o]}function s(e,t){let n=0,i=``;for(let a=0;a<e.length;){let o=e[a]===`\x1B`?/^\x1b\[[0-9;]*m/.exec(e.slice(a)):null;if(o){i+=o[0],a+=o[0].length;continue}let s=e.codePointAt(a),c=String.fromCodePoint(s),l=r(s);if(n+l>t-1)return`${i}\x1b[0m${d.dim(`…`)}`;i+=c,n+=l,a+=c.length}return i}function c(){let t=e.stdin;if(!t.isTTY||!e.stdout.isTTY)return()=>{};t.setRawMode(!0),t.resume();let n=t=>{t.includes(3)&&e.kill(e.pid,`SIGINT`),t.includes(26)&&e.kill(e.pid,`SIGTSTP`)};return t.on(`data`,n),t.unref(),()=>{t.off(`data`,n),t.isTTY&&t.setRawMode(!1),t.pause()}}var l=class{stream;quietMs;lines=[];painted=[];paintedWidths=[];paintedCols;resizeTimer;tty;constructor(t=e.stdout,n=250){this.stream=t,this.quietMs=n,this.tty=!!t.isTTY,this.tty&&t.on(`resize`,this.onResize)}set(e){this.lines=e,!(!this.tty||this.resizeTimer)&&this.paint()}commit(e){this.clear(),this.stream.write(e)}clear(){if(!this.painted.length)return;let e=t(this.stream),n=this.painted.length;e&&this.paintedCols&&e!==this.paintedCols&&(n=this.paintedWidths.reduce((t,n)=>t+Math.max(1,Math.ceil(n/e)),0)),this.stream.write(`\x1b[${n}A\x1b[0J`),this.painted=[],this.paintedWidths=[]}done(){this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=void 0,this.paint()),this.tty&&this.stream.off(`resize`,this.onResize)}paint(){this.clear();let e=t(this.stream),r=e?this.lines.map(t=>s(t,e-1)):this.lines,a=n(this.stream);a&&r.length>a-1&&(r=a>1?r.slice(-(a-1)):[]);for(let e of r)this.stream.write(`${e}\n`);this.painted=r,this.paintedWidths=r.map(i),this.paintedCols=e}onResize=()=>{this.clear(),this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=setTimeout(()=>{this.resizeTimer=void 0,this.paint()},this.quietMs),this.resizeTimer.unref?.()}};function u(t){let n=e.env.FORCE_COLOR,r=n!=null&&n!==``&&n!==`0`||n!==`0`&&t.isTTY&&!e.env.NO_COLOR,i=(e,t)=>r?`\x1b[${e}m${t}\x1b[0m`:t;return{blue:e=>i(`34`,e),bold:e=>i(`1`,e),cyan:e=>i(`36`,e),dim:e=>i(`2`,e),light:e=>i(`38;5;246`,e),green:e=>i(`32`,e),red:e=>i(`31`,e),yellow:e=>i(`33`,e)}}const d=u(e.stdout),f=u(e.stderr);function p(e,t=f,n=t.blue,r=`Related`){let i=e.map(e=>{let t=e.search(/(?:\b[A-Z][A-Z0-9_]*=\S+\s+)*coder /);if(t===-1)return{text:e};let n=e.slice(0,t).trim().replace(/:$/,``);return{command:e.slice(t),label:n.charAt(0).toLowerCase()+n.slice(1)}}),a=Math.max(0,...i.map(e=>e.command?.length??0))+2;return[t.bold(`${r}:`),...i.map(e=>e.command===void 0?` ${t.dim(e.text)}`:` ${n(e.label?e.command.padEnd(a):e.command)}${t.dim(e.label)}`)].join(`
2
- `)}function m(t,n={}){let r=typeof n==`number`?n:n.code??1,i=typeof n==`object`?n.hint:null,a=i==null?[]:Array.isArray(i)?i:[i];e.stderr.write(`${f.red(t)}\n`),a.length&&e.stderr.write(`\n${p(a,f)}\n`),e.exit(r)}function h(t){e.stdout.write(`${JSON.stringify(t,null,2)}\n`)}function g(e,t=d){return(JSON.stringify(e,null,2)??`null`).split(`
3
- `).map(e=>e.replace(/"((?:[^"\\]|\\.)*)":/g,(e,n)=>`${t.light(`"${n}"`)}:`).replace(/: (-?\d[\d.eE+-]*|true|false|null)(,?)$/,(e,n,r)=>`: ${t.blue(n)}${r}`)).join(`
4
- `)}function _(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m`:`${Math.floor(n/60)}h${n%60}m`}function v(e){let t=Math.max(0,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60)%60,i=Math.floor(t/3600),a=e=>String(e).padStart(2,`0`);return i?`${i}:${a(r)}:${a(n)}`:`${r}:${a(n)}`}function y(e){return e<1e3?String(e):e<1e6?`${(e/1e3).toFixed(+(e<1e4))}k`:`${(e/1e6).toFixed(1)}M`}function b(e,t){let n=[`in ${y(e.input)}`,...e.cachedInput?[`cached ${y(e.cachedInput)}`]:[],`out ${y(e.output)}`];return`${y(e.total)} (${n.join(` · `)}) on ${t||`default model`}`}function x(e){return`ctx ${y(e.input+e.cachedInput)} · out ${y(e.output)}`}function S(e,t){return e.length>t?`${e.slice(0,t-1)}…`:e.padEnd(t)}function C(e,t){let n=[],r=e;for(;r.length>t;){let e=r.lastIndexOf(` `,t);e<=0&&(e=t),n.push(r.slice(0,e).trimEnd()),r=r.slice(e).trimStart()}return n.push(r),n}function w(e,n,r={}){let i=`bold`in r?{style:r}:r,a=i.style??d,o=n.length&&typeof n[0]==`object`&&n[0]!==null&&`rows`in n[0]?n:[{rows:n}],s=o.flatMap(e=>e.rows),c=e.length-1,l=e.map((e,t)=>t===c&&!i.border?0:Math.min(e.max??40,Math.max(e.header.length,...s.map(t=>e.value(t).length))));if(i.border){let n=i.width??t()??120,r=l.slice(0,c).reduce((e,t)=>e+t+3,0)+4,a=Math.max(e[c].header.length,...s.map(t=>e[c].value(t).length));l[c]=Math.max(e[c].header.length,Math.min(a,n-r))}let u=(e,t,n)=>a.light(`${e}${l.map(e=>`─`.repeat(e+2)).join(t)}${n}`),f=e=>i.border?`${a.light(`│`)} ${e.join(` ${a.light(`│`)} `)} ${a.light(`│`)}`:e.join(` `),p=(e,t)=>t===c&&!i.border?e:S(e,l[t]),m=[];return i.border&&m.push(u(`┌`,`┬`,`┐`)),m.push(a.bold(a.light(f(e.map((e,t)=>p(e.header,t)))))),i.border&&m.push(u(`├`,`┼`,`┤`)),o.forEach((t,n)=>{n&&!i.border&&m.push(``),t.header&&m.push(i.border?`${a.light(`│`)} ${t.header}`:t.header),t.rows.forEach((n,r)=>{i.border&&(r||t.header)&&m.push(u(`├`,`┼`,`┤`));let a=e.map((e,t)=>i.border?C(e.value(n),l[t]):[e.value(n)]),o=Math.max(...a.map(e=>e.length));for(let t=0;t<o;t++)m.push(f(e.map((e,r)=>{let i=p(a[r][t]??``,r);return e.paint&&a[r][t]!==void 0?e.paint(i,n):i})))})}),i.border&&m.push(u(`└`,`┴`,`┘`)),`${m.join(`
5
- `)}\n`}function T(e){return` ${d.bold(d.green(`✔`))} ${e}`}function E(e){return` ${d.bold(d.red(`✘`))} ${e}`}function D(e,t=0){let n=e.padEnd(t);return e===`running`?d.green(n):e===`waiting-approval`?d.yellow(n):e===`failed`||e===`cancelled`?d.red(n):e===`completed`?d.blue(n):d.dim(n)}export{o as S,l as _,_ as a,n as b,g as c,x as d,T as f,w as g,h,m as i,y as l,D as m,S as n,v as o,d as p,f as r,p as s,E as t,b as u,c as v,i as x,t as y};