@wular/coder 0.4.12 → 0.4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/README.md +1 -1
  2. package/dist/actions-D12xDiQS.js +4 -0
  3. package/dist/{adapter-CVd5klMH.js → adapter-Bz0E-DAY.js} +2 -2
  4. package/dist/{adapter-CU9H4g6c.js → adapter-CsacmMmv.js} +1 -1
  5. package/dist/adapter-DzpdWewB.js +1 -0
  6. package/dist/{agent-BA6xr8QY.js → agent-JJStALIx.js} +2 -2
  7. package/dist/apps-Bnk7F3A2.js +379 -0
  8. package/dist/args-Dqf5Y1RP.js +1 -0
  9. package/dist/async-Tj4zKHXR.js +3 -0
  10. package/dist/{auth-DuXnSNf9.js → auth-BhpnOCbn.js} +1 -1
  11. package/dist/builtin/coder/agent.json +0 -1
  12. package/dist/builtin/coder/system.md +1 -1
  13. package/dist/{chat-CgQdDRhs.js → chat-CSepnsrK.js} +1 -1
  14. package/dist/cli.js +13 -13
  15. package/dist/cmd-BHZwhrfa.js +118 -0
  16. package/dist/connection-BkYTuJjV.js +1 -0
  17. package/dist/context-zhSlmXOp.js +7 -0
  18. package/dist/dash/standalone/node_modules/contextjsx/package.json +1 -1
  19. package/dist/dash/standalone/server/build-index.json +1 -1
  20. package/dist/dash/standalone/server/manifest.json +1281 -1261
  21. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/{turn.dac8eb211c500271.js → turn.6bb73458768e222e.js} +4 -16
  22. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.0de14cb4e30bd70d.js → index.de1f1311bab4252f.js} +12 -6
  23. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{defaults.1b615366c56838a1.js → defaults.e972c134a1ae918f.js} +3 -5
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.60308a11f7001eb7.js → log-view.ec6391dbf3063330.js} +40 -48
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.be791a5eaf328738.js → load.30ed8c28774a1a82.js} +4 -4
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/{page.0fbfdba5254f7ae5.js → page.04762872666a6f0a.js} +1 -1
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.70913bd4075da914.js → page.118a70787eff1761.js} +23 -3
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.e348ec45e9ed951b.js → loading.fcdfd50c21031895.js} +1 -1
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.61aab176baeefebd.js → notify.98dfcd316c306258.js} +1 -1
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.815371ed0d5dd4fa.js → page.74c59322f5fe8a2c.js} +4 -4
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.1d6af804f9ec043d.js → sign-out.730aa96b086ac996.js} +1 -1
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.2ed0e66d131fc148.js → agent-menu.1be5795272b245c8.js} +1 -1
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f43bcc1148ce3650.js → agents-grid.2c30ace077893029.js} +6 -6
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{connect-apps.f3af8cc8540719d7.js → connect-apps.8a20501ccb244421.js} +3 -3
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.fac1132ad9c4248e.js → loading.733f0acc2af5ceda.js} +2 -2
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.c6efd5432c1a4a75.js → page.d066b77dd3187026.js} +9 -9
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.a795379254982121.js → layout.b26006f060cd48f0.js} +9 -9
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.a2cb6d1f1714259a.js → page.4b23e9df21433bd3.js} +9 -9
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.4da9e2ba3fea937f.js → loading.e06845585ca67abc.js} +2 -2
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.996172c951739b35.js → page.4048048acb374c67.js} +35 -23
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.8e7ca54dd1821e98.js → platform-actions.000f2f87a48bfbc6.js} +36 -10
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.aa9e157d141481d7.js → agent-settings-form.ee0bb2dc4d403ec3.js} +8 -8
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.ad1a4c9b000d269a.js → loading.0e3641f3e4abaa7c.js} +1 -1
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.44d886e60ae04303.js → page.649b4ba135ded99b.js} +7 -7
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.521c9e7b8d77f557.js → loading.195e168e8e41d797.js} +1 -1
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.828cfb8112404792.js → page.96f7573208644f40.js} +1 -1
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.8f998a9c511e1fb3.js → loading.905293c9aa9afbc9.js} +2 -2
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.45e18b6dc3019af4.js → page.5f2b8585db8b27ad.js} +4 -4
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.c8d76988c734dda2.js → versions-list.8700f0106f4e8c15.js} +1 -1
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.b1367e864b4fb406.js → loading.f94b2f9ab04aaf21.js} +3 -3
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.dd11f2618e08becd.js → page.e898c4b5ef16ecb0.js} +7 -7
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.f987c12bcbc5c850.js → agent-pills.44e689e546fb042b.js} +1 -1
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.1579dc8acbaacf92.js → agent-toggle.4c67dfbb7d28a416.js} +2 -2
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.ad5cc342db794e5d.js → hero.9740a8e2f4b41f28.js} +5 -5
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.43b4b28f194ea842.js → connect-repositories.ff8b78a03153239b.js} +1 -1
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.776856fe1ed1a642.js → editor.471af698b8060eba.js} +31 -20
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.eafa5b41a2ed571f.js → import-picker.b7b5c89e618e8f89.js} +5 -5
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.ee001af7a96e3972.js → loading.ecb9dfd4d0f9d107.js} +2 -2
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.7d84ef2b178b34d2.js → page.880bdac7fe843635.js} +5 -5
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.393cf7429eea189e.js → layout.81f7e055829854a3.js} +5 -5
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.09bf294d753ee9d7.js +115 -0
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.980adfb7c5714752.js → page.8f8697b1b6b34ad7.js} +36 -9
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.24a1987405ed7b17.js → page.fe608b8e661aba1d.js} +1 -1
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.21ec9dc73ce68656.js → connections-list.97381888bfdd711b.js} +8 -8
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.683476f62a9ecde7.js → credentials-list.a4d8338c7f6a5702.js} +10 -8
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.b43dd3d97c536c2a.js → credentials.1443bbed1ff1d441.js} +8 -8
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.9e116751bd34e2cc.js → engines-list.d47db60d7dc01ebd.js} +2 -2
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.083f5c665df04b1b.js → list.a5b273558fb7f0f0.js} +4 -4
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.537f63f8e5dd085d.js → models-list.31d369f1b7ab45da.js} +66 -32
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.dfed4ae6ffc74434.js → page.805d0f8a2c5817d6.js} +15 -15
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.3afa989490bbe77c.js → runners-list.1e83449aa6593224.js} +6 -6
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.0d175ee815b22cd7.js → secrets-list.17ac06593005b8ba.js} +4 -4
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.3e8289f888fa444c.js → layout.8c4a2b31b194ba3e.js} +5 -5
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.06feaa5fbb06f1e6.js → page.a77996786278cda0.js} +1 -1
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.bbc7ced8dd5491eb.js → settings-head.705be0b1129b97af.js} +1 -1
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.ff95e4b6977d0474.js → create-link.19b4c50ef497aca1.js} +3 -3
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.894c73f9abee3ce1.js → outcome-dialog.18cf32fa42247b91.js} +1 -1
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.f06fda0df59beeb5.js → page.616f0b36bf7925bc.js} +5 -5
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.3c79cf14feff12bf.js → activity.a911169a820ba604.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.47cbb34ea8d2e33f.js → loading.76f851da5cc5268d.js} +5 -5
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.abed2a8424ef3da0.js → page.ddb594bb6567ee13.js} +6 -6
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.51fbeac76459433a.js +240 -0
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.dc294bb94b7437e1.js → task-view.3276538e8306fd8a.js} +28 -28
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.309a194fc7fa34be.js → composer-data.05fc39e1a7fd1ab7.js} +2 -2
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.5072aacdce127689.js → composer.dbf06b05c5e2eba3.js} +9 -9
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{status.16190fdd5fd7daad.js → status.cb704b48ce86cc7d.js} +6 -3
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.0a1b5878dccd3b37.js → task.f089c1c122ed6dd2.js} +17 -4
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.1162926f7498c732.js → tasks-list.5a00d69851dae119.js} +37 -22
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.1d687c986db53a73.js → tasks-section.36e70c93f7d0feee.js} +7 -7
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.d5d8cb5033823c9c.js → page.185b1ba0c803db3f.js} +4 -4
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.97d277dbab9c15cf.js → loading.a7e0ec01bfa769e3.js} +2 -2
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.fb21ebe90d49dac1.js → page.d41fea7676e37bfc.js} +4 -4
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.2197d8f43216d104.js → range-bar.69e68c9dae09f238.js} +2 -2
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.185dbc99875e208a.js → layout.296d70b95894209f.js} +1 -1
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.1f4217895ff1e835.js → foreign-link.8c6adf9c5a6f467c.js} +1 -1
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.cc76fc9708142525.js → loading-card.1cea8a722c10b998.js} +2 -2
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.85f15db7b648d48c.js → page-head.87b92529dbb53ceb.js} +3 -3
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e2915852cf82c86b.js → stream.c32d78562f75db25.js} +1 -1
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.0ed8ccaae81b9d53.js → task-toasts.44075fa7e04575e8.js} +5 -5
  100. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.180765bdadf6d602.js → back.d6109e72fbd04b45.js} +2 -2
  101. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.572ad93c7707ab27.js → org.d3abfd4053b711ce.js} +1 -1
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.c1281f9b12854210.js → confirm.29e198be34578222.js} +1 -1
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.3a452a262f040973.js → filter.81bb9a5c60cd1089.js} +1 -1
  104. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.25d53e5b41b9c4e5.js → modal.0b69c7fd9db025b9.js} +1 -1
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.a08dc08338d080e9.js → segmented.633abe26ff760e37.js} +1 -1
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.17cffebfc3103b9f.js → sentinel.0ddf515b8f09ef9f.js} +1 -1
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.66b2e54963f6901b.js → tabs.1600a0b563a5c7dd.js} +1 -1
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.24036899654de6df.js → toolbar.8b3a460a65edf85a.js} +1 -1
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.b9a5c37272250e82.js → action.67dd6f8ab1ae067d.js} +1 -1
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.a3928fa2dcd27b75.js → client.78267fa3d7905d17.js} +1 -1
  111. package/dist/dash/standalone/static/assets/chunks/{action-71685b2d5ad9f359.js → action-a76e495fb39a73d3.js} +1 -1
  112. package/dist/dash/standalone/static/assets/chunks/{agent-pills-15da36c2cb81991b.js → agent-pills-4d3c6a2aa9eb1522.js} +1 -1
  113. package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-6e6a87d6e673daa8.js → agent-settings-form-f7231a66e391f6b6.js} +1 -1
  114. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-ca98586e3b4ce9ae.js → agent-toggle-d7d27123f2070f18.js} +1 -1
  115. package/dist/dash/standalone/static/assets/chunks/{agents-grid-29c399e46b4e9e2b.js → agents-grid-185ecb3d86c6c447.js} +1 -1
  116. package/dist/dash/standalone/static/assets/chunks/{back-fa9d6e37f9828093.js → back-e29cb10f5548ddae.js} +1 -1
  117. package/dist/dash/standalone/static/assets/chunks/{combo-86f3e11d1f6f6cee.js → combo-702c94817bf6ac17.js} +1 -1
  118. package/dist/dash/standalone/static/assets/chunks/composer-56ebf36d63400423.js +1 -0
  119. package/dist/dash/standalone/static/assets/chunks/{composer-85e0ec7163ae18b7.js → composer-a686289a79f64bae.js} +1 -1
  120. package/dist/dash/standalone/static/assets/chunks/composer-data-f46a9bc7a14b4f9a.js +1 -0
  121. package/dist/dash/standalone/static/assets/chunks/{confirm-c29a1db0130638d2.js → confirm-a78147b6ecef3847.js} +1 -1
  122. package/dist/dash/standalone/static/assets/chunks/{connect-apps-b73490e04ae6398d.js → connect-apps-696726aedab42c96.js} +1 -1
  123. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-0de82daaf654b1d3.js → connect-repositories-7770ab805160028d.js} +1 -1
  124. package/dist/dash/standalone/static/assets/chunks/connections-list-07559f145f3e3da3.js +1 -0
  125. package/dist/dash/standalone/static/assets/chunks/{copy-445c11202f136275.js → copy-bdc60bdafe336316.js} +1 -1
  126. package/dist/dash/standalone/static/assets/chunks/create-link-426b0a5871ee41dd.js +1 -0
  127. package/dist/dash/standalone/static/assets/chunks/credentials-list-f07d090410104148.js +1 -0
  128. package/dist/dash/standalone/static/assets/chunks/{custom-range-a0630599f907b30e.js → custom-range-6618f32ef6cd4e80.js} +1 -1
  129. package/dist/dash/standalone/static/assets/chunks/editor-0860e370cbfc6b03.js +6 -0
  130. package/dist/dash/standalone/static/assets/chunks/engines-list-31b9bb7885924b05.js +1 -0
  131. package/dist/dash/standalone/static/assets/chunks/{field-b82a0f895266791c.js → field-bb8191aa02d07282.js} +1 -1
  132. package/dist/dash/standalone/static/assets/chunks/instructions-06b63e558f879da5.js +1 -0
  133. package/dist/dash/standalone/static/assets/chunks/{instructions-affaaeff366b1725.js → instructions-2d9fbcbfadac4f40.js} +1 -1
  134. package/dist/dash/standalone/static/assets/chunks/list-2773686bf8df64c7.js +1 -0
  135. package/dist/dash/standalone/static/assets/chunks/models-list-03611e64b6a07efe.js +1 -0
  136. package/dist/dash/standalone/static/assets/chunks/{notice-57db7a1f05b7308c.js → notice-d14fdac28139c0a8.js} +1 -1
  137. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-d3ba8ef89c59f801.js +1 -0
  138. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-5cf575a5e6921a5d.js → outcome-dialog-fde11a52c282301d.js} +1 -1
  139. package/dist/dash/standalone/static/assets/chunks/platform-actions-2a71c62b9f7eaef3.js +1 -0
  140. package/dist/dash/standalone/static/assets/chunks/platform-actions-70600c9943320152.js +1 -0
  141. package/dist/dash/standalone/static/assets/chunks/runners-list-edf536eb8003eab5.js +1 -0
  142. package/dist/dash/standalone/static/assets/chunks/secrets-list-e86122f73525ff95.js +1 -0
  143. package/dist/dash/standalone/static/assets/chunks/segmented-0b6dc6b93c35e0f5.js +1 -0
  144. package/dist/dash/standalone/static/assets/chunks/shared-init-b281027d465e004f.js +5 -0
  145. package/dist/dash/standalone/static/assets/chunks/shared-init-c3bd249cf1eca6d1.js +2 -0
  146. package/dist/dash/standalone/static/assets/chunks/side-toggle-9b3af821cfe4c824.js +1 -0
  147. package/dist/dash/standalone/static/assets/chunks/{tail-b1c46587301ef397.js → tail-f8804b80cf32f8d0.js} +1 -1
  148. package/dist/dash/standalone/static/assets/chunks/task-a37e7c26e82eb77d.js +1 -0
  149. package/dist/dash/standalone/static/assets/chunks/task-actions-705395565f2d83b8.js +1 -0
  150. package/dist/dash/standalone/static/assets/chunks/task-view-cb21169f38b56d15.js +6 -0
  151. package/dist/dash/standalone/static/assets/chunks/tasks-list-d7dccfd7e0623ae0.js +1 -0
  152. package/dist/dash/standalone/static/assets/chunks/{versions-list-21cb854e6a7108a7.js → versions-list-f8f2e71df691efda.js} +1 -1
  153. package/dist/dash/standalone/static/assets/create-param-id-c2c756f652f2fc30.css +1 -0
  154. package/dist/dash/standalone/static/assets/{dash-param-org-account-9471bec93c444232.css → dash-param-org-account-702f8a1b213e4026.css} +1 -1
  155. package/dist/dash/standalone/static/assets/dash-param-org-agents-aad2f9f93c06e9ab.css +1 -0
  156. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-f9dcbcec36586f2b.css +1 -0
  157. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-8ff47f5d622c1f9b.css +1 -0
  158. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-907036d553cfeb36.css +1 -0
  159. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cc77badad15f00c.css +1 -0
  160. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-705d7c15868b4fd6.css +1 -0
  161. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-04e189c045098772.css +1 -0
  162. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-76fcd1ce7b3dae71.css +1 -0
  163. package/dist/dash/standalone/static/assets/{dash-param-org-bcfa3de29341d5ba.css → dash-param-org-eccb6bb9297a53e6.css} +1 -1
  164. package/dist/dash/standalone/static/assets/dash-param-org-operator-635a121f7a9a95bd.css +1 -0
  165. package/dist/dash/standalone/static/assets/{dash-param-org-settings-6d6902345d88a687.css → dash-param-org-settings-a3297dc4d9e0c961.css} +1 -1
  166. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-bcb06f81d9e8268d.css +1 -0
  167. package/dist/dash/standalone/static/assets/{dash-param-org-setup-173efecd7b990c2e.css → dash-param-org-setup-df4be8b188b9777f.css} +1 -1
  168. package/dist/dash/standalone/static/assets/dash-param-org-tasks-16f9866a1b4801cd.css +1 -0
  169. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-02ae551dcd852b57.css +1 -0
  170. package/dist/dash/standalone/static/assets/dash-param-org-usage-f2175403069aab99.css +1 -0
  171. package/dist/dash/standalone/static/assets/{global-87e1762113874559.css → global-e1de614478b64717.css} +1 -1
  172. package/dist/dash/standalone/static/assets/pnext-client-0dc829ba60df5c26.js +1 -0
  173. package/dist/dash/standalone/static/assets/pnext-client-14d191f7f1da6602.js +1 -0
  174. package/dist/dash/standalone/static/assets/pnext-client-169eaa63783b71fd.js +1 -0
  175. package/dist/dash/standalone/static/assets/pnext-client-1e34cfefafa70fac.js +1 -0
  176. package/dist/dash/standalone/static/assets/pnext-client-285d61f00a80f40b.js +1 -0
  177. package/dist/dash/standalone/static/assets/pnext-client-35b89c3ba23ee845.js +1 -0
  178. package/dist/dash/standalone/static/assets/pnext-client-6c42784e005d4b87.js +1 -0
  179. package/dist/dash/standalone/static/assets/{pnext-client-576c06599e241231.js → pnext-client-6cd93f9bd4cf6ffd.js} +1 -1
  180. package/dist/dash/standalone/static/assets/pnext-client-7355f473fade532d.js +1 -0
  181. package/dist/dash/standalone/static/assets/pnext-client-815c3c297f75efb0.js +1 -0
  182. package/dist/dash/standalone/static/assets/pnext-client-87fe73c10a4dc33c.js +1 -0
  183. package/dist/dash/standalone/static/assets/pnext-client-98b56a142d441260.js +1 -0
  184. package/dist/dash/standalone/static/assets/pnext-client-b4bafe68a40f720b.js +1 -0
  185. package/dist/dash/standalone/static/assets/pnext-client-bf61ff39bdc0db48.js +1 -0
  186. package/dist/dash/standalone/static/assets/pnext-client-c9fa86c244813f74.js +1 -0
  187. package/dist/dash/standalone/static/assets/pnext-client-d2e7a75e16221224.js +1 -0
  188. package/dist/dash/standalone/static/assets/pnext-client-d34e774405ea8da8.js +1 -0
  189. package/dist/dash/standalone/static/assets/pnext-client-d511822afdb41d1d.js +1 -0
  190. package/dist/dash/standalone/static/assets/pnext-client-e113aa2f25ecfe01.js +1 -0
  191. package/dist/dash/standalone/static/assets/{pnext-client-c2c30dcb6dc31d60.js → pnext-client-eb62f461d0c32266.js} +1 -1
  192. package/dist/{discover-CPZdprlQ.js → discover-CHfF4cEz.js} +1 -1
  193. package/dist/{docs-x-l7gjFE.js → docs-KHc0_gFX.js} +1 -1
  194. package/dist/{drive-Y-ZlgiUW.js → drive-Bwl7Bjme.js} +1 -1
  195. package/dist/emit-BrkJJPUE.js +11 -0
  196. package/dist/env-6Y-NNnYD.js +1 -0
  197. package/dist/errors-DO_IltpP.js +16 -0
  198. package/dist/exec-BmTa0vcO.js +4 -0
  199. package/dist/executor-ufWRqhdS.js +11 -0
  200. package/dist/flow/builtin/review/index.d.ts +1 -1
  201. package/dist/flow/builtin/review/index.js +3 -3
  202. package/dist/flow/index.d.ts +1 -1
  203. package/dist/flow/index.js +1 -1
  204. package/dist/hook-CIipj9MJ.js +1 -0
  205. package/dist/http-Cg8PSe-c.js +1 -0
  206. package/dist/{index-BdkdNI1v.d.ts → index-ChcxzFdB.d.ts} +50 -185
  207. package/dist/integrations-I7fRDk_l.js +4 -0
  208. package/dist/lib/broker.js +2 -2
  209. package/dist/load-BDlEFetB.js +2 -0
  210. package/dist/local-COlczLwI.js +5 -0
  211. package/dist/log-view-CfX9lakH.js +4 -0
  212. package/dist/{maintenance-BfxcatXH.js → maintenance-CKCIWOvn.js} +1 -1
  213. package/dist/{match-Bq4sDuCy.js → match-CufHAZQH.js} +1 -1
  214. package/dist/mcp-BkwmRHI9.js +2 -0
  215. package/dist/mcp-CGU7aoJ-.js +1 -0
  216. package/dist/{mcp-Bta09QCU.js → mcp-DAHbhfUh.js} +1 -1
  217. package/dist/models-CzggS7p2.js +1 -0
  218. package/dist/output-SNqdgh9A.js +17 -0
  219. package/dist/permission-MWFjKxqX.js +1 -0
  220. package/dist/{prompt-onpyIyXK.js → prompt-CIx4jwQF.js} +1 -1
  221. package/dist/refresh-CxsaX5R9.js +1 -0
  222. package/dist/remote-C9Hj2cby.js +2 -0
  223. package/dist/remote-HUZCWgfl.js +3 -0
  224. package/dist/{runner-CTFTuaz_.js → runner-DYysY1-G.js} +1 -1
  225. package/dist/runner.json +1 -1
  226. package/dist/runner.tgz +0 -0
  227. package/dist/runners-CfaGE0nV.js +36 -0
  228. package/dist/schema.js +1 -1
  229. package/dist/sdk.d.ts +285 -104
  230. package/dist/sdk.js +1 -1
  231. package/dist/serve-DdAdw7Su.js +4 -0
  232. package/dist/serve-NQykWAKV.js +1 -0
  233. package/dist/serve-vKNqVaVy.js +12 -0
  234. package/dist/slack-BtKvW_4v.js +5 -0
  235. package/dist/task-CFxs0E_J.js +1 -0
  236. package/dist/task-iuYQ0zAK.js +7 -0
  237. package/dist/tools-B6ZxcqRi.js +2 -0
  238. package/dist/{tools-CM4UCsId.js → tools-FVop8XYG.js} +1 -1
  239. package/dist/tools-search-kjKKolwp.js +1 -0
  240. package/dist/turn-DQ13lkPF.js +2 -0
  241. package/dist/types-DPtbvoo3.js +1 -0
  242. package/dist/types-DmThhjcW.js +1 -0
  243. package/dist/views-CMHXBMJp.js +3 -0
  244. package/dist/{wire-JMNPv8f6.js → wire-C9CupY_A.js} +1 -1
  245. package/dist/worker-BQpx1dPr.js +9 -0
  246. package/dist/worker-sTJL2eoe.js +1 -0
  247. package/docs/access.md +33 -0
  248. package/docs/agents/coder.md +0 -11
  249. package/docs/agents/index.md +1 -1
  250. package/docs/cli/agent.md +6 -6
  251. package/docs/cli/connection.md +5 -5
  252. package/docs/cli/flow.md +9 -9
  253. package/docs/cli/index.md +3 -3
  254. package/docs/cli/model.md +12 -10
  255. package/docs/cli/runner.md +1 -1
  256. package/docs/cli/server.md +2 -2
  257. package/docs/cli/task.md +23 -21
  258. package/docs/config.md +5 -15
  259. package/docs/flows.md +1 -1
  260. package/docs/models.md +7 -6
  261. package/docs/sdk.md +29 -29
  262. package/docs/self-host.md +25 -25
  263. package/package.json +2 -2
  264. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  265. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  266. package/dist/actions-BT7_eKXm.js +0 -10
  267. package/dist/adapter-BT8ECcRG.js +0 -1
  268. package/dist/apps-D-v5sQJk.js +0 -367
  269. package/dist/args-CbO_Ck9Z.js +0 -11
  270. package/dist/async-XNO3nqum.js +0 -3
  271. package/dist/cmd-DX5ByXo3.js +0 -119
  272. package/dist/connection-DNxi2btM.js +0 -1
  273. package/dist/context-65bOofts.js +0 -7
  274. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.a244f3199e7cf09c.js +0 -144
  275. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.587da79d68ab8d14.js +0 -151
  276. package/dist/dash/standalone/static/assets/chunks/composer-910bb87127972f62.js +0 -1
  277. package/dist/dash/standalone/static/assets/chunks/composer-data-5fed6c271a4791ca.js +0 -1
  278. package/dist/dash/standalone/static/assets/chunks/connections-list-c50f58b4b28d10bb.js +0 -1
  279. package/dist/dash/standalone/static/assets/chunks/create-link-6d64a2d5f9ce6de0.js +0 -1
  280. package/dist/dash/standalone/static/assets/chunks/credentials-list-bee95799b2319b3b.js +0 -1
  281. package/dist/dash/standalone/static/assets/chunks/defaults-52f30e83d7666f7a.js +0 -1
  282. package/dist/dash/standalone/static/assets/chunks/editor-b9951819f21b2e43.js +0 -6
  283. package/dist/dash/standalone/static/assets/chunks/engines-list-2720c3e8fa12b2f7.js +0 -1
  284. package/dist/dash/standalone/static/assets/chunks/instructions-fd7402ac5aa8b50e.js +0 -1
  285. package/dist/dash/standalone/static/assets/chunks/list-d918f79562d497eb.js +0 -1
  286. package/dist/dash/standalone/static/assets/chunks/models-list-12bc7aceaa52f5b0.js +0 -1
  287. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-b219595be320108a.js +0 -1
  288. package/dist/dash/standalone/static/assets/chunks/platform-actions-1d27d2ba7eee9ff1.js +0 -1
  289. package/dist/dash/standalone/static/assets/chunks/platform-actions-dba96dcb0f6513db.js +0 -1
  290. package/dist/dash/standalone/static/assets/chunks/runners-list-36f8c5ecfcf8e9ae.js +0 -1
  291. package/dist/dash/standalone/static/assets/chunks/secrets-list-d7dbafd24dd18481.js +0 -1
  292. package/dist/dash/standalone/static/assets/chunks/segmented-8f809ebe712e92a7.js +0 -1
  293. package/dist/dash/standalone/static/assets/chunks/shared-init-cc13a835f3508618.js +0 -2
  294. package/dist/dash/standalone/static/assets/chunks/shared-init-f475017dd5811e33.js +0 -5
  295. package/dist/dash/standalone/static/assets/chunks/side-toggle-0aa237eba3dfe9c1.js +0 -1
  296. package/dist/dash/standalone/static/assets/chunks/task-681061023bdf0a49.js +0 -5
  297. package/dist/dash/standalone/static/assets/chunks/task-actions-c9e46e81604e85c5.js +0 -1
  298. package/dist/dash/standalone/static/assets/chunks/task-view-134186a544917ceb.js +0 -5
  299. package/dist/dash/standalone/static/assets/chunks/tasks-list-352a3222d878de0f.js +0 -1
  300. package/dist/dash/standalone/static/assets/create-param-id-da3f7e20689fe51a.css +0 -1
  301. package/dist/dash/standalone/static/assets/dash-param-org-agents-64500e78caae32df.css +0 -1
  302. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-c067c22928a2d7cc.css +0 -1
  303. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-9dec87710e04f949.css +0 -1
  304. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-779c474301e04440.css +0 -1
  305. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-c7d594b5232630c2.css +0 -1
  306. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-a80e62570716fdb9.css +0 -1
  307. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-ce278252012297b9.css +0 -1
  308. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-d3b6d701eb8e1403.css +0 -1
  309. package/dist/dash/standalone/static/assets/dash-param-org-operator-b7bc6447cc27c9ce.css +0 -1
  310. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-85c7af9a89eef06e.css +0 -1
  311. package/dist/dash/standalone/static/assets/dash-param-org-tasks-ae0bc03f468e63cc.css +0 -1
  312. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-7325d8cff5be3592.css +0 -1
  313. package/dist/dash/standalone/static/assets/dash-param-org-usage-517b2a7ae462ac57.css +0 -1
  314. package/dist/dash/standalone/static/assets/pnext-client-05df74b071ddb0b3.js +0 -1
  315. package/dist/dash/standalone/static/assets/pnext-client-2c19cca257f78ae6.js +0 -1
  316. package/dist/dash/standalone/static/assets/pnext-client-2db05dfa62642a65.js +0 -1
  317. package/dist/dash/standalone/static/assets/pnext-client-36b0d6085a073880.js +0 -1
  318. package/dist/dash/standalone/static/assets/pnext-client-6aa0f19a30d58d63.js +0 -1
  319. package/dist/dash/standalone/static/assets/pnext-client-6b30b71f452f2f07.js +0 -1
  320. package/dist/dash/standalone/static/assets/pnext-client-6ccb4d4fff812db3.js +0 -1
  321. package/dist/dash/standalone/static/assets/pnext-client-74eb465defba421e.js +0 -1
  322. package/dist/dash/standalone/static/assets/pnext-client-8c692d12b2fd90d6.js +0 -1
  323. package/dist/dash/standalone/static/assets/pnext-client-92e17d39063a9ced.js +0 -1
  324. package/dist/dash/standalone/static/assets/pnext-client-93246aea268c2682.js +0 -1
  325. package/dist/dash/standalone/static/assets/pnext-client-9954dcbc0c579e0d.js +0 -1
  326. package/dist/dash/standalone/static/assets/pnext-client-c0dfa1cdde9a9855.js +0 -1
  327. package/dist/dash/standalone/static/assets/pnext-client-c28d38d4aafd4af6.js +0 -1
  328. package/dist/dash/standalone/static/assets/pnext-client-dbf741073e11eac0.js +0 -1
  329. package/dist/dash/standalone/static/assets/pnext-client-e29194a27280333f.js +0 -1
  330. package/dist/dash/standalone/static/assets/pnext-client-f8a7e692b27caad9.js +0 -1
  331. package/dist/dash/standalone/static/assets/pnext-client-fc5b8cfcba2a9f63.js +0 -1
  332. package/dist/env-B9JG6gwo.js +0 -1
  333. package/dist/errors-XBA-Ls4n.js +0 -10
  334. package/dist/exec-iFssTO5V.js +0 -3
  335. package/dist/executor-Dt2FFT-y.js +0 -11
  336. package/dist/http-BZfjbiov.js +0 -1
  337. package/dist/integrations-DyInAa5g.js +0 -2
  338. package/dist/load-zhcrwSRF.js +0 -2
  339. package/dist/local-D55UkW93.js +0 -5
  340. package/dist/log-view-CL3_S0IQ.js +0 -3
  341. package/dist/mcp-CUITALl1.js +0 -1
  342. package/dist/models-C1O2DrXx.js +0 -1
  343. package/dist/output-D95NoAA9.js +0 -16
  344. package/dist/prompts-B8pKhMcu.js +0 -4
  345. package/dist/refresh-D-0K9fo3.js +0 -1
  346. package/dist/remote-CDm0YUU3.js +0 -3
  347. package/dist/runners-CYTicTb7.js +0 -36
  348. package/dist/serve-Bzs_lEg-.js +0 -1
  349. package/dist/serve-CWtLyyTz.js +0 -12
  350. package/dist/serve-DE6A-rBk.js +0 -4
  351. package/dist/slack-Bo5l13Rs.js +0 -5
  352. package/dist/task-BU1JEK9X.js +0 -7
  353. package/dist/task-CPzBITsp.js +0 -1
  354. package/dist/tools-BMaKWTa6.js +0 -1
  355. package/dist/turn-DMvPfhb5.js +0 -3
  356. package/dist/types-D_xnfP7m.js +0 -1
  357. package/dist/views-DEdKqLm_.js +0 -5
  358. package/dist/worker-BuP_Lem1.js +0 -9
  359. package/dist/worker-C1tuzq5n.js +0 -1
  360. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.0a735590a5412ea6.js → errors.1bd0542d832ae0c0.js} +0 -0
  361. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.c811938ae8a8f1df.css.pnext-asset.js → page.107e622830bff31d.css.pnext-asset.js} +0 -0
  362. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.1bef5dca89b5942c.css.pnext-asset.js → hero.243d85cac1f22df2.css.pnext-asset.js} +0 -0
  363. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.c496247a81ed832c.css.pnext-asset.js → editor.1eb1bce282b289c9.css.pnext-asset.js} +0 -0
  364. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.a96c11d11674f598.js → model-options.73f8d0d54f79d8e3.js} +0 -0
  365. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.57990cfd2bdf5c11.css.pnext-asset.js → task-view.42337a0d7c6ad0b6.css.pnext-asset.js} +0 -0
  366. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.abbbc9ace4d866e5.css.pnext-asset.js → tasks-list.2f90c4410f843fff.css.pnext-asset.js} +0 -0
  367. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.c8fd2b8b01e7077b.css.pnext-asset.js → globals.f8ac779f0ebf888b.css.pnext-asset.js} +0 -0
  368. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.364ec93a8e7857b3.css.pnext-asset.js → page-head.9fcc49ddf7119d75.css.pnext-asset.js} +0 -0
  369. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.9db07d368dcf5981.css.pnext-asset.js → modal.a533234c7c831be4.css.pnext-asset.js} +0 -0
  370. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{segmented.0bd8652fdbc05eb0.css.pnext-asset.js → segmented.c6f30b839fd27f35.css.pnext-asset.js} +0 -0
  371. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{sentinel.1e3ec9bd6008d811.css.pnext-asset.js → sentinel.d17e2bfcbeb9df31.css.pnext-asset.js} +0 -0
  372. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tabs.ca13e40ff54128d0.css.pnext-asset.js → tabs.025b532d6cc51736.css.pnext-asset.js} +0 -0
@@ -4,8 +4,8 @@ import * as z$1 from "zod/mini";
4
4
  //#region src/core/config.d.ts
5
5
  declare const engineSchema: z$1.ZodMiniEnum<{
6
6
  custom: "custom";
7
- claude: "claude";
8
7
  codex: "codex";
8
+ claude: "claude";
9
9
  }>;
10
10
  declare const effortSchema: z$1.ZodMiniEnum<{
11
11
  low: "low";
@@ -25,6 +25,7 @@ declare const customModelSchema: z$1.ZodMiniObject<{
25
25
  chat: "chat";
26
26
  responses: "responses";
27
27
  }>>;
28
+ contextWindow: z$1.ZodMiniOptional<z$1.ZodMiniNumber<number>>;
28
29
  disabled: z$1.ZodMiniOptional<z$1.ZodMiniBoolean<boolean>>;
29
30
  }, z$1.core.$strict>;
30
31
  /** The merged, effective shape (everything present after DEFAULT_CONFIG). */
@@ -35,19 +36,18 @@ declare const mcpEntrySchema: z$1.ZodMiniObject<{
35
36
  env: z$1.ZodMiniOptional<z$1.ZodMiniRecord<z$1.ZodMiniString<string>, z$1.ZodMiniString<string>>>;
36
37
  url: z$1.ZodMiniOptional<z$1.ZodMiniString<string>>;
37
38
  type: z$1.ZodMiniOptional<z$1.ZodMiniEnum<{
38
- http: "http";
39
39
  stdio: "stdio";
40
+ http: "http";
40
41
  }>>;
41
42
  headers: z$1.ZodMiniOptional<z$1.ZodMiniRecord<z$1.ZodMiniString<string>, z$1.ZodMiniString<string>>>;
42
43
  tools: z$1.ZodMiniOptional<z$1.ZodMiniArray<z$1.ZodMiniString<string>>>;
43
44
  description: z$1.ZodMiniOptional<z$1.ZodMiniString<string>>;
44
45
  }, z$1.core.$strict>;
45
46
  declare const effectiveConfigSchema: z$1.ZodMiniObject<{
46
- conversationCompactTokens: z$1.ZodMiniNumber<number>;
47
47
  chain: z$1.ZodMiniArray<z$1.ZodMiniEnum<{
48
48
  custom: "custom";
49
- claude: "claude";
50
49
  codex: "codex";
50
+ claude: "claude";
51
51
  }>>;
52
52
  engines: z$1.ZodMiniObject<{
53
53
  codex: z$1.ZodMiniOptional<z$1.ZodMiniObject<{
@@ -99,11 +99,12 @@ declare const effectiveConfigSchema: z$1.ZodMiniObject<{
99
99
  chat: "chat";
100
100
  responses: "responses";
101
101
  }>>;
102
+ contextWindow: z$1.ZodMiniOptional<z$1.ZodMiniNumber<number>>;
102
103
  disabled: z$1.ZodMiniOptional<z$1.ZodMiniBoolean<boolean>>;
103
104
  }, z$1.core.$strict>, z$1.ZodMiniObject<{
104
105
  provider: z$1.ZodMiniEnum<{
105
- claude: "claude";
106
106
  codex: "codex";
107
+ claude: "claude";
107
108
  }>;
108
109
  model: z$1.ZodMiniString<string>;
109
110
  effort: z$1.ZodMiniOptional<z$1.ZodMiniEnum<{
@@ -151,15 +152,14 @@ declare const effectiveConfigSchema: z$1.ZodMiniObject<{
151
152
  env: z$1.ZodMiniOptional<z$1.ZodMiniRecord<z$1.ZodMiniString<string>, z$1.ZodMiniString<string>>>;
152
153
  url: z$1.ZodMiniOptional<z$1.ZodMiniString<string>>;
153
154
  type: z$1.ZodMiniOptional<z$1.ZodMiniEnum<{
154
- http: "http";
155
155
  stdio: "stdio";
156
+ http: "http";
156
157
  }>>;
157
158
  headers: z$1.ZodMiniOptional<z$1.ZodMiniRecord<z$1.ZodMiniString<string>, z$1.ZodMiniString<string>>>;
158
159
  tools: z$1.ZodMiniOptional<z$1.ZodMiniArray<z$1.ZodMiniString<string>>>;
159
160
  description: z$1.ZodMiniOptional<z$1.ZodMiniString<string>>;
160
161
  }, z$1.core.$strict>>>;
161
162
  approvals: z$1.ZodMiniObject<{
162
- escalationTimeoutMs: z$1.ZodMiniNumber<number>;
163
163
  allowedNetworkHosts: z$1.ZodMiniArray<z$1.ZodMiniString<string>>;
164
164
  }, z$1.core.$strict>;
165
165
  }, z$1.core.$strict>;
@@ -1290,75 +1290,15 @@ interface SerializedThread {
1290
1290
  */
1291
1291
  type ChannelVisibility = "private" | "workspace" | "external" | "unknown";
1292
1292
  //#endregion
1293
- //#region src/agent/types.d.ts
1293
+ //#region src/integrations/types.d.ts
1294
+ /** Access modes: read-only tools, or tools that also write. */
1294
1295
  type Preset = 'read' | 'write';
1295
- /** Per-integration wiring in a definition. `events` list = default behavior, map = event -> flow. */
1296
- /** Event value in a definition map: a flow name, or options. */
1297
- interface AgentEventOptions {
1298
- /** Flow to run; omit for the default agent. */
1299
- flow?: string;
1300
- /** Regex the event text must match (e.g. keywords on Slack `message`). */
1301
- match?: string;
1302
- /** May only narrow the agent's default permission for this event. */
1303
- permissions?: Permission;
1304
- /** `requester`: the task acts with the linked requester's own platform token. */
1305
- actAs?: 'requester';
1306
- }
1307
- interface AgentDefinitionIntegration {
1308
- events?: string[] | Record<string, string | true | AgentEventOptions>;
1309
- }
1310
- /** What an agent IS: `.coder/agents/<id>/agent.json` beside its system.md. */
1311
- interface AgentDefinition {
1312
- /** Display name used in replies; defaults to the id. */
1313
- name?: string;
1314
- description?: string;
1315
- engine?: string;
1316
- runner?: string;
1317
- model?: string;
1318
- effort?: Effort;
1319
- permissions?: Permission;
1320
- /** Read-only or Read-write on its handles and connections; defaults to `write`. */
1321
- access?: Preset;
1322
- /** MCP servers every task of this agent attaches, in the `.mcp.json` entry shape. */
1323
- mcp?: Record<string, McpConfigEntry>;
1324
- integrations: Record<string, AgentDefinitionIntegration>;
1325
- }
1326
- /** Per-integration caps in usage: `allowedEvents` intersects the definition's. */
1327
- interface AgentUsageIntegration {
1328
- allowedEvents?: string[];
1329
- }
1330
- /** How a repo RUNS an agent: one entry under `agents` in .coder/config.json. */
1331
- interface AgentUsage {
1332
- engine?: string;
1333
- model?: string;
1334
- effort?: Effort;
1335
- permissions?: Permission;
1336
- /** May only lower the definition's access. */
1337
- access?: Preset;
1338
- integrations?: Record<string, AgentUsageIntegration>;
1339
- /** Connections its tasks may use, by id; absent allows every connection the task is granted. */
1340
- connections?: string[];
1341
- /** Off in this workspace; the other settings stay for when it is enabled again. */
1342
- disabled?: boolean;
1343
- }
1344
- interface Agent {
1345
- id: string;
1346
- /** definition.name ?? id. */
1347
- name: string;
1348
- definition: AgentDefinition;
1349
- usage?: AgentUsage;
1350
- /** Absolute folder path when the agent's body is on disk; remote agents have none. */
1351
- dir?: string;
1352
- /** Stored agent body, including system.md, when there is no on-disk folder. */
1353
- files?: Record<string, string>;
1354
- builtin: boolean;
1355
- }
1356
- /** A platform event, already typed by its integration. */
1357
- interface AgentEvent {
1296
+ /** A platform event, typed by its integration. */
1297
+ interface PlatformEvent {
1358
1298
  integration: string;
1359
1299
  /** Catalog name, e.g. `pull_request` or `mention`. */
1360
1300
  type: string;
1361
- /** `AgentApp.id` the webhook was addressed to. */
1301
+ /** `PlatformApp.id` the webhook was addressed to. */
1362
1302
  appId: string;
1363
1303
  installationId: string;
1364
1304
  deliveryId: string;
@@ -1379,19 +1319,6 @@ interface AgentEvent {
1379
1319
  thread: SerializedThread;
1380
1320
  message?: SerializedMessage;
1381
1321
  };
1382
- /** Whether the agent must answer: a mention, a 1:1 direct message, or a handle that answers every prompt. */
1383
- mustReply?: boolean;
1384
- /** The event's place in its conversation, gathered at dispatch; `more` counts messages past `since`'s cap. */
1385
- conversation?: {
1386
- index?: number;
1387
- since?: SinceMessage[];
1388
- more?: number;
1389
- /** Internal acknowledgement watermark of the recorded unseen snapshot. */
1390
- unseen?: {
1391
- version: number;
1392
- epoch?: string;
1393
- };
1394
- };
1395
1322
  repo?: {
1396
1323
  owner: string;
1397
1324
  name: string;
@@ -1399,84 +1326,6 @@ interface AgentEvent {
1399
1326
  defaultBranch: string;
1400
1327
  };
1401
1328
  }
1402
- /** Per-installation settings a user sets from the platform (`/setup` in Slack). */
1403
- interface InstallationSettings {
1404
- model?: string;
1405
- engine?: string;
1406
- effort?: string;
1407
- }
1408
- /** Where a task came from: a Coder surface, or the id of the integration whose event started it. */
1409
- type TaskSource = 'dashboard' | 'cli' | 'schedule' | (string & {});
1410
- interface AgentTask {
1411
- cwd?: string;
1412
- id: string;
1413
- name?: string;
1414
- source: TaskSource;
1415
- agent: string;
1416
- /** Flow name, or `default` for the built-in single-task behavior. */
1417
- flow: string;
1418
- runner: RunnerKind;
1419
- /** Registered `http` runner the task routes to. */
1420
- runnerId?: string;
1421
- /** Effective permission after host, usage, and event narrowing. */
1422
- permissions?: Permission;
1423
- /** The platform event, or for a dashboard or CLI task on a repo, that repo through its install. */
1424
- event?: AgentEvent;
1425
- /** What a dashboard or CLI task asks; the newest turn after a continue. */
1426
- prompt?: string;
1427
- /** Flow arguments given directly, instead of derived from the event. */
1428
- args?: Record<string, unknown>;
1429
- /** Workspace MCP servers the task attaches, by name. */
1430
- mcp?: string[];
1431
- /** Connection ids granted when the task was made; secrets are resolved only when it starts. */
1432
- connections?: string[];
1433
- /** Handle the task posts as (GitHub `slug[bot]`, Slack bot user), so flows can trust only their own comments. */
1434
- author?: string;
1435
- definition: AgentDefinition;
1436
- /** Frozen id of the credential selected for this task. */
1437
- credential?: string;
1438
- /** The engine order for this task; a pinned engine has one entry. */
1439
- engineChain?: string[];
1440
- /** Applicable credentials frozen with the engine order, without their values. */
1441
- engineCredentials?: Record<string, string>;
1442
- /** Wular user who asked, when known; their personal credential comes first. */
1443
- requester?: string;
1444
- /** Stored agent body for runners whose checkout does not contain the agent. */
1445
- files?: Record<string, string>;
1446
- usage?: AgentUsage;
1447
- /** Effective tools per integration the agent declares, by its access mode; every installation of the agent's apps serves them. */
1448
- tools: Record<string, string[]>;
1449
- /** Context gathered by the receiver: notes for the turn and who asked. */
1450
- context?: TaskContext;
1451
- /** What the platform thread gets when the run fails without an answer. */
1452
- failureReply?: string;
1453
- /** The task's dashboard page, linked when the agent returns no reply where one is due. */
1454
- taskUrl?: string;
1455
- }
1456
- interface TaskContext {
1457
- outputSchema?: object;
1458
- /** Earlier turns a dashboard continuation pastes in, oldest first. */
1459
- messages?: Array<{
1460
- user: string;
1461
- text: string;
1462
- ts: string;
1463
- }>;
1464
- /** Completed turns of this task, kept across dashboard continuations. */
1465
- turns?: TaskTurn[];
1466
- /** Notes the receiver adds for the agent, such as a missing account connection. */
1467
- instructions?: string;
1468
- /** Whether this turn requires a reply. */
1469
- mustReply?: boolean;
1470
- /** The last conversation batch each kind admitted, by steer or resume. */
1471
- admissions?: Partial<Record<'batch' | 'reactions', string>>;
1472
- /** The Coder account behind the event's actor, when they connected it. */
1473
- user?: {
1474
- name: string;
1475
- email: string;
1476
- };
1477
- }
1478
- //#endregion
1479
- //#region src/integrations/types.d.ts
1480
1329
  /** A message the agent did not get as a turn, as `since` lists it. */
1481
1330
  interface SinceMessage {
1482
1331
  /** The platform's message id, so a message counts once; not shown to the agent. */
@@ -1552,6 +1401,8 @@ interface ProbeResult {
1552
1401
  modelListed: boolean | null;
1553
1402
  /** Model ids the endpoint lists, or null when it has no list. */
1554
1403
  models: string[] | null;
1404
+ /** Context window in tokens per model id, where the provider reports one. */
1405
+ contextWindows?: Record<string, number>;
1555
1406
  detail: string;
1556
1407
  }
1557
1408
  /** One connection as the dashboard lists it; secrets never leave the server. */
@@ -1600,6 +1451,8 @@ interface TaskTurn {
1600
1451
  finishedAt?: number;
1601
1452
  /** First log sequence after this turn. */
1602
1453
  logSeq?: number;
1454
+ /** The approval whose decision this turn's prompt is: it shows as that decision, not as a prompt. */
1455
+ approval?: string;
1603
1456
  }
1604
1457
  //#endregion
1605
1458
  //#region src/core/task/log-view.d.ts
@@ -1639,6 +1492,8 @@ interface AgentPromptParts {
1639
1492
  interface SystemPromptParts extends AgentPromptParts {
1640
1493
  /** The task's MCP servers as the worker renders them on each turn. */
1641
1494
  servers?: string;
1495
+ /** Who loads their tools on demand: the engine's tool search, or Coder's find_tools and call_tool. */
1496
+ toolSearch?: 'native' | 'coder';
1642
1497
  /** Coder's task tools this turn has, as the worker serves them. */
1643
1498
  tools?: string[];
1644
1499
  cwd?: string;
@@ -1646,8 +1501,18 @@ interface SystemPromptParts extends AgentPromptParts {
1646
1501
  conversation?: boolean;
1647
1502
  /** The engine runs on this machine, not on a hosted runner. */
1648
1503
  local?: boolean;
1649
- /** `coder task run --system` text and flow instructions. */
1650
- instructions?: string;
1504
+ /** The task's scratch folder on the machine it runs on. */
1505
+ scratch?: string;
1506
+ /** Sandboxed commands reach only the hosts they declare (Claude auto). */
1507
+ declareHosts?: boolean;
1508
+ /** The exact actions the user approved for the rest of the task. */
1509
+ approved?: string[];
1510
+ /** The task may write (workspace-write or auto). */
1511
+ writes?: boolean;
1512
+ /** `coder task run --append-system` text and flow instructions. */
1513
+ appendSystem?: string;
1514
+ /** The final message is JSON for a schema, not a summary. */
1515
+ structured?: boolean;
1651
1516
  }
1652
1517
  //#endregion
1653
1518
  //#region src/core/types.d.ts
@@ -1697,7 +1562,7 @@ interface Task {
1697
1562
  prompt?: string;
1698
1563
  outputSchema?: object;
1699
1564
  currentPrompt?: string | null;
1700
- system?: string | null;
1565
+ appendSystem?: string | null;
1701
1566
  promptParts?: Omit<SystemPromptParts, 'servers'>;
1702
1567
  systemPrompt?: string;
1703
1568
  model?: string | null;
@@ -1709,13 +1574,8 @@ interface Task {
1709
1574
  dispatchId?: string;
1710
1575
  threadId?: string | null;
1711
1576
  previousThreadIds?: string[];
1712
- pendingRollover?: {
1713
- summary: string;
1714
- recent: string;
1715
- exchanges: number;
1716
- };
1717
- rollingOver?: boolean;
1718
1577
  steerClosed?: boolean;
1578
+ resumeOwner?: number;
1719
1579
  conversation?: boolean;
1720
1580
  turnId?: string | null;
1721
1581
  steerEndpoint?: string | null;
@@ -1733,7 +1593,6 @@ interface Task {
1733
1593
  archived?: boolean;
1734
1594
  archivedAt?: string;
1735
1595
  autoArchived?: boolean;
1736
- simulateApproval?: boolean;
1737
1596
  flowRunId?: string;
1738
1597
  agentId?: string;
1739
1598
  source?: string;
@@ -1766,15 +1625,21 @@ interface Availability {
1766
1625
  available: boolean;
1767
1626
  detail: string;
1768
1627
  }
1769
- /** A persisted approval escalation and its answer, if any. */
1628
+ /** A task's escalation and its answer, if any. */
1770
1629
  interface Approval {
1771
1630
  id: string;
1772
- summary: string;
1773
- /** Where an escalated command runs. */
1774
- cwd?: string;
1631
+ /** One short sentence: what the actions are for. */
1632
+ reason: string;
1633
+ /** The exact commands; one answer covers them all. */
1634
+ actions: string[];
1775
1635
  createdAt?: string;
1636
+ /** `by` names who answered; `deliveredAt` is set once the task has the decision; `closed` when the task was stopped first. */
1776
1637
  response?: {
1777
- decision: string;
1638
+ decision: 'accept' | 'decline' | 'closed';
1639
+ reason?: string;
1640
+ answeredAt?: string;
1641
+ by?: string;
1642
+ deliveredAt?: string;
1778
1643
  } | null;
1779
1644
  [key: string]: unknown;
1780
1645
  }
@@ -1805,7 +1670,7 @@ interface FlowTaskOptions<T = unknown> {
1805
1670
  permissions?: string;
1806
1671
  mcp?: string | McpServerSpec[];
1807
1672
  name?: string;
1808
- system?: string;
1673
+ appendSystem?: string;
1809
1674
  cwd?: string;
1810
1675
  addDirs?: string[];
1811
1676
  returns?: FlowSchema<T>;
@@ -2113,7 +1978,7 @@ interface FallbackPayload {
2113
1978
  permissions: string;
2114
1979
  instructions: string;
2115
1980
  note: string;
2116
- system?: string;
1981
+ appendSystem?: string;
2117
1982
  task: string;
2118
1983
  };
2119
1984
  }
@@ -2132,9 +1997,8 @@ declare class CoderError extends Error {
2132
1997
  /** approval-pending: the approval to answer. */
2133
1998
  approval?: {
2134
1999
  id: string;
2135
- summary: string;
2136
- cwd?: string | null;
2137
- networkHost?: string | null;
2000
+ reason: string;
2001
+ actions: string[];
2138
2002
  };
2139
2003
  /** task-failed (flow task()): the failed task's result. */
2140
2004
  result?: unknown;
@@ -2157,9 +2021,10 @@ interface TaskResult {
2157
2021
  turns: TurnResultEntry[];
2158
2022
  task: Task;
2159
2023
  }
2160
- /** Read a task's current state and result.json without waiting. `tail` fills `steps`. */
2024
+ /** Read a task's state and result.json without waiting. `tail` fills `steps`; `task` is the snapshot to judge by (a wait's), so a next turn starting meanwhile does not hide the finished one's result. */
2161
2025
  declare function readTask(cwd: string, taskId: string, opts?: {
2162
2026
  tail?: number | 'all';
2027
+ task?: Task;
2163
2028
  }): TaskResult;
2164
2029
  //#endregion
2165
2030
  //#region src/flow/index.d.ts
@@ -2345,4 +2210,4 @@ declare function resolveReviewTarget(input: ReviewTargetInput, auth?: ReviewAuth
2345
2210
  /** Post unseen findings and upsert the sticky summary through GitHub's integration. */
2346
2211
  declare function postReview(input: ReviewPostInput, auth?: ReviewAuth): number;
2347
2212
  //#endregion
2348
- export { type FlowTaskOptions as $, type flowSdk as A, TaskSource as At, type review$1 as B, renderReviewMarkdown as C, AgentDefinition as Ct, type reviewCli as D, InstallationSettings as Dt, type review as E, AgentUsage as Et, type archiveRuns as F, type pipeline as G, type flow as H, type deleteRuns as I, type DiscoveredFlow as J, type steer as K, type RunOptions as L, readTask as M, CustomModelConfig as Mt, type CoderError as N, config as Nt, type reviewFingerprints as O, Preset as Ot, type RunResult as P, type FlowStep as Q, type RunSummary as R, type postReview as S, Agent as St, type resolveReviewTarget as T, AgentTask as Tt, type gate as U, type readTurnResults as V, type log as W, type FlowRecord as X, type FlowEvent as Y, type FlowSteerOptions as Z, type description as _, RunnerRow as _t, type ReviewExec as a, type TaskStatus as at, type ownReviewComments as b, RunnerUpdate as bt, type ReviewPostSummary as c, TokenUsage as ct, type ReviewSummary as d, LocalFolder as dt, FlowTaskResult as et, type ReviewTarget as f, LocalFolders as ft, type concurrency as g, RunnerPairing as gt, type changedLines as h, RunnerKind as ht, type ReviewAuth as i, Task as it, type TaskResult as j, CoderConfig as jt, type args$1 as k, TaskContext as kt, type ReviewResult as l, AppSync as lt, args as m, RunnerInput as mt, type REVIEW_PLATFORM as n, Approval as nt, ReviewPostFinding as o, TurnResult as ot, ReviewTargetInput as p, ProbeResult as pt, task as q, ReviewArgs as r, Availability as rt, ReviewPostInput as s, TaskLogEntry as st, Finding as t, GateResult as tt, ReviewServices as u, ConnectionRow as ut, fingerprint as v, RunnerSpec as vt, type repositoryRules as w, AgentEvent as wt, type parseGithubPr as x, TaskTurn as xt, type lastReviewSummary as y, RunnerTest as yt, type StopSummary as z };
2213
+ export { type FlowTaskOptions as $, type flowSdk as A, type review$1 as B, renderReviewMarkdown as C, SinceMessage as Ct, type reviewCli as D, McpConfigEntry as Dt, type review as E, Effort as Et, type archiveRuns as F, type pipeline as G, type flow as H, type deleteRuns as I, type DiscoveredFlow as J, type steer as K, type RunOptions as L, readTask as M, type CoderError as N, type reviewFingerprints as O, Permission as Ot, type RunResult as P, type FlowStep as Q, type RunSummary as R, type postReview as S, Preset as St, type resolveReviewTarget as T, CustomModelConfig as Tt, type gate as U, type readTurnResults as V, type log as W, type FlowRecord as X, type FlowEvent as Y, type FlowSteerOptions as Z, type description as _, RunnerSpec as _t, type ReviewExec as a, type TurnResult as at, type ownReviewComments as b, TaskTurn as bt, type ReviewPostSummary as c, AppSync as ct, type ReviewSummary as d, LocalFolders as dt, FlowTaskResult as et, type ReviewTarget as f, ProbeResult as ft, type concurrency as g, RunnerRow as gt, type changedLines as h, RunnerPairing as ht, type ReviewAuth as i, Task as it, type TaskResult as j, type args$1 as k, config as kt, type ReviewResult as l, ConnectionRow as lt, args as m, RunnerKind as mt, type REVIEW_PLATFORM as n, Approval as nt, ReviewPostFinding as o, TaskLogEntry as ot, ReviewTargetInput as p, RunnerInput as pt, task as q, ReviewArgs as r, Availability as rt, ReviewPostInput as s, TokenUsage as st, Finding as t, GateResult as tt, ReviewServices as u, LocalFolder as ut, fingerprint as v, RunnerTest as vt, type repositoryRules as w, CoderConfig as wt, type parseGithubPr as x, PlatformEvent as xt, type lastReviewSummary as y, RunnerUpdate as yt, type StopSummary as z };
@@ -0,0 +1,4 @@
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{a as t,c as n,l as r,s as i}from"./slack-BtKvW_4v.js";import{t as a}from"./types-DPtbvoo3.js";import{randomUUID as o}from"node:crypto";async function s(e,t){let n=new URLSearchParams(await e.text()),r=Object.fromEntries(t.map(e=>[e,n.get(e)?.trim()??``])),i=t.filter(e=>!r[e]);if(i.length)throw new a(`invalid-field`,i[0],`Missing ${i.join(`, `)}`);return r}async function c(e,t,n=fetch,r=Date.now()){let i=await n(e,{method:`POST`,headers:{accept:`application/json`,"content-type":`application/x-www-form-urlencoded`},body:new URLSearchParams(t)}),o=await i.json().catch(()=>({}));if(!i.ok||!o.access_token)throw new a(`platform-error`,o.error??String(i.status),`${new URL(e).host} refused the token request: ${o.error_description??o.error??i.status}`);return{accessToken:o.access_token,...o.refresh_token?{refreshToken:o.refresh_token}:{},...o.expires_in?{expiresAt:r+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`);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,n,r){let i=new URL(e.url).searchParams.get(`code`);if(!i)throw new a(`missing-code`);let{clientId:o,clientSecret:s}=t;return c(u,{grant_type:`authorization_code`,code:i,redirect_uri:n,client_id:o,client_secret:s},r)}function g(e,t,n,r){let i=new URLSearchParams(n?{"oauth.client_name":n}:{});return r&&i.set(`distribution`,`public`),i.set(`developer.name`,f(e).replace(/^https?:\/\//,``)),i.set(`oauth.client_uri`,f(e)),i.append(`oauth.redirect_uris`,`${f(e)}/install/linear/callback`),i.append(`oauth.redirect_uris`,`${f(e)}/connect/linear/callback`),i.set(`webhook.enabled`,`true`),i.set(`webhook.url`,`${f(e)}/hooks/linear?app=${t}`),i.set(`webhook.resourceTypes`,`AgentSessionEvent`),`https://linear.app/settings/api/applications/new?${i}`}const _={shareable:!0,createStep:(e,{name:t,public:n}={},r=o())=>({intro:`Linear runs the agent as an app of your own OAuth application.`,link:g(e,r,t,n),steps:[{text:`Open the link signed in to Linear, check the form and click **Create**.`},{text:`Copy the client ID, the client secret and the webhook signing secret into the fields below.`}],notes:[`The link fills in the name, the callback URLs and the webhook${n?`, and makes the app public so other Linear workspaces can install it`:``}.`,...n?[]:[`To install the app in other Linear workspaces, make it public in its Linear settings.`]],hidden:{key:r},fields:[{name:`clientId`,label:`Client ID`,placeholder:`9f3c2a7d1e8b4c6a0d5e7f1a2b3c4d5e`,required:!0},{name:`clientSecret`,label:`Client secret`,placeholder:`4b1e9c7a2d0f8e3c5a6b9d1f0e2c4a7b`,required:!0},{name:`webhookSecret`,label:`Webhook signing secret`,hint:`shown with the webhook settings`,placeholder:`lin_wh_…`,required:!0}],submit:`Create Linear app`}),settingsUrl:()=>`https://linear.app/settings/api`,values:(e,{publicUrl:t,spec:n})=>({url:`https://linear.app/settings/api`,label:`Open application`,lines:[{text:`Application name`,copy:n.name},{text:`Callback URL`,copy:`${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,{spec:t}){let{key:n,...r}=await s(e,[...d,`key`]);if(!/^[0-9a-f-]{36}$/.test(n))throw new a(`invalid-field`,`key`);return{platformAppId:n,name:t.name,credentials:r}},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:i,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-Bz0E-DAY.js`)).linearAdapter(e),ownEvents(e,t,r,i){let a=JSON.parse(t);if(a.type!==`OAuthApp`||a.action!==`revoked`)return;let o=i.webhookSecret;return n(t,e.headers.get(`linear-signature`),o)&&a.organizationId&&a.oauthClientId===r.id.slice(7)?{uninstalled:`${r.id}:${a.organizationId}`}:{invalid:!0}},messages:{post:async({thread:e},{markdown:t,collapsed:n,buttons:r,hint:i,link:a})=>{let o=e.adapter,s=[t,n&&`+++ ${n.summary}\n\n${n.markdown}\n\n+++`,i,a&&`[${a.label}](${a.url})`].filter(Boolean).join(`
3
+
4
+ `);return(r?.length?await o.postElicitation(e.id,s,r.map(e=>({label:e.label,value:e.value}))):await o.postProgress(e.id,s)).id},clickConsumes:!0,laterDismisses:!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:t,github:r,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,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import{Qt as e,Tt as t,Ut as n,cn as r,ft as i,jn as a,jt as o,lt as s,mn as c,mt as l,r as ee,t as u,ut as d,vt as te,yt as f}from"../errors-XBA-Ls4n.js";import{m as p,s as m}from"../args-CbO_Ck9Z.js";import h from"node:path";import g from"node:process";import _ from"node:fs";import ne from"node:net";const v=new Set([`turn/start`,`review/start`,`thread/compact/start`]),y=3e4;function b(e,t,n){let r=new Set;return t?.threadId&&r.add(t.threadId),e===`review/start`&&n?.reviewThreadId&&r.add(n.reviewThreadId),r}function x(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function S(e,t){e.destroyed||e.write(`${JSON.stringify(t)}\n`)}const C=new Set([`turn/interrupt`,`turn/steer`,`thread/backgroundTerminals/clean`,`thread/archive`,`thread/delete`]);function re(e){return typeof e?.method==`string`&&C.has(e.method)}function ie(e){e&&(_.mkdirSync(h.dirname(e),{recursive:!0}),_.writeFileSync(e,`${g.pid}\n`,`utf8`))}async function w(){let[C,...w]=g.argv.slice(2);if(C!==`serve`)throw Error(`Usage: coder broker serve --endpoint <value> [--cwd <path>] [--pid-file <path>] [--network-access <true|false>] [--idle-ms <ms>]`);let T=p(a({name:`broker`,description:`The codex app-server broker`,access:`write`,args:{cwd:m(),"pid-file":m(),endpoint:c(),"network-access":r(e([`true`,`false`])),"idle-ms":m()},run(){}}),w),E=T.cwd?h.resolve(g.cwd(),T.cwd):g.cwd(),D=String(T.endpoint),O=t(D),k=T[`pid-file`]?h.resolve(T[`pid-file`]):null,A=T[`network-access`]===`true`,j=Number(T[`idle-ms`]??18e5);ie(k);let M=null,N=``,P={},F=null,I=!1,L=!1,R=null,z=null,B=null,V=new Set,H=new Map;function U(e){g.stderr.write(`[coder broker] ${JSON.parse(n(e))}\n`)}function W(e){for(let[t,n]of H)n.socket===e&&(H.delete(t),n.client.exitResolved||n.client.sendMessage({id:t,error:x(-32e3,`Broker client disconnected before answering the server request.`)}))}function G(e,t){let n=z??R;if(!n||n.destroyed){e.sendMessage({id:t.id,error:x(-32601,`No broker client available to answer ${t.method}.`)});return}H.set(t.id,{socket:n,client:e}),S(n,t)}function K(e){if(e!==M||L)return;M=null;let t=e.exitError?.message??`codex app-server exited.`;U(`${t} Starting a fresh one on the next request.`);for(let e of new Set([R,z]))e&&S(e,{method:s,params:{message:t}});H.clear(),R=null,z=null,B=null}async function q(){let e=u(g.env,P),t=l.connect(E,{disableBroker:!0,networkAccess:A}),n,r=new Promise((e,t)=>{n=setTimeout(()=>t(Error(`no answer within ${y/1e3}s`)),y)});try{let n=await Promise.race([t,r]);return n.setNotificationHandler(oe),n.handleServerRequest=e=>G(n,e),n.exitPromise.then(()=>K(n)),N=e,n}catch(e){throw t.then(e=>e.close()).catch(()=>{}),Error(`codex app-server could not start: ${ee(e)}`)}finally{clearTimeout(n)}}async function J(){let e=M;M=null,H.clear(),await e?.close().catch(()=>{})}async function ae(e){if(F)return F;let t=I||u(g.env,P)!==N;if(M&&!M.exitResolved&&!t)return M;if(M&&!M.exitResolved){let t=`Codex login changed; restarted the shared Codex app-server.`;U(t),S(e,{method:i,params:{message:t}})}return I=!1,await J(),F=q().finally(()=>{F=null}),M=await F,M}function Y(e){W(e),R===e&&(R=null),z===e&&(z=null,B=null)}function oe(e){let t=R??z;if(t&&(S(t,e),e.method===`turn/completed`&&z===t)){let n=e.params?.threadId??null;(!n||!B||B.has(n))&&(z=null,B=null,R===t&&(R=null))}}async function X(e){L=!0;let t=new Promise(t=>e.close(t));O.kind===`unix`&&_.existsSync(O.path)&&_.unlinkSync(O.path);let n=o();f(E,A,n)?.endpoint===D&&te(E,A,n);for(let e of V)e.end();await M?.close().catch(()=>{}),await t,k&&_.existsSync(k)&&_.unlinkSync(k)}M=await q();let Z;function Q(){clearTimeout(Z),V.size===0&&(Z=setTimeout(async()=>{U(`No clients for ${j/1e3}s; exiting.`),await X($),g.exit(0)},j))}let $=ne.createServer(e=>{clearTimeout(Z),V.add(e),e.setEncoding(`utf8`);let t=``;e.on(`data`,async n=>{t+=n;let r=t.indexOf(`
2
+ import{An as e,Cn as t,In as n,Jn as r,Pr as i,St as a,_r as o,_t as s,fr as c,gt as l,r as ee,rr as te,t as u,wn as d,xt as f,yt as p}from"../errors-DO_IltpP.js";import{a as ne}from"../emit-BrkJJPUE.js";import{c as m}from"../args-Dqf5Y1RP.js";import h from"node:path";import g from"node:process";import _ from"node:fs";import re from"node:net";const ie=new Set([`turn/start`,`review/start`,`thread/compact/start`]),v=3e4;function y(e,t,n){let r=new Set;return t?.threadId&&r.add(t.threadId),e===`review/start`&&n?.reviewThreadId&&r.add(n.reviewThreadId),r}function b(e={}){let{threadId:t,serviceName:n,ephemeral:r,...i}=e;return JSON.stringify(i)}function x(e,t,n){return n===void 0?{code:e,message:t}:{code:e,message:t,data:n}}function S(e,t){e.destroyed||e.write(`${JSON.stringify(t)}\n`)}const C=new Set([`turn/interrupt`,`turn/steer`,`thread/backgroundTerminals/clean`,`thread/archive`,`thread/delete`]);function ae(e){return typeof e?.method==`string`&&C.has(e.method)}function oe(e){e&&(_.mkdirSync(h.dirname(e),{recursive:!0}),_.writeFileSync(e,`${g.pid}\n`,`utf8`))}async function w(){let[C,...w]=g.argv.slice(2);if(C!==`serve`)throw Error(`Usage: coder broker serve --endpoint <value> [--cwd <path>] [--pid-file <path>] [--network-access <true|false>] [--idle-ms <ms>]`);let T=ne(i({name:`broker`,description:`The codex app-server broker`,access:`write`,args:{cwd:m(),"pid-file":m(),endpoint:o(),"network-access":c(te([`true`,`false`])),"idle-ms":m()},run(){}}),w),E=T.cwd?h.resolve(g.cwd(),T.cwd):g.cwd(),D=String(T.endpoint),O=e(D),k=T[`pid-file`]?h.resolve(T[`pid-file`]):null,A=T[`network-access`]===`true`,j=Number(T[`idle-ms`]??18e5);oe(k);let M=null,N=``,P={},F=null,I=!1,L=!1,R=null,z=null,B=null,V=new Set,H=new WeakMap,U=new Set,W=new Map;function G(e){g.stderr.write(`[coder broker] ${JSON.parse(r(e,[...U]))}\n`)}function se(e){for(let[t,n]of W)n.socket===e&&(W.delete(t),n.client.exitResolved||n.client.sendMessage({id:t,error:x(-32e3,`Broker client disconnected before answering the server request.`)}))}function ce(e,t){let n=z??R;if(!n||n.destroyed){e.sendMessage({id:t.id,error:x(-32601,`No broker client available to answer ${t.method}.`)});return}W.set(t.id,{socket:n,client:e}),S(n,t)}function le(e){if(e!==M||L)return;M=null;let t=e.exitError?.message??`codex app-server exited.`;G(`${t} Starting a fresh one on the next request.`);for(let e of new Set([R,z]))e&&S(e,{method:l,params:{message:t}});W.clear(),R=null,z=null,B=null}async function K(){let e=u(g.env,P),t=f.connect(E,{disableBroker:!0,networkAccess:A,bridgeUrl:X.url}),n,r=new Promise((e,t)=>{n=setTimeout(()=>t(Error(`no answer within ${v/1e3}s`)),v)});try{let n=await Promise.race([t,r]);return n.setNotificationHandler(de),n.handleServerRequest=e=>ce(n,e),n.exitPromise.then(()=>le(n)),N=e,n}catch(e){throw t.then(e=>e.close()).catch(()=>{}),Error(`codex app-server could not start: ${ee(e)}`)}finally{clearTimeout(n)}}async function q(){let e=M;M=null,W.clear(),await e?.close().catch(()=>{})}async function ue(e){if(F)return F;let t=I||u(g.env,P)!==N;if(M&&!M.exitResolved&&!t)return M;if(M&&!M.exitResolved){let t=`Codex login changed; restarted the shared Codex app-server.`;G(t),S(e,{method:p,params:{message:t}})}return I=!1,await q(),F=K().finally(()=>{F=null}),M=await F,M}function J(e){se(e),R===e&&(R=null),z===e&&(z=null,B=null)}function de(e){let t=R??z;if(t&&(S(t,e),e.method===`turn/completed`&&z===t)){let n=e.params?.threadId??null;(!n||!B||B.has(n))&&(z=null,B=null,R===t&&(R=null))}}async function Y(e){L=!0;let r=new Promise(t=>e.close(t));O.kind===`unix`&&_.existsSync(O.path)&&_.unlinkSync(O.path);let i=n();d(E,A,i)?.endpoint===D&&t(E,A,i);for(let e of V)e.end();await M?.close().catch(()=>{}),await X.close(),await r,k&&_.existsSync(k)&&_.unlinkSync(k)}let X=await a();M=await K();let Z;function Q(){clearTimeout(Z),V.size===0&&(Z=setTimeout(async()=>{G(`No clients for ${j/1e3}s; exiting.`),await Y($),g.exit(0)},j))}let $=re.createServer(e=>{clearTimeout(Z),V.add(e),e.setEncoding(`utf8`);let t=``;e.on(`data`,async n=>{t+=n;let r=t.indexOf(`
3
3
  `);for(;r!==-1;){let n=t.slice(0,r);if(t=t.slice(r+1),r=t.indexOf(`
4
- `),!n.trim())continue;let i;try{i=JSON.parse(n)}catch(t){S(e,{id:null,error:x(-32700,`Invalid JSON: ${t instanceof Error?t.message:String(t)}`)});continue}let a=i.id!==void 0&&!i.method?H.get(i.id):void 0;if(a){H.delete(i.id),a.client.exitResolved||a.client.sendMessage(i);continue}if(i.id!==void 0&&i.method===`initialize`){S(e,{id:i.id,result:{userAgent:`coder-broker`}});continue}if(i.method===`initialized`&&i.id===void 0||(i.id!==void 0&&i.method===`broker/shutdown`&&(S(e,{id:i.id,result:{}}),await X($),g.exit(0)),i.id===void 0||!i.method))continue;let o=R&&R!==e||z&&z!==e;if(i.method===`broker/recycle`){I=!0,!o&&M&&(U(`Recycling the shared Codex app-server after a stale-login error.`),I=!1,await J()),S(e,{id:i.id,result:{recycled:!o}});continue}let s=re(i)&&z&&z!==e&&!R;if(o&&!s){S(e,{id:i.id,error:x(d,`Shared Codex broker is busy.`)});continue}if(s){try{if(!M)throw Error(`codex app-server is not running.`);let t=await M.request(i.method,i.params??{});S(e,{id:i.id,result:t})}catch(t){let n=t;S(e,{id:i.id,error:x(n.rpcCode??-32e3,n.message)})}continue}let c=v.has(i.method);R=e,c&&(z=e,B=b(i.method,i.params??{},null));try{let t=await(await ae(e)).request(i.method,i.params??{});S(e,{id:i.id,result:t}),c&&(B=b(i.method,i.params??{},t)),R===e&&(R=null)}catch(t){let n=t;S(e,{id:i.id,error:x(n.rpcCode??-32e3,n.message)}),R===e&&(R=null),z===e&&c&&(z=null,B=null)}}}),e.on(`close`,()=>{V.delete(e),Y(e),Q()}),e.on(`error`,()=>{V.delete(e),Y(e),Q()})});g.on(`SIGTERM`,async()=>{await X($),g.exit(0)}),g.on(`SIGINT`,async()=>{await X($),g.exit(0)}),setInterval(async()=>{V.size===0&&f(E,A,o())?.endpoint!==D&&(await X($),g.exit(0))},3e4).unref(),$.listen(O.path),Q()}w().catch(e=>{g.stderr.write(`${JSON.parse(n(e instanceof Error?e.message:String(e)))}\n`),g.exit(1)});export{};
4
+ `),!n.trim())continue;let i;try{i=JSON.parse(n)}catch(t){S(e,{id:null,error:x(-32700,`Invalid JSON: ${t instanceof Error?t.message:String(t)}`)});continue}let a=i.id!==void 0&&!i.method?W.get(i.id):void 0;if(a){W.delete(i.id),a.client.exitResolved||a.client.sendMessage(i);continue}if(i.id!==void 0&&i.method===`initialize`){S(e,{id:i.id,result:{userAgent:`coder-broker`,bridgeUrl:X.url}});continue}if(i.method===`initialized`&&i.id===void 0||(i.id!==void 0&&i.method===`broker/shutdown`&&(S(e,{id:i.id,result:{}}),await Y($),g.exit(0)),i.id===void 0||!i.method))continue;for(let[e,t]of Object.entries(i.params?.config??{}))e.startsWith(`model_providers.`)&&t?.http_headers?.authorization&&U.add(String(t.http_headers.authorization).replace(/^Bearer /,``));let o=R&&R!==e||z&&z!==e;if(i.method===`broker/recycle`){I=!0,!o&&M&&(G(`Recycling the shared Codex app-server after a stale-login error.`),I=!1,await q()),S(e,{id:i.id,result:{recycled:!o}});continue}let c=ae(i)&&z&&z!==e&&!R;if(o&&!c){S(e,{id:i.id,error:x(s,`Shared Codex broker is busy.`)});continue}if(c){try{if(!M)throw Error(`codex app-server is not running.`);let t=await M.request(i.method,i.params??{});S(e,{id:i.id,result:t})}catch(t){let n=t;S(e,{id:i.id,error:x(n.rpcCode??-32e3,n.message)})}continue}let l=ie.has(i.method);R=e,l&&(z=e,B=y(i.method,i.params??{},null));try{let t=await ue(e),n=H.get(t)??new Map;H.set(t,n);let r=i.method===`thread/start`||i.method===`thread/resume`?b(i.params):null;i.method===`thread/resume`&&n.get(i.params?.threadId)!==r&&await t.request(`thread/unsubscribe`,{threadId:i.params?.threadId});let a=await t.request(i.method,i.params??{});r&&a?.thread?.id&&n.set(a.thread.id,r),S(e,{id:i.id,result:a}),l&&(B=y(i.method,i.params??{},a)),R===e&&(R=null)}catch(t){let n=t;S(e,{id:i.id,error:x(n.rpcCode??-32e3,n.message)}),R===e&&(R=null),z===e&&l&&(z=null,B=null)}}}),e.on(`close`,()=>{V.delete(e),J(e),Q()}),e.on(`error`,()=>{V.delete(e),J(e),Q()})});g.on(`SIGTERM`,async()=>{await Y($),g.exit(0)}),g.on(`SIGINT`,async()=>{await Y($),g.exit(0)}),setInterval(async()=>{V.size===0&&d(E,A,n())?.endpoint!==D&&(await Y($),g.exit(0))},3e4).unref(),$.listen(O.path),Q()}w().catch(e=>{g.stderr.write(`${JSON.parse(r(e instanceof Error?e.message:String(e)))}\n`),g.exit(1)});export{};
@@ -0,0 +1,2 @@
1
+ import{Rt as e,en as t,qi as n}from"./core-DwsAMCnL.js";import{Gt as r,J as i,Kt as a,_r as o,an as s,ar as c,br as l,cr as u,en as d,fr as f,gr as p,ir as m,mr as h,nr as ee,rr as g,v as te}from"./errors-DO_IltpP.js";import _ from"node:path";import{fileURLToPath as v}from"node:url";import y from"node:fs";var ne={name:`Coder`,description:`Answers engineering questions, reviews pull requests, and makes requested changes.`,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 b=o().check(t(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),x=g([`low`,`medium`,`high`]),S=g([`read-only`,`workspace-write`,`auto`]),C=g([`read`,`write`]),w=p({flow:f(b),match:f(o().check(e(1))),permissions:f(S),actAs:f(u(`requester`))}),T=p({events:f(l([m(o()),h(o(),l([b,w,u(!0)]))]))}),E=p({$schema:f(o()),name:f(o().check(e(1))),description:f(o()),engine:f(o()),runner:f(o().check(e(1))),model:f(o()),effort:f(x),permissions:f(S),access:f(C),mcp:f(h(b,a)),integrations:ee(h(o(),T),{})}),D=p({allowedEvents:f(m(o()))}),O=p({connections:f(m(o())),engine:f(o()),model:f(o()),effort:f(x),permissions:f(S),access:f(C),integrations:f(h(o(),D)),disabled:f(c())}),k=h(b,l([c(),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=E.safeParse(j(t));if(!r.success)throw Error(`Invalid agent definition "${e}": ${A(r.error)}`);let{$schema:i,...a}=r.data;return s(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 I(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 L(e){return e.definition.access===`read`||e.usage?.access===`read`?`read`:`write`}function R(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 z(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??`auto`}}const B={"read-only":0,"workspace-write":1,auto:2};function V(e,t){return t&&B[t]<=B[e]?t:e}var H=n({AgentLoadError:()=>U,agentsFromSources:()=>Y,assertNotReserved:()=>X,builtinDefinitions:()=>q,defaultAgent:()=>J,loadAgents:()=>$,repoAgentOverride:()=>Q}),U=class extends Error{};const W=v(new URL(`./builtin/coder/`,import.meta.url)),G={coder:{json:ne,builtin:!0,dir:W,systemPrompt:y.readFileSync(_.join(W,`system.md`),`utf8`)}};function K(e,t=!1){let n={},r;try{r=y.readdirSync(e,{withFileTypes:!0}).filter(e=>e.isDirectory()).map(e=>e.name)}catch{return n}for(let i of r){let r=_.join(e,i),a=_.join(r,`agent.json`);y.statSync(a,{throwIfNoEntry:!1})?.isFile()&&(n[i]={json:JSON.parse(y.readFileSync(a,`utf8`)),builtin:t,dir:r})}return n}function q(){return G}function J(){return`coder`}function re(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 U(e instanceof Error?e.message:String(e))}let u=i.builtin?re(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=I(a.filter(e=>!e.usage?.disabled),t);if(o.length)throw new U(`Invalid agents:\n ${o.join(`
2
+ `)}`);return a}function X(e){let t=e.filter(e=>e in q()).sort();if(t.length)throw Error(`Invalid agents:\n agents.${t.join(`, agents.`)}: built-in agent ids are reserved`)}function Z(e){let t=d(i(_.resolve(e)));return{file:t,usage:y.existsSync(t)?JSON.parse(y.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=_.resolve(e);let i={...q()},a=K(te(`agents`));for(let e of Object.values(a))e.repository=!1;let o=K(_.join(e,`.coder`,`agents`));X([...Object.keys(a),...Object.keys(o)]),Object.assign(i,a,o);let s={...r(e).agents},{usage:c}=Z(e);for(let e of Object.keys(s))!(e in i)&&!(e in c)&&delete s[e];return Y({definitions:i,usage:s,includeDisabled:n},t,e)}export{J as a,Q as c,z as d,F as f,R as g,N as h,q as i,L as l,M as m,Y as n,$ as o,V as p,X as r,H as s,U as t,P as u};
@@ -0,0 +1,5 @@
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{Dr as t,Mn as n,On as r,U as i,W as a,v as o}from"./errors-DO_IltpP.js";import{i as s,m as c,n as l,o as u}from"./load-BDlEFetB.js";import{t as d}from"./integrations-I7fRDk_l.js";import"./turn-DQ13lkPF.js";import f from"node:path";import p from"node:fs";import{execFile as m}from"node:child_process";import{randomUUID as ee}from"node:crypto";import{isDeepStrictEqual as h}from"node:util";const g=(e,t=``)=>`token:${e}:${t}`,_=e=>`token-drop:${e}`;var te=e({agentProblems:()=>O,agentWithVersion:()=>S,diskFiles:()=>A,ensureBuiltinAgents:()=>N,getAgent:()=>y,getVersion:()=>x,listAgents:()=>b,publishAgent:()=>C,publishVersion:()=>w,seedBuiltinAgent:()=>j,seedBuiltinAgents:()=>M,setAgentSettings:()=>T,toAgent:()=>k,versionKey:()=>v});const v=(e,t)=>`${e}:${String(t).padStart(6,`0`)}`;function y(e,t){return e.get(`agent`,t)}async function b(e){return(await e.list(`agent`)).map(e=>e.value)}async function x(e,t,n){let r=n??(await y(e,t))?.currentVersion;return r===void 0?void 0:e.get(`agentversion`,v(t,r))}async function S(e,t){return(await e.listAgentsWithVersions(t))[0]??{}}async function C(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 w(e,t,n,r){if(!r)return(await C(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 y(e,t.id),s=r?r.version:o?await x(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=>h(e.definition,i)&&e.systemPrompt===t.systemPrompt&&h(e.files,a);if(s&&u(s)){let r=l(s.version,o.updatedAt);return h(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`,v(t.id,r),d);r++){let n=await e.get(`agentversion`,v(t.id,r));if(n&&u(n)){d=n;break}}let f=await y(e,t.id);return(!f||f.currentVersion<d.version)&&await e.put(`agent`,t.id,l(d.version,n)),d}async function T(e,t,n,r=Date.now()){let i=await y(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 E=[`read-only`,`workspace-write`,`auto`];function D(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??`auto`,l=a.permissions,u=l&&E.indexOf(l)<=E.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 O(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 k(e,t,n,r=d){let i=D(t.definition,void 0,e.settings,r),a=D(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 A(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,A(e,i)):r.isFile()&&i!==`agent.json`&&i!==`system.md`&&(n[i]=p.readFileSync(f.join(e,i),`utf8`))}return n}async function j(e,t,n,i){let a=s()[n];return a?await w(e,{id:n,source:`builtin`,definition:a.json,systemPrompt:a.systemPrompt,importedFrom:`builtin:${r()}`},t,i)!==i.version:!1}async function M(e,t,n){let r=n??await Promise.all(Object.keys(s()).map(t=>S(e,t))),i=!1;for(let n of Object.keys(s()))await j(e,t,n,r.find(({record:e})=>e?.id===n)??{})&&(i=!0);return i}async function N(e,t){let n=e.settings??={};return n.builtinAgents||=M(e.store,t).then(()=>{}).catch(e=>{throw delete n.builtinAgents,e}),n.builtinAgents}const P=(e,t,n)=>(e.retryAt??1/0)<=t||!e.shownAt&&e.at<=t-n,F=3e4;var I=class extends Error{};const L=e=>`${e.source===`builtin`?0:1}:${e.id}`;function R(e,t,n,r){let i=t;return(!n.runner||n.runner===e||n.runner===i.name)&&(!n.defaults||!!i.default)&&(!n.ids||n.ids.includes(e))&&(!n.agent||(r??i.agent)===n.agent)&&(!Object.hasOwn(n,`visibleTo`)||!i.owner||i.owner===n.visibleTo)&&(!n.active||i.deletedAt===void 0||!!(n.includeUninstalled&&i.uninstalled))&&(!n.installation||i.installationId===n.installation)&&(!n.apps||!!i.app&&n.apps.includes(i.app))}const z=(e,t)=>e===`credential`?`credential:${t.slice(0,Math.max(0,t.lastIndexOf(`/`)))}`:e===`runner`?`runners:`:`installation:${t}`;async function B(e,t,n,r){let{parseCredentialId:i}=await import(`./apps-Bnk7F3A2.js`).then(e=>e.Tt),a=i(n).owner,o=(await e.list(t)).filter(e=>t===`credential`?i(e.id).owner===a:e.id===n),s=await r(o.find(e=>e.id===n)?.value,o,e);for(let n of s??[])n.value===null?await e.delete(t,n.id):await e.put(t,n.id,n.value);return!!s?.length}function V(e,t,n){if(n.deletedAt!==void 0)return;let r=n.app.split(`/`)[0],i=(e,t)=>[e.slice(t.app.length+1),...t.covers??[]],a=new Set(i(t,n));if(e.some(([e,n])=>{let o=n;return e!==t&&!o.deletedAt&&(o.app===r||o.app.startsWith(`${r}/`))&&i(e,o).some(e=>a.has(e))}))throw new I(`Installation "${t}" is bound through another app.`)}function H(e,t,n,r){let i=e?.sending?.count??0,a=[...e?.items.slice(i)??[],...n],o=a.slice(0,Math.max(0,a.length-50));return{...e,owner:t,at:r,items:[...e?.items.slice(0,i)??[],...a.slice(-50)],more:(e?.more??0)+o.length,mustReply:e?.mustReply||o.some(e=>e?.event?.mustReply===!0)}}function ne(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 re(e,t,n,r){let{sending:i,...a}=e,o=t?ne(e,n):0;if(t&&i&&o<i.count)return{...e,items:e.items.slice(o),sending:{...i,count:i.count-o,until:r+F}};let s={...a,items:t?e.items.slice(i?.count??0):e.items,more:(e.more??0)+(t?0:i?.more??0),mustReply:e.mustReply||!t&&i?.mustReply};return t?s:H(s,s.owner,[],s.at)}function U(e,t,n=0,r){let i=e??{messages:[],more:0,epoch:ee()},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 ie(e){let{sending:t,...n}=e;return H({...n,more:(e.more??0)+(t?.more??0),mustReply:e.mustReply||t?.mustReply},e.owner,[],e.at)}var W=class{now;recordEvents=new EventTarget;async watch(e,n){let r=`${e}:${n}`,i=t();return this.recordEvents.addEventListener(r,i.notify),{...i,close:()=>{this.recordEvents.removeEventListener(r,i.notify),i.close()}}}appUpdates=new Map;values=new Map;configUpdate;constructor(e=Date.now){this.now=e}async withAppLock(e,t){e.startsWith(`runners:`)&&(e=`runners:`);let n=(this.appUpdates.get(e)??Promise.resolve()).catch(()=>{}).then(()=>t(this));this.appUpdates.set(e,n);try{return await n}finally{this.appUpdates.get(e)===n&&this.appUpdates.delete(e)}}async withConfigLock(e){let t=(this.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e(this));this.configUpdate=t;try{return await t}finally{this.configUpdate===t&&delete this.configUpdate}}withCredential(e,t,n){return this.withAppLock(z(e,t),()=>B(this,e,t,n))}async listAgentsWithVersions(e){let t=Array.isArray(e)?await this.list(`agent`,{ids:e}):e?[{value:await this.get(`agent`,e)}]:await this.list(`agent`);return Promise.all(t.flatMap(({value:e})=>e?[this.get(`agentversion`,`${e.id}:${String(e.currentVersion).padStart(6,`0`)}`).then(t=>({record:e,version:t}))]:[]))}async listAgentSummaries(e={}){return(await this.listAgentsWithVersions(e.slug)).filter(({record:t,version:n})=>(!e.after||L(t)>e.after)&&(!e.source||t.source===e.source)&&(!e.platform||!!n?.definition.integrations?.[e.platform])&&(!e.q||[t.id,t.name,t.description,t.repo].some(t=>t?.toLowerCase().includes(e.q.toLowerCase())))).sort((e,t)=>L(e.record)<L(t.record)?-1:1).slice(0,e.limit).map(({record:e,version:t})=>{if(!t)return{record:e};let{systemPrompt:n,files:r,...i}=t;return{record:e,version:i}})}async listVersions(e,t,n){let r=await this.get(`agent`,e),i=n??(t===void 0?1/0:(r?.currentVersion??0)+1);return(await this.list(`agentversion`,{prefix:`${e}:`})).filter(({value:e})=>e.version<i&&(t===void 0||e.version>=i-t)).map(({id:e,value:{systemPrompt:t,files:n,...r}})=>({id:e,value:r}))}async publishAgent(e,t){let{publishVersion:n}=await Promise.resolve().then(()=>te);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:g(t)}))n.held.set(e.id,e.value);for(let r of[...e,...t])n.drops.set(_(r),(await this.get(`snapshot`,_(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-Bnk7F3A2.js`).then(e=>e.An);return t(this,e)}async usageSummary(e,t){let{usageSummary:n}=await import(`./apps-Bnk7F3A2.js`).then(e=>e.An);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-Bnk7F3A2.js`).then(e=>e.Tt);return r(this,e,t,n)}async put(e,t,n,r={}){e===`installation`&&V([...this.live(e)].map(([e,t])=>[e,t.value]),t,n);let i=r.ttlMs===void 0?void 0:this.now()+r.ttlMs,a=this.bucket(e),o=e===`task`&&!r.unarchive?a.get(t)?.value?.archivedAt:void 0;a.set(t,{value:o===void 0?e===`app`&&n.shared?{...n,credentials:``}:n:Object.assign({},n,{archivedAt:o}),expiresAt:i}),(e===`delivery`||e===`login`)&&this.recordEvents.dispatchEvent(new Event(`${e}:${t}`)),this.changed(e)}async putMany(e,t,n={}){if(e===`task`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let r=this.bucket(e);for(let e of t)r.set(e.id,{value:e.value,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}});this.changed(e)}async list(e,t={}){let n=e===`installation`&&t.agent?this.live(`app`):void 0;return[...this.live(e).entries()].filter(([e])=>!t.prefix||e.startsWith(t.prefix)).filter(([e])=>!t.after||e>t.after).filter(([r,i])=>R(r,i.value,t,e===`agent`?r:n?.get(i.value.app)?.value?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([t,n])=>({id:t,value:this.read(e,n.value)}))}async approvalPostsDue(e,t){return[...this.live(`delivery`).entries()].filter(([e])=>e.startsWith(`approval:`)).map(([e,t])=>({id:e,value:t.value})).filter(({value:n})=>P(n,e,t))}async delete(e,t){this.bucket(e).delete(t),e===`login`&&this.recordEvents.dispatchEvent(new Event(`login:${t}`)),this.changed(e);for(let n of e===`task`?[`history`,`tasklog`]:e===`agent`?[`agentversion`]:[]){for(let e of this.bucket(n).keys())e.startsWith(`${t}:`)&&this.bucket(n).delete(e);this.changed(n)}}async create(e,t,n,r={}){let i=this.live(e);if(i.has(t))return!1;let a=r.ttlMs===void 0?void 0:this.now()+r.ttlMs;return i.set(t,{value:n,expiresAt:a}),this.changed(e),!0}async claimDeliveryLease(e,t,n){let r=this.live(`delivery`);if(r.has(e))return;let i=this.live(`snapshot`).get(`delivery:${e}`)?.value?.failures??0;return r.set(e,{value:{owner:t,failures:i},expiresAt:this.now()+n}),this.changed(`delivery`),i}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=this.live(`delivery`);if(i.get(e)?.value?.owner!==t)return!1;if(!n)i.delete(e),this.bucket(`snapshot`).delete(`delivery:${e}`);else{let t=n.next===void 0?n:{...n,next:this.now()+r.ttlMs};i.set(e,{value:t,expiresAt:this.now()+r.ttlMs}),n.next!==void 0&&this.bucket(`snapshot`).set(`delivery:${e}`,{value:t,expiresAt:this.now()+864e5})}return this.changed(`delivery`),this.changed(`snapshot`),!0}async updateDelivery(e,t,n,r={}){let i=this.live(`delivery`);return i.get(e)?.value?.owner===t&&(n===void 0?i.delete(e):i.set(e,{value:n,...r.ttlMs===void 0?{}:{expiresAt:this.now()+r.ttlMs}}),this.changed(`delivery`),!0)}async appendUnseen(e,t,n){let r=this.live(`delivery`);if(!r.has(e))return;let i=`since:${e}`,a=r.get(i)?.value;r.set(i,{value:U(a,t),expiresAt:this.now()+n}),this.changed(`delivery`)}async acknowledgeUnseen(e,t,n){let r=this.live(`delivery`).get(`since:${e}`);r&&(r.value=U(r.value,void 0,t,n),this.changed(`delivery`))}async appendBatch(e,t,n,r,i){let a=this.live(`delivery`).get(e)?.value,o=H(a,t,n,r),s=this.now()+i;this.bucket(`delivery`).set(e,{value:o,expiresAt:s}),this.changed(`delivery`)}async claimBatch(e,t){return this.withAppLock(`batch:${e}`,async()=>{let n=this.live(`delivery`).get(e),r=n?.value;if(r?.owner!==t||!r.items.length)return;if(r.sending&&(r.sending.until??0)>this.now())return null;r.sending&&(r=ie(r));let i={...r,more:0,mustReply:!1,sending:{owner:t,until:this.now()+F,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=re(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)}},ae=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=()=>B(this,e,t,n);return e===`credential`?this.connections().withLock(r,z(e,t)):super.withAppLock(z(e,t),r)}get appsFile(){return o(`apps.json`)}get deliveriesFile(){return f.join(a(``),`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`?i():e===`snapshot`?f.join(a(``),`snapshots.json`):f.join(a(``),`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(a(``),`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`&&V(Object.entries(r.installation??{}),t,n),e===`app`&&n.shared&&(n={...n,credentials:``}),r[e]={...r[e],[t]:n},Y(this.appsFile,`${JSON.stringify(r,null,2)}\n`)}else this.refuse(e)}remove(e,t){if(e===`connection`){let e=this.connections(),n=!!e.get(t);return e.delete(t),n}if(e===`credential`){let e=this.connections(),n=e.credentials().some(e=>e.id===t);return e.deleteCredential(t),n}if(G.has(e)){let n=this.apps(),r=n[e];return!r||!(t in r)?!1:(delete r[t],Y(this.appsFile,`${JSON.stringify(n,null,2)}\n`),!0)}return!1}async putMany(e,t,n={}){if(e===`tasklog`){let e=new Map;for(let{id:r,value:i}of t){let t=r.slice(0,r.lastIndexOf(`:`)),a=e.get(t)??[];a.push(JSON.stringify({id:r,value:i,...n.ttlMs===void 0?{}:{expiresAt:this.now()+n.ttlMs}})),e.set(t,a)}for(let[t,n]of e){let e=this.logFile(t);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])=>R(e,r,t,n?.[r.app]?.agent)).sort(([e],[t])=>e.localeCompare(t)).slice(0,t.limit).map(([n,r])=>{let i=r;return{id:n,value:(e===`connection`&&t.secrets&&(t.secrets===`all`||i.provider===`mcp`&&i.auth===`oauth`)?this.connections().get(n):void 0)??r}})}async delete(e,t){if(e===`tasklog`){let e=t.slice(0,t.lastIndexOf(`:`)),n=this.loadLog(e);n.delete(t),Y(this.logFile(e),[...n].map(([e,t])=>JSON.stringify({id:e,...t})).join(`
4
+ `)+`
5
+ `);return}if(!G.has(e)&&!K.has(e)){await super.delete(e,t),e===`task`&&(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 oe(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=>m(`git`,[`log`,`-1`,`--format=%H`,`--`,`.`],{cwd:e},(e,n)=>t(e?void 0:n.trim()||void 0)))}async function Z(e,t,n,r){let i=await u(t,n,{includeDisabled:!0}),a=await Promise.all(i.filter(e=>!r||e.id===r).map(async t=>{let n=t.usage?{settings:t.usage}:{};if(t.builtin){let{record:r,version:i}=await S(e,t.id);if(!r)return;let a={...r,settings:void 0,...n,local:!0};return await e.put(`agent`,t.id,a),{record:a,version:i}}if(!t.dir)return;let r=await oe(t.dir),i=p.statSync(f.join(t.dir,`agent.json`)),a=f.join(t.dir,`system.md`),s={agent:t.id,version:1,definition:t.definition,systemPrompt:p.existsSync(a)?p.readFileSync(a,`utf8`):``,files:A(t.dir),...r?{commit:r}:{},importedFrom:`local:${t.dir}`,createdAt:i.mtimeMs},c={id:t.id,name:t.name,...t.definition.description?{description:t.definition.description}:{},source:f.resolve(t.dir)===o(`agents`,t.id)?`home`:`repo`,path:t.dir,currentVersion:1,...n,local:!0,...r?{commit:r}:{},createdAt:i.birthtimeMs||i.mtimeMs,updatedAt:i.mtimeMs};return await e.put(`agentversion`,v(t.id,1),s),await e.put(`agent`,t.id,c),{record:c,version:s}}));if(!r){let t=new Set(i.map(e=>e.id));for(let n of await b(e))n.local&&n.path&&!t.has(n.id)&&await e.delete(`agent`,n.id)}return a.filter(e=>!!e).sort((e,t)=>e.record.id<t.record.id?-1:+(e.record.id>t.record.id))}async function Q(e,t,n,r){let i=(await u(e,t,{includeDisabled:!0})).find(e=>e.id===n&&!e.builtin)?.dir??o(`agents`,n),a={...r.files,"agent.json":`${JSON.stringify(r.definition,null,2)}\n`,"system.md":r.systemPrompt};for(let[e,t]of Object.entries(a))p.mkdirSync(f.dirname(f.join(i,e)),{recursive:!0}),p.writeFileSync(f.join(i,e),t)}async function $(e,t,n){let r=(await u(e,t,{includeDisabled:!0})).find(e=>e.id===n&&!e.builtin);if(!r?.dir)throw Error(`No local agent named "${n}".`);return f.resolve(r.dir)===o(`agents`,n)&&(p.rmSync(r.dir,{recursive:!0}),!0)}export{k as C,T as S,g as T,x as _,Q as a,j as b,V as c,I as d,L as f,y as g,N as h,Z as i,B as l,S as m,$ as n,W as o,O as p,ae as r,H as s,X as t,F as u,C as v,_ as w,M as x,w as y};
@@ -0,0 +1,4 @@
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=>[`approval-escalated`,`approval-answered`,`approval-decision`,`auto-review`].includes(e),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;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`,r=t?n===`tool-result`?this.close(e,t):n===`approval-answered`?this.decide(e,t):void 0:void 0;if(r)return this.prevKind=n,[r];let i={seq:e.seq,at:e.at,kind:`status`,title:``,sourceKind:n,separated:!1,tone:`muted`};if(!t)i.kind=e.level===`err`?`error`:e.level===`sys`?`status`:`line`,i.title=a(e.line,this.cwd),e.level===`err`&&(i.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,i.kind=`usage`,i.tokens=e,i.title=`ctx ${l(typeof t.context==`number`?t.context:e.input+e.cachedInput)} · out ${l(e.output)}`}else if(n===`approval-escalated`){let e=Array.isArray(t.actions)?t.actions.map(String):[],n=a(t.reason?String(t.reason):``,this.cwd);i.kind=`approval`,i.title=[`Approval needed`,n,`${e.length} action${e.length===1?``:`s`}`].filter(Boolean).join(` · `),i.detail=a(e.map((e,t)=>`${t+1}. ${e.replaceAll(`
2
+ `,`
3
+ `)}`).join(`
4
+ `),this.cwd),i.state=`waiting`,this.approvals.set(String(t.approvalId),i)}else if(n===`approval-answered`)i.kind=`approval`,i.title=`Approval`,Object.assign(i,c(i,e,t));else if(n===`approval-decision`){let e=a(t.summary?String(t.summary):``,this.cwd),n=t.decision===`accept`;i.kind=`approval`,i.title=[n?`Allowed as approved`:`Refused by the reviewer`,e].filter(Boolean).join(` · `),i.detail=a(t.reason?String(t.reason):``,this.cwd),n||(i.tone=`error`)}else if(n===`auto-review`){i.kind=`approval`;let e=t.riskLevel?`(${String(t.riskLevel)} risk)`:``,n=a(t.summary?String(t.summary):``,this.cwd),r=n.slice(n.indexOf(`: `)+2),o=n&&r&&this.lastToolText.includes(r)?``:n,s=o?``:String(t.method??``);i.title=`${[`auto-review`,String(t.decision??``),e,s].filter(Boolean).join(` `)}${o?` · ${o}`:``}`,i.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[];i.title=a(e,this.cwd),n===`assistant`?(i.kind=`assistant`,i.tone=void 0,this.lastAssistant=i.title):n===`error`||n===`steer`?(i.kind=n,i.tone=n===`error`?`error`:`warning`):n===`reasoning`?(i.kind=`reasoning`,i.durationMs=typeof t.durationMs==`number`?t.durationMs:0):n===`tool`?(i.kind=`tool`,t.tool&&(i.tool=String(t.tool)),this.lastToolText=i.title,t.callId&&this.callIds.set(i,String(t.callId)),this.openCalls.push(i)):n===`tool-result`&&(i.kind=`tool-result`,i.title=this.output(e),i.exitCode=typeof t.exitCode==`number`?t.exitCode:void 0,i.tone=i.exitCode!==void 0&&i.exitCode!==0||t.isError===!0?`error`:`muted`,i.durationMs=typeof t.durationMs==`number`?t.durationMs:0,t.tool&&(i.tool=String(t.tool)))}return this.prevKind!==null&&(i.separated=[`assistant`,`error`,`steer`].includes(n)||n===`reasoning`&&this.prevKind!==`reasoning`||n===`tool`&&[`assistant`,`reasoning`].includes(this.prevKind)),this.prevKind=n,[i]}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){let n=this.approvals.get(String(t.approvalId));return n?c(n,e,t):void 0}output(e){return a(this.opts.keepAnsi?e:e.replace(i,``),this.cwd)}};function c(e,t,n){let r=n.decision===`accept`;return{...e,state:`${r?`approved`:`denied`} ${n.by?`by ${String(n.by)}`:`in Coder`}`,result:{ok:r,durationMs:Math.max(0,t.at-e.at||0),detail:!r&&n.reason?String(n.reason):``}}}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 +1 @@
1
- import{qi as e}from"./core-DwsAMCnL.js";import{Zt as t}from"./output-D95NoAA9.js";import{Dt as n,xn as r,zn as i}from"./apps-D-v5sQJk.js";import{n as a}from"./env-B9JG6gwo.js";import{C as o,T as s,w as c,x as l}from"./runners-CYTicTb7.js";import{chatState as u,m as d,platformLink as f,secret as p,x as m,y as h}from"./schema.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:p.organizationId}).from(p),t.select({key:u.key}).from(u).where(m(u.key,`o:%,"config"]:workspace`)),t.select({key:u.key}).from(u).where(m(u.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(f).where(h(f.token)):[])s(_,e.token)!==a&&(await i.update(f).set({token:o(_,l(_,e.token))}).where(d(f.id,e.id)),t++);return{moved:t}}finally{await v.close()}})}export{y as n,_ as t};
1
+ import{qi as e}from"./core-DwsAMCnL.js";import{Dt as t}from"./output-SNqdgh9A.js";import{Bn as n,Dn as r,Ot as i}from"./apps-Bnk7F3A2.js";import{n as a}from"./env-6Y-NNnYD.js";import{D as o,E as s,O as c,w as l}from"./runners-CfaGE0nV.js";import{chatState as u,m as d,platformLink as f,secret as p,x as m,y as h}from"./schema.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 n(_);try{let e=new Set([v.defaultOrganizationId]);if(v.connection){let t=v.connection.db,[n,i,a]=await Promise.all([t.selectDistinct({id:p.organizationId}).from(p),t.select({key:u.key}).from(u).where(m(u.key,`o:%,"config"]:workspace`)),t.select({key:u.key}).from(u).where(m(u.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 n of e)t+=await i(v.store(n),_);let n=v.connection?.db,a=o(_.encryptionKey);for(let e of n?await n.select().from(f).where(h(f.token)):[])c(_,e.token)!==a&&(await n.update(f).set({token:s(_,l(_,e.token))}).where(d(f.id,e.id)),t++);return{moved:t}}finally{await v.close()}})}export{y as n,_ as t};
@@ -1 +1 @@
1
- import{f as e,g as t,l as n,p as r}from"./load-zhcrwSRF.js";import{t as i}from"./integrations-DyInAa5g.js";function a(e){let t={};for(let r of Object.keys(e.definition.integrations)){let a=i[r];a&&(t[r]=a.tools.presets[n(e)])}return t}function o(n,o){if(!i[n.integration]||!t(o,n.integration).includes(n.type))return;let s=e(o.definition.integrations[n.integration],n.type);if(!s||s.match!==void 0&&!new RegExp(s.match).test(n.text))return;let c=o.usage?.permissions??o.definition.permissions;return{flow:s.flow??`default`,tools:a(o),...s.actAs?{actAs:s.actAs}:{},...c?{permissions:r(c,s.permissions)}:s.permissions?{permissions:s.permissions}:{}}}function s(e,t){return t.flatMap(t=>{let n=o(e,t);return n?[{agent:t,...n}]:[]})}export{o as n,s as r,a as t};
1
+ import{f as e,g as t,l as n,p as r}from"./load-BDlEFetB.js";import{t as i}from"./integrations-I7fRDk_l.js";function a(e){let t={};for(let r of Object.keys(e.definition.integrations)){let a=i[r];a&&(t[r]=a.tools.presets[n(e)])}return t}function o(n,o){if(!i[n.integration]||!t(o,n.integration).includes(n.type))return;let s=e(o.definition.integrations[n.integration],n.type);if(!s||s.match!==void 0&&!new RegExp(s.match).test(n.text))return;let c=o.usage?.permissions??o.definition.permissions;return{flow:s.flow??`default`,tools:a(o),...s.actAs?{actAs:s.actAs}:{},...c?{permissions:r(c,s.permissions)}:s.permissions?{permissions:s.permissions}:{}}}function s(e,t){return t.flatMap(t=>{let n=o(e,t);return n?[{agent:t,...n}]:[]})}export{o as n,s as r,a as t};
@@ -0,0 +1,2 @@
1
+ import{Ft as e,Kn as t,Nt as n,Tn as r}from"./errors-DO_IltpP.js";import{C as i}from"./output-SNqdgh9A.js";import{i as a}from"./async-Tj4zKHXR.js";import{i as o,n as s,r as c}from"./tools-B6ZxcqRi.js";import l from"node:path";import u from"node:process";import d from"node:fs";import{randomUUID as f}from"node:crypto";function p({description:e,connection:t,url:n}){return(e??(t?`connection ${t}`:n&&URL.canParse(n)?new URL(n).host:`MCP server`)).replace(/\s+/g,` `)}const m=(e,t)=>!!e.readOnly||(e.access??t)===`read`;function h(e,t){return e.map(e=>`${e.name}: ${p(e)}; ${m(e,t)?`read-only`:`read-write`}`).join(`
2
+ `)}async function g(e){let n=await t(e,fetch,AbortSignal.timeout(3e4));try{return await n.tools()}finally{await n.close().catch(()=>{})}}function _(e,t,n,r){let a=n.find(e=>e.name===`conversation`&&!e.command&&!e.url),o=n.filter(e=>e!==a).map(e=>m(e,r.access)?{...e,readOnly:!0}:e),s=v(e),c=e=>e.command?{...e,env:{...e.env,[i]:`1`}}:e,u=r.search?o:[],p=u.length?l.join(t,`tools-${f()}.json`):void 0;return p&&(d.mkdirSync(t,{recursive:!0}),d.writeFileSync(p,JSON.stringify(u.map(c)),{flag:`wx`,mode:384})),{servers:[...s.length?[S(l.join(t,`job.json`),s,a?.env)]:[],...r.search?[]:o,...p?[x(p)]:[]].map(c),tools:s,lines:h(o,r.access),cleanup:()=>p&&d.rmSync(p,{force:!0})}}function v(e){let t=a(e);return[...o.some(e=>e.flow===t)?[]:o.map(e=>e.name),...(e.permissions??`auto`)===`auto`?[`escalate`]:[],...e.conversation?[`reply`,`react`,`history`]:[]]}const y=[`CODER_HOME`,`CODER_MCP_MODE`,e,n,`CODEX_HOME`,`CLAUDE_CONFIG_DIR`,`CLAUDE_CODE_PROJECT_DIR_NAME`],b=()=>Object.fromEntries(y.flatMap(e=>u.env[e]?[[e,u.env[e]]]:[]));function x(e){return{name:`tools`,command:u.execPath,args:[r,`task`,`tools-search`],env:{...b(),[c]:e},tools:s,alwaysLoad:!0}}function S(e,t,n={}){return{name:`coder`,command:u.execPath,args:[r,`task`,`tools`,...t],env:{...n,...b(),CODER_HISTORY_TASK:e},tools:t,alwaysLoad:!0}}export{g as listServerTools,h as serverLines,p as serverSummary,v as taskToolNames,S as taskToolServer,_ as turnToolServers};
@@ -0,0 +1 @@
1
+ import{Mr as e,Pr as t,_r as n,fr as r,mr as i,xr as a}from"./errors-DO_IltpP.js";import{c as o,t as s}from"./args-Dqf5Y1RP.js";import{command as c}from"./cli.js";import{n as l}from"./permission-MWFjKxqX.js";import{serve as u}from"./serve-DdAdw7Su.js";const d=s(r(i(n(),a())),`The tool's input.`),f=(n,r)=>e({name:`coder`,description:`Coder approval policy`,commands:[t({name:`approval_prompt`,description:`Coder approval policy for claude permission prompts.`,args:{tool_name:o(`The tool Claude asks to run.`),input:d,tool_input:d},access:`read`,run:e=>l(n,r,e),mcp:{text:e=>JSON.stringify(e)}})]}),p=c({name:`mcp`,description:`the coder MCP server engines call back into`,access:`write`,args:{"task-id":o()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,run:async({args:e,cwd:t})=>{await(await u(f(t,e[0]),`stdio`)).done}});export{p as commandTaskMcp};
@@ -1,4 +1,4 @@
1
- import{At as e}from"./errors-XBA-Ls4n.js";import{t}from"./integrations-DyInAa5g.js";import n from"node:path";import r from"node:process";import i from"node:os";import a from"node:fs/promises";function o(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const s=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function c(e,n,r){let{name:i,tools:a,repos:o}=t[e],{readOnly:c,...u}=a.server(n,r.event,r.token),d=Object.entries(u.env??{}).find(([,e])=>e===r.token)?.[0],f=n.some(e=>!a.presets.read.includes(e))?`write`:`read`;return{...u,name:s(l(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?{readOnly:c}:{},...d?{credentialFields:{env:d}}:{},...o?.credentialUsername?{gitCredential:!0}:{}}}const l=(e,t)=>t?`${e}:${t}`:e;function u(e){if(!e?.integration||!t[e.integration])return;let n=c(e.integration,[],{token:`\0`}),r=Object.entries(n.env??{}).find(([,e])=>e===`\0`)?.[0],i=n.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function d(e,n,r=[]){let i=new Set,a=new Set(r);return Object.entries(n).flatMap(([n,r])=>{let[o,s]=n.split(/:(.*)/),l=e.tools[o];if(!t[o]||!r||!l?.length)return[];let u=c(o,l,{token:r,...e.event?{event:e.event}:{},...s?{account:s}:{}});a.has(n)&&u.access===`read`&&delete u.gitCredential;let d=u.name;for(let e=2;i.has(d);e++)d=`${u.name}-${e}`;return i.add(d),[{...u,name:d}]})}function f(t,n,r,i=[]){return e(Object.fromEntries([...d(t,n,i).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}]]:[]]))}async function p(e){let o=e.flatMap(e=>{let n=e.integration?t[e.integration]?.repos:void 0,r=e.gitCredential&&n?.credentialUsername&&u(e);return r&&!/[\r\n]/.test(r)?n.cloneHosts.map(t=>({host:t,username:n.credentialUsername,password:r,...e.account?{owner:e.account.toLowerCase()}:{}})):[]});if(!o.length)return{env:{},close:async()=>{}};let s=await a.mkdtemp(n.join(i.tmpdir(),`coder-git-`)),c=n.join(s,`credential.cjs`);try{await a.writeFile(n.join(s,`tokens.json`),JSON.stringify(o),{mode:384}),await a.writeFile(c,`const fs = require('node:fs');
1
+ import{Fn as e}from"./errors-DO_IltpP.js";import{t}from"./integrations-I7fRDk_l.js";import n from"node:path";import r from"node:process";import i from"node:os";import a from"node:fs/promises";function o(e){return`APP_TOKEN_${e.toUpperCase().replace(/[^A-Z0-9]/g,`_`)}`}const s=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``);function c(e,n,r){let{name:i,tools:a,repos:o}=t[e],{readOnly:c,...u}=a.server(n,r.event,r.token),d=Object.entries(u.env??{}).find(([,e])=>e===r.token)?.[0],f=n.some(e=>!a.presets.read.includes(e))?`write`:`read`;return{...u,name:s(l(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?{readOnly:c}:{},...d?{credentialFields:{env:d}}:{},...o?.credentialUsername?{gitCredential:!0}:{}}}const l=(e,t)=>t?`${e}:${t}`:e;function u(e){if(!e?.integration||!t[e.integration])return;let n=c(e.integration,[],{token:`\0`}),r=Object.entries(n.env??{}).find(([,e])=>e===`\0`)?.[0],i=n.credentialFields?.header;return r?e.env?.[r]||void 0:i?e.headers?.[i]?.replace(/^Bearer /,``):void 0}function d(e,n,r=[]){let i=new Set,a=new Set(r);return Object.entries(n).flatMap(([n,r])=>{let[o,s]=n.split(/:(.*)/),l=e.tools[o];if(!t[o]||!r||!l?.length)return[];let u=c(o,l,{token:r,...e.event?{event:e.event}:{},...s?{account:s}:{}});a.has(n)&&u.access===`read`&&delete u.gitCredential;let d=u.name;for(let e=2;i.has(d);e++)d=`${u.name}-${e}`;return i.add(d),[{...u,name:d}]})}function f(t,n,r,i=[]){return e(Object.fromEntries([...d(t,n,i).map(e=>[`native:${e.name}`,{...e,resolved:!0}]),...r?[[`native:conversation`,{name:`conversation`,resolved:!0,env:{CODER_REPLY_URL:r.url,CODER_REPLY_TOKEN:r.token},credentialFields:{env:`CODER_REPLY_TOKEN`}}]]:[]]))}async function p(e){let o=e.flatMap(e=>{let n=e.integration?t[e.integration]?.repos:void 0,r=e.gitCredential&&n?.credentialUsername&&u(e);return r&&!/[\r\n]/.test(r)?n.cloneHosts.map(t=>({host:t,username:n.credentialUsername,password:r,...e.account?{owner:e.account.toLowerCase()}:{}})):[]});if(!o.length)return{env:{},close:async()=>{}};let s=await a.mkdtemp(n.join(i.tmpdir(),`coder-git-`)),c=n.join(s,`credential.cjs`);try{await a.writeFile(n.join(s,`tokens.json`),JSON.stringify(o),{mode:384}),await a.writeFile(c,`const fs = require('node:fs');
2
2
  let input = '';
3
3
  process.stdin.on('data', data => input += data);
4
4
  process.stdin.on('end', () => {