@wular/coder 0.4.5 → 0.4.6

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 (190) hide show
  1. package/dist/{add-DTwoL7vJ.js → add-BIp1t_pT.js} +1 -1
  2. package/dist/{add-cdKdz3K0.js → add-CKENklTr.js} +1 -1
  3. package/dist/{add-Bffwutko.js → add-DrbKvzAF.js} +1 -1
  4. package/dist/{add-Bz8uaOcu.js → add-KkLx1WbE.js} +1 -1
  5. package/dist/{add-json-BIcbE3Nf.js → add-json-GHTfZV_U.js} +1 -1
  6. package/dist/{agent-DQK_S1PE.js → agent-CR8UFMa-.js} +1 -1
  7. package/dist/{agent-BcXXkOmD.js → agent-D0pQ_ewc.js} +1 -1
  8. package/dist/{alias-KQ85bphl.js → alias--pfI-nvH.js} +1 -1
  9. package/dist/{app-DaccLHrx.js → app-C7sw1ZkI.js} +1 -1
  10. package/dist/{approvals-CZt_aPCy.js → approvals-9-G-QxOy.js} +1 -1
  11. package/dist/{approve-DxjyXd66.js → approve-CAk8qPqG.js} +1 -1
  12. package/dist/{apps-eueTmHR5.js → apps-CaHoLNE7.js} +1 -1
  13. package/dist/{archive-C3JazQuo.js → archive-Ylxh0HIl.js} +1 -1
  14. package/dist/{archive-C9yrU4Wg.js → archive-fs5RjYHc.js} +1 -1
  15. package/dist/{archive-sweep-CHbOP-p6.js → archive-sweep-BrqWj4kr.js} +1 -1
  16. package/dist/{ask-DdYrvsTk.js → ask-Dmk0HGtI.js} +1 -1
  17. package/dist/{auth-q8CROpG-.js → auth-CS0cH0gq.js} +1 -1
  18. package/dist/auth-cZ0FrkBv.js +1 -0
  19. package/dist/{cli-msOzZFXW.js → cli-IfrPgeYz.js} +1 -1
  20. package/dist/cli.d.ts +1 -1
  21. package/dist/cli.js +1 -1
  22. package/dist/{config-BllYHi8S.js → config-Duf8jCkd.js} +1 -1
  23. package/dist/{create-BYki3g42.js → create-Ik613gJw.js} +1 -1
  24. package/dist/credentials-Dxpb5jCT.js +1 -0
  25. package/dist/dash/standalone/server/manifest.json +822 -822
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/(list)/page.8f85fbaff456c5fe.js +2 -2
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/layout.d3aec63db0f5230d.js +1 -1
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/page.7fd1bfcf08e25919.js +2 -2
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/platforms/page.31687af871d75d39.js +1 -1
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/(tabs)/settings/page.1ed5379637860fab.js +1 -1
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/[slug]/edit/page.1798dbd9cd334e8f.js +1 -1
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/agents/new/page.44f60b1a32344f70.js +1 -1
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/credentials.6423846391b20446.js +2 -2
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/settings/[tab]/page.04b07f9c365be073.js +4 -4
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/[id]/page.d1ded90712ca586f.js +1 -1
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-list.9698bdff71c3b3c7.js +1 -1
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/tasks/list/tasks-section.c77194f05c3f58fb.js +1 -1
  38. package/dist/dash/standalone/static/assets/chunks/{agent-pills-0163fdf910179991.js → agent-pills-65087e563e7f928c.js} +1 -1
  39. package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-b1fcd9a5236b1fc7.js → agent-settings-form-51f5d16c5b35b0c4.js} +1 -1
  40. package/dist/dash/standalone/static/assets/chunks/{agents-grid-1d8f0ec6cf8c797e.js → agents-grid-8d8fb47aa05c1022.js} +1 -1
  41. package/dist/dash/standalone/static/assets/chunks/{badge-9984d2fd0e7f995d.js → badge-b8e1e1429e8418e8.js} +1 -1
  42. package/dist/dash/standalone/static/assets/chunks/{card-818c7a0d580e2e0d.js → card-abb16544e8e5a5e0.js} +1 -1
  43. package/dist/dash/standalone/static/assets/chunks/{combo-0d55fb62af761ac5.js → combo-0feaff3c2ab55606.js} +1 -1
  44. package/dist/dash/standalone/static/assets/chunks/{composer-8abfcac26339cc99.js → composer-08a1aad17120af8a.js} +1 -1
  45. package/dist/dash/standalone/static/assets/chunks/composer-261cde2206340a07.js +1 -0
  46. package/dist/dash/standalone/static/assets/chunks/{confirm-be929e2de15876a6.js → confirm-d804955ec454f00f.js} +1 -1
  47. package/dist/dash/standalone/static/assets/chunks/{connect-apps-3e8b55a43315f58a.js → connect-apps-c4b8fc9d3a25e545.js} +1 -1
  48. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-8864a63f83ffd411.js → connect-repositories-2cf520006ed18949.js} +1 -1
  49. package/dist/dash/standalone/static/assets/chunks/{credentials-list-518af85578eacf6d.js → credentials-list-a1b81c1b630a8415.js} +1 -1
  50. package/dist/dash/standalone/static/assets/chunks/{custom-range-e8977f0d9699c1e6.js → custom-range-79011164d1e2529c.js} +1 -1
  51. package/dist/dash/standalone/static/assets/chunks/{editor-75d6d2d01f4fc35a.js → editor-b86137d54feb4ba1.js} +1 -1
  52. package/dist/dash/standalone/static/assets/chunks/{engines-list-2f6b8b3f2e873e4d.js → engines-list-0cf0dd6427e45add.js} +1 -1
  53. package/dist/dash/standalone/static/assets/chunks/{field-43fea54c1c287e30.js → field-329f272ef3edae30.js} +1 -1
  54. package/dist/dash/standalone/static/assets/chunks/{filter-55618648fc10c377.js → filter-673d0e6dbc95293c.js} +1 -1
  55. package/dist/dash/standalone/static/assets/chunks/{heads-1326669bdce3da2f.js → heads-bdb3900291e3ba2c.js} +1 -1
  56. package/dist/dash/standalone/static/assets/chunks/{instructions-0b968d5d0a58c716.js → instructions-7f289881a4d96d85.js} +1 -1
  57. package/dist/dash/standalone/static/assets/chunks/instructions-c175184f89172c15.js +1 -0
  58. package/dist/dash/standalone/static/assets/chunks/{list-90a47c07c4dd932e.js → list-074a086ab5e19d77.js} +1 -1
  59. package/dist/dash/standalone/static/assets/chunks/{mcp-list-735e401c60ab51a3.js → mcp-list-c97f883efa3f7d03.js} +1 -1
  60. package/dist/dash/standalone/static/assets/chunks/{models-list-999f54c76ca31379.js → models-list-3f869a70740e4244.js} +1 -1
  61. package/dist/dash/standalone/static/assets/chunks/{platform-actions-4592c82f72b21b1a.js → platform-actions-b317343915219089.js} +1 -1
  62. package/dist/dash/standalone/static/assets/chunks/{runners-list-ab64a5fb01d5eef8.js → runners-list-33a7339bd7cb3e18.js} +1 -1
  63. package/dist/dash/standalone/static/assets/chunks/{segmented-bf5a4c06605249e0.js → segmented-c9d58f98a7d32b4d.js} +1 -1
  64. package/dist/dash/standalone/static/assets/chunks/{select-591ca78b6ae29bd8.js → select-f4ea2f12a2298e4a.js} +1 -1
  65. package/dist/dash/standalone/static/assets/chunks/{sentinel-b4c91a38a5d79219.js → sentinel-9e882d8ad784d4bd.js} +1 -1
  66. package/dist/dash/standalone/static/assets/chunks/shared-init-bee5eaed36ee3dc4.js +5 -0
  67. package/dist/dash/standalone/static/assets/chunks/shared-init-cf66e1c1a2f30ef1.js +2 -0
  68. package/dist/dash/standalone/static/assets/chunks/{tail-74153aeac1f0baec.js → tail-5a5f739bca637202.js} +1 -1
  69. package/dist/dash/standalone/static/assets/chunks/{task-actions-26ad7f7c937f2589.js → task-actions-37ed047ca8c5b129.js} +1 -1
  70. package/dist/dash/standalone/static/assets/chunks/{task-view-0d085ce407e8511e.js → task-view-efe402c64d6a3c9b.js} +3 -3
  71. package/dist/dash/standalone/static/assets/chunks/{tasks-list-e9e914cf5dd959e9.js → tasks-list-eae2a32d61b437c5.js} +1 -1
  72. package/dist/dash/standalone/static/assets/chunks/{toolbar-a99d36b4b6f05bb1.js → toolbar-7aee851cfcc688cc.js} +1 -1
  73. package/dist/dash/standalone/static/assets/chunks/{versions-list-875a9a0ebb3f7d08.js → versions-list-836e397952b5d251.js} +1 -1
  74. package/dist/dash/standalone/static/assets/pnext-client-00c2425020b8564c.js +1 -0
  75. package/dist/dash/standalone/static/assets/pnext-client-091090fd50a6c9cd.js +1 -0
  76. package/dist/dash/standalone/static/assets/pnext-client-0b8b6a688cfb5246.js +1 -0
  77. package/dist/dash/standalone/static/assets/pnext-client-0cc2ff4668470e6f.js +1 -0
  78. package/dist/dash/standalone/static/assets/{pnext-client-4ed05f9a51f559a3.js → pnext-client-11f56cbcfd2a3fca.js} +1 -1
  79. package/dist/dash/standalone/static/assets/pnext-client-146cb2e293fd710e.js +1 -0
  80. package/dist/dash/standalone/static/assets/pnext-client-1cdaef1ffee188d4.js +1 -0
  81. package/dist/dash/standalone/static/assets/pnext-client-3298ffa52f79e244.js +1 -0
  82. package/dist/dash/standalone/static/assets/pnext-client-415baafb72caaf21.js +1 -0
  83. package/dist/dash/standalone/static/assets/pnext-client-50de47aa1f3aed6f.js +1 -0
  84. package/dist/dash/standalone/static/assets/{pnext-client-899f9625435988dd.js → pnext-client-802be87d22e144c4.js} +1 -1
  85. package/dist/dash/standalone/static/assets/pnext-client-9ec55ee4d6315657.js +1 -0
  86. package/dist/dash/standalone/static/assets/pnext-client-9fb279f4c6135368.js +1 -0
  87. package/dist/dash/standalone/static/assets/pnext-client-a543b7bfddcdae35.js +1 -0
  88. package/dist/dash/standalone/static/assets/pnext-client-a9f7e73b9a3252b9.js +1 -0
  89. package/dist/dash/standalone/static/assets/pnext-client-e9f4f42456943129.js +1 -0
  90. package/dist/{default-aLeIO8IR.js → default-BfXXngYf.js} +1 -1
  91. package/dist/{default-fMaQH1wm.js → default-zMKQ15xH.js} +1 -1
  92. package/dist/{delete-Cj16PYaw.js → delete-BbsEN7tF.js} +1 -1
  93. package/dist/{delete-DNj3leWA.js → delete-CZuI4sJi.js} +1 -1
  94. package/dist/{disable-CQg5Vybq.js → disable-B860lJDh.js} +1 -1
  95. package/dist/{discover-bVM8EJEz.js → discover-tM_915iZ.js} +1 -1
  96. package/dist/{docs-CqeYenUp.js → docs-BdmVTydv.js} +1 -1
  97. package/dist/{enable-8m3z7i3i.js → enable-DD4OsTnA.js} +1 -1
  98. package/dist/flow/index.d.ts +1 -1
  99. package/dist/{flow-DeCL3x2p.js → flow-DwhBWoSx.js} +1 -1
  100. package/dist/{index-Xe8n_t2Z.d.ts → index-JcLiq1ac.d.ts} +1 -1
  101. package/dist/{init-BujliQ7q.js → init-Bo3RS_va.js} +1 -1
  102. package/dist/integrations-CstFKLTr.js +1 -0
  103. package/dist/{list-QLTjk5SN.js → list-Bu1S3hPM.js} +1 -1
  104. package/dist/{list-CXu4cr8D.js → list-CLVoliXi.js} +1 -1
  105. package/dist/{list-BdiYneg5.js → list-DWeYdLMU.js} +1 -1
  106. package/dist/{list-DbY1jyj3.js → list-DYzczkQZ.js} +2 -2
  107. package/dist/{list-DhVfqr0A.js → list-DaQ14K1K.js} +1 -1
  108. package/dist/{list-DGoVY-ao.js → list-DhJOorrE.js} +1 -1
  109. package/dist/{list-DyqtSWvn.js → list-Motuarjd.js} +1 -1
  110. package/dist/{list-vKOTwd4G.js → list-P1Zi9bhT.js} +1 -1
  111. package/dist/{login-otJB9SYu.js → login-C-VTh_6i.js} +1 -1
  112. package/dist/{login-BzdlmD_o.js → login-KHrM3MI3.js} +1 -1
  113. package/dist/{logout-DOrRoxDV.js → logout-CqUKg0lc.js} +1 -1
  114. package/dist/{maintenance-Bg_FzXSq.js → maintenance-CVfHIraw.js} +1 -1
  115. package/dist/{mcp-xSvAWiXX.js → mcp-DCydEehH.js} +1 -1
  116. package/dist/{migrate-CN-fdMV9.js → migrate-DPprwsbm.js} +1 -1
  117. package/dist/{model-BJ-Sokha.js → model-_e9f9Oth.js} +1 -1
  118. package/dist/{push-Cg7-XT5h.js → push-HLTHyhsP.js} +1 -1
  119. package/dist/{queue-yo-Z8TaE.js → queue-EvplGOuk.js} +2 -2
  120. package/dist/refresh-ZbMy3Y9T.js +1 -0
  121. package/dist/{remove-DgMg_OOu.js → remove-B6PskfkD.js} +1 -1
  122. package/dist/{remove-BuaShRZ3.js → remove-CC7UyWNI.js} +1 -1
  123. package/dist/{remove-C8Rm8KP-.js → remove-CWd4Qs4F.js} +1 -1
  124. package/dist/{remove-CcMma1x3.js → remove-CZmO4BSd.js} +1 -1
  125. package/dist/{rename-C0vNcl8e.js → rename-ODyRelrw.js} +1 -1
  126. package/dist/{result-C6ovl_Dn.js → result-CRIAetqH.js} +1 -1
  127. package/dist/{result-oQey_hdw.js → result-DtXZusqj.js} +1 -1
  128. package/dist/{resume-T_TXWfqE.js → resume-CI-swBxa.js} +1 -1
  129. package/dist/{review-CCs6XUSO.js → review-IRsckIiU.js} +1 -1
  130. package/dist/{rotate-key-CYimsQR5.js → rotate-key-CmvHXXnp.js} +1 -1
  131. package/dist/{run-BFYg-zZt.js → run-Dd9HdNSL.js} +1 -1
  132. package/dist/{run-D7F7JPV6.js → run-FYA9XIij.js} +1 -1
  133. package/dist/{run-hiPyO7js.js → run-IWXjB5OD.js} +1 -1
  134. package/dist/runner-CbDswgji.js +1 -0
  135. package/dist/sdk.d.ts +2 -2
  136. package/dist/sdk.js +1 -1
  137. package/dist/{serve-C-AD60Wa.js → serve-CML2mkKG.js} +1 -1
  138. package/dist/{serve-BgGXjT_O.js → serve-CY46ohfr.js} +1 -1
  139. package/dist/{serve-GIK3fqKA.js → serve-D_XiZzYd.js} +2 -2
  140. package/dist/{serve-K3BVTcDI.js → serve-t38OrDrk.js} +2 -2
  141. package/dist/{server-DQTGc55C.js → server-83YZ2Kkh.js} +1 -1
  142. package/dist/{setup-host-By8-gv_v.js → setup-host-DRuUX8zg.js} +1 -1
  143. package/dist/{shared-TznJgMFW.js → shared-D64pQ0XU.js} +1 -1
  144. package/dist/{show-C9ojrH5W.js → show-DlKWR0Hy.js} +1 -1
  145. package/dist/{show-o4yXzSWZ.js → show-aCUICSoc.js} +1 -1
  146. package/dist/{status-BBW7Qyde.js → status-C09SKASS.js} +1 -1
  147. package/dist/{steer-D47cuggj.js → steer-BGKYpW4T.js} +1 -1
  148. package/dist/{stop-CD2JW6dI.js → stop-CiAJVnU2.js} +1 -1
  149. package/dist/{stop-7brPdki9.js → stop-svJYkhTt.js} +1 -1
  150. package/dist/{store-BCBTo0rl.js → store-B0RLMUR9.js} +1 -1
  151. package/dist/{store-qp7UE2ES.js → store-Cxc2GYyj.js} +2 -2
  152. package/dist/{task-CyrDqqf8.js → task-DvPkqHCF.js} +1 -1
  153. package/dist/{test-BcFQUHRo.js → test-9FHRw5Jc.js} +1 -1
  154. package/dist/{tools-D20XYPnO.js → tools-DhlrB8xV.js} +1 -1
  155. package/dist/{types-DMGBYB_K.d.ts → types-CdIo1Zbm.d.ts} +2 -2
  156. package/dist/{unalias-G3sM8fVw.js → unalias-D6UESHzK.js} +1 -1
  157. package/dist/{update-JvgB6Xws.js → update-DTYOhoQC.js} +1 -1
  158. package/dist/{upgrade-DN3hXDdo.js → upgrade-BOYs5Vyi.js} +2 -2
  159. package/dist/{usage-C1oN2W9c.js → usage-BlT_poNA.js} +1 -1
  160. package/dist/{usage-DR3wWtYD.js → usage-Bw7fQeFC.js} +1 -1
  161. package/dist/{watch-DDmHonTf.js → watch-BlGYjH88.js} +1 -1
  162. package/dist/{watch-DYkC6Q2q.js → watch-Y82ubvGH.js} +1 -1
  163. package/dist/{worker-CaNTsqcD.js → worker-4TKVAB01.js} +1 -1
  164. package/dist/{workflow-7rqzHHWZ.js → workflow-Mi1OCrOI.js} +1 -1
  165. package/package.json +1 -1
  166. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  167. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  168. package/dist/auth-FTKev9__.js +0 -1
  169. package/dist/credentials-DLMuf9OT.js +0 -1
  170. package/dist/dash/standalone/static/assets/chunks/composer-44516934e5619d32.js +0 -1
  171. package/dist/dash/standalone/static/assets/chunks/instructions-f3ecfb5c50f270c2.js +0 -1
  172. package/dist/dash/standalone/static/assets/chunks/shared-init-17c1fd399ac53851.js +0 -5
  173. package/dist/dash/standalone/static/assets/chunks/shared-init-8a34c730aabe942d.js +0 -2
  174. package/dist/dash/standalone/static/assets/pnext-client-1473d0349f242421.js +0 -1
  175. package/dist/dash/standalone/static/assets/pnext-client-195f74ae46e817da.js +0 -1
  176. package/dist/dash/standalone/static/assets/pnext-client-2b5532ce488c9391.js +0 -1
  177. package/dist/dash/standalone/static/assets/pnext-client-2d3ea662f22db27f.js +0 -1
  178. package/dist/dash/standalone/static/assets/pnext-client-43c0166e51dce87f.js +0 -1
  179. package/dist/dash/standalone/static/assets/pnext-client-652affde71fecdf7.js +0 -1
  180. package/dist/dash/standalone/static/assets/pnext-client-82beeebf704714a6.js +0 -1
  181. package/dist/dash/standalone/static/assets/pnext-client-ad1fab64ee1a5b30.js +0 -1
  182. package/dist/dash/standalone/static/assets/pnext-client-b2dccebfff1465f5.js +0 -1
  183. package/dist/dash/standalone/static/assets/pnext-client-c8a42c9bfeded4e4.js +0 -1
  184. package/dist/dash/standalone/static/assets/pnext-client-d04d2ffbb491564c.js +0 -1
  185. package/dist/dash/standalone/static/assets/pnext-client-d060565c4d80b60e.js +0 -1
  186. package/dist/dash/standalone/static/assets/pnext-client-dce6e1b84ee02f09.js +0 -1
  187. package/dist/dash/standalone/static/assets/pnext-client-e753846e298d2403.js +0 -1
  188. package/dist/integrations-6kXL9hRo.js +0 -1
  189. package/dist/refresh-CmBQALAW.js +0 -1
  190. package/dist/runner-D5jaEfhG.js +0 -1
@@ -5,7 +5,7 @@ import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Dt as
5
5
  `);function Uo(e){return e.type===`command`}function Wo(e){let t=Object.entries(e??{}).filter(([,e])=>e);return t.length?`Current settings:\n${t.map(([e,t])=>`• ${e}: \`${t}\``).join(`
6
6
  `)}`:`No settings yet. A workspace admin can configure this agent in the dashboard.`}function Go(e){let[t=``,...n]=e.text.trim().split(/\s+/);return Vo.includes(t)&&n.join(` `).trim()!==``}async function Ko(e,t,n){let[r=``,...i]=e.text.trim().split(/\s+/),a=i.join(` `).trim(),o={...t.settings},s;return r?r===`show`?s=Wo(t.settings):Vo.includes(r)?a?(o[r]=a,s=`${r} set to \`${a}\`.`):s=`Give a value: \`/setup ${r} <name>\`.`:s=`Unknown setting \`${r}\`.\n${Ho}`:s=Ho,JSON.stringify(o)!==JSON.stringify(t.settings??{})&&await Tl(n,`installation`,t.id,{settings:o}),s}async function qo(e,t,n){let r=`${t.id}:${n.installationId}`,i=e.boundInstallation?.installation.id===r?e.boundInstallation.installation:await e.store.get(`installation`,r);return i&&!i.deletedAt?i:void 0}async function Jo(e,t,n){let r=await e.auth.linkedUser(t.id,n.actor.id).catch(()=>void 0);return r?.organizations?.includes(e.organizationId)?r:void 0}async function Yo(e,t,n,r,i,a,o=!1){let s=e.config.publicUrl?.replace(/\/$/,``),c=kt(),l=o||await e.store.create(`delivery`,`link:${t.id}:${r.actor.id}`,{at:a,owner:c},{ttlMs:864e5});if(!s||!l)return;let u=e=>`Link your Coder account so I can work for you here: ${e}`;try{if(t.auth.user){await i.post(u(`${s}/connect/${t.id}?installation=${encodeURIComponent(n.id)}`));return}let a=await Lo(e,{platform:t.id,platformUserId:r.actor.id});await i.whisper(u(`${s}/connect?token=${encodeURIComponent(a)}`))}catch(n){throw o||await e.store.updateDelivery(`link:${t.id}:${r.actor.id}`,c,void 0).catch(()=>{}),n}}function Xo(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e in t.definition.integrations))}async function Zo(e,t,n){let r={};n.repo?r[n.integration]={repo:{owner:n.repo.owner,name:n.repo.name}}:n.chat&&(r[n.integration]={thread:n.chat.thread.id});for(let[n,i]of Object.entries(t.connections??{})){if(i.kind!==`installation`)continue;let t=(await e.store.get(`installation`,i.id))?.settings?.configRepo,a=t&&/^([^/]+)\/([^/]+)$/.exec(t);a&&(r[n]={repo:{owner:a[1],name:a[2]}})}return r}function Qo(e,t){return`<!-- coder:setup -->\nCoder is installed, but no engine is connected. [Connect ${t}](${Wa(e,t)}).`}async function $o(e,t,n,r){let i=Q({agent:n,requester:r,event:t}),a=await ts(e,i)??await e.store.get(`snapshot`,`session:${i}`);if(!a||a.requester!==r||!t.actor.id||a.actor!==t.actor.id)return;let s=await e.store.get(`task`,a.id);if(s&&[`queued`,`running`,`waiting`].includes(s.status)&&Q(s.task)===i)return s.task.id;let c=f(e.local.cwd,a.id);if(!c){let t=(await e.store.list(`delivery`,{prefix:`delivery:`})).find(e=>e.value.session?.key===i&&e.value.session.id===a.id)?.value.pending;if(!t?.task||t.taskId!==a.id||Q(t.task)!==i)return;await Kc(e,t.task,t.taskId),c=f(e.local.cwd,a.id)}if(!c||c.agentId!==n)return;let l=o(e.local.cwd,c);return l.status===`running`||l.status===`queued`?l.id:void 0}async function es(e,t,n,r,i,a,o){let s=`delivery:${t.id}:${n.id}:${i.installationId}:${i.chat?.thread.id??``}:${i.deliveryId}`,c=await qo(e,n,i);if(!c||e.local&&await e.store.get(`delivery`,s).then(e=>e&&!e.pending))return{};if(!e.local)return rs(e,t,n,r,i,c,a,o,s);let l=JSON.stringify([i.appId,i.installationId,i.chat?.thread.id]),u=e.store.handoffs??=new Map,d=(u.get(l)??Promise.resolve()).catch(()=>{}).then(async()=>{let l=await rs(e,t,n,r,i,c,a,o,s);return await l.work,l});u.set(l,d);try{return await d}finally{u.get(l)===d&&u.delete(l)}}async function ts(e,t){let n=await e.store.list(`delivery`,{prefix:`delivery:`}),r=await e.store.get(`snapshot`,`session:${t}`);return[...n.map(e=>e.value.session),r&&{...r,key:t}].filter(e=>e?.key===t).sort((e,t)=>(t.version??0)-(e.version??0))[0]}async function ns(e,t,n,r,i,o,s=!1){let c=kt(),l={event:n,...o?{task:o,taskId:o.flow==="default"?a():He()}:{}},u;if(e.local&&!n.repo){let n=await e.store.get(`delivery`,t);if(n&&!n.pending)return{};if(l=n?.pending??l,l.task&&!l.taskId)throw Error(`Local delivery has no task binding`);if(u=n?.session,!u&&s&&l.task){let t=Q(l.task);u={key:t,id:l.taskId,version:((await ts(e,t))?.version??0)+1,requester:l.task.requester,actor:l.task.event.actor.id}}await e.store.put(`delivery`,t,{at:r(),owner:c,pending:l,...u?{session:u}:{}})}else if(!await e.store.create(`delivery`,t,{at:r(),owner:c,pending:l},{ttlMs:Ro}))return{};return{work:(async()=>{let n=Promise.resolve(),a=e.local?void 0:setInterval(()=>{n=n.then(async()=>{await e.store.updateDelivery(t,c,{at:r(),owner:c,pending:l},{ttlMs:Ro})}).catch(()=>{})},Ro/3);try{await i(l),a&&clearInterval(a),await n,await e.store.updateDelivery(t,c,{at:r(),...u?{session:u}:{}},{ttlMs:zo})}catch(r){throw a&&clearInterval(a),await n,(!e.local||!l.task)&&await e.store.updateDelivery(t,c,void 0).catch(()=>{}),r}})()}}async function rs(e,t,n,r,i,a,o,s,c){let u=t=>ns(e,c,i,o,t);if(Uo(i))return e.auth&&Go(i)&&!await Jo(e,t,i)?u(()=>Yo(e,t,a,i,s,o(),!0)):u(()=>Ko(i,a,e.store).then(e=>s.whisper(e)).then(()=>{}));let d=await Tc(e,t,a,r,Dc(i.repo,t.tools.presets.observe)),p=await jc(e,a,i,d),[m,h]=await Promise.all([e.loadAgent(n,a,i,p),e.auth&&i.actor.id?Jo(e,t,i):void 0]);if(!h&&e.auth&&i.actor.id&&t.events[i.type]?.addressed)return u(()=>Yo(e,t,a,i,s,o()));let g=h?.id,_=Qe(i,m);if(!_)return{};let v=i.chat&&_.flow==="default"&&t.events[i.type]?.steers,ee=t=>ns(e,c,i,o,async t=>{let n=t.task,r=await Kc(e,n,t.taskId);if(v){let i=await ts(e,Q(n));i&&i.id===t.taskId&&await e.store.put(`snapshot`,`session:${i.key}`,{...i,id:r.task.id})}},t,!!v);if(e.local&&!i.repo){let t=await e.store.get(`delivery`,c);if(t?.pending?.task){let e=t.pending.task;return Q(e)!==Q({agent:m.id,requester:g,event:i})||e.flow!==_.flow?{}:ee(e)}}let y=e.local&&!i.repo&&v?await $o(e,i,m.id,g):void 0;if(y){let t=await e.store.get(`task`,y),n=f(e.local.cwd,y);return!n||t?.status===`queued`?u(async()=>{t&&await gl(e,y,`steer`,{text:i.text},t.generation??0)}):n.threadId?u(()=>Le(e.local.cwd,n,i.text).then(()=>{})):u(async()=>{l(e.local.cwd,y,i.text)})}let te=we(m),ne=Xo(p,m),[re,ie,ae,b]=await Promise.all([Yn(e,{requester:g,agent:m.definition.runner}),Ta(e.store,te.engine,g),Zo(e,a,i),fn(e,t,a,i,ne,m,t.events[i.type]?.addressed&&t.history!==!1?s.recent:void 0,h??null)]);if(!ie&&re.runner!==`http`&&!await cl(e,te.engine??`claude`))return(!e.local||i.repo)&&v&&(await e.queue.deliver(e.organizationId,{id:`${i.deliveryId}-${m.id}`,source:i.integration,agent:m.id,flow:_.flow,...re,event:i,requester:g,definition:m.definition,tools:{}},o(),{key:c,ttlMs:864e5},!0,void 0,!1)).steered?{}:u(()=>s.post(Qo(e,te.engine??`claude`)).then(()=>{}));let oe=new Set(t.tools.presets.observe),se=_.tools[i.integration]??[];h&&t.auth.canWrite&&se.some(e=>!oe.has(e))&&!await t.auth.canWrite(i,d)&&(_.tools[i.integration]=se.filter(e=>oe.has(e)));let ce=Object.fromEntries(Object.entries(_.tools).filter(([e])=>e in ne).map(([t,n])=>{if(ae[t])return[t,n];if(t!==i.integration)return[t,[]];let r=new Set(e.integrations[t]?.tools.presets.observe??[]);return[t,n.filter(e=>r.has(e))]}).filter(([,e])=>e.length));if(Buffer.byteLength(JSON.stringify(i))>Bo)throw Error(`Event exceeds 256 KB`);if(Buffer.byteLength(JSON.stringify(b))>Bo)throw Error(`Task context exceeds 256 KB`);let le={id:`${i.deliveryId}-${m.id}`,source:i.integration,agent:m.id,flow:_.flow,...re,permissions:_.permissions??te.permissions,event:i,author:t.author?.(n.name)??n.name,definition:m.definition,...ie?{credential:ie.id}:{},...g?{requester:g}:{},...m.files?{files:m.files}:{},...m.usage?{usage:m.usage}:{},tools:ce,...Object.keys(ae).length?{toolScopes:ae}:{},...Object.keys(b).length?{context:b}:{}};return e.local&&!i.repo&&re.runner===`local`&&!re.runnerId?ee(le):e.queue.deliver(e.organizationId,le,o(),{key:c,ttlMs:zo},!!v,e.config.maxQueued??1e3)}var is=e({addressedTo:()=>fs,chatFor:()=>vs,deliver:()=>ms,eventReplies:()=>gs,later:()=>ps,renewInstallation:()=>ys,renewInstallations:()=>bs,threadReplies:()=>hs});async function as(e,t,n,r,i){let a=`${t.id}:${r}`,o=await gn(e,a),s=o?.boundInstallation?.installation.id===a?o.boundInstallation.installation:await o?.store.get(`installation`,a);if(!o||!s||s.deletedAt)throw Error(`${t.integration} installation ${r} is not bound to this server`);return Tc(o,e.integrations[t.integration],s,n,i)}function os(e){if(e._type===`chat:Thread`)return{...e,currentMessage:void 0};let{raw:t,replyTo:n,...r}=e;return{...r,raw:null,id:r.id.startsWith(`ephemeral:`)?``:r.id}}const ss=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),cs=(e,t)=>Object.keys(e.events).find(n=>e.events[n].on===t),ls=`(?![\\w-]|\\.\\w)`,us=e=>e.replace(/[ \t]{2,}/g,` `).trim();function ds(e,t){let n=t.reduce((e,t)=>e.replace(RegExp(`(^|[^\\w-])@${ss(t)}${ls}`,`gi`),`$1`),e);return n===e?void 0:us(n)}function fs(e,t){let n=ds(e,[t]);if(n!==void 0)return n;let r=RegExp(`^\\s*${ss(t)}${ls}[\\s,:;!.?-]*`,`i`);return r.test(e)?us(e.replace(r,``)):void 0}function ps(e,t,n,r){let i=r.catch(e=>console.error(`coder server: dispatch failed for ${t.id} event ${n.deliveryId}`,e));e.waitUntil&&e.waitUntil(i)}async function ms(e,t,n,r,i,a){let o=await gn(e,`${n.id}:${i.installationId}`);if(!o||!n.builtin&&o.organizationId!==e.organizationId)return;let s=await es(o,t,n,r,i,e.now??Date.now,a);return await s.work,s.taskId&&await Fo(o,!0,!1,!0),s.taskId}function hs(e,t,n){return{post:t=>n&&e.adapter.reply?e.reply(n,t):e.post(t),whisper:n=>t?e.postEphemeral(t,n,{fallbackToDM:!1}):Promise.resolve(null),async recent(){let t=[],n=0;for await(let r of e.allMessages)if(t.push({user:r.author.userName||r.author.userId,text:r.text,ts:r.metadata.dateSent.toISOString()}),t.length>10&&t.shift(),++n===1e3)break;return t}}}async function gs(e,t,n){if(!n.chat)return{post:async()=>{},whisper:async()=>{}};let r=await vs(e,t,{id:n.installationId,...n.repo?{repo:n.repo}:{}});return await r.initialize(),hs(r.thread(n.chat.thread.id),n.actor.id||void 0,n.chat.message?.id||void 0)}function _s(e,t,n,r,i,a,o=a.id){let s=r===`message`&&t.agent===`coder`?fs(a.text,De):void 0;if(r===`message`&&t.agent===`coder`&&s===void 0)return;let c=cs(e,s===void 0?r:`mention`);if(!c||a.author.isBot===!0)return;let l=e.event?e.event(c,i,a,t):{};if(!l)return;let u=(l.type??c)===cs(e,`mention`)?s??ds(a.text,[t.name,...n.self?[n.self]:[]])??a.text:a.text;return{integration:e.id,type:c,appId:t.id,installationId:n.id,deliveryId:Dt(`sha256`).update(`${t.id}\n${n.id}\n${i.id}\n${o}`).digest(`base64url`).slice(0,22),actor:{id:a.author.userId,...a.author.userName?{login:a.author.userName}:{}},text:u,chat:{thread:os(i.toJSON()),message:os(a.toJSON())},...n.repo?{repo:n.repo}:{},...l}}async function vs(e,t,n){let r=e.integrations[t.integration];if(!r)throw Error(`Unknown integration "${t.integration}"`);let i=N(e.config,t.credentials),a=await r.adapter({fetch:e.fetch??fetch,appId:t.id.slice(r.id.length+1),name:t.name,credentials:i,...n?{installationId:n.id,...n.self?{self:n.self}:{}}:{},token:(r,a)=>as(e,t,i,r,{...n?.repo?{repo:{owner:n.repo.owner,name:n.repo.name}}:{},...a}),isBound:async n=>{let r=`${t.id}:${n}`,i=await gn(e,r),a=i?.boundInstallation?.installation.id===r?i.boundInstallation.installation:await i?.store.get(`installation`,r);return!!(a&&!a.deletedAt&&(t.builtin||i?.organizationId===e.organizationId))}}),o=mt(e.chatState??new ht,t.id),s=new Ht({userName:t.name,adapters:{[r.id]:a},state:{...o,isSubscribed:async()=>!1},concurrency:`concurrent`,dedupeTtlMs:zo,logger:`error`});if(!n)return s;let c=async(a,o,s,c)=>{let l=_s(r,t,n,a,o,s,c);l&&ps(e,t,l,ms(e,r,t,i,l,hs(o,s.author,s)))};return s.onNewMention((e,t)=>c(`mention`,e,t)),s.onNewMessage(/[\s\S]*/,(e,t)=>c(`message`,e,t)),s.onReaction(async e=>{if(!e.added)return;let t=r.reactionId?.(e);if(!t)return;let n=new Ut({id:e.messageId,threadId:e.threadId,text:e.message?.text??``,formatted:e.message?.formatted??{type:`root`,children:[]},raw:e.raw,author:e.user,metadata:e.message?.metadata??{dateSent:new Date,edited:!1},attachments:[]});await c(`reaction`,e.thread,n,`reaction\n${t}\n${e.user.userId}\n${e.rawEmoji}`)}),s.onSlashCommand(`/setup`,async a=>{let o=cs(r,`command`);if(!o)return;let s=e=>a.channel.postEphemeral(a.user,e,{fallbackToDM:!1}),c={integration:r.id,type:o,appId:t.id,installationId:n.id,deliveryId:Dt(`sha256`).update(`${t.id}\n${n.id}\n${a.channel.id}\n${a.triggerId??a.text}`).digest(`base64url`).slice(0,22),actor:{id:a.user.userId,...a.user.userName?{login:a.user.userName}:{}},text:a.text.trim()};ps(e,t,c,ms(e,r,t,i,c,{post:s,whisper:s}))}),s}async function ys(e,t,n,r=`renew`){let i=e.integrations[t.integration];if(!i?.[r])return;let a=[],o=await vs({...e,waitUntil:t=>{a.push(t),e.waitUntil?.(t)}},t,{id:n});for(await o.initialize(),await i[r](o.getAdapter(i.id));a.length;)await Promise.all(a.splice(0))}async function bs(e,t=`renew`){for(let n of Object.values(e.integrations))if(n[t])for(let{key:r,organizationId:i}of await e.installations?.(n.id)??[]){let n=await j(e,i).store.get(`installation`,r),a=n&&await hn(e,n.app);a&&await ys(a.ctx,a.app,r.slice(a.app.id.length+1),t).catch(()=>{})}}const xs=`.coder/agents`;function Ss(e){return e.repo?`${e.repo.owner}/${e.repo.name}`:void 0}async function Cs(e,t,n,r){let i=await e.repos.readFile(t,`.coder/config.json`,n,r);return i===void 0?void 0:JSON.parse(i).agents}async function ws(e,t,n,r,i={}){for(let t of Object.values(e))if(!(!r.repo&&t.id===r.integration||!t.repos||!i[t.id]))return{contents:t,token:i[t.id]};let[a,o]=n.split(`/`);for(let{value:r}of await t.store.list(`app`)){if(r.agentsRepo!==n)continue;let i=e[r.integration];if(!i?.repos)continue;let s=(await t.store.list(`installation`,{prefix:`${r.id}:`})).find(e=>!e.value.deletedAt)?.value;if(s)try{let e=s.token?{...s,token:N(t.config,s.token)}:s;return{contents:i,token:await i.auth.token(e,N(t.config,r.credentials),{...a&&o?{repo:{owner:a,name:o}}:{},tools:i.tools.presets.observe}),app:r,installation:s}}catch{continue}}}function Ts(e,t){let n=t.cwd??E.cwd(),r=t.now??Date.now,i=new Map;async function a(t,n,r){let i=Ae(e),a=i&&r[i.id];if(!i?.repos||!a)return;let o=Ss(n);if(n.integration===i.id&&o)return Cs(i,o,a,n.repo?.ref);let s=t.settings?.configRepo;if(s)return Cs(i,s,a)}function o(e,t,n,o){let s=`${e.id}@${Ss(n)??t.settings?.configRepo??``}@${n.repo?.ref??``}`,c=r();for(let[e,t]of i)c-t.at>=6e4&&i.delete(e);let l=i.get(s);return l||(l={at:c,usage:a(t,n,o)},i.set(s,l)),l.usage}async function s(n,i,a,s){let c=await R(t.store,n.agent);c.record&&await vr(t.store,r(),n.agent,c)&&(c=await R(t.store,n.agent));let{record:l,version:u}=c;if(!l)return;if(!u)throw Error(`No version ${l.currentVersion} for agent "${l.id}".`);let d=await o(n,i,a,s),f=d&&typeof d==`object`?d[n.agent]:void 0;if(f===!1)throw Error(`Agent "${n.agent}" is disabled in ${Ss(a)??i.settings?.configRepo??n.agentsRepo}.`);return gr(l,u,f&&typeof f==`object`?f:void 0,e)}return async(i,a,o,c)=>{let l=(await be(n,e)).find(e=>e.id===i.agent&&!e.builtin);if(l)return l;let u=await s(i,a,o,c);if(u)return u;if(i.agentsRepo){let n=await ws(e,t,i.agentsRepo,o,c);if(n){await Ds(t.store,n.contents,i.agentsRepo,Ss(o)===i.agentsRepo?o.repo?.ref??`HEAD`:`HEAD`,n.token,r());let e=await s(i,a,o,c);if(e)return e;throw Error(`No agent "${i.agent}" in ${i.agentsRepo}.`)}}if(await vr(t.store,r(),i.agent,{})){let e=await s(i,a,o,c);if(e)return e}throw Error(i.agentsRepo?`No agent named "${i.agent}".`:`No built-in agent "${i.agent}".`)}}async function Es(e,t,n,r,i,a=``,o,s=0){let c={},l=o??await e.repos.listDir(t,a?`${n}/${a}`:n,r,i);for(let o of l){let u=a?`${a}/${o}`:o;if(u===`agent.json`||u===`system.md`)continue;let d=await e.repos.readFile(t,`${n}/${u}`,r,i);if(d!==void 0)c[u]=d;else if(s<20){let a=await e.repos.listDir(t,`${n}/${u}`,r,i);a.length&&!Mt(a,l)&&Object.assign(c,await Es(e,t,n,r,i,u,a,s+1))}}return c}async function Ds(e,t,n,r,i,a,o={}){let s=o.path??`.coder/agents`,c=/^[0-9a-f]{40}$/i.test(r)?r:await t.repos.commit(n,r,i)??r,l={repo:n,ref:o.branch??r,commit:c};r=c;let u=o.slugs??await t.repos.listDir(n,s,i,r);Te(u);let d=[];for(let o of u){let u=`${s}/${o}`,f=await t.repos.readFile(n,`${u}/agent.json`,i,r);if(f===void 0)continue;let p=JSON.parse(f),[m]=Ce({definitions:{[o]:{json:p,builtin:!1}},usage:void 0},{...Me,[t.id]:t});m&&d.push(await dr(e,{id:o,name:m.name,description:m.definition.description,source:`repo`,repo:n,path:u,definition:m.definition,systemPrompt:await t.repos.readFile(n,`${u}/system.md`,i,r)??``,files:await Es(t,n,u,i,r),commit:c,origin:l,importedFrom:`repo:${n}@${l.ref}`},a))}return d}async function Os(e,t){let n=e.config.publicUrl;if(!n||!t.length)return;let r=new Map(t.map(e=>[e.agent,e])),i=await e.store.list(`app`),a=(await Promise.all(i.filter(({value:e})=>r.has(e.agent)).map(async({id:t})=>e.store.withAppLock(t,async i=>{let a=await i.get(`app`,t);if(!a||!r.has(a.agent))return;let o=await cr(i,a.agent)??r.get(a.agent),s=e.integrations[a.integration]?.app.update;if(!s||!o.definition.integrations[a.integration])return;let c=`app-sync:${t}`,l=await i.get(`delivery`,c);if(l&&!l.pending&&l.version>=o.version&&Mt(l.definition,o.definition)||l&&l.version>o.version)return;let u={version:o.version,definition:o.definition,pending:!0};await i.put(`delivery`,c,u);try{let t=await s(a,N(e.config,a.credentials),{publicUrl:n,definition:o.definition,fetch:e.fetch??fetch,saveCredentials:async t=>{await i.put(`app`,a.id,{...a,credentials:M(e.config,t)})}});t&&await i.put(`app`,a.id,{...a,credentials:M(e.config,t)}),await i.put(`delivery`,c,{...u,pending:!1})}catch(e){let t=`Could not sync ${a.integration} app ${a.id}. ${e instanceof Error?e.message:String(e)}`;return await i.put(`delivery`,c,{...u,error:t}),t}})))).filter(Boolean);if(a.length)throw Error(a.join(`
7
7
  `))}function ks(){return{integration:`source`,type:`import`,appId:``,installationId:``,deliveryId:``,actor:{id:`admin`},text:``}}async function As(e,t,n,r=ks(),i){let a=await ws(e.integrations,{config:e.config,store:e.store},t,r);if(!a)return;let o=await Ds(e.store,a.contents,t,n,a.token,(e.now??Date.now)(),i?{branch:i}:{});return await Os(e,o),o}const js=/^[a-z0-9][a-z0-9_-]*$/i;async function Ms(e,t){let n=Pe(Fe(),`builtin`).map(({name:e})=>({name:e,scope:`builtin`}));if(!t)return S(n);try{let{integration:r,token:i}=await bo(e,t),a=(r.repos?await r.repos.listDir(t,`.coder/flows`,i):[]).map(e=>e.replace(/\.(ts|mjs|js)$/,``)).filter(e=>js.test(e));return S([...a.map(e=>({name:e,scope:`workspace`})),...n.filter(e=>!a.includes(e.name))])}catch(e){return W(e)}}async function Ns(e,t){if(!t)throw new U(`repo is required`);let{integration:n,token:r}=await bo(e,t);return S(await n.repos?.pullRequests(t,r)??[])}async function Ps(e,t){try{return S(Ws(await So(e,`dashboard`,t)),201)}catch(e){return W(e)}}async function Fs(e,t,n,r){try{return Ms(t,r.searchParams.get(`repo`))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Is(e,t,n,r){try{return await Ns(t,r.searchParams.get(`repo`))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Ls(e,t,n,r){let i=n.name;try{return Ps(t,{...await yc(e),flow:i})}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Rs(e,t,n,r){try{{let{post:n,...r}=await yc(e);if(!r.repo||!r.pr)throw new U(`repo and pr are required`);return Ps(t,{...r,flow:`review`,args:{post:n===!0}})}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}function zs(e,t,n){return(e.waitUntil??(e=>void e.catch(()=>{})))(t),Promise.resolve(S({tasks:n},202))}async function Bs(e,t,n,r,i,a){if(`installation`in i){let t=await gn(e,i.installation.installation.id),n=await t?.store.get(`installation`,i.installation.installation.id);return!t||!n||await Tl(t.store,`installation`,n.id,{account:i.installation.installation.account,deletedAt:i.installation.op===`delete`?a:void 0}),S({ok:!0})}if(`changes`in i){let r=i.changes;try{n.branch||await Tl(e.store,`app`,n.id,{branch:r.branch});let i=await As(e,r.repo,r.ref,{...ks(),integration:t.id,appId:n.id},r.branch);return i?S({imported:i.map(e=>e.agent)}):S({error:`No installed app can read ${r.repo}`},400)}catch(e){return S({error:e instanceof Error?e.message:String(e)},400)}}for(let a of i.events)ps(e,n,a,gs(e,n,a).then(i=>ms(e,t,n,r,a,i)));return S({accepted:i.events.length},202)}async function Vs(e,t,n){let r=t.integrations[n],i=await e.text(),a=r.target(e,i);if(a instanceof Response)return a;if(!a)return new Response(`Not addressed to an app`,{status:400});let o=`${r.id}:${a.app}`,s=t.webhookTarget?await t.webhookTarget(o,a.installation?`${o}:${a.installation}`:void 0):void 0,c=t.webhookTarget?s&&{ctx:{...j(t,s.organizationId),...s.bound?{boundInstallation:s.bound}:{}},app:s.app}:await hn(t,o);if(!c)return new Response(`Unknown app`,{status:404});let{ctx:l,app:u}=c,d=N(l.config,u.credentials),f=r.ownEvents?.(e,i,u,d);if(f&&`invalid`in f)return new Response(`Invalid signature`,{status:401});if(f)return Bs(l,r,u,d,f,(l.now??Date.now)());let p=(await vs(l,u,a.installation?{...a,id:a.installation}:void 0)).webhooks[r.id];return p(new Request(e.url,{method:`POST`,headers:e.headers,body:i}),{deduplicate:!1,waitUntil:e=>{let t=e.catch(e=>console.error(`coder server: webhook work failed for ${u.id}`,e));l.waitUntil&&l.waitUntil(t)}})}const Hs=new Set([`completed`,`failed`,`cancelled`]);function W(e){if(e instanceof U)return S({error:e.message,...e.fix?{fix:e.fix}:{}},e.status);throw e}function Us(e){let{id:t,name:n,source:r,agent:i,flow:a,event:o,prompt:s,cwd:c}=e.task;return{task:{id:t,...n?{name:n}:{},source:r,agent:i,flow:a,...c?{cwd:c}:{},...s?{prompt:s}:{},...o?{event:{integration:o.integration,type:o.type,text:o.text}}:{}},status:e.status,...e.status===`queued`?{statusReason:`Waiting for a task slot`}:{},attempts:e.attempts,createdAt:e.createdAt,startedAt:e.startedAt,finishedAt:e.finishedAt}}function Ws(e){let{tokenHash:t,handle:n,...r}=e;return{...r,...e.status===`queued`?{statusReason:`Waiting for a task slot`}:{},turns:Co(e),...e.task.credential?{credential:H(e.task.credential).label}:{}}}async function Gs(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=r.searchParams.has(`limit`)?C(r,500,2e3):void 0,c=z(t.store,i,o,s??500);c?.catch(()=>{});let l=await t.store.get(`task`,i);if(!l||t.local&&l.handle?.startsWith(`cli:`)&&l.task.flow==="default"){let e=l?.task.cwd??t.local?.cwd;if(!e)return S({error:`No task "${i}"`},404);let n=J(e,i,!0);return n?S({...n,...l?.answer?{answer:l.answer}:{},logs:Jc(e,i,-1,s??500)}):S({error:`No task "${i}"`},404)}let u=l.task.runner===`github-actions`&&l.handle?await Ei(t,l,o,s??500).catch(()=>c):await c;return S({...Ws(l),logs:u})}async function Ks(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;if(!n)return S({error:`No task "${i}"`},404);let r=await Y(e,n,i,void 0,t);return r.ok&&t.queue instanceof vl&&t.queue.tombstone(i),r}if(t.local&&a.handle?.startsWith(`cli:`)){let e=(t.now??Date.now)();await t.queue.cancel(t.organizationId,i,e,{attempts:a.attempts,tokenHash:a.tokenHash,generation:a.generation??0});let n=await t.store.get(`task`,i);if(n&&Z.includes(n.status)){await Hc(t,n,e);let r=await t.store.get(`task`,i);if(r&&Z.includes(r.status))return S({error:`Task is still stopping. Try again.`},409)}}else if([`running`,`waiting`].includes(a.status)&&a.handle)try{let e=await F(t,a.task);if(!e)return S({error:`Task runner is unavailable. Try again.`},409);await e.stop(a.handle)}catch{return S({error:`Task is still stopping. Try again.`},409)}return await hl(t,a)?(t.local&&(await t.store.delete(`snapshot`,`local-start:${i}`),await t.store.delete(`snapshot`,`completion:${i}`)),Io(t,!0),S({ok:!0})):S({error:`Task changed while deleting. Try again.`},409)}async function qs(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=r.searchParams.has(`limit`)?C(r,500,2e3):void 0,c=z(t.store,i,o,s??void 0);c?.catch(()=>{});let l=await t.store.get(`task`,i);if(!l||t.local&&l.handle?.startsWith(`cli:`)&&l.task.flow==="default"){let e=l?.task.cwd??t.local?.cwd;return!e||!J(e,i,!1)?S({error:`No task "${i}"`},404):S(Jc(e,i,o,s))}return S(([`running`,`waiting`].includes(l.status)||l.task.runner===`github-actions`)&&l.handle?await Ei(t,l,o,s).catch(()=>z(t.store,i,o,s)):await c)}async function Js(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`steer`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`steer is available only for default-flow tasks`},409);let o=await e.json().catch(()=>void 0);if(Hs.has(a.status)){let{text:e,outputSchema:n,model:r,effort:i,permissions:s}=o??{};try{let o=await wo(t,a,String(e??``),n,{model:r,effort:i,permissions:s});return Io(t,!0),S(Ws(o))}catch(e){return W(e)}}let s=await gl(t,i,`steer`,o,a.generation??0);return s?S(s):S({error:`Task "${i}" is no longer active`},409)}async function Ys(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`ask`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`ask is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);let o=await gl(t,i,`ask`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Xs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`approve`,t):S({error:`No task "${i}"`},404)}if(a.task.flow!=="default")return S({error:`approve is available only for default-flow tasks`},409);if(![`queued`,`running`,`waiting`].includes(a.status))return S({error:`Task "${i}" is not active`},409);if(!a.approval)return S({error:`Task "${i}" has no pending approval`},409);let o=await gl(t,i,`approve`,await e.json().catch(()=>void 0),a.generation??0);return o?S(o):S({error:`Task "${i}" is no longer active`},409)}async function Zs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`cancel`,t):S({error:`No task "${i}"`},404)}let o=await t.queue.cancel(t.organizationId,i,(t.now??Date.now)(),{attempts:a.attempts,tokenHash:a.tokenHash??null,generation:a.generation??0});return o&&a.status!==`queued`&&await bl(t,i),o?S({ok:!0}):S({error:`No running or queued task "${i}"`},404)}async function Qs(e,t,n,r){let i=n.id;Number(r.searchParams.get(`after`)??-1),r.searchParams.has(`limit`)&&C(r,500,2e3);let a=await t.store.get(`task`,i);if(!a||t.local&&a.handle?.startsWith(`cli:`)&&a.task.flow==="default"){let n=a?.task.cwd??t.local?.cwd;return n?Y(e,n,i,`archive`,t):S({error:`No task "${i}"`},404)}let o=(t.now??Date.now)();return await t.queue.patchTask(t.organizationId,i,{archivedAt:o,autoArchived:void 0},o),S({ok:!0})}async function $s(e,t){if(!e.agent||!e.event?.integration)return S({error:`agent and event are required`},400);let n=t.integrations[e.event.integration];if(!n)return S({error:`Unknown integration "${e.event.integration}"`},400);let r=e.event.actor?.id;if(t.auth&&r){let e=await t.auth.linkedUser(n.id,r);if(e&&e.id!==t.session?.user.id)return S({error:`The event's actor is linked to another member`},403)}let i=(await t.store.list(`app`)).map(e=>e.value).find(t=>t.agent===e.agent&&t.integration===n.id);if(!i)return S({error:`No ${n.id} app for agent "${e.agent}" on this server.`},404);let a=(await t.store.list(`installation`)).map(e=>e.value).filter(e=>e.app===i.id&&!e.deletedAt),o=a.find(t=>t.id===`${i.id}:${e.event.installationId}`)??a[0];if(!o)return S({error:`The ${n.id} app for "${e.agent}" is not installed anywhere yet`},404);let s=t.now??Date.now,c={...e.event,appId:i.id,installationId:o.id.slice(i.id.length+1),deliveryId:`admin-${s()}-${kt()}`},l=await es(t,n,i,N(t.config,i.credentials),c,s,await gs(t,i,c));return zs(t,l.work??Promise.resolve(),l.taskId?[l.taskId]:[])}const ec=new Set([`queued`,`running`,`waiting`,`completed`,`failed`,`cancelled`]);async function tc(e,t,n,r){let i=await e.json().catch(()=>void 0);if(!i||typeof i!=`object`)return S({error:`A JSON body is required`},400);try{if(mo(t,i),i.event)return $s(i,t);let e=(i.source===`cli`?void 0:await zc(t,i))??await So(t,i.source===`cli`?`cli`:`dashboard`,i);return S(Ws(e),201)}catch(e){return W(e)}}function nc(e,t,n){let r=new Map(t.map(e=>[e.task.id,e]));for(let t of n)i(e,t,r.has(t.task.id))&&r.set(t.task.id,t);return[...r.values()]}async function rc(e,t,n,r){n.id;let i=r.searchParams.get(`status`);if(i&&i!==`active`&&!ec.has(i))return S({error:`Unknown status "${i}"`},400);let a=r.searchParams.get(`source`);if(a&&![`dashboard`,`cli`,`schedule`,...Object.keys(t.integrations)].includes(a))return S({error:`Unknown source "${a}"`},400);let o=r.searchParams.get(`agent`),s=r.searchParams.get(`q`)?.trim(),c={...o?{agent:o}:{},...a?{source:a}:{},...s?{q:s}:{},archived:r.searchParams.get(`archived`)===`1`},l=i===`active`?{statuses:Z}:i?{status:i}:{},u=e=>r.searchParams.get(`summary`)===`1`?e.map(Us):e.map(Ws);if(t.local){await Rc(t,t.local.cwd);let e=nc(t.local.cwd,Lc(t.local.cwd,c.archived),await t.queue.list(t.organizationId)).filter(e=>ll(e,{...c,...l})).sort(dl),n=C(r,at(r)?void 0:20);if(!at(r))return S(u(e.slice(0,n)));let i=ct(r),a=e.filter(e=>fl(e,i)),o=dt(a.slice(0,n+1),n,ul);return S({...o,items:u(o.items),...r.searchParams.get(`counts`)===`1`?{counts:{all:e.length,active:e.filter(e=>Z.includes(e.status)).length,waiting:e.filter(e=>e.status===`waiting`).length}}:{}})}if(await t.queue.archiveStopped(t.organizationId,(t.now??Date.now)()),!at(r)){let e=C(r,20),n=await t.queue.list(t.organizationId,{...c,...l,limit:e,summary:r.searchParams.get(`summary`)===`1`});return S(u(n))}let d=C(r),f=ct(r),p=r.searchParams.get(`counts`)===`1`&&!i&&!f&&t.queue.listWithCounts?await t.queue.listWithCounts(t.organizationId,{...c,limit:d+1,summary:r.searchParams.get(`summary`)===`1`}):void 0,[m,h]=await Promise.all([p?p.items:t.queue.list(t.organizationId,{...c,...l,summary:r.searchParams.get(`summary`)===`1`,...f?{before:f}:{},limit:d+1}),p?p.counts:r.searchParams.get(`counts`)===`1`?t.queue.counts(t.organizationId,{...c,...l}):void 0]),g=dt(m,d,ul);return S({...g,items:u(g.items),...h?{counts:h}:{}})}var G=class extends Error{};const ic=async e=>await e.get(`config`,`workspace`)??{};async function ac(e,t){let{sealed:n,...r}=await ic(e);if(!n)return r;let i=N(t,n);return{...r,mcp:Object.fromEntries(Object.entries(r.mcp??{}).map(([e,t])=>[e,{...t,...i[e]}]))}}function oc(){let e=ae();if(!O.existsSync(e))return{};try{return JSON.parse(O.readFileSync(e,`utf8`))}catch(t){throw new G(`Invalid JSON in ${e}: ${t.message}`)}}function sc(e){return e.mcp?{...e,mcp:Object.fromEntries(Object.entries(e.mcp).map(([e,t])=>[e,_c(t)]))}:e}async function cc(e){if(e.local)return sc(oc());let{sealed:t,...n}=await ic(e.store);return n}async function lc(e,t){return uc(e,e=>fc(e,t))}async function uc(e,t){let n=e.settings??={},r=(n.configUpdate??Promise.resolve()).catch(()=>{}).then(()=>e.local?t(e):e.store.withConfigLock(n=>t({...e,store:n})));n.configUpdate=r;try{return await r}finally{n.configUpdate===r&&delete n.configUpdate}}function dc(e){let t=te(e);if(t.length)throw new G(t.join(`; `))}async function fc(e,t){dc(t);let n=e.local?oc():await ac(e.store,e.config),r={},i={},a=Object.fromEntries(Object.entries(t.mcp??{}).map(([e,t])=>{let a=r=>t[r]&&Object.fromEntries(Object.entries(t[r]).map(([t,i])=>[t,i===gc?n.mcp?.[e]?.[r]?.[t]??``:i])),o=a(`env`),s=a(`headers`);return(o||s)&&(i[e]={...o?{env:o}:{},...s?{headers:s}:{}}),r[e]={...t,...i[e]},[e,_c(t)]}));if(e.local)return _e({...t,...t.mcp?{mcp:r}:{}}),cc(e);let o={...t,...t.mcp?{mcp:a}:{},...Object.keys(i).length?{sealed:M(e.config,i)}:{}};return await e.store.put(`config`,`workspace`,o),cc(e)}async function pc(e,t){return uc(e,async e=>{let n=structuredClone(e.local?oc():await ac(e.store,e.config));return t(n),fc(e,n)})}function mc(e,t){return uc(e,async e=>fc(e,hc(e.local?oc():await ac(e.store,e.config),t)))}function hc(e,t){if(!t||typeof t!=`object`||Array.isArray(t))return t;let n=e&&typeof e==`object`&&!Array.isArray(e)?Object.fromEntries(Object.entries(e)):{};for(let[e,r]of Object.entries(t))r===null?delete n[e]:Object.defineProperty(n,e,{value:hc(Object.hasOwn(n,e)?n[e]:void 0,r),writable:!0,enumerable:!0,configurable:!0});return n}const gc=`********`;function _c(e){let t=e=>e&&Object.fromEntries(Object.keys(e).map(e=>[e,gc]));return{...e,...e.env?{env:t(e.env)}:{},...e.headers?{headers:t(e.headers)}:{}}}async function vc(e,t){return e.withConfigLock(async e=>{let n=await ic(e);return!n.sealed||En(t,n.sealed)===xn(t.encryptionKey)?0:(await e.put(`config`,`workspace`,{...n,sealed:M(t,N(t,n.sealed))}),1)})}async function yc(e){let t=await e.json().catch(()=>void 0);if(!t||typeof t!=`object`)throw new G(`A JSON body is required`);return t}async function bc(e,t){try{return S(await pc(e,t))}catch(e){if(e instanceof G)return S({error:e.message},400);throw e}}async function xc(e,t,n,r){try{{let e=await cc(t);return S({config:e,effective:t.local?sc(me(t.local.cwd)):m(e)})}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Sc(e,t,n,r){try{{let n=await e.json().catch(()=>{throw new G(`A JSON body is required`)});return S(await mc(t,n))}}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}async function Cc(e,t,n,r){try{return S(await lc(t,await yc(e)))}catch(e){return e instanceof G?S({error:e.message},400):W(e)}}function wc(e,t){return t.token?{...t,token:N(e.config,t.token)}:t}function Tc(e,t,n,r,i){return t.auth.token(wc(e,n),r,i,async t=>{let r=await e.store.get(`installation`,n.id);if(r){let i=M(e.config,t);await e.store.put(`installation`,n.id,{...r,token:i}),n.token=i}})}async function Ec(e,t,n,r){if(!t.auth.user||!e.auth)return;let i=await e.auth.linkedUser(t.id,n.actor.id);if(!i?.token||!i.organizations?.includes(e.organizationId))return;let a=await t.auth.user.access(N(e.config,i.token),r,{fetch:e.fetch??fetch,now:(e.now??Date.now)()});return a.refreshed&&await e.auth.link(i,t.id,n.actor.id,{token:M(e.config,a.refreshed)}),a.accessToken}function Dc(e,t){return{...e?{repo:{owner:e.owner,name:e.name}}:{},tools:t}}async function Oc(e,t,n,r,i,a,o){return(o===`requester`?await Ec(e,t,r,i).catch(()=>void 0):void 0)??Tc(e,t,n,i,a)}const kc=e=>{let t=e&&/^([^/]+)\/([^/]+)$/.exec(e);return t?{owner:t[1],name:t[2]}:void 0};async function Ac(e,t,n,r){if(n.kind===`oauth`)return N(e.config,n.token);let i=await e.store.get(`installation`,n.id);if(!i||i.deletedAt)return;let a=await e.store.get(`app`,i.app),o=e.integrations[t];if(!a||!o)return;let s=r?r.toolScopes?.[t]?.repo:kc(i.settings?.configRepo);if(s)return o.auth.token(wc(e,i),N(e.config,a.credentials),Dc(s,r?r.tools[t]??[]:o.tools.presets.observe))}async function jc(e,t,n,r,i){let a={[n.integration]:r};return await Promise.all(Object.entries(t.connections??{}).map(async([t,r])=>{if(t!==n.integration)try{let n=await Ac(e,t,r,i);n&&(a[t]=n)}catch{}})),a}async function Mc(e,t){let n=t.event,r=e.integrations[n.integration];if(!r)throw Error(`Unknown integration "${n.integration}"`);let[i,a]=await Promise.all([e.store.get(`app`,n.appId),e.store.get(`installation`,`${n.appId}:${n.installationId}`)]);if(!i)throw Error(`Unknown app "${n.appId}"`);if(!a||a.deletedAt)throw Error(`Installation is gone`);let o=t.flow===`review`&&t.args?.post===!0,s=await Oc(e,r,a,n,N(e.config,i.credentials),Dc(t.toolScopes?.[n.integration]?.repo??n.repo,t.tools[n.integration]??(o?r.tools.presets.comment:[])),Ee(t.definition.integrations[n.integration],n.type)?.actAs),c=await jc(e,a,n,s,t),l=Object.fromEntries(Object.entries(c).filter(([e])=>e in t.tools));return l[n.integration]=s,l}async function Nc(e,t){let n=t.task,[r,i,a]=await Promise.all([n.event?Mc(e,t.task):{},e.local?{}:ac(e.store,e.config),Pc(e,n)]);if(n.runner!==`vercel-sandbox`)return{task:n,tokens:r,credential:a,config:i};let o=Object.fromEntries(Object.entries(a.env).map(([e,t])=>[e,e in Rn?`brokered`:t]));return{task:n,tokens:r,credential:{...a,env:o},config:i}}async function Pc(e,t){let n=t.credential?await e.store.get(`credential`,t.credential):(await Ta(e.store,t.usage?.engine??t.definition.engine,t.requester))?.value;if(n)return La(e.config,n);if(!t.runnerId&&!e.local)throw Error(`no-credential`);return{engine:t.usage?.engine??t.definition.engine??`claude`,env:{}}}var Fc=e({LOCAL_LOGINS:()=>nl,engineSignIn:()=>il,engineSignOut:()=>al,engineStatus:()=>sl,inspectLocalTask:()=>Hc,isLoginEngine:()=>rl,localLog:()=>Jc,localTask:()=>J,localTaskAction:()=>Y,localTasks:()=>Lc,localUsage:()=>Yc,machineSignedIn:()=>cl,pushLocalInbox:()=>qc,recoverLocalTasks:()=>Wc,runLocalTask:()=>Kc,startLocalTask:()=>zc,startQueuedLocalTask:()=>Vc,stopLocalTasks:()=>Gc,sweepLocalQueue:()=>Rc,syncLocalUsage:()=>Qc});const Ic=e=>!e.name?.startsWith(qe),K=e=>e?Date.parse(e):void 0;function q(e,n,r=!1){let i=K(n.createdAt)??0,a=t(T.join(b(e,n.id),`answers.json`)),o=n.status===`running`?h(b(e,n.id)).find(e=>!e.response):void 0,s=r&&!y.includes(n.status)?oe(e,n.id):null,c=r?le(e,n.id).filter(e=>!y.includes(n.status)||(K(e.at)??0)<(K(n.resumedAt)??i)).map(e=>{let t=e.error&&typeof e.error==`object`?e.error.message:void 0;return{prompt:e.prompt??n.prompt??``,result:{ok:e.status===0,output:e.finalMessage??t??``},...t?{error:t}:{},finishedAt:K(e.at)}}):[];r&&(y.includes(n.status)||!c.length||(c.at(-1)?.finishedAt??0)<(K(n.resumedAt)??i))&&c.push({prompt:n.currentPrompt??n.prompt??``,...s?{result:{ok:s.status===0,output:s.finalMessage??s.error?.message??``}}:{},...n.error?{error:n.error}:{},...y.includes(n.status)?{}:{finishedAt:K(n.completedAt)}});let l=n.flowRunId?Ve(n.flowRunId)?.name:void 0;return{task:{id:n.id,source:n.source??`cli`,agent:n.agentId??`coder`,flow:l??`default`,...n.name?{name:n.name}:l?{name:l===`review`?`Review`:l}:{},runner:`local`,...n.cwd?{cwd:n.cwd}:{},...n.permissions?{permissions:n.permissions}:{},...n.prompt?{prompt:n.currentPrompt??n.prompt}:{},definition:{integrations:{}},...n.engine?{usage:{engine:n.engine,...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{}}}:{},tools:{}},status:o?`waiting`:n.status,attempts:1,...o?{approval:o}:{},...a?{answer:a}:{},...s?{result:{ok:s.status===0,exitCode:null,output:s.finalMessage??s.error?.message??``},...s.tokens?{tokens:s.tokens}:{}}:{},...n.error?{error:n.error}:{},...n.fallbacks?.length?{fallbacks:n.fallbacks}:{},...n.archivedAt?{archivedAt:K(n.archivedAt)}:{},...n.autoArchived?{autoArchived:!0}:{},createdAt:i,startedAt:K(n.resumedAt)??i,...n.completedAt&&!y.includes(n.status)?{finishedAt:K(n.completedAt)}:{},updatedAt:K(n.updatedAt)??i,local:!0,...r?{turns:c}:{}}}function Lc(e,t){let n=Be(e);return(t?ve(e,{migrate:!1}):n).filter(Ic).map(n=>{let r=q(e,n);return t?{...r,archivedAt:r.archivedAt??r.updatedAt}:r})}async function Rc(e,t){let n=(e.now??Date.now)(),a=(await e.queue.list(e.organizationId,{archived:!1,statuses:[...se]})).filter(e=>r(e.finishedAt??e.updatedAt,n)&&i(t,e)).map(e=>e.task.id);a.length&&await e.queue.archiveStopped(e.organizationId,n,a)}async function zc(e,t,n){if(!e.local||t.repo||(t.flow??`default`)!=="default"||t.runner&&t.runner!==`local`)return;let r=mo(e,t)??e.local.cwd;await uo(e.store,r,e.integrations);let{version:i}=await R(e.store,t.agent??`coder`),o=await Yn(e,{requester:e.session?.user.id,runner:t.runner,agent:i?.definition.runner}).catch(e=>{throw new U(e.message)});if(!(o.runner!==`local`||o.runnerId)){if(yo(t),!n)return Bc(e,{id:a(),source:`dashboard`,agent:t.agent??`coder`,flow:`default`,runner:`local`,cwd:r,prompt:t.prompt,definition:{integrations:{}},tools:{}},{input:t,cwd:r});try{let e=t.agent&&t.agent!==`coder`?await Ge(r,t.agent,t.mcp?.join(`,`)):void 0,i=[],a=await ue({taskId:n,prompt:t.prompt??``,outputSchema:t.outputSchema,cwd:r,engine:t.engine??e?.engine,model:t.model??(t.engine?void 0:e?.model),effort:t.effort??(t.engine?void 0:e?.effort),permissions:t.permissions??e?.permissions,system:e?.system,mcp:e?e.mcp:t.mcp?.join(`,`),nativeMcp:e?.nativeMcp,...e?{agentId:t.agent}:{},source:`dashboard`,onFallback:e=>i.push(e)},{waitForStartup:!1});return q(r,i.length?v(r,a.taskId,{fallbacks:i}):a.task)}catch(e){throw e instanceof d?new U(e.message,409):e}}}async function Bc(e,t,n){let r=(e.now??Date.now)();await e.store.put(`snapshot`,`local-start:${t.id}`,n),await e.queue.enqueue(e.organizationId,t,r,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!0,!0);let i=await e.store.get(`task`,t.id);return i?.status===`queued`?i:J(n.cwd,t.id)??i}async function Vc(e,t){if(!e.local||t.task.runner!==`local`||t.task.runnerId||t.task.event?.repo)return!1;let n=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!n)return!1;try{let r=t.task.id,i=t.task.flow==="default"?f(n.cwd,t.task.id):void 0;if(i&&!n.resume)r=i.id;else if(n.resume){let e=f(n.cwd,t.task.id);if(!e)throw Error(`Local task is missing`);await Le(n.cwd,e,t.task.prompt??``,{outputSchema:t.task.context?.outputSchema,...n.overrides})}else n.input?await zc(e,{...n.input,prompt:t.task.prompt,outputSchema:t.task.context?.outputSchema??n.input.outputSchema},t.task.id):r=(await Kc(e,t.task,t.task.id,!0)).task.id;await e.store.put(`snapshot`,`local-start:${t.task.id}`,{...n,startedId:r});let a={attempts:t.attempts,tokenHash:t.tokenHash,generation:t.generation??0,statuses:[`running`,`waiting`]};if(!await e.queue.patchTask(e.organizationId,t.task.id,{handle:`cli:${r}`},(e.now??Date.now)(),a)){let e=f(n.cwd,r);return e&&await Re(n.cwd,e),!0}if(t.task.flow==="default"){let i={task:t.task,cwd:n.cwd,fence:a};await e.store.put(`snapshot`,`completion:${r}`,i),Uc(e,r,i);let o=bl(e,t.task.id);e.waitUntil&&e.waitUntil(o)}}catch(n){await e.queue.finish(e.organizationId,t.task.id,{status:`failed`,error:n instanceof Error?n.message:String(n)},(e.now??Date.now)(),{attempts:t.attempts,tokenHash:t.tokenHash})}return!0}async function Hc(e,t,n){if(t.status!==`running`&&t.status!==`waiting`)return!1;let r=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!r)return!1;let i={attempts:t.attempts,tokenHash:t.tokenHash,generation:t.generation??0,statuses:[`running`,`waiting`]};if(t.task.flow!=="default"){let r=Ve(t.task.id);if(r?.status===`running`&&(t.cancelRequestedAt!==void 0||t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs)){let n=e.store.localFlows?.get(t.task.id);n?(await n.stop(),await n.work.catch(()=>{})):r.pid!==process.pid&&await Ue(t.task.id),r=Ve(t.task.id)}return!r||r.status===`running`?!1:e.queue.finish(e.organizationId,t.task.id,{status:t.cancelRequestedAt===void 0?r.status===`completed`?`completed`:`failed`:`cancelled`,error:r.error},n,i)}let a=J(r.cwd,r.startedId??t.task.id);if(!a)return!1;if([`queued`,`running`,`waiting`].includes(a.status))if(t.cancelRequestedAt!==void 0||t.startedAt!==void 0&&n-t.startedAt>=e.config.taskTimeoutMs){let e=f(r.cwd,r.startedId??t.task.id);e&&await Re(r.cwd,e),a=J(r.cwd,t.task.id)}else return!1;let o=a.status;return o!==`completed`&&o!==`failed`&&o!==`cancelled`?!1:e.queue.finish(e.organizationId,t.task.id,{status:o,result:a.result,error:a.error},n,i)}function Uc(e,t,n){let r=e.store.completionWatches??=new Map;if(r.has(t))return;let i={stopped:!1,work:Promise.resolve()};r.set(t,i),i.work=(async()=>{let r=`completion:${t}:${n.fence?.generation??0}`,a=await e.store.get(`delivery`,r);if(a&&!a.owner)return;if(a?.pid)try{process.kill(a.pid,0);return}catch(e){if(e.code!==`ESRCH`)return}let s=kt(),c={owner:s,pid:process.pid,pending:!0,posted:a?.posted??!1};if(a?.owner){if(!await e.store.updateDelivery(r,a.owner,c))return}else if(!await e.store.create(`delivery`,r,c))return;try{for(let a=0;a<5;a++)try{let a=null;for(;;){if(i.stopped)return;if(n.fence){let t=await e.store.get(`task`,n.task.id);if(!t||(t.generation??0)!==n.fence.generation||t.attempts!==n.fence.attempts||t.tokenHash!==n.fence.tokenHash||t.status===`queued`)return}let r=f(n.cwd,t);if(!r)return;let s=o(n.cwd,r);if(!y.includes(s.status)){let e=T.join(b(n.cwd,t),`result.json`),r=Math.max(K(s.completedAt)??0,K(s.resumedAt)??K(s.createdAt)??0);if(O.existsSync(e)&&O.statSync(e).mtimeMs>=r&&(a=oe(n.cwd,t)),a)break;if(s.error||s.status===`cancelled`){a={status:1,threadId:s.threadId??null,error:{message:s.error??`Task cancelled`}};break}}await new Promise(e=>setTimeout(e,100))}let l=await e.store.get(`task`,n.task.id);if(n.fence&&l&&(l.generation??0)===n.fence.generation&&l.attempts===n.fence.attempts&&l.tokenHash===n.fence.tokenHash&&await Hc(e,l,(e.now??Date.now)())&&Io(e,!0),!await e.store.updateDelivery(r,s,c))return;if(!c.posted&&n.task.source===n.task.event?.integration){let t=await e.store.get(`app`,n.task.event.appId);if(!t)throw Error(`Local completion has no app`);let{eventReplies:i}=await Promise.resolve().then(()=>is),o=await i(e,t,n.task.event);if(!await e.store.updateDelivery(r,s,c)||(await o.post((a.finalMessage??a.error?.message??``).trim()),c={...c,posted:!0},!await e.store.updateDelivery(r,s,c)))return}let u=T.join(b(n.cwd,t),`agent-note`),d=O.existsSync(u)?O.readFileSync(u,`utf8`).trim():(n.task.context?.note??``).trim();if(!await e.store.updateDelivery(r,s,c))return;d!==(n.task.context?.note??``).trim()&&(d?await e.store.put(`note`,dn(n.task),d):await e.store.delete(`note`,dn(n.task))),await e.store.updateDelivery(r,s,{posted:c.posted,at:Date.now()})&&(await e.store.get(`snapshot`,`completion:${t}`))?.fence?.generation===n.fence?.generation&&await e.store.delete(`snapshot`,`completion:${t}`);return}catch(e){if(a===4)throw e;console.error(`coder server: local completion ${t} attempt ${a+1} failed, retrying`,e);let n=Date.now()+5e3*2**a;for(;!i.stopped&&Date.now()<n;)await new Promise(e=>setTimeout(e,Math.min(100,n-Date.now())))}}finally{await e.store.updateDelivery(r,s,{...c,pid:void 0})}})().catch(e=>{console.error(`coder server: local completion ${t} failed`,e)}).finally(()=>{r.delete(t)})}async function Wc(e){if(e.local)for(let{id:t,value:n}of await e.store.list(`snapshot`,{prefix:`completion:`}))f(n.cwd,t.slice(11))&&Uc(e,t.slice(11),n)}async function Gc(e){await Promise.all([...e.store.localFlows?.values()??[]].map(async e=>{await e.stop(),await e.work.catch(()=>{})}));let t=e.store.completionWatches;if(t){for(let e of t.values())e.stopped=!0;await Promise.all([...t.values()].map(e=>e.work))}}async function Kc(e,t,r,i=!1){if(t.event?.repo){let n=(e.now??Date.now)(),i=r??t.id;return await e.store.get(`task`,i)||await e.queue.enqueue(e.organizationId,{...t,id:i},n,void 0,e.config.maxQueued??1e3),await Fo(e,!1,!1,!0),await e.store.get(`task`,i)}if(!i){let n=mo(e,t)??e.local.cwd;return Bc(e,{...t,id:r??a(),cwd:n},{cwd:n})}let o=t.event?await Mc(e,t):{},s=t.event&&o[t.event.integration],c=mo(e,t)??e.local.cwd,l=await e.store.get(`task`,r??t.id),u={task:t,cwd:c,...l?{fence:{generation:l.generation??0,attempts:l.attempts,tokenHash:l.tokenHash,statuses:[`running`,`waiting`]}}:{}},d=t.flow!=="default"&&r?Ve(r):void 0;if(d){let i=n(c).find(e=>e.flowRunId===r),a=(e.now??Date.now)();return i?q(c,i):{task:t,status:d.status===`running`?`running`:d.status===`completed`?`completed`:`failed`,attempts:1,createdAt:a,updatedAt:a,local:!0}}if(t.flow==="default"){r??=a();let n=`completion:${r}`,i=await e.store.get(`snapshot`,n);if(i&&Q(i.task)!==Q(t))throw Error(`Local completion belongs to another session`);i||await e.store.create(`snapshot`,n,u);let o=T.join(b(c,r),`agent-note`);O.existsSync(o)||(O.mkdirSync(T.dirname(o),{recursive:!0}),O.writeFileSync(o,t.context?.note??``,{mode:384}))}let p=t.flow==="default"&&r?f(c,r):void 0;if(p)return p.status===`queued`&&!p.pid&&_(c,p.id),Uc(e,p.id,u),q(c,p);let m,h=new Promise(e=>m=e),g;g=Ke({cwd:c,agent:t.agent,flow:t.flow,task:t,taskId:r,toolEnvironment:{tokens:o},post:t.flow!=="default"&&t.source===t.event?.integration,...t.flow==="default"?{noteFile:T.join(b(c,r),`agent-note`)}:{},...s?{postToken:s}:{},source:t.source,onStart:n=>{(e.store.localFlows??=new Map).set(t.id,{stop:async()=>{n.requestStop(),await We(n.runId,n.runningIds())},work:g}),m(t.id)},onTask:n=>{t.flow==="default"&&Uc(e,n,u),m(n)}}).then(async n=>{t.flow!=="default"&&n.note!==void 0&&(n.note?await e.store.put(`note`,dn(t),n.note):await e.store.delete(`note`,dn(t)))}).finally(async()=>{if(e.store.localFlows?.delete(t.id),t.flow!=="default"){let n=await e.store.get(`task`,t.id);n&&n.attempts===u.fence?.attempts&&n.tokenHash===u.fence?.tokenHash&&(n.generation??0)===u.fence?.generation&&await Hc(e,n,(e.now??Date.now)()),Io(e,!0)}}),g.catch(()=>{});let v=await Promise.race([h,g.then(()=>void 0)]),ee=v?f(c,v):void 0,y=(e.now??Date.now)();return ee&&q(c,ee)||{task:t,status:t.flow!=="default"&&Ve(t.id)?.status===`running`?`running`:`completed`,attempts:1,createdAt:y,updatedAt:y,local:!0}}async function qc(e,t,n){let r=t.handle.slice(4),i=await e.store.get(`snapshot`,`local-start:${t.task.id}`);if(!i)throw Error(`Local task launch is missing`);let a={generation:t.generation??0,seq:-1,answers:[]};for(let o of n){let n=await e.store.get(`task`,t.task.id);if(!n||n.attempts!==t.attempts||n.tokenHash!==t.tokenHash||(n.generation??0)!==o.generation||![`running`,`waiting`].includes(n.status))break;let s=f(i.cwd,r);if(!s)throw Error(`Local task is missing`);let c=o.kind===`cancel`?await Re(i.cwd,s):await Xe(i.cwd,{...s,name:void 0},o);o.kind===`ask`&&a.answers.push({seq:o.seq,value:c}),a.seq=o.seq}return a}function Jc(e,t,n=-1,r){let i=``;try{i=O.readFileSync(T.join(b(e,t),`log.jsonl`),`utf8`)}catch{}let a=i.split(`
8
- `).flatMap((e,t)=>{if(!e||t<=n)return[];let r=pt(e);if(!r)return[{seq:t,at:0,level:`out`,line:e}];let i=r.kind===`error`?`err`:[`status`,`info`,`steer`].includes(r.kind??``)?`sys`:`out`;return[{seq:t,at:K(r.at)??0,level:i,line:r.message??``,entry:r}]});return r===void 0?a:a.slice(0,r)}function J(e,t,n=!0){let r=f(e,t);return r&&Ic(r)?q(e,o(e,r),n):void 0}async function Y(e,n,r,i,a){let c=f(n,r);if(!c||!Ic(c))return Response.json({error:`No task "${r}"`},{status:404});let l=o(n,c),d=y.includes(l.status),p=e.method===`POST`?await e.json().catch(()=>({})):{},m=(e,t=409)=>Response.json({error:e},{status:t});if(e.method===`DELETE`&&!i){if(d&&await Re(n,l),Ie(n,l),a){let e=a.store.completionWatches?.get(r);e&&(e.stopped=!0,await e.work),await a.store.delete(`task`,r),await a.store.delete(`snapshot`,`local-start:${r}`),await a.store.delete(`snapshot`,`completion:${r}`),Io(a,!0)}return Response.json({ok:!0})}if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(i===`cancel`)return d?(await Re(n,l),Response.json({ok:!0})):m(`No running or queued task "${r}"`,404);if(i===`archive`)return u(n,l),a&&await a.queue.patchTask(a.organizationId,r,{archivedAt:(a.now??Date.now)(),autoArchived:void 0},(a.now??Date.now)()),Response.json({ok:!0});if(i===`steer`){let e=String(p.text??``);if(!e.trim())return m(`text is required`,400);let t=d?void 0:p.outputSchema,i=Object.fromEntries([`model`,`effort`,`permissions`].flatMap(e=>typeof p[e]==`string`&&p[e]?[[e,p[e]]]:[]));if(t!==void 0&&(!t||typeof t!=`object`||Array.isArray(t)))return m(`outputSchema must be an object`,400);try{if(!d&&a){let o=a.store.completionWatches?.get(r);o&&await o.work;let s=(a.now??Date.now)(),c=await a.store.get(`task`,r);c&&[`running`,`waiting`].includes(c.status)&&(await Hc(a,c,s),c=await a.store.get(`task`,r));let u={prompt:e,context:{...c?.task.context,...t?{outputSchema:t}:{}}};if(await a.store.put(`snapshot`,`local-start:${r}`,{cwd:n,resume:!0,...Object.keys(i).length?{overrides:i}:{}}),c){if(!await a.queue.continueTask(a.organizationId,r,u,s,{attempts:c.attempts,generation:c.generation??0}))return m(`Task is already active`)}else await a.queue.enqueue(a.organizationId,{...q(n,l).task,...u},s,void 0,a.config.maxQueued??1e3);await Fo(a,!1,!0,!0);let d=await a.store.get(`task`,r);return Response.json(d?.status===`queued`?{...d,statusReason:`Waiting for a task slot`}:J(n,r))}let o=await Le(n,l,e,{...typeof t==`object`&&t?{outputSchema:t}:{},...i});return Response.json(d?o:J(n,r))}catch(e){return m(e.message)}}if(i===`ask`){let e=String(p.question??p.text??``);if(!e.trim())return m(`question is required`,400);let i=await ze(n,l,e),a=i.finalMessage??i.error?.message??``,o=T.join(b(n,r),`answers.json`);return s(o,[...t(o)??[],a]),Response.json({ok:!0,answer:a})}if(i===`approve`){let e=h(b(n,r)).filter(e=>!e.response),t=String(p.approvalId??p.id??e[0]?.id??``);return e.some(e=>e.id===t)?(ne(b(n,r),t,p.decision===`deny`||p.decision===`decline`?`decline`:`accept`),Response.json({ok:!0})):m(`Task "${r}" has no pending approval`)}return new Response(`Not found`,{status:404})}function Yc(e,t=new Set,r=!0){let i=Xc(t);return[...n(e),...r?ve(e,{migrate:!1}):[]].filter(Ic).flatMap(t=>{let n=le(e,t.id);return Zc(t,n,!n.length&&!y.includes(t.status)?oe(e,t.id):null,i)})}function Xc(e){let t=new Map;for(let n of e){let e=n.lastIndexOf(`:`),r=n.slice(4,e),i=t.get(r)??[];i.push(Number(n.slice(e+1))),t.set(r,i)}return t}function Zc(e,t,n,r){let i=t.length?t:n?[{...n,at:e.completedAt??e.updatedAt??e.createdAt}]:[],a=r.get(e.id)??[];r.set(e.id,a);let o=K(e.createdAt)??0;return i.flatMap(t=>{let n=K(t.at);if(n===void 0||!Number.isFinite(n))return[];let r=K(e.resumedAt),i=r!==void 0&&r>=o&&r<=n?r:o,s=a.some(e=>e===n||e>o&&e<=n);return o=n,s?[]:(a.push(n),[[`cli:${e.id}:${n}`,{taskId:e.id,agent:e.agentId??`coder`,target:e.source??`cli`,...e.engine?{engine:e.engine}:{},...t.model??e.model?{model:t.model??e.model}:{},credential:`local`,runnerElapsedMs:Math.max(0,n-i),...t.tokens?{tokens:t.tokens}:{},at:n}]])})}function Qc(e){let t=e.local;return t.usageSync??=tl(e).finally(()=>t.usageSync=void 0)}async function $c(e){try{return JSON.parse(await O.promises.readFile(e,`utf8`))}catch{return null}}async function el(e){return(await Promise.all([`job.json`,`results.jsonl`,`result.json`].map(async t=>{let n=await O.promises.stat(T.join(e,t)).catch(()=>void 0);return n?`${n.mtimeMs}:${n.ctimeMs}:${n.size}`:``}))).join(`|`)}async function tl(e){let t=e.local;await t.cacheMaintenance;let n=de(),r=await $c(n),i=await e.store.list(`usage`,{prefix:`cli:`}),a=new Set(i.map(e=>e.id)),o=0,s=async()=>{++o%4==0&&await new Promise(e=>setImmediate(e))};if(t.archiveScan===void 0)for(let[t,n]of Object.entries(r?.rows??{}))a.has(t)||(await e.store.put(`usage`,t,n),a.add(t)),await s();let c=Xc(a),l=(await O.promises.stat(p(t.cwd)).catch(()=>void 0))?.mtimeMs??0,u={},d=new Set,f=!1;for await(let{id:n,dir:i,archived:a}of fe(t.cwd)){if(await s(),d.has(n))continue;let t=a?await el(i):void 0;if(a&&r?.counted?.[n]===t){u[n]=t,d.add(n);continue}let o=await $c(T.join(i,`job.json`));if(o){if(o.agent&&(o.engine=o.agent),d.add(n),Ic(o)){let t=(await O.promises.readFile(T.join(i,`results.jsonl`),`utf8`).catch(()=>``)).split(/\r?\n/).flatMap(e=>{try{return e?[JSON.parse(e)]:[]}catch{return[]}}),n=!t.length&&!y.includes(o.status)?await $c(T.join(i,`result.json`)):null;for(let[r,i]of Zc(o,t,n,c))await e.store.put(`usage`,r,i),f=!0,await s()}a&&(u[n]=t)}}if(f||r?.archive!==l||JSON.stringify(r?.counted)!==JSON.stringify(u)){let t=await e.store.list(`usage`,{prefix:`cli:`});await O.promises.mkdir(T.dirname(n),{recursive:!0});let r=re(n);try{await O.promises.writeFile(r,`${JSON.stringify({archive:l,counted:u,rows:Object.fromEntries(t.map(e=>[e.id,e.value]))})}\n`),await O.promises.rename(r,n)}finally{await O.promises.rm(r,{force:!0})}}t.archiveScan=l}const nl=`A local server stores no credentials. Tasks use this machine's own claude and codex sign-in.`,X={claude:{file:`claude`,args:[`auth`,`status`,`--json`],command:`claude auth login`,login:[`auth`,`login`],logout:[`auth`,`logout`],ok:e=>JSON.parse(e).loggedIn===!0},codex:{file:`codex`,args:[`login`,`status`],command:`codex login`,login:[`login`],logout:[`logout`],ok:()=>!0}},rl=e=>e in X;function il(e){let t=X[e];wt(t.file,t.login,{detached:!0,stdio:`ignore`}).on(`error`,()=>{}).unref()}function al(e){let t=X[e];return new Promise(e=>Ct(t.file,t.logout,{timeout:15e3},()=>e()))}function ol(e){return new Promise(t=>Ct(e.file,e.args,{timeout:15e3},(n,r)=>{try{t(!n&&e.ok(r))}catch{t(!1)}}))}async function sl(){let[e,t]=await Promise.all([ol(X.claude),ol(X.codex)]);return{claude:{signedIn:e,command:X.claude.command},codex:{signedIn:t,command:X.codex.command}}}async function cl(e,t){return!!e.local&&(t===`custom`||(await sl())[t]?.signedIn===!0)}const Z=[`queued`,`running`,`waiting`];function ll(e,t){let n=t.status?[t.status]:t.statuses;if(n&&!n.includes(e.status)||t.agent&&e.task.agent!==t.agent||t.source&&e.task.source!==t.source||t.archived!==void 0&&t.archived!==(e.archivedAt!==void 0))return!1;let r=t.q?.trim().toLowerCase();return!r||[e.task.prompt??e.task.event?.text,e.task.agent,e.task.id].some(e=>e?.toLowerCase().includes(r))}const ul=e=>({rank:ge(e.status),createdAt:e.createdAt,id:e.task.id}),dl=(e,t)=>g(ul(e),ul(t)),fl=(e,t)=>!t||g(ul(e),t)>0;function Q(e){let t=e.event;return JSON.stringify([t?.appId,t?.installationId,t?.chat?.thread.id,e.agent,e.requester,t?.actor.id])}function pl(e,t){return e.flow==="default"&&!!e.event?.actor.id&&Q(e)===Q(t)}const ml=6e5;async function hl(e,t){let n=t.task.id,r=t.generation??0,i={generation:r,attempts:t.attempts,tokenHash:t.tokenHash??null,handle:t.handle??null};if(e.queue instanceof vl)return e.queue.deleteTask(e.organizationId,n,i);let[{DrizzleStore:a},{task:o,taskTombstone:s},{and:c,eq:l,isNull:u,sql:d},{rows:f}]=await Promise.all([import(`./store-BCBTo0rl.js`),import(`./schema-DoNO0dPh.js`).then(e=>e.u),import(`drizzle-orm`),import(`./shared-TznJgMFW.js`).then(e=>e.g)]);if(!(e.store instanceof a))throw Error(`Task store does not support fenced deletion`);let p=(e.now??Date.now)(),[m]=await f(e.store.db,d`with gone as (
8
+ `).flatMap((e,t)=>{if(!e||t<=n)return[];let r=pt(e);if(!r)return[{seq:t,at:0,level:`out`,line:e}];let i=r.kind===`error`?`err`:[`status`,`info`,`steer`].includes(r.kind??``)?`sys`:`out`;return[{seq:t,at:K(r.at)??0,level:i,line:r.message??``,entry:r}]});return r===void 0?a:a.slice(0,r)}function J(e,t,n=!0){let r=f(e,t);return r&&Ic(r)?q(e,o(e,r),n):void 0}async function Y(e,n,r,i,a){let c=f(n,r);if(!c||!Ic(c))return Response.json({error:`No task "${r}"`},{status:404});let l=o(n,c),d=y.includes(l.status),p=e.method===`POST`?await e.json().catch(()=>({})):{},m=(e,t=409)=>Response.json({error:e},{status:t});if(e.method===`DELETE`&&!i){if(d&&await Re(n,l),Ie(n,l),a){let e=a.store.completionWatches?.get(r);e&&(e.stopped=!0,await e.work),await a.store.delete(`task`,r),await a.store.delete(`snapshot`,`local-start:${r}`),await a.store.delete(`snapshot`,`completion:${r}`),Io(a,!0)}return Response.json({ok:!0})}if(e.method!==`POST`)return new Response(`Method not allowed`,{status:405});if(i===`cancel`)return d?(await Re(n,l),Response.json({ok:!0})):m(`No running or queued task "${r}"`,404);if(i===`archive`)return u(n,l),a&&await a.queue.patchTask(a.organizationId,r,{archivedAt:(a.now??Date.now)(),autoArchived:void 0},(a.now??Date.now)()),Response.json({ok:!0});if(i===`steer`){let e=String(p.text??``);if(!e.trim())return m(`text is required`,400);let t=d?void 0:p.outputSchema,i=Object.fromEntries([`model`,`effort`,`permissions`].flatMap(e=>typeof p[e]==`string`&&p[e]?[[e,p[e]]]:[]));if(t!==void 0&&(!t||typeof t!=`object`||Array.isArray(t)))return m(`outputSchema must be an object`,400);try{if(!d&&a){let o=a.store.completionWatches?.get(r);o&&await o.work;let s=(a.now??Date.now)(),c=await a.store.get(`task`,r);c&&[`running`,`waiting`].includes(c.status)&&(await Hc(a,c,s),c=await a.store.get(`task`,r));let u={prompt:e,context:{...c?.task.context,...t?{outputSchema:t}:{}}};if(await a.store.put(`snapshot`,`local-start:${r}`,{cwd:n,resume:!0,...Object.keys(i).length?{overrides:i}:{}}),c){if(!await a.queue.continueTask(a.organizationId,r,u,s,{attempts:c.attempts,generation:c.generation??0}))return m(`Task is already active`)}else await a.queue.enqueue(a.organizationId,{...q(n,l).task,...u},s,void 0,a.config.maxQueued??1e3);await Fo(a,!1,!0,!0);let d=await a.store.get(`task`,r);return Response.json(d?.status===`queued`?{...d,statusReason:`Waiting for a task slot`}:J(n,r))}let o=await Le(n,l,e,{...typeof t==`object`&&t?{outputSchema:t}:{},...i});return Response.json(d?o:J(n,r))}catch(e){return m(e.message)}}if(i===`ask`){let e=String(p.question??p.text??``);if(!e.trim())return m(`question is required`,400);let i=await ze(n,l,e),a=i.finalMessage??i.error?.message??``,o=T.join(b(n,r),`answers.json`);return s(o,[...t(o)??[],a]),Response.json({ok:!0,answer:a})}if(i===`approve`){let e=h(b(n,r)).filter(e=>!e.response),t=String(p.approvalId??p.id??e[0]?.id??``);return e.some(e=>e.id===t)?(ne(b(n,r),t,p.decision===`deny`||p.decision===`decline`?`decline`:`accept`),Response.json({ok:!0})):m(`Task "${r}" has no pending approval`)}return new Response(`Not found`,{status:404})}function Yc(e,t=new Set,r=!0){let i=Xc(t);return[...n(e),...r?ve(e,{migrate:!1}):[]].filter(Ic).flatMap(t=>{let n=le(e,t.id);return Zc(t,n,!n.length&&!y.includes(t.status)?oe(e,t.id):null,i)})}function Xc(e){let t=new Map;for(let n of e){let e=n.lastIndexOf(`:`),r=n.slice(4,e),i=t.get(r)??[];i.push(Number(n.slice(e+1))),t.set(r,i)}return t}function Zc(e,t,n,r){let i=t.length?t:n?[{...n,at:e.completedAt??e.updatedAt??e.createdAt}]:[],a=r.get(e.id)??[];r.set(e.id,a);let o=K(e.createdAt)??0;return i.flatMap(t=>{let n=K(t.at);if(n===void 0||!Number.isFinite(n))return[];let r=K(e.resumedAt),i=r!==void 0&&r>=o&&r<=n?r:o,s=a.some(e=>e===n||e>o&&e<=n);return o=n,s?[]:(a.push(n),[[`cli:${e.id}:${n}`,{taskId:e.id,agent:e.agentId??`coder`,target:e.source??`cli`,...e.engine?{engine:e.engine}:{},...t.model??e.model?{model:t.model??e.model}:{},credential:`local`,runnerElapsedMs:Math.max(0,n-i),...t.tokens?{tokens:t.tokens}:{},at:n}]])})}function Qc(e){let t=e.local;return t.usageSync??=tl(e).finally(()=>t.usageSync=void 0)}async function $c(e){try{return JSON.parse(await O.promises.readFile(e,`utf8`))}catch{return null}}async function el(e){return(await Promise.all([`job.json`,`results.jsonl`,`result.json`].map(async t=>{let n=await O.promises.stat(T.join(e,t)).catch(()=>void 0);return n?`${n.mtimeMs}:${n.ctimeMs}:${n.size}`:``}))).join(`|`)}async function tl(e){let t=e.local;await t.cacheMaintenance;let n=de(),r=await $c(n),i=await e.store.list(`usage`,{prefix:`cli:`}),a=new Set(i.map(e=>e.id)),o=0,s=async()=>{++o%4==0&&await new Promise(e=>setImmediate(e))};if(t.archiveScan===void 0)for(let[t,n]of Object.entries(r?.rows??{}))a.has(t)||(await e.store.put(`usage`,t,n),a.add(t)),await s();let c=Xc(a),l=(await O.promises.stat(p(t.cwd)).catch(()=>void 0))?.mtimeMs??0,u={},d=new Set,f=!1;for await(let{id:n,dir:i,archived:a}of fe(t.cwd)){if(await s(),d.has(n))continue;let t=a?await el(i):void 0;if(a&&r?.counted?.[n]===t){u[n]=t,d.add(n);continue}let o=await $c(T.join(i,`job.json`));if(o){if(o.agent&&(o.engine=o.agent),d.add(n),Ic(o)){let t=(await O.promises.readFile(T.join(i,`results.jsonl`),`utf8`).catch(()=>``)).split(/\r?\n/).flatMap(e=>{try{return e?[JSON.parse(e)]:[]}catch{return[]}}),n=!t.length&&!y.includes(o.status)?await $c(T.join(i,`result.json`)):null;for(let[r,i]of Zc(o,t,n,c))await e.store.put(`usage`,r,i),f=!0,await s()}a&&(u[n]=t)}}if(f||r?.archive!==l||JSON.stringify(r?.counted)!==JSON.stringify(u)){let t=await e.store.list(`usage`,{prefix:`cli:`});await O.promises.mkdir(T.dirname(n),{recursive:!0});let r=re(n);try{await O.promises.writeFile(r,`${JSON.stringify({archive:l,counted:u,rows:Object.fromEntries(t.map(e=>[e.id,e.value]))})}\n`),await O.promises.rename(r,n)}finally{await O.promises.rm(r,{force:!0})}}t.archiveScan=l}const nl=`A local server stores no credentials. Tasks use this machine's own claude and codex sign-in.`,X={claude:{file:`claude`,args:[`auth`,`status`,`--json`],command:`claude auth login`,login:[`auth`,`login`],logout:[`auth`,`logout`],ok:e=>JSON.parse(e).loggedIn===!0},codex:{file:`codex`,args:[`login`,`status`],command:`codex login`,login:[`login`],logout:[`logout`],ok:()=>!0}},rl=e=>e in X;function il(e){let t=X[e];wt(t.file,t.login,{detached:!0,stdio:`ignore`}).on(`error`,()=>{}).unref()}function al(e){let t=X[e];return new Promise(e=>Ct(t.file,t.logout,{timeout:15e3},()=>e()))}function ol(e){return new Promise(t=>Ct(e.file,e.args,{timeout:15e3},(n,r)=>{try{t(!n&&e.ok(r))}catch{t(!1)}}))}async function sl(){let[e,t]=await Promise.all([ol(X.claude),ol(X.codex)]);return{claude:{signedIn:e,command:X.claude.command},codex:{signedIn:t,command:X.codex.command}}}async function cl(e,t){return!!e.local&&(t===`custom`||(await sl())[t]?.signedIn===!0)}const Z=[`queued`,`running`,`waiting`];function ll(e,t){let n=t.status?[t.status]:t.statuses;if(n&&!n.includes(e.status)||t.agent&&e.task.agent!==t.agent||t.source&&e.task.source!==t.source||t.archived!==void 0&&t.archived!==(e.archivedAt!==void 0))return!1;let r=t.q?.trim().toLowerCase();return!r||[e.task.prompt??e.task.event?.text,e.task.agent,e.task.id].some(e=>e?.toLowerCase().includes(r))}const ul=e=>({rank:ge(e.status),createdAt:e.createdAt,id:e.task.id}),dl=(e,t)=>g(ul(e),ul(t)),fl=(e,t)=>!t||g(ul(e),t)>0;function Q(e){let t=e.event;return JSON.stringify([t?.appId,t?.installationId,t?.chat?.thread.id,e.agent,e.requester,t?.actor.id])}function pl(e,t){return e.flow==="default"&&!!e.event?.actor.id&&Q(e)===Q(t)}const ml=6e5;async function hl(e,t){let n=t.task.id,r=t.generation??0,i={generation:r,attempts:t.attempts,tokenHash:t.tokenHash??null,handle:t.handle??null};if(e.queue instanceof vl)return e.queue.deleteTask(e.organizationId,n,i);let[{DrizzleStore:a},{task:o,taskTombstone:s},{and:c,eq:l,isNull:u,sql:d},{rows:f}]=await Promise.all([import(`./store-B0RLMUR9.js`),import(`./schema-DoNO0dPh.js`).then(e=>e.u),import(`drizzle-orm`),import(`./shared-D64pQ0XU.js`).then(e=>e.g)]);if(!(e.store instanceof a))throw Error(`Task store does not support fenced deletion`);let p=(e.now??Date.now)(),[m]=await f(e.store.db,d`with gone as (
9
9
  delete from ${o}
10
10
  where ${c(l(o.organizationId,e.organizationId),l(o.publicId,n),l(o.generation,r),l(o.attempts,i.attempts),i.tokenHash===null?u(o.tokenHash):l(o.tokenHash,i.tokenHash),i.handle===null?u(o.handle):l(o.handle,i.handle))}
11
11
  returning organization_id, public_id
@@ -16,4 +16,4 @@ import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{An as t,Bt as n,Dt as
16
16
  delete from ${s}
17
17
  where deleted_at < ${new Date(p-ml).toISOString()}::timestamptz
18
18
  )
19
- select count(*)::int as deleted from gone`);return!!m?.deleted}async function gl(e,t,n,r,i){let a=await e.queue.appendInbox(e.organizationId,t,n,r,(e.now??Date.now)(),i);return a&&await bl(e,t),a}const _l=new Set([`completed`,`failed`,`cancelled`]);var vl=class{store;lock=Promise.resolve();tombstones=new Map;constructor(e){this.store=e}serial(e){let t=this.lock.then(e,e);return this.lock=t.catch(()=>{}),t}async read(e){return this.store.get(`task`,e)}async enqueue(e,t,n,r,i){return this.serial(()=>this.insert(t,n,r,i))}async insert(e,t,n,r){let i=n&&await this.store.get(`delivery`,n.key);if(i&&!i.pending)return!1;e=i?.pending?.task??e;let a=await this.read(e.id);if(!a&&r!==void 0&&(await this.store.list(`task`)).filter(e=>e.value.status===`queued`).length>=r)throw Error(`Organization task queue is full`);return n&&!i&&await this.store.put(`delivery`,n.key,{at:t,pending:{task:e}}),a||await this.store.put(`task`,e.id,{task:e,status:`queued`,attempts:0,createdAt:t,updatedAt:t}),n&&await this.store.put(`delivery`,n.key,{at:t},{ttlMs:n.ttlMs}),!0}async nextSeq(e){let t=await this.store.list(`inbox`,{prefix:`${e}:`}),n=(await this.store.list(`delivery`)).flatMap(t=>t.value.pending?.inbox?.id.startsWith(`${e}:`)?[t.value.pending.inbox.entry.seq]:[]);return Math.max((await this.read(e))?.inboxSeq??-1,...t.map(e=>e.value.seq),...n)+1}deliver(e,t,n,r,i,a,o=!0){return this.serial(async()=>{let s=await this.store.get(`delivery`,r.key);if(s&&!s.pending)return{};if(s?.pending?.inbox){let{taskId:e,id:i,entry:a}=s.pending.inbox,o=await this.read(e);if(o&&Z.includes(o.status)&&(o.generation??0)===a.generation&&pl(o.task,t))return await this.store.put(`task`,e,{...o,inboxSeq:Math.max(o.inboxSeq??-1,a.seq),updatedAt:n}),await this.store.put(`inbox`,i,a),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0};await this.store.delete(`delivery`,r.key),s=void 0}let c=i&&!s?.pending?.task?(await this.list(e,{statuses:Z,agent:t.agent,source:t.source})).find(e=>pl(e.task,t)):void 0;if(!c)return o&&await this.insert(t,n,r,a)?{taskId:t.id}:{};let l=await this.nextSeq(c.task.id),u={seq:l,generation:c.generation??0,at:n,kind:`steer`,value:{text:t.event.text}},d=`${c.task.id}:${String(l).padStart(8,`0`)}`;return await this.store.put(`delivery`,r.key,{at:n,pending:{inbox:{taskId:c.task.id,id:d,entry:u}}}),await this.store.put(`task`,c.task.id,{...c,inboxSeq:l,updatedAt:n}),await this.store.put(`inbox`,d,u),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0}})}claim(e,t){return this.serial(async()=>{let n=(await this.store.list(`task`)).map(e=>e.value);if(t!==void 0&&n.filter(e=>[`running`,`waiting`].includes(e.status)).length>=t)return;let r=n.filter(e=>e.status===`queued`).sort((e,t)=>e.createdAt-t.createdAt),i=r[0];if(!i)return;let a=pn(i.task.id,`default`,i.attempts+1),o={...i,tokenHash:a.hash,lastSeenAt:e,status:`running`,attempts:i.attempts+1,startedAt:e,updatedAt:e};return await this.store.put(`task`,o.task.id,o),{organizationId:`default`,status:o,token:a.token,more:r.length>1&&(t===void 0||n.filter(e=>[`running`,`waiting`].includes(e.status)).length+1<t)}})}allowed(e,t){return(t.generation===void 0||(e.generation??0)===t.generation)&&(t.attempts===void 0||e.attempts===t.attempts)&&(t.tokenHash===void 0||(e.tokenHash??null)===t.tokenHash)&&(t.handle===void 0||(e.handle??null)===t.handle)&&(t.lastSeenAt===void 0||(e.lastSeenAt??null)===t.lastSeenAt)&&(t.updatedAt===void 0||e.updatedAt===t.updatedAt)&&(!t.statuses||t.statuses.includes(e.status))}touch(e,t,n,r,i,a=!1){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{tokenHash:n,attempts:r})||!a&&_l.has(e.status)||e.status===`queued`)return;if(_l.has(e.status))return e;let o={...e,lastSeenAt:i,updatedAt:i};return await this.store.put(`task`,t,o),o})}async archiveStopped(e,t,n){let i=e=>e!==void 0&&_l.has(e.status)&&e.archivedAt===void 0&&(!n||n.includes(e.task.id))&&r(e.finishedAt??e.updatedAt,t);for(let{value:e}of await this.store.list(`task`))i(e)&&await this.serial(async()=>{let n=await this.read(e.task.id);i(n)&&await this.store.put(`task`,n.task.id,{...n,archivedAt:t,autoArchived:!0})})}patchTask(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,i))return!1;let{answer:a,...o}=n;return await this.store.put(`task`,t,{...e,...o,...a===void 0?{}:{answer:[...e.answer??[],a]},updatedAt:r}),!0})}deleteTask(e,t,n){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,n)?!1:(await this.store.delete(`task`,t),this.tombstone(t),!0)})}continueTask(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!e||!_l.has(e.status)||!this.allowed(e,i))return!1;let{note:a,...o}=n.context??{},s=await this.store.get(`note`,dn(e.task));return n.context={...o,...s?{note:s}:{}},await this.store.put(`task`,t,{task:{...e.task,...n},status:`queued`,attempts:0,logSeq:e.logSeq,logBytes:e.logBytes,generation:(e.generation??0)+1,inboxSeq:e.inboxSeq,createdAt:e.createdAt,updatedAt:r},{unarchive:!0}),!0})}completeTask(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]}))return!1;if(await this.store.put(`usage`,`${t}:${e.generation??0}`,n.usage),n.note){let{key:e,value:t,ttlMs:r}=n.note;t?await this.store.put(`note`,e,t,{ttlMs:r}):await this.store.delete(`note`,e)}for(let n of await this.store.list(`inbox`,{prefix:`${t}:`}))n.value.generation===(e.generation??0)&&await this.store.delete(`inbox`,n.id);return await this.store.put(`task`,t,{...e,...n.outcome,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0})}requeue(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...r,statuses:[`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,status:`queued`,handle:void 0,tokenHash:void 0,lastSeenAt:void 0,updatedAt:n}),!0)})}finish(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...i,statuses:[`queued`,`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,...n,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0)})}cancel(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);if(!e||_l.has(e.status)||!this.allowed(e,r))return!1;let i=e.status===`queued`?void 0:{seq:await this.nextSeq(t),generation:e.generation??0,kind:`cancel`,value:null,at:n};return i&&await this.store.put(`inbox`,`${t}:${String(i.seq).padStart(8,`0`)}`,i),await this.store.put(`task`,t,{...e,...e.status===`queued`?{status:`cancelled`,finishedAt:n}:{},cancelRequestedAt:n,...i?{inboxSeq:i.seq}:{},updatedAt:n}),!0})}async cancelRequested(e,t){return(await this.read(t))?.cancelRequestedAt!==void 0}async list(e,t={}){let{before:n}=t;return(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(e,t)).filter(e=>fl(e,n)).sort(dl).slice(0,t.limit)}tombstone(e){this.tombstones.set(e,Date.now())}async changes(e,t){let n=e[0]?.organizationId;if(!n)return{rows:[],deleted:[]};for(let[e,t]of this.tombstones)t<Date.now()-6e5&&this.tombstones.delete(e);return{rows:(await this.store.list(`task`)).map(e=>({organizationId:n,status:e.value})),deleted:[...this.tombstones].filter(([,e])=>e>t).map(([e,t])=>({organizationId:n,id:e,at:t}))}}async counts(e,t={}){let n=(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(e,t));return{all:n.length,active:n.filter(e=>Z.includes(e.status)).length,waiting:n.filter(e=>e.status===`waiting`).length}}async runningCount(){return(await this.store.list(`task`)).filter(e=>[`running`,`waiting`].includes(e.value.status)).length}async running(){return(await this.store.list(`task`)).map(e=>e.value).filter(e=>[`running`,`waiting`].includes(e.status)).map(e=>({organizationId:`default`,status:e}))}appendLogs(e,t,n,r,i,a,o){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,o)||(e.logSeq??0)!==r.seq||(e.logCursor??-1)!==r.cursor?!1:(await this.store.putMany(`tasklog`,n.map(({seq:e,...n})=>({id:`${t}:${String(e).padStart(6,`0`)}`,value:n}))),await this.store.put(`task`,t,{...e,logCursor:i.cursor,logSeq:i.seq,logBytes:i.bytes,updatedAt:a}),!0)})}readInbox(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);return!e||!Z.includes(e.status)||(e.generation??0)!==n?[]:(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(e=>e.generation===n&&e.seq>r).slice(0,100)})}fetchInbox(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!(!e||!this.allowed(e,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})))return(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(t=>t.generation===(e.generation??0)&&t.seq>i).sort((e,t)=>e.seq-t.seq)})}ackInbox(e,t,n,r){return this.serial(async()=>{if(r.generation!==void 0&&r.generation!==n.generation)return!1;let e=await this.read(t);if(!e||!this.allowed(e,{...r,generation:n.generation,statuses:void 0})||n.seq>(e.inboxSeq??-1))return!1;let i=e.inboxAck?.generation===n.generation?e.inboxAck.seq:-1;if(_l.has(e.status))return n.seq<=i;if(![`running`,`waiting`].includes(e.status))return!1;let a=(await this.store.list(`inbox`,{prefix:`${t}:`})).filter(e=>e.value.generation===n.generation&&e.value.seq<=n.seq),o=(n.answers??[]).filter(e=>e.seq>i&&a.some(t=>t.value.kind===`ask`&&t.value.seq===e.seq)).map(e=>e.value),s=a.some(e=>e.value.kind===`cancel`),c=e.approval?.id,l=c&&a.some(e=>e.value.kind===`approve`&&e.value.value?.approvalId===c);await this.store.put(`task`,t,{...e,inboxAck:{generation:n.generation,seq:Math.max(i,n.seq)},...o.length?{answer:[...e.answer??[],...o]}:{},...l?{status:`running`,approval:void 0}:{},...s?{status:`cancelled`,finishedAt:Date.now()}:{},updatedAt:Date.now()});for(let e of a)await this.store.delete(`inbox`,e.id);return!0})}async pendingInbox(){let e=await this.store.list(`inbox`);return(await this.running()).filter(({status:t})=>e.some(e=>e.id.startsWith(`${t.task.id}:`)&&e.value.generation===(t.generation??0)))}appendInbox(e,t,n,r,i,a){return this.serial(async()=>{let e=await this.read(t);if(!e||!Z.includes(e.status)||(e.generation??0)!==a)return;let o=await this.nextSeq(t),s={seq:o,generation:a,at:i,kind:n,value:r};return await this.store.put(`inbox`,`${t}:${String(o).padStart(8,`0`)}`,s),await this.store.put(`task`,t,{...e,inboxSeq:o,updatedAt:i}),s})}};const yl=3e4;function bl(e,t){let n=e.queue.inboxDelivery??=new Map,r=JSON.stringify([e.organizationId,t]),i=n.get(r);if(i||n.set(r,i={}),i.work)return i.again=!0,i.work;let a=i,o=async()=>{let n,r=kt(),i=0,o=0,s,c=async()=>{for(;;){a.again=!1;let s=await e.store.get(`task`,t);if(!s?.handle||![`running`,`waiting`].includes(s.status))return;let c=await F(e,s.task),l=!!(e.local&&s.handle.startsWith(`cli:`));if(!l&&!c?.push)return;o=s.generation??0;let u={generation:o,attempts:s.attempts,tokenHash:s.tokenHash??null,handle:s.handle},d=`inbox:${JSON.stringify([t,u])}`;if(n!==d){n&&await e.store.updateDeliveryLease(n,r),n=void 0;let t=await e.store.claimDeliveryLease(d,r,yl);if(t===void 0)return;n=d,i=t}else if(!await e.store.updateDeliveryLease(n,r,{owner:r,failures:i},{ttlMs:yl}))return;let f=(await e.queue.readInbox(e.organizationId,t,s.generation??0,-1)).slice(0,100);if(!f.length){if(a.again)continue;return}let p=l?await qc(e,s,f):await c.push(s.handle,f);if(p.generation!==(s.generation??0)||!f.some(e=>e.seq===p.seq))throw Error(`Invalid inbox acknowledgement`);if(!await e.queue.ackInbox(e.organizationId,t,p,u)||(i=0,f.length<100&&!a.again))return}};try{await c()}catch{if(n){let t=Math.min(3e4,1e3*2**Math.min(i,5)),a={owner:r,failures:i+1,next:(e.now??Date.now)()+t};await e.store.updateDeliveryLease(n,r,a,{ttlMs:t}),n=void 0}}finally{n&&(await e.store.updateDeliveryLease(n,r),s=o)}return s};return a.work=(async()=>{for(;;){let n=await o();if(n===void 0||!(await e.queue.readInbox(e.organizationId,t,n,-1)).length&&!a.again)break}n.delete(r)})().finally(()=>{n.get(r)===a&&n.delete(r)}),a.work}async function xl(e){let t=await e.queue.pendingInbox();await Promise.allSettled(t.map(({organizationId:t,status:n})=>bl(j(e,t),n.task.id)))}function Sl(e){let t=xl(e).catch(()=>{});e.waitUntil&&e.waitUntil(t)}const $=`default`;async function Cl(e){if(!e.databaseUrl)throw Error(`DATABASE_URL is required for the Postgres store`);let{connect:t}=await import(`./client-31YzOj-i.js`).then(e=>e.n);return t(e.databaseUrl,e.databasePool)}async function wl(e,t={}){if(e.store!==`postgres`){let e=t.local?new co:new no;return{store:()=>e,queue:new vl(e),chatState:new ht(t.local?T.join(pe(``),`chat.json`):void 0),defaultOrganizationId:$,webhookTarget:async(t,n)=>{let r=await e.get(`app`,t),i=n?await e.get(`installation`,n):void 0;return r&&{organizationId:$,app:r,...i&&i.app===t&&!i.deletedAt?{bound:{organizationId:$,installation:i}}:{}}},appRecord:async t=>{let n=await e.get(`app`,t);return n&&{organizationId:$,app:n}},installationOrganization:async t=>await e.get(`installation`,t)?$:void 0,installations:async t=>(await e.list(`installation`,{prefix:`${t}:`})).filter(e=>!e.value.deletedAt).map(e=>({key:e.id,organizationId:$})),taskOrganization:async(t,n)=>(await e.get(`task`,t))?.tokenHash===n?$:void 0,sweep:async()=>{},close:async()=>{}}}let n=await Cl(e),[{DrizzleStore:r},{DrizzleQueue:i},{UNSCOPED_ORGANIZATION:a},{PgChatState:o}]=await Promise.all([import(`./store-BCBTo0rl.js`),import(`./queue-yo-Z8TaE.js`),import(`./shared-TznJgMFW.js`).then(e=>e.g),import(`./chat-cknlIhVh.js`)]);return{store:t=>new r(n.db,t,Date.now,e),queue:new i(n.db),chatState:new o(n.db),defaultOrganizationId:a,webhookTarget:(e,t)=>r.webhookTarget(n.db,e,t),appRecord:e=>r.appRecord(n.db,e),installationOrganization:e=>r.installationOrganization(n.db,e),installations:e=>r.installations(n.db,e),taskOrganization:(e,t)=>r.taskOrganization(n.db,e,t),connection:n,sweep:e=>new r(n.db,a).sweep(e),close:()=>n.close()}}async function Tl(e,t,n,r){if(e.updateMetadata)return e.updateMetadata(t,n,r);let i=await e.get(t,n);return i?(await e.put(t,n,{...i,...r}),!0):!1}async function El(e,t){let n=[...new Set(t)];return e.getApps?e.getApps(n):(await Promise.all(n.map(async t=>({id:t,value:await e.get(`app`,t)})))).filter(e=>!!e.value)}export{Oo as $,qt as $n,vi as $t,Xs as A,er as An,ca as At,Vs as B,En as Bn,Wi as Bt,Sc as C,vr as Cn,_a as Ct,pc as D,or as Dn,ia as Dt,cc as E,gr as En,Zi as Et,nc as F,Ln as Fn,ha as Ft,xs as G,rn as Gn,Pi as Gt,Is as H,pn as Hn,ya as Ht,Gs as I,N as In,Li as It,Os as J,en as Jn,Mi as Jt,Ds as K,on as Kn,ki as Kt,Ks as L,wn as Ln,Ki as Lt,Ys as M,Wn as Mn,da as Mt,Zs as N,Gn as Nn,aa as Nt,Hs as O,$n as On,Gi as Ot,rc as P,F as Pn,pa as Pt,Eo as Q,$t as Qn,hi as Qt,Js as R,M as Rn,Vi as Rt,bc as S,ur as Sn,va as St,Cc as T,fr as Tn,ua as Tt,Rs as U,nn as Un,Ai as Ut,Fs as V,j as Vn,Qi as Vt,Ls as W,sn as Wn,ji as Wt,Fo as X,Qt as Xn,z as Xt,is as Y,tn as Yn,Ei as Yt,Io as Z,Zt as Zn,gi as Zt,Gc as _,xr as _n,la as _t,Z as a,ni as an,Ya as at,G as b,L as bn,$i as bt,xl as c,ti as cn,Za as ct,sl as d,ei as dn,H as dt,mi as en,Yt as er,po as et,Jc as f,Er as fn,Ua as ft,Wc as g,Cr as gn,fa as gt,Fc as h,Sr as hn,zi as ht,Tl as i,Fr as in,Ia as it,Qs as j,rr as jn,ta as jt,tc as k,ar as kn,sa as kt,Sl as l,ii as ln,Xa as lt,Lc as m,Tr as mn,$a as mt,Cl as n,Ci as nn,fo as nt,vl as o,Zr as on,Da as ot,J as p,Dr as pn,Qa as pt,Ts as q,cn as qn,Ni as qt,El as r,_i as rn,to as rt,ml as s,Qr as sn,xa as st,wl as t,xi as tn,uo as tt,Q as u,Jr as un,Ja as ut,Rc as v,R as vn,oa as vt,xc as w,yr as wn,ma as wt,yc as x,cr as xn,ra as xt,Qc as y,lr as yn,ba as yt,qs as z,xn as zn,ga as zt};
19
+ select count(*)::int as deleted from gone`);return!!m?.deleted}async function gl(e,t,n,r,i){let a=await e.queue.appendInbox(e.organizationId,t,n,r,(e.now??Date.now)(),i);return a&&await bl(e,t),a}const _l=new Set([`completed`,`failed`,`cancelled`]);var vl=class{store;lock=Promise.resolve();tombstones=new Map;constructor(e){this.store=e}serial(e){let t=this.lock.then(e,e);return this.lock=t.catch(()=>{}),t}async read(e){return this.store.get(`task`,e)}async enqueue(e,t,n,r,i){return this.serial(()=>this.insert(t,n,r,i))}async insert(e,t,n,r){let i=n&&await this.store.get(`delivery`,n.key);if(i&&!i.pending)return!1;e=i?.pending?.task??e;let a=await this.read(e.id);if(!a&&r!==void 0&&(await this.store.list(`task`)).filter(e=>e.value.status===`queued`).length>=r)throw Error(`Organization task queue is full`);return n&&!i&&await this.store.put(`delivery`,n.key,{at:t,pending:{task:e}}),a||await this.store.put(`task`,e.id,{task:e,status:`queued`,attempts:0,createdAt:t,updatedAt:t}),n&&await this.store.put(`delivery`,n.key,{at:t},{ttlMs:n.ttlMs}),!0}async nextSeq(e){let t=await this.store.list(`inbox`,{prefix:`${e}:`}),n=(await this.store.list(`delivery`)).flatMap(t=>t.value.pending?.inbox?.id.startsWith(`${e}:`)?[t.value.pending.inbox.entry.seq]:[]);return Math.max((await this.read(e))?.inboxSeq??-1,...t.map(e=>e.value.seq),...n)+1}deliver(e,t,n,r,i,a,o=!0){return this.serial(async()=>{let s=await this.store.get(`delivery`,r.key);if(s&&!s.pending)return{};if(s?.pending?.inbox){let{taskId:e,id:i,entry:a}=s.pending.inbox,o=await this.read(e);if(o&&Z.includes(o.status)&&(o.generation??0)===a.generation&&pl(o.task,t))return await this.store.put(`task`,e,{...o,inboxSeq:Math.max(o.inboxSeq??-1,a.seq),updatedAt:n}),await this.store.put(`inbox`,i,a),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0};await this.store.delete(`delivery`,r.key),s=void 0}let c=i&&!s?.pending?.task?(await this.list(e,{statuses:Z,agent:t.agent,source:t.source})).find(e=>pl(e.task,t)):void 0;if(!c)return o&&await this.insert(t,n,r,a)?{taskId:t.id}:{};let l=await this.nextSeq(c.task.id),u={seq:l,generation:c.generation??0,at:n,kind:`steer`,value:{text:t.event.text}},d=`${c.task.id}:${String(l).padStart(8,`0`)}`;return await this.store.put(`delivery`,r.key,{at:n,pending:{inbox:{taskId:c.task.id,id:d,entry:u}}}),await this.store.put(`task`,c.task.id,{...c,inboxSeq:l,updatedAt:n}),await this.store.put(`inbox`,d,u),await this.store.put(`delivery`,r.key,{at:n},{ttlMs:r.ttlMs}),{steered:!0}})}claim(e,t){return this.serial(async()=>{let n=(await this.store.list(`task`)).map(e=>e.value);if(t!==void 0&&n.filter(e=>[`running`,`waiting`].includes(e.status)).length>=t)return;let r=n.filter(e=>e.status===`queued`).sort((e,t)=>e.createdAt-t.createdAt),i=r[0];if(!i)return;let a=pn(i.task.id,`default`,i.attempts+1),o={...i,tokenHash:a.hash,lastSeenAt:e,status:`running`,attempts:i.attempts+1,startedAt:e,updatedAt:e};return await this.store.put(`task`,o.task.id,o),{organizationId:`default`,status:o,token:a.token,more:r.length>1&&(t===void 0||n.filter(e=>[`running`,`waiting`].includes(e.status)).length+1<t)}})}allowed(e,t){return(t.generation===void 0||(e.generation??0)===t.generation)&&(t.attempts===void 0||e.attempts===t.attempts)&&(t.tokenHash===void 0||(e.tokenHash??null)===t.tokenHash)&&(t.handle===void 0||(e.handle??null)===t.handle)&&(t.lastSeenAt===void 0||(e.lastSeenAt??null)===t.lastSeenAt)&&(t.updatedAt===void 0||e.updatedAt===t.updatedAt)&&(!t.statuses||t.statuses.includes(e.status))}touch(e,t,n,r,i,a=!1){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{tokenHash:n,attempts:r})||!a&&_l.has(e.status)||e.status===`queued`)return;if(_l.has(e.status))return e;let o={...e,lastSeenAt:i,updatedAt:i};return await this.store.put(`task`,t,o),o})}async archiveStopped(e,t,n){let i=e=>e!==void 0&&_l.has(e.status)&&e.archivedAt===void 0&&(!n||n.includes(e.task.id))&&r(e.finishedAt??e.updatedAt,t);for(let{value:e}of await this.store.list(`task`))i(e)&&await this.serial(async()=>{let n=await this.read(e.task.id);i(n)&&await this.store.put(`task`,n.task.id,{...n,archivedAt:t,autoArchived:!0})})}patchTask(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,i))return!1;let{answer:a,...o}=n;return await this.store.put(`task`,t,{...e,...o,...a===void 0?{}:{answer:[...e.answer??[],a]},updatedAt:r}),!0})}deleteTask(e,t,n){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,n)?!1:(await this.store.delete(`task`,t),this.tombstone(t),!0)})}continueTask(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!e||!_l.has(e.status)||!this.allowed(e,i))return!1;let{note:a,...o}=n.context??{},s=await this.store.get(`note`,dn(e.task));return n.context={...o,...s?{note:s}:{}},await this.store.put(`task`,t,{task:{...e.task,...n},status:`queued`,attempts:0,logSeq:e.logSeq,logBytes:e.logBytes,generation:(e.generation??0)+1,inboxSeq:e.inboxSeq,createdAt:e.createdAt,updatedAt:r},{unarchive:!0}),!0})}completeTask(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);if(!e||!this.allowed(e,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]}))return!1;if(await this.store.put(`usage`,`${t}:${e.generation??0}`,n.usage),n.note){let{key:e,value:t,ttlMs:r}=n.note;t?await this.store.put(`note`,e,t,{ttlMs:r}):await this.store.delete(`note`,e)}for(let n of await this.store.list(`inbox`,{prefix:`${t}:`}))n.value.generation===(e.generation??0)&&await this.store.delete(`inbox`,n.id);return await this.store.put(`task`,t,{...e,...n.outcome,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0})}requeue(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...r,statuses:[`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,status:`queued`,handle:void 0,tokenHash:void 0,lastSeenAt:void 0,updatedAt:n}),!0)})}finish(e,t,n,r,i={}){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,{...i,statuses:[`queued`,`running`,`waiting`]})?!1:(await this.store.put(`task`,t,{...e,...n,lastSeenAt:r,finishedAt:r,updatedAt:r}),!0)})}cancel(e,t,n,r={}){return this.serial(async()=>{let e=await this.read(t);if(!e||_l.has(e.status)||!this.allowed(e,r))return!1;let i=e.status===`queued`?void 0:{seq:await this.nextSeq(t),generation:e.generation??0,kind:`cancel`,value:null,at:n};return i&&await this.store.put(`inbox`,`${t}:${String(i.seq).padStart(8,`0`)}`,i),await this.store.put(`task`,t,{...e,...e.status===`queued`?{status:`cancelled`,finishedAt:n}:{},cancelRequestedAt:n,...i?{inboxSeq:i.seq}:{},updatedAt:n}),!0})}async cancelRequested(e,t){return(await this.read(t))?.cancelRequestedAt!==void 0}async list(e,t={}){let{before:n}=t;return(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(e,t)).filter(e=>fl(e,n)).sort(dl).slice(0,t.limit)}tombstone(e){this.tombstones.set(e,Date.now())}async changes(e,t){let n=e[0]?.organizationId;if(!n)return{rows:[],deleted:[]};for(let[e,t]of this.tombstones)t<Date.now()-6e5&&this.tombstones.delete(e);return{rows:(await this.store.list(`task`)).map(e=>({organizationId:n,status:e.value})),deleted:[...this.tombstones].filter(([,e])=>e>t).map(([e,t])=>({organizationId:n,id:e,at:t}))}}async counts(e,t={}){let n=(await this.store.list(`task`)).map(e=>e.value).filter(e=>ll(e,t));return{all:n.length,active:n.filter(e=>Z.includes(e.status)).length,waiting:n.filter(e=>e.status===`waiting`).length}}async runningCount(){return(await this.store.list(`task`)).filter(e=>[`running`,`waiting`].includes(e.value.status)).length}async running(){return(await this.store.list(`task`)).map(e=>e.value).filter(e=>[`running`,`waiting`].includes(e.status)).map(e=>({organizationId:`default`,status:e}))}appendLogs(e,t,n,r,i,a,o){return this.serial(async()=>{let e=await this.read(t);return!e||!this.allowed(e,o)||(e.logSeq??0)!==r.seq||(e.logCursor??-1)!==r.cursor?!1:(await this.store.putMany(`tasklog`,n.map(({seq:e,...n})=>({id:`${t}:${String(e).padStart(6,`0`)}`,value:n}))),await this.store.put(`task`,t,{...e,logCursor:i.cursor,logSeq:i.seq,logBytes:i.bytes,updatedAt:a}),!0)})}readInbox(e,t,n,r){return this.serial(async()=>{let e=await this.read(t);return!e||!Z.includes(e.status)||(e.generation??0)!==n?[]:(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(e=>e.generation===n&&e.seq>r).slice(0,100)})}fetchInbox(e,t,n,r,i){return this.serial(async()=>{let e=await this.read(t);if(!(!e||!this.allowed(e,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})))return(await this.store.list(`inbox`,{prefix:`${t}:`})).map(e=>e.value).filter(t=>t.generation===(e.generation??0)&&t.seq>i).sort((e,t)=>e.seq-t.seq)})}ackInbox(e,t,n,r){return this.serial(async()=>{if(r.generation!==void 0&&r.generation!==n.generation)return!1;let e=await this.read(t);if(!e||!this.allowed(e,{...r,generation:n.generation,statuses:void 0})||n.seq>(e.inboxSeq??-1))return!1;let i=e.inboxAck?.generation===n.generation?e.inboxAck.seq:-1;if(_l.has(e.status))return n.seq<=i;if(![`running`,`waiting`].includes(e.status))return!1;let a=(await this.store.list(`inbox`,{prefix:`${t}:`})).filter(e=>e.value.generation===n.generation&&e.value.seq<=n.seq),o=(n.answers??[]).filter(e=>e.seq>i&&a.some(t=>t.value.kind===`ask`&&t.value.seq===e.seq)).map(e=>e.value),s=a.some(e=>e.value.kind===`cancel`),c=e.approval?.id,l=c&&a.some(e=>e.value.kind===`approve`&&e.value.value?.approvalId===c);await this.store.put(`task`,t,{...e,inboxAck:{generation:n.generation,seq:Math.max(i,n.seq)},...o.length?{answer:[...e.answer??[],...o]}:{},...l?{status:`running`,approval:void 0}:{},...s?{status:`cancelled`,finishedAt:Date.now()}:{},updatedAt:Date.now()});for(let e of a)await this.store.delete(`inbox`,e.id);return!0})}async pendingInbox(){let e=await this.store.list(`inbox`);return(await this.running()).filter(({status:t})=>e.some(e=>e.id.startsWith(`${t.task.id}:`)&&e.value.generation===(t.generation??0)))}appendInbox(e,t,n,r,i,a){return this.serial(async()=>{let e=await this.read(t);if(!e||!Z.includes(e.status)||(e.generation??0)!==a)return;let o=await this.nextSeq(t),s={seq:o,generation:a,at:i,kind:n,value:r};return await this.store.put(`inbox`,`${t}:${String(o).padStart(8,`0`)}`,s),await this.store.put(`task`,t,{...e,inboxSeq:o,updatedAt:i}),s})}};const yl=3e4;function bl(e,t){let n=e.queue.inboxDelivery??=new Map,r=JSON.stringify([e.organizationId,t]),i=n.get(r);if(i||n.set(r,i={}),i.work)return i.again=!0,i.work;let a=i,o=async()=>{let n,r=kt(),i=0,o=0,s,c=async()=>{for(;;){a.again=!1;let s=await e.store.get(`task`,t);if(!s?.handle||![`running`,`waiting`].includes(s.status))return;let c=await F(e,s.task),l=!!(e.local&&s.handle.startsWith(`cli:`));if(!l&&!c?.push)return;o=s.generation??0;let u={generation:o,attempts:s.attempts,tokenHash:s.tokenHash??null,handle:s.handle},d=`inbox:${JSON.stringify([t,u])}`;if(n!==d){n&&await e.store.updateDeliveryLease(n,r),n=void 0;let t=await e.store.claimDeliveryLease(d,r,yl);if(t===void 0)return;n=d,i=t}else if(!await e.store.updateDeliveryLease(n,r,{owner:r,failures:i},{ttlMs:yl}))return;let f=(await e.queue.readInbox(e.organizationId,t,s.generation??0,-1)).slice(0,100);if(!f.length){if(a.again)continue;return}let p=l?await qc(e,s,f):await c.push(s.handle,f);if(p.generation!==(s.generation??0)||!f.some(e=>e.seq===p.seq))throw Error(`Invalid inbox acknowledgement`);if(!await e.queue.ackInbox(e.organizationId,t,p,u)||(i=0,f.length<100&&!a.again))return}};try{await c()}catch{if(n){let t=Math.min(3e4,1e3*2**Math.min(i,5)),a={owner:r,failures:i+1,next:(e.now??Date.now)()+t};await e.store.updateDeliveryLease(n,r,a,{ttlMs:t}),n=void 0}}finally{n&&(await e.store.updateDeliveryLease(n,r),s=o)}return s};return a.work=(async()=>{for(;;){let n=await o();if(n===void 0||!(await e.queue.readInbox(e.organizationId,t,n,-1)).length&&!a.again)break}n.delete(r)})().finally(()=>{n.get(r)===a&&n.delete(r)}),a.work}async function xl(e){let t=await e.queue.pendingInbox();await Promise.allSettled(t.map(({organizationId:t,status:n})=>bl(j(e,t),n.task.id)))}function Sl(e){let t=xl(e).catch(()=>{});e.waitUntil&&e.waitUntil(t)}const $=`default`;async function Cl(e){if(!e.databaseUrl)throw Error(`DATABASE_URL is required for the Postgres store`);let{connect:t}=await import(`./client-31YzOj-i.js`).then(e=>e.n);return t(e.databaseUrl,e.databasePool)}async function wl(e,t={}){if(e.store!==`postgres`){let e=t.local?new co:new no;return{store:()=>e,queue:new vl(e),chatState:new ht(t.local?T.join(pe(``),`chat.json`):void 0),defaultOrganizationId:$,webhookTarget:async(t,n)=>{let r=await e.get(`app`,t),i=n?await e.get(`installation`,n):void 0;return r&&{organizationId:$,app:r,...i&&i.app===t&&!i.deletedAt?{bound:{organizationId:$,installation:i}}:{}}},appRecord:async t=>{let n=await e.get(`app`,t);return n&&{organizationId:$,app:n}},installationOrganization:async t=>await e.get(`installation`,t)?$:void 0,installations:async t=>(await e.list(`installation`,{prefix:`${t}:`})).filter(e=>!e.value.deletedAt).map(e=>({key:e.id,organizationId:$})),taskOrganization:async(t,n)=>(await e.get(`task`,t))?.tokenHash===n?$:void 0,sweep:async()=>{},close:async()=>{}}}let n=await Cl(e),[{DrizzleStore:r},{DrizzleQueue:i},{UNSCOPED_ORGANIZATION:a},{PgChatState:o}]=await Promise.all([import(`./store-B0RLMUR9.js`),import(`./queue-EvplGOuk.js`),import(`./shared-D64pQ0XU.js`).then(e=>e.g),import(`./chat-cknlIhVh.js`)]);return{store:t=>new r(n.db,t,Date.now,e),queue:new i(n.db),chatState:new o(n.db),defaultOrganizationId:a,webhookTarget:(e,t)=>r.webhookTarget(n.db,e,t),appRecord:e=>r.appRecord(n.db,e),installationOrganization:e=>r.installationOrganization(n.db,e),installations:e=>r.installations(n.db,e),taskOrganization:(e,t)=>r.taskOrganization(n.db,e,t),connection:n,sweep:e=>new r(n.db,a).sweep(e),close:()=>n.close()}}async function Tl(e,t,n,r){if(e.updateMetadata)return e.updateMetadata(t,n,r);let i=await e.get(t,n);return i?(await e.put(t,n,{...i,...r}),!0):!1}async function El(e,t){let n=[...new Set(t)];return e.getApps?e.getApps(n):(await Promise.all(n.map(async t=>({id:t,value:await e.get(`app`,t)})))).filter(e=>!!e.value)}export{Oo as $,qt as $n,vi as $t,Xs as A,er as An,ca as At,Vs as B,En as Bn,Wi as Bt,Sc as C,vr as Cn,_a as Ct,pc as D,or as Dn,ia as Dt,cc as E,gr as En,Zi as Et,nc as F,Ln as Fn,ha as Ft,xs as G,rn as Gn,Pi as Gt,Is as H,pn as Hn,ya as Ht,Gs as I,N as In,Li as It,Os as J,en as Jn,Mi as Jt,Ds as K,on as Kn,ki as Kt,Ks as L,wn as Ln,Ki as Lt,Ys as M,Wn as Mn,da as Mt,Zs as N,Gn as Nn,aa as Nt,Hs as O,$n as On,Gi as Ot,rc as P,F as Pn,pa as Pt,Eo as Q,$t as Qn,hi as Qt,Js as R,M as Rn,Vi as Rt,bc as S,ur as Sn,va as St,Cc as T,fr as Tn,ua as Tt,Rs as U,nn as Un,Ai as Ut,Fs as V,j as Vn,Qi as Vt,Ls as W,sn as Wn,ji as Wt,Fo as X,Qt as Xn,z as Xt,is as Y,tn as Yn,Ei as Yt,Io as Z,Zt as Zn,gi as Zt,Gc as _,xr as _n,la as _t,Z as a,ni as an,Ya as at,G as b,L as bn,$i as bt,xl as c,ti as cn,Za as ct,sl as d,ei as dn,H as dt,mi as en,Yt as er,po as et,Jc as f,Er as fn,Ua as ft,Wc as g,Cr as gn,fa as gt,Fc as h,Sr as hn,zi as ht,Tl as i,Fr as in,Ia as it,Qs as j,rr as jn,ta as jt,tc as k,ar as kn,sa as kt,Sl as l,ii as ln,Xa as lt,Lc as m,Tr as mn,$a as mt,Cl as n,Ci as nn,fo as nt,vl as o,Zr as on,Da as ot,J as p,Dr as pn,Qa as pt,Ts as q,cn as qn,Ni as qt,El as r,_i as rn,to as rt,ml as s,Qr as sn,xa as st,wl as t,xi as tn,uo as tt,Q as u,Jr as un,Ja as ut,Rc as v,R as vn,oa as vt,xc as w,yr as wn,ma as wt,yc as x,cr as xn,ra as xt,Qc as y,lr as yn,ba as yt,qs as z,xn as zn,ga as zt};
@@ -1 +1 @@
1
- import{s as e}from"./cli-msOzZFXW.js";const t=[[`--wait`,`run in the foreground and block until the answer is ready`],[`--engine <codex|claude|custom>`,`engine to use; custom runs your configured custom models (default: first in the chain)`],[`--model <alias|slug>`,`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`],[`--effort <low|medium|high>`,`reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto (default: auto)`],[`--mcp <names|all|json>`,'attach MCP servers from `mcp` in .coder/config.json by name (or all), or an inline JSON array [{"name","command","args","env","tools"}]; none by default, all adds your engine\'s own MCP servers'],[`--add-dir <dir>`,`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`]],n=e(`task`,{"archive-sweep":async()=>(await import(`./archive-sweep-CHbOP-p6.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-CaNTsqcD.js`)).commandWorker,run:async()=>(await import(`./run-hiPyO7js.js`)).commandTask,list:async()=>(await import(`./list-CXu4cr8D.js`)).commandTasks,ls:async()=>(await import(`./list-CXu4cr8D.js`)).commandTasks,watch:async()=>(await import(`./watch-DYkC6Q2q.js`)).commandWatch,stream:async()=>(await import(`./watch-DYkC6Q2q.js`)).commandWatch,result:async()=>(await import(`./result-oQey_hdw.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-D47cuggj.js`)).commandSteer,ask:async()=>(await import(`./ask-DdYrvsTk.js`)).commandAsk,stop:async()=>(await import(`./stop-7brPdki9.js`)).commandStop,archive:async()=>(await import(`./archive-C9yrU4Wg.js`)).commandArchive,delete:async()=>(await import(`./delete-Cj16PYaw.js`)).commandDelete,approvals:async()=>(await import(`./approvals-CZt_aPCy.js`)).commandApprovals,approve:async()=>(await import(`./approve-DxjyXd66.js`)).commandApprove},{menu:[{sub:`run`,usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`,alias:`run`},{sub:`list`,usage:`list`,blurb:`list recent tasks (by default running + just stopped)`,alias:`list`},{sub:`result`,usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`,alias:`result`},{sub:`watch`,usage:`watch [task-id]`,blurb:`stream a task's live transcript`},{sub:`steer`,usage:`steer <task-id> "<follow-up>"`,blurb:`continue a task's thread`},{sub:`ask`,usage:`ask <task-id> "<question>"`,blurb:`ask about a task without interrupting it`},{sub:`stop`,usage:`stop <task-id>`,blurb:`interrupt a running task`},{sub:`archive`,usage:`archive <task-id>`,blurb:`archive a session (or --all-stopped)`},{sub:`delete`,usage:`delete <task-id>`,blurb:`delete a session (or --all-archived)`},{sub:`approvals`,usage:`approvals [task-id]`,blurb:`pending approvals (all tasks, or one)`},{sub:`approve`,usage:`approve <id>`,blurb:`answer an escalated permission`}].map(e=>({usage:e.usage,blurb:e.blurb,...e.alias?{note:`(coder ${e.alias})`}:{}}))},{aliases:{stream:`watch`,ls:`list`},hint:`Run a task: coder run "<text>"`});export{t as TASK_FLAGS,n as commandTaskGroup};
1
+ import{s as e}from"./cli-IfrPgeYz.js";const t=[[`--wait`,`run in the foreground and block until the answer is ready`],[`--engine <codex|claude|custom>`,`engine to use; custom runs your configured custom models (default: first in the chain)`],[`--model <alias|slug>`,`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`],[`--effort <low|medium|high>`,`reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto (default: auto)`],[`--mcp <names|all|json>`,'attach MCP servers from `mcp` in .coder/config.json by name (or all), or an inline JSON array [{"name","command","args","env","tools"}]; none by default, all adds your engine\'s own MCP servers'],[`--add-dir <dir>`,`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`]],n=e(`task`,{"archive-sweep":async()=>(await import(`./archive-sweep-BrqWj4kr.js`)).commandArchiveSweep,worker:async()=>(await import(`./worker-4TKVAB01.js`)).commandWorker,run:async()=>(await import(`./run-IWXjB5OD.js`)).commandTask,list:async()=>(await import(`./list-CLVoliXi.js`)).commandTasks,ls:async()=>(await import(`./list-CLVoliXi.js`)).commandTasks,watch:async()=>(await import(`./watch-Y82ubvGH.js`)).commandWatch,stream:async()=>(await import(`./watch-Y82ubvGH.js`)).commandWatch,result:async()=>(await import(`./result-DtXZusqj.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-BGKYpW4T.js`)).commandSteer,ask:async()=>(await import(`./ask-Dmk0HGtI.js`)).commandAsk,stop:async()=>(await import(`./stop-svJYkhTt.js`)).commandStop,archive:async()=>(await import(`./archive-fs5RjYHc.js`)).commandArchive,delete:async()=>(await import(`./delete-BbsEN7tF.js`)).commandDelete,approvals:async()=>(await import(`./approvals-9-G-QxOy.js`)).commandApprovals,approve:async()=>(await import(`./approve-CAk8qPqG.js`)).commandApprove},{menu:[{sub:`run`,usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`,alias:`run`},{sub:`list`,usage:`list`,blurb:`list recent tasks (by default running + just stopped)`,alias:`list`},{sub:`result`,usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`,alias:`result`},{sub:`watch`,usage:`watch [task-id]`,blurb:`stream a task's live transcript`},{sub:`steer`,usage:`steer <task-id> "<follow-up>"`,blurb:`continue a task's thread`},{sub:`ask`,usage:`ask <task-id> "<question>"`,blurb:`ask about a task without interrupting it`},{sub:`stop`,usage:`stop <task-id>`,blurb:`interrupt a running task`},{sub:`archive`,usage:`archive <task-id>`,blurb:`archive a session (or --all-stopped)`},{sub:`delete`,usage:`delete <task-id>`,blurb:`delete a session (or --all-archived)`},{sub:`approvals`,usage:`approvals [task-id]`,blurb:`pending approvals (all tasks, or one)`},{sub:`approve`,usage:`approve <id>`,blurb:`answer an escalated permission`}].map(e=>({usage:e.usage,blurb:e.blurb,...e.alias?{note:`(coder ${e.alias})`}:{}}))},{aliases:{stream:`watch`,ls:`list`},hint:`Run a task: coder run "<text>"`});export{t as TASK_FLAGS,n as commandTaskGroup};
@@ -1 +1 @@
1
- import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-msOzZFXW.js";import{runnerOptions as r}from"./remove-CcMma1x3.js";import i from"node:process";const a=t({name:`runner test`,globalFlags:{cwd:!1},args:1,help:{usage:`coder runner test <id> [--server [url]] [--json]`,summary:`Check the runner connection.`,flags:[n]},options:r,async run({options:t,args:[n]}){if(!n)throw new e(`invalid-option`,`Missing runner id.`);let{testRunner:r}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);return r(n,t)},print:e=>i.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)});export{a as commandRunnerTest};
1
+ import{St as e}from"./dispatch-YW1aqjEg.js";import{i as t,t as n}from"./cli-IfrPgeYz.js";import{runnerOptions as r}from"./remove-CZmO4BSd.js";import i from"node:process";const a=t({name:`runner test`,globalFlags:{cwd:!1},args:1,help:{usage:`coder runner test <id> [--server [url]] [--json]`,summary:`Check the runner connection.`,flags:[n]},options:r,async run({options:t,args:[n]}){if(!n)throw new e(`invalid-option`,`Missing runner id.`);let{testRunner:r}=await import(`./runner-c-2w6Eoj.js`).then(e=>e.a);return r(n,t)},print:e=>i.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)});export{a as commandRunnerTest};
@@ -1 +1 @@
1
- import{i as e}from"./cli-msOzZFXW.js";import{n as t}from"./mcp-server-DGzme0YX.js";import n from"node:process";const r=e({name:`agent tools`,options:{},args:1,async run({args:e}){let{INTEGRATIONS:r}=await import(`./integrations-B2CavXR1.js`).then(e=>e.r),{agentTools:i}=await import(`./mcp-DgMoPoUo.js`).then(e=>e.t),a=e[0]??``,o=i(a);if(!o)throw Error(`Unknown tool set "${a}"; known: ${[...Object.keys(r).filter(e=>r[e].tools.serve),`note`].join(`, `)}`);let s=n.env.APP_TOKEN??``;if(!s&&a!==`note`)throw Error(`APP_TOKEN is not set`);let c=n.env.CODER_AGENT_SCOPE?JSON.parse(n.env.CODER_AGENT_SCOPE):void 0;await t(`coder-${a}`,o,{token:s,fetch,tools:(n.env.CODER_AGENT_TOOLS??``).split(`,`).filter(Boolean),...c?{scope:c}:{}})}});export{r as commandTools};
1
+ import{i as e}from"./cli-IfrPgeYz.js";import{n as t}from"./mcp-server-DGzme0YX.js";import n from"node:process";const r=e({name:`agent tools`,options:{},args:1,async run({args:e}){let{INTEGRATIONS:r}=await import(`./integrations-B2CavXR1.js`).then(e=>e.r),{agentTools:i}=await import(`./mcp-DgMoPoUo.js`).then(e=>e.t),a=e[0]??``,o=i(a);if(!o)throw Error(`Unknown tool set "${a}"; known: ${[...Object.keys(r).filter(e=>r[e].tools.serve),`note`].join(`, `)}`);let s=n.env.APP_TOKEN??``;if(!s&&a!==`note`)throw Error(`APP_TOKEN is not set`);let c=n.env.CODER_AGENT_SCOPE?JSON.parse(n.env.CODER_AGENT_SCOPE):void 0;await t(`coder-${a}`,o,{token:s,fetch,tools:(n.env.CODER_AGENT_TOOLS??``).split(`,`).filter(Boolean),...c?{scope:c}:{}})}});export{r as commandTools};
@@ -2,9 +2,9 @@ import * as z from "zod/mini";
2
2
  import { SerializedMessage, SerializedThread } from "chat";
3
3
  //#region src/core/config.d.ts
4
4
  declare const engineSchema: z.ZodMiniEnum<{
5
+ custom: "custom";
5
6
  codex: "codex";
6
7
  claude: "claude";
7
- custom: "custom";
8
8
  }>;
9
9
  declare const effortSchema: z.ZodMiniEnum<{
10
10
  low: "low";
@@ -43,9 +43,9 @@ declare const mcpEntrySchema: z.ZodMiniObject<{
43
43
  }, z.core.$strict>;
44
44
  declare const effectiveConfigSchema: z.ZodMiniObject<{
45
45
  chain: z.ZodMiniArray<z.ZodMiniEnum<{
46
+ custom: "custom";
46
47
  codex: "codex";
47
48
  claude: "claude";
48
- custom: "custom";
49
49
  }>>;
50
50
  engines: z.ZodMiniObject<{
51
51
  codex: z.ZodMiniOptional<z.ZodMiniObject<{
@@ -1 +1 @@
1
- import{i as e}from"./cli-msOzZFXW.js";import{o as t}from"./models-DGPrMV51.js";import{n}from"./add-cdKdz3K0.js";import{t as r}from"./remove-C8Rm8KP-.js";const i=e({name:`model unalias`,help:{usage:`coder model unalias <name> [--workspace]`,summary:`Remove a user-defined alias.`,flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]]},options:n,args:1,run:({options:e,args:[n],cwd:r})=>t(r,n,e),print:e=>r(`unaliased`,e.unaliased,e.file)});export{i as commandModelUnalias};
1
+ import{i as e}from"./cli-IfrPgeYz.js";import{o as t}from"./models-DGPrMV51.js";import{n}from"./add-CKENklTr.js";import{t as r}from"./remove-CWd4Qs4F.js";const i=e({name:`model unalias`,help:{usage:`coder model unalias <name> [--workspace]`,summary:`Remove a user-defined alias.`,flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]]},options:n,args:1,run:({options:e,args:[n],cwd:r})=>t(r,n,e),print:e=>r(`unaliased`,e.unaliased,e.file)});export{i as commandModelUnalias};
@@ -1,2 +1,2 @@
1
- import{i as e}from"./cli-msOzZFXW.js";import{s as t}from"./models-DGPrMV51.js";import{a as n,i as r,n as i,r as a}from"./add-cdKdz3K0.js";const o=e({name:`model update`,help:{usage:`coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR]`,summary:`Update a configured custom model. Only the flags you pass change; the endpoint
1
+ import{i as e}from"./cli-IfrPgeYz.js";import{s as t}from"./models-DGPrMV51.js";import{a as n,i as r,n as i,r as a}from"./add-CKENklTr.js";const o=e({name:`model update`,help:{usage:`coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR]`,summary:`Update a configured custom model. Only the flags you pass change; the endpoint
2
2
  is re-probed and the wire protocol re-detected.`,flags:[[`--base-url <url>`,`new API base`],[`--model <id>`,`new provider model id`],[`--env-key <VAR>`,`new API-key env var`],[`--workspace`,`write to <repo>/.coder/config.json instead of the user file`]]},options:i,args:1,run:({options:e,args:[r],cwd:i})=>t(i,r,n(e)),json:a,print:e=>r(e,`updated`)});export{o as commandModelUpdate};
@@ -1,2 +1,2 @@
1
- import{w as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-msOzZFXW.js";import{f as n,p as r,t as i}from"./output-BKeyLbvt.js";import{n as a,s as o}from"./args-DEMOfLz2.js";import s from"node:process";const c=t({name:`upgrade`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder upgrade [--cli-only] [--plugins-only] [--codex] [--claude] [--pm <mgr>]`,summary:`Update the coder CLI through whichever package manager installed it, then refresh
2
- the host plugins to match. Alias: update.`,flags:[[`--cli-only`,`update just the CLI`],[`--plugins-only`,`refresh just the host plugins`],[`--codex`,`limit the refresh to the Agent Skills copy (Codex, Pi, ...)`],[`--claude`,`limit the refresh to the Claude Code plugin`],[`--pm <npm|pnpm|yarn|bun>`,`force a package manager instead of auto-detecting`]]},options:{pm:o,"cli-only":a,"plugins-only":a,codex:a,claude:a},run:({options:t})=>e({...t,cliOnly:t[`cli-only`],pluginsOnly:t[`plugins-only`]},l),print:u});function l(e){s.stdout.write(`${r.bold(`Updating coder CLI`)} ${r.dim(`${e}...`)}\n`)}function u(e){let t=r.bold,a=r.dim,o=(e,n)=>n&&e&&n!==e?`${e} ${a(`->`)} ${t(n)}`:`${n??e??`?`} ${a(`(unchanged)`)}`,c=(e,t)=>`${t.installed?n(`${e} ${o(t.from,t.to)} ${a(`- ${t.note}`)}`):i(`${e} ${t.note}`)}\n`;e.cli&&s.stdout.write(e.cli.changed?`${n(`coder CLI ${o(e.cli.from,e.cli.to)}`)}\n`:`${n(`coder CLI ${e.cli.from} ${a(`(already latest)`)}`)}\n`),e.claudePlugin&&s.stdout.write(c(`claude plugin`,e.claudePlugin)),e.agentsSkill&&s.stdout.write(c(`agents skill `,e.agentsSkill))}const d=async()=>(await import(`./refresh-CmBQALAW.js`)).commandRefreshUpdate,f=Object.assign(async e=>e[0]===`refresh`?(await d())(e.slice(1)):c(e),c,{subcommands:{refresh:d}});export{f as commandUpgrade};
1
+ import{w as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{f as n,p as r,t as i}from"./output-BKeyLbvt.js";import{n as a,s as o}from"./args-DEMOfLz2.js";import s from"node:process";const c=t({name:`upgrade`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder upgrade [--cli-only] [--plugins-only] [--codex] [--claude] [--pm <mgr>]`,summary:`Update the coder CLI through whichever package manager installed it, then refresh
2
+ the host plugins to match. Alias: update.`,flags:[[`--cli-only`,`update just the CLI`],[`--plugins-only`,`refresh just the host plugins`],[`--codex`,`limit the refresh to the Agent Skills copy (Codex, Pi, ...)`],[`--claude`,`limit the refresh to the Claude Code plugin`],[`--pm <npm|pnpm|yarn|bun>`,`force a package manager instead of auto-detecting`]]},options:{pm:o,"cli-only":a,"plugins-only":a,codex:a,claude:a},run:({options:t})=>e({...t,cliOnly:t[`cli-only`],pluginsOnly:t[`plugins-only`]},l),print:u});function l(e){s.stdout.write(`${r.bold(`Updating coder CLI`)} ${r.dim(`${e}...`)}\n`)}function u(e){let t=r.bold,a=r.dim,o=(e,n)=>n&&e&&n!==e?`${e} ${a(`->`)} ${t(n)}`:`${n??e??`?`} ${a(`(unchanged)`)}`,c=(e,t)=>`${t.installed?n(`${e} ${o(t.from,t.to)} ${a(`- ${t.note}`)}`):i(`${e} ${t.note}`)}\n`;e.cli&&s.stdout.write(e.cli.changed?`${n(`coder CLI ${o(e.cli.from,e.cli.to)}`)}\n`:`${n(`coder CLI ${e.cli.from} ${a(`(already latest)`)}`)}\n`),e.claudePlugin&&s.stdout.write(c(`claude plugin`,e.claudePlugin)),e.agentsSkill&&s.stdout.write(c(`agents skill `,e.agentsSkill))}const d=async()=>(await import(`./refresh-ZbMy3Y9T.js`)).commandRefreshUpdate,f=Object.assign(async e=>e[0]===`refresh`?(await d())(e.slice(1)):c(e),c,{subcommands:{refresh:d}});export{f as commandUpgrade};
@@ -1 +1 @@
1
- import{i as e,r as t}from"./cli-msOzZFXW.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{i,n as a,s as o,t as s}from"./args-DEMOfLz2.js";import c from"node:process";const l={server:i,workspace:o,yes:a};function u(e,t){let i=Array.isArray(e.totals)?e.totals.map(e=>({group:t??``,...e})):Object.entries(e.totals).flatMap(([e,t])=>t.map(t=>({group:e,...t})));if(!i.length)return void c.stdout.write(`${r.dim(`No usage in this period.`)}\n`);c.stdout.write(`${n([{header:`by`,value:e=>e.group},{header:`key`,value:e=>e.key,paint:e=>r.cyan(e)},{header:`tasks`,value:e=>String(e.tasks)},{header:`runner ms`,value:e=>String(e.runnerMs)},{header:`tokens`,value:e=>e.tokens===void 0?``:JSON.stringify(e.tokens)}],i,r)}\n`)}const d=e({name:`agent usage`,help:{usage:`coder agent usage [--since 7d|24h|<ms>] [--by agent|installation|engine] [--server [url]] [--json] [--cwd <dir>]`,flags:[[`--since <period|ms>`,`period such as 7d or 24h, or milliseconds since epoch`],[`--by <group>`,`agent, installation, or engine`],t]},options:{...s,...l,since:o,by:o},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-BcXXkOmD.js`).then(e=>e.t);return n.usage({...e,cwd:t,organization:e.workspace,since:e.since??`7d`})},print:(e,{options:t})=>u(e,t.by)});export{d as commandAgentUsage};
1
+ import{i as e,r as t}from"./cli-IfrPgeYz.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{i,n as a,s as o,t as s}from"./args-DEMOfLz2.js";import c from"node:process";const l={server:i,workspace:o,yes:a};function u(e,t){let i=Array.isArray(e.totals)?e.totals.map(e=>({group:t??``,...e})):Object.entries(e.totals).flatMap(([e,t])=>t.map(t=>({group:e,...t})));if(!i.length)return void c.stdout.write(`${r.dim(`No usage in this period.`)}\n`);c.stdout.write(`${n([{header:`by`,value:e=>e.group},{header:`key`,value:e=>e.key,paint:e=>r.cyan(e)},{header:`tasks`,value:e=>String(e.tasks)},{header:`runner ms`,value:e=>String(e.runnerMs)},{header:`tokens`,value:e=>e.tokens===void 0?``:JSON.stringify(e.tokens)}],i,r)}\n`)}const d=e({name:`agent usage`,help:{usage:`coder agent usage [--since 7d|24h|<ms>] [--by agent|installation|engine] [--server [url]] [--json] [--cwd <dir>]`,flags:[[`--since <period|ms>`,`period such as 7d or 24h, or milliseconds since epoch`],[`--by <group>`,`agent, installation, or engine`],t]},options:{...s,...l,since:o,by:o},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-D0pQ_ewc.js`).then(e=>e.t);return n.usage({...e,cwd:t,organization:e.workspace,since:e.since??`7d`})},print:(e,{options:t})=>u(e,t.by)});export{d as commandAgentUsage};
@@ -1 +1 @@
1
- import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{a as t,i as n}from"./load-DDZfByUe.js";import{a as r,d as i,f as a,n as o,u as s}from"./http-DG54kyx4.js";import{y as c}from"./store-qp7UE2ES.js";var l=e({addUsage:()=>f,leaders:()=>m,readUsage:()=>x,readUsageTotals:()=>S,timeZone:()=>d,usageReport:()=>b,usageSummary:()=>_,usageTotals:()=>p});function u(e){return typeof e==`number`?e:!e||typeof e!=`object`||Array.isArray(e)?0:`total`in e&&typeof e.total==`number`?e.total:Object.values(e).reduce((e,t)=>e+u(t),0)}function d(e){if(!e)return`UTC`;try{return new Intl.DateTimeFormat(`en`,{timeZone:e}),e}catch{return`UTC`}}const f=(e,t)=>{e.tasks+=t.tasks,e.runnerMs+=t.runnerMs,e.tokenCount+=t.tokenCount};async function p(e,t){if(e.usageTotals)return e.usageTotals(t);if(t.top){let{top:n,...r}=t,i=(await p(e,{...r,by:`agent`,parts:void 0})).sort((e,t)=>t[n.by]-e[n.by]||e.key.localeCompare(t.key)).slice(0,n.count).map(e=>e.key);return p(e,{...r,parts:i})}let n=d(t.tz),r=new Intl.DateTimeFormat(`en-CA`,{timeZone:n,year:`numeric`,month:`2-digit`,day:`2-digit`}),i=new Set(t.parts),a=new Map;for(let{value:n}of await e.list(`usage`)){if(n.at<t.since||t.until!==void 0&&n.at>=t.until||t.agent&&n.agent!==t.agent)continue;let e=t.by===`agent`?n.agent:t.by===`installation`?n.installationId??`none`:t.by===`engine`?n.engine??`unknown`:r.format(n.at),o={tasks:1,runnerMs:n.runnerElapsedMs,tokenCount:u(n.tokens)},s=a.get(e)??{key:e,tasks:0,runnerMs:0,tokenCount:0};f(s,o),i.has(n.agent)&&(s.parts??={},f(s.parts[n.agent]??={tasks:0,runnerMs:0,tokenCount:0},o)),a.set(e,s)}return[...a.values()].sort((e,t)=>e.key.localeCompare(t.key))}function m(e,t){let n=new Map;for(let r of e)for(let[e,i]of Object.entries(r.parts??{}))n.set(e,(n.get(e)??0)+i[t]);return[...n].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).map(([e])=>e)}function h(e,t){if(typeof t==`number`)return(typeof e==`number`?e:0)+t;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=e&&typeof e==`object`&&!Array.isArray(e)?{...e}:{};for(let[e,r]of Object.entries(t))n[e]=h(n[e],r);return n}function g(e,t){let n=new Map;for(let r of e){let e=t===`agent`?r.agent:t===`installation`?r.installationId??`none`:r.engine??`unknown`,i=n.get(e)??{key:e,tasks:0,runnerMs:0};i.tasks++,i.runnerMs+=r.runnerElapsedMs,r.tokens!==void 0&&(i.tokens=h(i.tokens,r.tokens)),n.set(e,i)}return[...n.values()].sort((e,t)=>e.key.localeCompare(t.key))}function _(e,t,n){let r=e.filter(e=>e.at>=t);return{since:t,totals:n?g(r,n):{agent:g(r,`agent`),installation:g(r,`installation`),engine:g(r,`engine`)}}}const v={tasks:`tasks`,runner:`runnerMs`,tokens:`tokenCount`},y={tokens:e=>e.tokenCount,tasks:e=>e.tasks,runner:e=>e.runnerMs,name:e=>e.key};async function b(e,c){let l=e=>c.searchParams.get(e),u=Number(l(`since`)??0),f=l(`until`)===null?void 0:Number(l(`until`)),h=l(`by`)??`agent`;if(!Number.isFinite(u)||f!==void 0&&!Number.isFinite(f)||![`agent`,`installation`,`engine`,`day`].includes(h))return r({error:`Invalid usage query`},400);let g=l(`parts`)?.split(`,`).filter(Boolean),_=Math.min(Number(l(`top`)??0),8),b=v[l(`sort`)??`tokens`]??`tokenCount`,x=await p(e.store,{by:h,since:u,...f===void 0?{}:{until:f},...l(`agent`)?{agent:l(`agent`)}:{},...h===`day`?{tz:d(l(`tz`))}:{},...g?.length?{parts:g.slice(0,20)}:{},..._>0?{top:{count:_,by:b}}:{}}),S={since:u,...f===void 0?{}:{until:f}};if(h===`agent`){let r=new Set(e.local?(await t(e.local.cwd,e.integrations)).map(e=>e.id):(await e.store.list(`agent`)).map(e=>e.id));for(let e of Object.keys(n()))r.add(e);for(let e of x)r.has(e.key)||(e.deleted=!0)}if(_>0)return r({...S,totals:x,top:m(x,b)});if(!a(c)||h!==`agent`)return r({...S,totals:x});let C=y[l(`sort`)??`tokens`]??y.tokens,w=l(`sort`)===`name`,T=l(`q`)?.trim().toLowerCase(),E=([e,t],[n,r])=>(e<n?-1:+(e>n))*(w?1:-1)||t.localeCompare(r),D=e=>[C(e),e.key],O=o(c),k=x.filter(e=>!T||e.key.toLowerCase().includes(T)).filter(e=>!O||E(D(e),O)>0).sort((e,t)=>E(D(e),D(t))),A=i(c),j=e=>x.reduce((t,n)=>t+e(n),0);return r({...S,...s(k.slice(0,A+1),A,D),summary:{agents:x.length,tasks:j(e=>e.tasks),runnerMs:j(e=>e.runnerMs),tokenCount:j(e=>e.tokenCount)}})}async function x(e,t,n,i){t.local&&await c(t);let a=i.searchParams.get(`installation`),o=await t.store.list(`usage`);return r(a?o.filter(e=>e.value.installationId===a):o)}async function S(e,t,n,i){t.local&&await c(t);let a=Number(i.searchParams.get(`since`)??0),o=i.searchParams.get(`by`);if([`until`,`agent`,`tz`,`parts`,`top`,`cursor`].some(e=>i.searchParams.has(e))||o===`day`)return b(t,i);if(!Number.isFinite(a)||o&&![`agent`,`installation`,`engine`].includes(o))return r({error:`Invalid usage query`},400);let s=(await t.store.list(`usage`)).map(e=>e.value);return r(_(s,a,o))}export{l as a,d as i,x as n,S as r,f as t};
1
+ import{t as e}from"./rolldown-runtime-DT7IzrpZ.js";import{a as t,i as n}from"./load-DDZfByUe.js";import{a as r,d as i,f as a,n as o,u as s}from"./http-DG54kyx4.js";import{y as c}from"./store-Cxc2GYyj.js";var l=e({addUsage:()=>f,leaders:()=>m,readUsage:()=>x,readUsageTotals:()=>S,timeZone:()=>d,usageReport:()=>b,usageSummary:()=>_,usageTotals:()=>p});function u(e){return typeof e==`number`?e:!e||typeof e!=`object`||Array.isArray(e)?0:`total`in e&&typeof e.total==`number`?e.total:Object.values(e).reduce((e,t)=>e+u(t),0)}function d(e){if(!e)return`UTC`;try{return new Intl.DateTimeFormat(`en`,{timeZone:e}),e}catch{return`UTC`}}const f=(e,t)=>{e.tasks+=t.tasks,e.runnerMs+=t.runnerMs,e.tokenCount+=t.tokenCount};async function p(e,t){if(e.usageTotals)return e.usageTotals(t);if(t.top){let{top:n,...r}=t,i=(await p(e,{...r,by:`agent`,parts:void 0})).sort((e,t)=>t[n.by]-e[n.by]||e.key.localeCompare(t.key)).slice(0,n.count).map(e=>e.key);return p(e,{...r,parts:i})}let n=d(t.tz),r=new Intl.DateTimeFormat(`en-CA`,{timeZone:n,year:`numeric`,month:`2-digit`,day:`2-digit`}),i=new Set(t.parts),a=new Map;for(let{value:n}of await e.list(`usage`)){if(n.at<t.since||t.until!==void 0&&n.at>=t.until||t.agent&&n.agent!==t.agent)continue;let e=t.by===`agent`?n.agent:t.by===`installation`?n.installationId??`none`:t.by===`engine`?n.engine??`unknown`:r.format(n.at),o={tasks:1,runnerMs:n.runnerElapsedMs,tokenCount:u(n.tokens)},s=a.get(e)??{key:e,tasks:0,runnerMs:0,tokenCount:0};f(s,o),i.has(n.agent)&&(s.parts??={},f(s.parts[n.agent]??={tasks:0,runnerMs:0,tokenCount:0},o)),a.set(e,s)}return[...a.values()].sort((e,t)=>e.key.localeCompare(t.key))}function m(e,t){let n=new Map;for(let r of e)for(let[e,i]of Object.entries(r.parts??{}))n.set(e,(n.get(e)??0)+i[t]);return[...n].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0])).map(([e])=>e)}function h(e,t){if(typeof t==`number`)return(typeof e==`number`?e:0)+t;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=e&&typeof e==`object`&&!Array.isArray(e)?{...e}:{};for(let[e,r]of Object.entries(t))n[e]=h(n[e],r);return n}function g(e,t){let n=new Map;for(let r of e){let e=t===`agent`?r.agent:t===`installation`?r.installationId??`none`:r.engine??`unknown`,i=n.get(e)??{key:e,tasks:0,runnerMs:0};i.tasks++,i.runnerMs+=r.runnerElapsedMs,r.tokens!==void 0&&(i.tokens=h(i.tokens,r.tokens)),n.set(e,i)}return[...n.values()].sort((e,t)=>e.key.localeCompare(t.key))}function _(e,t,n){let r=e.filter(e=>e.at>=t);return{since:t,totals:n?g(r,n):{agent:g(r,`agent`),installation:g(r,`installation`),engine:g(r,`engine`)}}}const v={tasks:`tasks`,runner:`runnerMs`,tokens:`tokenCount`},y={tokens:e=>e.tokenCount,tasks:e=>e.tasks,runner:e=>e.runnerMs,name:e=>e.key};async function b(e,c){let l=e=>c.searchParams.get(e),u=Number(l(`since`)??0),f=l(`until`)===null?void 0:Number(l(`until`)),h=l(`by`)??`agent`;if(!Number.isFinite(u)||f!==void 0&&!Number.isFinite(f)||![`agent`,`installation`,`engine`,`day`].includes(h))return r({error:`Invalid usage query`},400);let g=l(`parts`)?.split(`,`).filter(Boolean),_=Math.min(Number(l(`top`)??0),8),b=v[l(`sort`)??`tokens`]??`tokenCount`,x=await p(e.store,{by:h,since:u,...f===void 0?{}:{until:f},...l(`agent`)?{agent:l(`agent`)}:{},...h===`day`?{tz:d(l(`tz`))}:{},...g?.length?{parts:g.slice(0,20)}:{},..._>0?{top:{count:_,by:b}}:{}}),S={since:u,...f===void 0?{}:{until:f}};if(h===`agent`){let r=new Set(e.local?(await t(e.local.cwd,e.integrations)).map(e=>e.id):(await e.store.list(`agent`)).map(e=>e.id));for(let e of Object.keys(n()))r.add(e);for(let e of x)r.has(e.key)||(e.deleted=!0)}if(_>0)return r({...S,totals:x,top:m(x,b)});if(!a(c)||h!==`agent`)return r({...S,totals:x});let C=y[l(`sort`)??`tokens`]??y.tokens,w=l(`sort`)===`name`,T=l(`q`)?.trim().toLowerCase(),E=([e,t],[n,r])=>(e<n?-1:+(e>n))*(w?1:-1)||t.localeCompare(r),D=e=>[C(e),e.key],O=o(c),k=x.filter(e=>!T||e.key.toLowerCase().includes(T)).filter(e=>!O||E(D(e),O)>0).sort((e,t)=>E(D(e),D(t))),A=i(c),j=e=>x.reduce((t,n)=>t+e(n),0);return r({...S,...s(k.slice(0,A+1),A,D),summary:{agents:x.length,tasks:j(e=>e.tasks),runnerMs:j(e=>e.runnerMs),tokenCount:j(e=>e.tokenCount)}})}async function x(e,t,n,i){t.local&&await c(t);let a=i.searchParams.get(`installation`),o=await t.store.list(`usage`);return r(a?o.filter(e=>e.value.installationId===a):o)}async function S(e,t,n,i){t.local&&await c(t);let a=Number(i.searchParams.get(`since`)??0),o=i.searchParams.get(`by`);if([`until`,`agent`,`tz`,`parts`,`top`,`cursor`].some(e=>i.searchParams.has(e))||o===`day`)return b(t,i);if(!Number.isFinite(a)||o&&![`agent`,`installation`,`engine`].includes(o))return r({error:`Invalid usage query`},400);let s=(await t.store.list(`usage`)).map(e=>e.value);return r(_(s,a,o))}export{l as a,d as i,x as n,S as r,f as t};
@@ -1,4 +1,4 @@
1
- import{Kt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-msOzZFXW.js";import{_ as n,a as r,b as i,c as a,h as o,l as s,n as c,p as l,s as u,u as d,v as f,y as p}from"./output-BKeyLbvt.js";import{l as m,t as h}from"./args-DEMOfLz2.js";import g from"node:process";const _=t({name:`flow watch`,help:{usage:`coder flow watch [run-id] [--tail <n|all>] [--json]`,summary:`Watch a flow run live: replay its progress lines from the start, then keep
1
+ import{Kt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{_ as n,a as r,b as i,c as a,h as o,l as s,n as c,p as l,s as u,u as d,v as f,y as p}from"./output-BKeyLbvt.js";import{l as m,t as h}from"./args-DEMOfLz2.js";import g from"node:process";const _=t({name:`flow watch`,help:{usage:`coder flow watch [run-id] [--tail <n|all>] [--json]`,summary:`Watch a flow run live: replay its progress lines from the start, then keep
2
2
  following while it runs (Ctrl-C detaches; it keeps running). Blocks until it
3
3
  finishes; exits 0 on success, 1 otherwise. Defaults to the most recent run.
4
4
  For the result alone, prefer \`coder flow result\`. Alias: stream.`,flags:[[`--tail <n|all>`,`replay only the last n events first (default: all)`]],examples:[[`coder flow watch`,`follow the most recent run to completion`]]},options:{...h,tail:m},args:1,run:async({options:e,args:[t]})=>{let{watchRun:n}=await import(`./executor-HWnIIYUL.js`).then(e=>e.b);return N(n(t,{tail:e.tail}),{json:e.json,stream:!0})}}),v=[`⣾`,`⣽`,`⣻`,`⢿`,`⡿`,`⣟`,`⣯`,`⣷`];function y(e,t=!1){let n=l;return t?c(`[${x(e)}]`,10):e===`completed`?n.bold(n.green(`✔`)):e===`failed`||e===`cancelled`||e===`stopped`?n.bold(n.red(`✘`)):e===`running`?n.bold(n.cyan(`●`)):n.dim(`○`)}function b(){return c(`[start]`,10)}function x(e){return e===`completed`?`done`:e===`cancelled`?`failed`:e}function S(e,t){return e??t.replace(/\s+/g,` `).trim().slice(0,60)}function C(e,t,n,r,i,a){let o=l,u=c(t??n,32);return[`${e} ${a?o.bold(u):u}`,o.dim(c(n,24)),o.light(c(i??``,20)),r?o.light(`${s(r.total)} tok`):``].join(` `).trimEnd()}function w(e,t=!1){let n=l;return`${y(e.ok?`completed`:`failed`,t)} ${n.dim(`gate`)} ${n.light(e.cmd)}${e.ok?``:n.dim(` · exit ${e.code}`)}`}function T(e,t,n){let i=l,a=n!==void 0&&n>=1e3?i.dim(` · ${r(n)}`):``;return`${t} ${i.dim(`gate`)} ${i.light(e)}${a}`}function E(e,t=!1){return l.dim(`${`│ `.repeat(e)}${t?`└─`:`├─`}`)}function D(e){return l.dim(`${`│ `.repeat(e)}│ `)}function O(e){return`${` `.repeat(e.depth)}${e.log?`${c(`[log]`,10)} `:``}${e.body}`}function k(e,t,n=!1){return n?O(e):`${e.log?D(e.depth):E(e.depth,t)} ${e.body}`}function A(e){return l.dim(`${`│ `.repeat(Math.max(0,e))}│`)}var j=class{stream;names=new Map;active=new Map;activeGates=new Map;pending;previews=new Map;frame=0;hasCommitted=!1;timer;tty;region;constructor(e=g.stdout){this.stream=e,this.tty=!!e.isTTY,this.region=new n(e)}emit(e){let t=l;switch(e.kind){case`task-start`:{let t={name:S(e.name,e.prompt),engine:e.engine,depth:e.depth??0};if(this.names.set(e.taskId,t),!this.tty){this.final(t.depth,C(b(),t.name,e.taskId,null,t.engine));return}this.active.set(e.taskId,t),this.spin(!0),this.repaint();return}case`task-end`:{this.active.delete(e.taskId),this.previews.delete(e.taskId),this.idle();let t=this.names.get(e.taskId);this.final(t?.depth??0,C(y(e.status,!this.tty),t?.name??null,e.taskId,e.tokens,t?.engine));return}case`gate-start`:{let t={cmd:e.cmd,depth:e.depth??0,startedAt:Date.now()};if(!this.tty){this.final(t.depth,T(t.cmd,b()));return}this.activeGates.set(e.gateId,t),this.spin(!0),this.repaint();return}case`gate`:e.gateId&&this.activeGates.delete(e.gateId),this.idle(),this.final(e.depth??0,w(e,!this.tty));return;case`log`:for(let n of e.message.split(`
@@ -1,4 +1,4 @@
1
- import{fn as e,jn as t}from"./dispatch-YW1aqjEg.js";import{i as n,r}from"./cli-msOzZFXW.js";import{p as i,y as a}from"./output-BKeyLbvt.js";import{i as o,l as s,n as c,s as l,t as u}from"./args-DEMOfLz2.js";import{a as d,d as f,i as p,l as m,n as h,t as g,u as _}from"./result-oQey_hdw.js";import v from"node:process";import*as y from"zod/mini";const b={server:o,workspace:l,yes:c};function x(e,t){let n=e.level===`sys`?t.dim(`· ${e.line}`):e.level===`err`?t.light(e.line):e.line;v.stdout.write(`${n}\n`)}async function S(n,r,o){if(`attempts`in n.task){for await(let e of n.events)o.json?v.stdout.write(`${JSON.stringify(e,null,2)}\n`):x(e,i);let e=await n.final();o.json||p(e,i),v.exit(0)}let s=n.task,c=o.trim===void 0?500:o.trim===`none`?1/0:o.trim,l=await g.create({cwd:s.cwd??r,startedAt:Date.parse(s.createdAt??``)||void 0,trim:c,explicitTrim:o.trim!==void 0,width:a()});if(!o.json){let t=[...m(s,{status:s.status}),...e.includes(s.status)?[i.dim(`Watching. Press Ctrl-C to stop.`)]:[],...s.prompt?d(s.prompt,i,{truncate:!1}):[],``];v.stdout.write(`${t.join(`
1
+ import{fn as e,jn as t}from"./dispatch-YW1aqjEg.js";import{i as n,r}from"./cli-IfrPgeYz.js";import{p as i,y as a}from"./output-BKeyLbvt.js";import{i as o,l as s,n as c,s as l,t as u}from"./args-DEMOfLz2.js";import{a as d,d as f,i as p,l as m,n as h,t as g,u as _}from"./result-DtXZusqj.js";import v from"node:process";import*as y from"zod/mini";const b={server:o,workspace:l,yes:c};function x(e,t){let n=e.level===`sys`?t.dim(`· ${e.line}`):e.level===`err`?t.light(e.line):e.line;v.stdout.write(`${n}\n`)}async function S(n,r,o){if(`attempts`in n.task){for await(let e of n.events)o.json?v.stdout.write(`${JSON.stringify(e,null,2)}\n`):x(e,i);let e=await n.final();o.json||p(e,i),v.exit(0)}let s=n.task,c=o.trim===void 0?500:o.trim===`none`?1/0:o.trim,l=await g.create({cwd:s.cwd??r,startedAt:Date.parse(s.createdAt??``)||void 0,trim:c,explicitTrim:o.trim!==void 0,width:a()});if(!o.json){let t=[...m(s,{status:s.status}),...e.includes(s.status)?[i.dim(`Watching. Press Ctrl-C to stop.`)]:[],...s.prompt?d(s.prompt,i,{truncate:!1}):[],``];v.stdout.write(`${t.join(`
2
2
  `)}\n`)}let u=null,y=null,b=e=>{let t=l.render(e);t.length&&v.stdout.write(`${t.join(`
3
3
  `)}\n`)};for await(let e of n.events){let t=e;if(t.kind===`usage`&&t.tokens&&(u=t.tokens),o.json){let e=t.kind===`steer`?1/0:c,n=t.message?{...t,message:f(t.message,e,{plain:!0})}:t;v.stdout.write(`${JSON.stringify(n)}\n`);continue}t.kind!==`usage`&&(y&&=(b(y),null),t.kind===`assistant`?y=t:b(t))}let{status:S,result:C,task:w}=await n.final();if(o.json)v.stdout.write(`${JSON.stringify({taskId:s.id,status:S,result:C},null,2)}\n`);else{let e=S===`completed`?`(no final message)`:`(task ${S})`,n=_(w,{tokens:C?.tokens??u,tokenModel:C?.model,files:C?.touchedFiles?.map(e=>t(s.cwd??r,e)),statusChanged:S!==s.status});n.length&&v.stderr.write(`\n${n.join(`
4
4
  `)}\n`);let i=h(C,w.error,e),a=y?String(y.message??``):``;v.stdout.write(`\n${i.trim()?i:a}\n`)}v.exit(S===`completed`?0:1)}const C=n({name:`task watch`,help:{usage:`coder task watch [task-id] [--server [url]]`,summary:`Stream a running task's transcript live (for you/debugging), then print its
@@ -1 +1 @@
1
- import{Vt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-msOzZFXW.js";import{i as n}from"./output-BKeyLbvt.js";import{s as r}from"./args-DEMOfLz2.js";import i from"node:process";const a=t({name:`task worker`,options:{cwd:r},args:1,async run({args:[t],cwd:r}){let{startAgentMailbox:a}=await import(`./exec-DgI3boHa.js`).then(e=>e.i),{runWorker:o}=await import(`./worker-C4Lo6rLS.js`),s=e(r,t);s||n(`Worker: task ${t} not found.`),await o(r,s,a).catch(()=>i.exit(1))}});export{a as commandWorker};
1
+ import{Vt as e}from"./dispatch-YW1aqjEg.js";import{i as t}from"./cli-IfrPgeYz.js";import{i as n}from"./output-BKeyLbvt.js";import{s as r}from"./args-DEMOfLz2.js";import i from"node:process";const a=t({name:`task worker`,options:{cwd:r},args:1,async run({args:[t],cwd:r}){let{startAgentMailbox:a}=await import(`./exec-DgI3boHa.js`).then(e=>e.i),{runWorker:o}=await import(`./worker-C4Lo6rLS.js`),s=e(r,t);s||n(`Worker: task ${t} not found.`),await o(r,s,a).catch(()=>i.exit(1))}});export{a as commandWorker};
@@ -1 +1 @@
1
- import{i as e}from"./cli-msOzZFXW.js";import t from"node:process";const n=e({name:`server workflow`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder server workflow`,summary:`Print the workflow the github-actions runner dispatches. Save it as .github/workflows/coder-agent.yml in every repo the agent runs on, and set RUNNER=github-actions on the server.`,examples:[[`coder server workflow > .github/workflows/coder-agent.yml`,`add it to a repo`]]},options:{},run:async()=>{let{ACTIONS_WORKFLOW_YAML:e}=await import(`./github-actions-CvLya8ve.js`).then(e=>e.r);return e},print:e=>t.stdout.write(e)});export{n as commandServerWorkflow};
1
+ import{i as e}from"./cli-IfrPgeYz.js";import t from"node:process";const n=e({name:`server workflow`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder server workflow`,summary:`Print the workflow the github-actions runner dispatches. Save it as .github/workflows/coder-agent.yml in every repo the agent runs on, and set RUNNER=github-actions on the server.`,examples:[[`coder server workflow > .github/workflows/coder-agent.yml`,`add it to a repo`]]},options:{},run:async()=>{let{ACTIONS_WORKFLOW_YAML:e}=await import(`./github-actions-CvLya8ve.js`).then(e=>e.r);return e},print:e=>t.stdout.write(e)});export{n as commandServerWorkflow};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wular/coder",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "Delegating coding-agent runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/sdk.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coder",
3
- "version": "0.4.5",
3
+ "version": "0.4.6",
4
4
  "description": "Delegate coding tasks to supervised Coder subagents running on Codex, Claude, or any OpenAI-compatible model. Your main context stays clean.",
5
5
  "author": {
6
6
  "name": "muzam1l"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "coder",
3
3
  "displayName": "Coder",
4
- "version": "0.4.5",
4
+ "version": "0.4.6",
5
5
  "description": "Delegate coding tasks to supervised Coder subagents running on Codex, Claude, or any OpenAI-compatible model. Your main context stays clean.",
6
6
  "author": {
7
7
  "name": "muzam1l"
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-msOzZFXW.js";const t=e(`auth`,{login:async()=>(await import(`./login-BzdlmD_o.js`)).commandLogin,logout:async()=>(await import(`./logout-DOrRoxDV.js`)).commandLogout,status:async()=>(await import(`./status-BBW7Qyde.js`)).commandStatus},{menu:[{usage:`login`,blurb:`sign in through the browser`},{usage:`logout`,blurb:`sign out and forget the saved session`},{usage:`status`,blurb:`show where you are signed in`}],description:[`Sign in to Coder and manage saved server sessions.`],exampleCommand:`auth login`});export{t as commandAuth};
@@ -1 +0,0 @@
1
- import{s as e}from"./cli-msOzZFXW.js";const t=e(`credentials`,{list:async()=>(await import(`./list-DGoVY-ao.js`)).commandCredentialsList,add:async()=>(await import(`./add-DTwoL7vJ.js`)).commandCredentialsAdd,login:async()=>(await import(`./login-otJB9SYu.js`)).commandCredentialsLogin,remove:async()=>(await import(`./remove-DgMg_OOu.js`)).commandCredentialsRemove,default:async()=>(await import(`./default-fMaQH1wm.js`)).commandCredentialsDefault},void 0,{help:{usage:`coder credentials [list|add|login|remove|default] ...`,summary:`Manage engine credentials. Your personal ones are yours alone; workspace ones serve every member, and only owners and admins change them. A task runs on its requester's default for the engine, else the workspace's.`}});export{t as commandCredentials};
@@ -1 +0,0 @@
1
- "use client";import{a,b,c,d}from"./composer-8abfcac26339cc99.js";import"./connect-repositories-8864a63f83ffd411.js";import"./composer-data-6f7608fed13f3dd7.js";import"./model-options-15c53331a2f28a4f.js";import"./select-591ca78b6ae29bd8.js";import"./task-ddfddeaf07fb684c.js";import"./card-818c7a0d580e2e0d.js";import"./field-43fea54c1c287e30.js";import"./format-b19b8eec331414f4.js";import"./shared-init-8a34c730aabe942d.js";import"./shared-init-8a34c730aabe942d.js";import"./wular-pnext-37175329f2865f15-0.js";import"./shared-init-8a34c730aabe942d.js";import"./shared-init-8a34c730aabe942d.js";import"./shared-init-8a34c730aabe942d.js";import"./shared-init-8a34c730aabe942d.js";import"./shared-init-17c1fd399ac53851.js";import"./shared-init-17c1fd399ac53851.js";import"./shared-init-17c1fd399ac53851.js";import"./shared-init-37175329f2865f15-2.js";import"./shared-init-37175329f2865f15-2.js";import"./shared-init-8f2ac936c95a7f7b.js";export{b as Composer,c as LoadingComposer,a as NeedsCredential,d as NewTaskButton};
@@ -1 +0,0 @@
1
- "use client";import{b as a,c as b}from"./instructions-0b968d5d0a58c716.js";import"./shared-init-17c1fd399ac53851.js";import"./shared-init-8f2ac936c95a7f7b.js";export{b as Instructions,a as markdown};
@@ -1,5 +0,0 @@
1
- import{$1a as u}from"./shared-init-8f2ac936c95a7f7b.js";var v=0;function m(e,t,s,n,i,a){t||(t={});var r,d,h=t;if("ref"in h)for(d in h={},t)d=="ref"?r=t[d]:h[d]=t[d];var c={type:e,props:h,key:s,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--v,__i:-1,__u:0,__source:i,__self:a};if(typeof e=="function"&&(r=e.defaultProps))for(d in r)h[d]===void 0&&(h[d]=r[d]);return u.vnode&&u.vnode(c),c}function w({d:e,class:t}){return m("svg",{class:t?`ic ${t}`:"ic",viewBox:"0 0 24 24","aria-hidden":"true",children:m("path",{d:e})})}function k(){return m("svg",{class:"coder-mark",viewBox:"0 0 16 16","aria-hidden":"true",children:m("path",{d:"M5 0h3v3h-3zM9 0h3v3h-3zM13 0h3v3h-3zM0 4h3v3h-3zM0 9h3v3h-3zM5 13h3v3h-3zM9 13h3v3h-3zM13 13h3v3h-3z"})})}var l=class extends Error{code;hint;taskId;payload;approval;result;runId;status;constructor(e,t,s={}){super(t),this.name="CoderError",this.code=e,Object.assign(this,s)}},$=class extends l{constructor(e,t,s="",n){super("server",t,{status:e,...n?{hint:n}:{}}),this.authenticate=s}};function q(e){try{let t=new URL(e).hostname.toLowerCase();return t==="localhost"||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)}catch{return!1}}function y(e){let t;try{t=new URL(e)}catch{throw new l("invalid-option","Give the server as a URL, e.g. https://agents.example.com.")}if(t.protocol!=="https:"&&!(t.protocol==="http:"&&q(t.origin)))throw new l("invalid-option","Coder servers require HTTPS unless they are loopback.",{hint:"Use https://, or http://localhost for a local server."});if(t.username||t.password||t.search||t.hash)throw new l("invalid-option","The server must be an origin without credentials, query, or fragment.");return t.toString().replace(/\/+$/,"")}var p=(e,t,s)=>`/admin/credentials/${encodeURIComponent(e)}${t}${s?"?workspace":""}`,o=(e,t)=>{let s=new URLSearchParams;"cursor"in t&&typeof t.cursor=="string"&&s.set("cursor",t.cursor);for(let[n,i]of Object.entries(t))n!=="cursor"&&i!==void 0&&i!==!1&&i!==""&&s.set(n,i===!0?"1":Array.isArray(i)?i.join(","):String(i));return`${e}?${s}`},C=new Set(["completed","failed","cancelled"]),U=class{url;fetchImpl;organization;renewal;onError;token;cookie;constructor(e,t,s={}){if(this.cookie="cookie"in t,this.url=e?y(e):"",!this.cookie&&!this.url)throw new l("invalid-option","Bearer clients need a server URL.");this.token="token"in t?t.token:void 0,this.fetchImpl=s.fetch??((n,i)=>fetch(n,i)),this.organization=s.organization,this.renewal=s.renewal,this.onError=s.onError}request(e,t={}){let s=this.read(e,t);return s.catch(()=>{}),s}async read(e,t){this.renewal&&this.renewal.expiresAt()-Date.now()<3e4&&(this.token=await this.renewal.renew());let s=await this.send(e,t);s.status===401&&this.renewal&&/invalid_token/.test(s.headers.get("www-authenticate")??"")&&(this.token=await this.renewal.renew(),s=await this.send(e,t));let n=await s.text().catch(()=>""),i={},a;try{n&&s.status!==204&&(i=JSON.parse(n))}catch{if(s.ok)throw new l("server",`The server answered ${s.status} with a body that is not JSON.`);this.cookie&&n&&(a=n)}if(!s.ok){let r=new $(s.status,i.error??i.message??a??`The server answered ${s.status}.`,s.headers.get("www-authenticate")??"",i.hint);throw this.onError?.(r),r}return i}send(e,t){let s=new Headers(t.headers);return t.body&&!s.has("content-type")&&s.set("content-type","application/json"),this.cookie||s.set("authorization",`Bearer ${this.token}`),this.organization&&s.set("x-coder-organization",this.organization),this.fetchImpl(`${this.url}${e}`,{...t,headers:s,...this.cookie?{credentials:"same-origin"}:{}}).catch(n=>{throw n instanceof l||n.name==="AbortError"?n:new l("server",this.url?`No Coder server answers at ${this.url}: ${n.message}`:"The server did not answer. Check the connection and try again.")})}post(e,t){return this.request(e,{method:"POST",...t!==void 0?{body:JSON.stringify(t)}:{}})}me(){return this.request("/me")}info(){return this.request("/api/auth/capabilities")}linkAccount(e){return this.post("/connect",{token:e})}signOut(){return this.post("/api/auth/sign-out",{})}agents={list:e=>this.request(o("/admin/agents",{...e,...e?.connect?{connect:1}:{}})),get:(e,t)=>this.request(o(`/admin/agents/${encodeURIComponent(e)}`,{...t?.versions===!1?{versions:0}:{},...t?.content===!1?{content:0}:{}})),versions:(e,t={})=>this.request(o(`/admin/agents/${encodeURIComponent(e)}/versions`,t)),remove:e=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:"DELETE"}),preview:(e,t)=>this.request(o("/admin/agents/import",{repo:e,ref:t})),version:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/versions/${t}`),put:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(t)}).then(s=>({id:e,version:s.version,unchanged:s.unchanged})),settings:(e,t)=>this.request(`/admin/agents/${encodeURIComponent(e)}/settings`,{method:"PATCH",body:JSON.stringify(t)}),import:(e,t,s)=>this.post("/admin/agents/import",{repo:e,ref:t,...s?{agents:s}:{}})};folders={list:()=>this.request("/admin/folders"),check:e=>this.post("/admin/folders/check",{path:e}),clone:e=>this.post("/admin/folders/clone",{url:e}),pick:()=>this.post("/admin/folders/pick",{})};tasks={run:e=>this.post("/admin/tasks",e),list:e=>this.request(o("/admin/tasks",{limit:20,...e,...e?.archived?{archived:1}:{},...e?.summary?{summary:1}:{},...e?.counts?{counts:1}:{}})),get:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`),logs:(e,t=-1,s)=>this.request(o(`/admin/tasks/${encodeURIComponent(e)}/logs`,{after:t,limit:s})),stream:(e,t=-1,s)=>this.send(`/admin/tasks/${encodeURIComponent(e)}/stream?after=${t}`,{headers:{accept:"text/event-stream"},signal:s}),events:(e,t,s)=>this.send(o("/admin/events",{tasks:e}),{headers:{accept:"text/event-stream",...t?{"last-event-id":t}:{}},signal:s}),cancel:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/cancel`),steer:(e,t,s={})=>this.post(`/admin/tasks/${encodeURIComponent(e)}/steer`,{text:t,...s}),ask:(e,t)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/ask`,{question:t}),approve:(e,t,s)=>this.post(`/admin/tasks/${encodeURIComponent(e)}/approve`,{approvalId:t,decision:s}),archive:e=>this.post(`/admin/tasks/${encodeURIComponent(e)}/archive`),delete:e=>this.request(`/admin/tasks/${encodeURIComponent(e)}`,{method:"DELETE"}),create:e=>this.post("/admin/tasks",e),wait:async(e,t={})=>{let s=-1;for(;;){let n=await this.tasks.stream(e,s);if(!n.ok||!n.body){let a=await this.tasks.get(e);if(C.has(a.status))return a;if(n.status===401)continue;throw new l("server",`The task stream answered ${n.status}.`)}let i=!1;for await(let a of g(n.body))if(a.event==="log"){let r=JSON.parse(a.data);s=r.seq,t.onLog?.(r)}else a.event==="end"&&(i=!0);if(i)return this.tasks.get(e)}}};credentials={list:e=>this.request(o("/admin/credentials",e??{})),add:e=>this.post("/admin/credentials",e),remove:(e,{workspace:t}={})=>this.request(p(e,"",t),{method:"DELETE"}),setDefault:(e,{workspace:t}={})=>this.post(p(e,"/default",t)),login:e=>this.post("/admin/logins",{engine:e}),loginStatus:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`),loginCode:(e,t)=>this.post(`/admin/logins/${encodeURIComponent(e)}`,{code:t}),cancelLogin:e=>this.request(`/admin/logins/${encodeURIComponent(e)}`,{method:"DELETE"})};runners={list:()=>this.request("/admin/runners"),add:e=>this.post("/admin/runners",e),pair:e=>this.post("/admin/runners/pair",e),update:(e,t)=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)}),test:e=>this.post(`/admin/runners/${encodeURIComponent(e)}/test`,{}),remove:e=>this.request(`/admin/runners/${encodeURIComponent(e)}`,{method:"DELETE"})};integrations={list:()=>this.request("/admin/integrations")};repositories={list:()=>this.request("/admin/repositories")};engines={status:()=>this.request("/admin/engines/status"),login:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/login`,{}),logout:e=>this.post(`/admin/engines/${encodeURIComponent(e)}/logout`,{})};apps={list:e=>this.request(o("/admin/apps",{agent:e})),install:(e,t)=>this.post(o(`/admin/apps/${encodeURIComponent(e)}/install`,{back:t}))};installations={list:e=>this.request(o("/admin/installations",{agent:e}))};connections={add:e=>this.post("/admin/connections",e)};config={get:()=>this.request("/admin/config"),put:e=>this.request("/admin/config",{method:"PUT",body:JSON.stringify(e)}),patch:e=>this.request("/admin/config",{method:"PATCH",headers:{"content-type":"application/merge-patch+json"},body:JSON.stringify(e)})};models={list:()=>this.request("/admin/models"),add:e=>this.post("/admin/models",e),probe:e=>this.post("/admin/models/probe",e),remove:e=>this.request(`/admin/models/${encodeURIComponent(e)}`,{method:"DELETE"}),alias:(e,t)=>this.post(`/admin/models/${encodeURIComponent(e)}/alias`,{spec:t}),enable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/enable`),disable:e=>this.post(`/admin/models/${encodeURIComponent(e)}/disable`)};mcp={list:()=>this.request("/admin/mcp"),add:e=>this.post("/admin/mcp",e),remove:e=>this.request(`/admin/mcp/${encodeURIComponent(e)}`,{method:"DELETE"}),search:e=>this.request(o("/admin/mcp-registry",{q:e}))};flows={list:e=>this.request(o("/admin/flows",{repo:e})),run:(e,t)=>this.post(`/admin/flows/${encodeURIComponent(e)}/run`,t)};pulls={list:e=>this.request(o("/admin/pulls",{repo:e}))};review(e){return this.post("/admin/review",e)}usage(e={}){return this.request(o("/admin/usage/totals",{...e,since:e.since??Date.now()-10080*60*1e3}))}usageRows(e){return this.request(o("/admin/usage",{installation:e}))}};async function*g(e){let t=new TextDecoder,s="";for await(let n of e){s+=t.decode(n,{stream:!0});let i;for(;(i=s.indexOf(`
2
-
3
- `))>=0;){let a=s.slice(0,i);s=s.slice(i+2);let r="message",d,h=[];for(let c of a.split(`
4
- `))c.startsWith("event: ")?r=c.slice(7):c.startsWith("data: ")?h.push(c.slice(6)):c.startsWith("id: ")&&(d=c.slice(4));(h.length||d)&&(yield{event:r,data:h.join(`
5
- `),...d?{id:d}:{}})}}}var f=new U("",{cookie:!0},{onError(e){e.status===401&&(e.authenticate||/^Sign in/.test(e.message))&&(location.href=`/login?return=${encodeURIComponent(location.pathname+location.search)}`)}});async function I(){let{url:e}=await f.signOut();location.href=e??"/?signed_out=1"}function R(e,t){let s,n=!1,i=()=>{n||(s=setTimeout(a,t))},a=()=>{if(document.visibilityState==="hidden")return i();e().catch(()=>{}).finally(i)};return i(),()=>{n=!0,clearTimeout(s)}}export{w as $0a,k as $0b,g as $1a,f as $1b,I as $1c,R as $1d,m as $2a};
@@ -1,2 +0,0 @@
1
- import{f as He,i as je,j as ne,k as se}from"./wular-pnext-37175329f2865f15-0.js";function _(e,t={}){let r=Se(Ce(e,t.params??{})),a=Te(t.search),n=Ae(t.hash);return`${r}${a}${n}`}function Le(){return window.__PNEXT_TRAILING_SLASH__===!0}function j(){let e=window.__PNEXT_PREFETCH__;return e===void 0?"visible":e}function Se(e){let[,t="",r=""]=/^([^?#]*)([\s\S]*)$/.exec(e)??[];return t.startsWith("/")?Le()?t==="/"||t.endsWith("/")||/\.[^/]+$/.test(t)?e:`${t}/${r}`:t==="/"||!t.endsWith("/")||/\.[^/]+\/$/.test(t)?e:`${t.replace(/\/+$/,"")}${r}`:e}function Ce(e,t){let r=e.replace(/\[\[\.\.\.([^\]]+)\]\]/g,(a,n)=>H(t[n],!0)).replace(/\[\.\.\.([^\]]+)\]/g,(a,n)=>H(t[n],!0)).replace(/\[([^\]]+)\]/g,(a,n)=>H(t[n],!1));return Pe(r)}function Pe(e){return e.length<=1?e:e.replace(/\/+$/,"")||"/"}function H(e,t){if(Array.isArray(e)){let r=e.map(a=>encodeURIComponent(a));return t?r.join("/"):r[0]??""}return encodeURIComponent(e??"")}function Te(e){if(!e)return"";let t=(e instanceof URLSearchParams?e:Ie(e)).toString();return t?`?${t}`:""}function Ie(e){let t=new URLSearchParams;for(let[r,a]of Object.entries(e)){let n=Array.isArray(a)?a:[a];for(let s of n)s!=null&&t.append(r,String(s))}return t}function Ae(e){return e?e.startsWith("#")?e:`#${e}`:""}import{$1a as ce,$1b as Re}from"./shared-init-37175329f2865f15-2.js";import{$0a as Oe,$0d as Ne}from"./shared-init-37175329f2865f15-2.js";import{$1a as Ve,$1g as de,$1i as ue}from"./shared-init-8f2ac936c95a7f7b.js";var I=class extends Error{constructor(){super("Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams")}},Ue=class extends URLSearchParams{append(){throw new I}delete(){throw new I}set(){throw new I}sort(){throw new I}};He();function O(){return qe}var qe={push(e,...[t]){le(R(e,t),"push",t?.scroll)},replace(e,...[t]){le(R(e,t),"replace",t?.scroll)},prefetch(e,...[t]){Re(R(e,t),{strict:!0,full:t?.kind==="full",onInvalidate:t?.onInvalidate})},refresh(){ce(window.location.href,{replace:!0,scroll:!1})},back(){window.history.back()},forward(){window.history.forward()},get bfcacheId(){return De().bfcacheId??""}};function R(e,t){return Ze(t)?_(e,t):String(e)}function Ze(e){return!!(e&&("params"in e||"search"in e||"hash"in e))}function $(){return pe().pathname}function Be(){return new Ue(pe().search)}function N(){let e=Ve,t=e.__h,r;e.__h=(s,...i)=>{r=s.__P,t?.(s,...i)};let[a,n]=de(!1);return e.__h=t,ue(()=>{let s=r?.closest("a[data-pnext-link]");if(!s)return;let i=s.__pnextHints??=new Set;return i.add(n),()=>i.delete(n)},[]),{pending:a}}function pe(){let e=ie(),[,t]=de(()=>oe(e));return ue(()=>{We();let r=()=>t(a=>{let n=oe(ie());return a===n?a:n});return ne().add(r),r(),()=>ne().delete(r)},[]),e}function oe(e){return`${e.pathname}${e.search}${e.hash}`}function ie(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function De(){let e=history.state??{},t=window.__PNEXT_ROUTE__??{},r=typeof e.__pnextBfcacheId=="string"?e.__pnextBfcacheId:void 0;return r?{...t,bfcacheId:r}:t}function le(e,t,r=!0){if(Ne(e))return;let a=new URL(e,window.location.href);if(a.origin!==window.location.origin){let n=globalThis;n.__pnextMpaNavigation=(n.__pnextMpaNavigation??0)+1,requestAnimationFrame(()=>requestAnimationFrame(()=>{t==="replace"?window.location.replace(a.href):window.location.assign(a.href)}));return}if(a.pathname!==window.location.pathname||a.search!==window.location.search){ce(a.href,{replace:t==="replace",scroll:r});return}t==="replace"?window.history.replaceState(history.state,"",a):window.history.pushState(history.state,"",a),je(a,{scroll:r}),Oe.settleLink?.()}function We(){if(window.__PNEXT_HISTORY_PATCHED__)return;window.__PNEXT_HISTORY_PATCHED__=!0;let e=window.history.pushState.bind(window.history),t=window.history.replaceState.bind(window.history);function r(a){let n=window.history.state??{},s={};for(let l of Object.keys(n))l.startsWith("__pnext")&&(s[l]=n[l]);if(Object.keys(s).length===0)return a;let i=a??{};return Object.keys(i).some(l=>l.startsWith("__pnext"))?a:{...i,...s}}window.history.pushState=function(a,n,s){let i=window.location.href,l=e(r(a),n,s);return window.location.href!==i&&se(),l},window.history.replaceState=function(a,n,s){let i=window.location.href,l=t(r(a),n,s);return window.location.href!==i&&se(),l}}import{$1b as Fe,$1i as ze,$1k as Ke}from"./shared-init-8f2ac936c95a7f7b.js";function L({href:e,params:t,prefetch:r,replace:a,scroll:n,search:s,hash:i,onClick:l,onNavigate:f,onPrefetchStart:m,onPrefetchFinish:w,children:o,...d}){let u=_(e,{params:t??{},search:s,hash:i}),p=r??j(),E=Xe(m,w);return Fe("a",{...d,ref:E,href:u,"data-pnext-link":!0,"data-prefetch":p===!1?"false":p,"data-pnext-replace":a?"true":void 0,"data-pnext-scroll":n===!1?"false":void 0,onClick:c=>{let b=c;if(l?.(b),b.defaultPrevented||!f||!Ye(b))return;let x=Je();f(x),x.defaultPrevented&&b.preventDefault()}},o)}function Xe(e,t){let r=Ke(null);return ze(()=>{let a=r.current;if(!a||!e&&!t)return;let n=()=>e?.(),s=()=>t?.();return a.addEventListener("pnext:prefetchstart",n),a.addEventListener("pnext:prefetchfinish",s),()=>{a.removeEventListener("pnext:prefetchstart",n),a.removeEventListener("pnext:prefetchfinish",s)}},[e,t]),r}function Je(){return{defaultPrevented:!1,preventDefault(){this.defaultPrevented=!0}}}function Ye(e){return e.button===0&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey&&!e.currentTarget.target&&!e.currentTarget.download}var Ge="M12 8V4H8M6 8h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2ZM2 14h2M20 14h2M15 13v2M9 13v2",Qe="M22 12h-4l-3 9L9 3l-3 9H2",et="M3 3v18h18M18 17V9M13 17V5M8 17v-3",V="m15 18-6-6 6-6",tt="m6 9 6 6 6-6",U="m9 18 6-6-6-6",q="M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M6.3 17.7l-1.4 1.4M19.1 4.9l-1.4 1.4",Z="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",B="M4 4h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1ZM8 20h8M12 16v4",at="M2 15.5a5.5 5.5 0 1 0 11 0a5.5 5.5 0 1 0 -11 0M21 2l-9.6 9.6M15.5 7.5l3 3L22 7l-3-3",D="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4M16 17l5-5-5-5M21 12H9",rt="m12 3 1.9 5.1L19 10l-5.1 1.9L12 17l-1.9-5.1L5 10l5.1-1.9ZM19 3v4M17 5h4",nt="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.7-.9l-.8-1.2A2 2 0 0 0 7.9 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2ZM10 13a2 2 0 1 0 4 0a2 2 0 1 0 -4 0M14 13h3M7 13h3",W="M4 6h16M4 12h16M4 18h16",st="M18 6 6 18M6 6l12 12",S="M20 6 9 17l-5-5",ot="M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",it="M12 5v14M5 12h14",lt="M21 12a8 8 0 0 1-11.6 7.1L4 20l1-4.6A8 8 0 1 1 21 12Z",ct="M4 12h12M12 6l6 6-6 6",dt="M16 4h4v4M20 4l-7 7M4 20l6-6M16 20h4v-4M20 20l-5-5M4 4l5 5",ut="M4 11a7 7 0 1 0 14 0a7 7 0 1 0 -14 0M20 20l-3.5-3.5",pt="m21.7 18-8-14a2 2 0 0 0-3.4 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3M12 9v4M12 17h.01",ht="m4 17 6-6-6-6M12 19h8",ft="M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.7-.9l-.8-1.2A2 2 0 0 0 7.9 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",mt="M12 7v5l3 2M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",vt="M9 2v6M15 2v6M6 8h12v4a6 6 0 0 1-12 0ZM12 18v4",wt="M9 9h11v11H9ZM5 15H4V4h11v1",gt="M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6";import{$0a as C}from"./shared-init-17c1fd399ac53851.js";import{$1c as bt}from"./shared-init-17c1fd399ac53851.js";import{$2a as v}from"./shared-init-17c1fd399ac53851.js";import{$1c as he,$1g as z,$1i as F,$1j as yt,$1k as Mt}from"./shared-init-8f2ac936c95a7f7b.js";var $t=e=>{let t=e.params??{};return e.href.replace(/\[([^\]]+)\]/g,(r,a)=>encodeURIComponent(String(t[a]??"")))};function kt(e,t){let r=new URLSearchParams((e instanceof URLSearchParams,e));for(let[a,n]of Object.entries(t))r.set(a,n);return r}function Et({within:e,children:t,onClick:r,...a}){let n=$(),s=n===$t(a)||e!==void 0&&(n===e||n.startsWith(`${e}/`)),i=Mt(null);return v(L,{...a,"aria-current":s?"page":void 0,onClick:l=>{i.current=l.currentTarget,r?.(l)},children:[t,v(xt,{anchor:i,current:s})]})}function xt({anchor:e,current:t}){let{pending:r}=N();return yt(()=>{e.current&&(r&&!t?e.current.setAttribute("data-pending",""):e.current.removeAttribute("data-pending"))},[r,t]),null}var _t=3600*24*365,Lt=[["light","Light",q],["dark","Dark",Z],["system","System",B]];function St({theme:e}){let[t,r]=z(e),a=n=>{let s=document.documentElement;n==="system"?delete s.dataset.theme:s.dataset.theme=n,document.cookie=`theme=${n}; path=/; max-age=${_t}; samesite=lax`,r(n)};return v(he,{children:Lt.map(([n,s,i])=>v("button",{type:"button",class:"pop-item",role:"menuitemradio","aria-checked":t===n,onClick:()=>a(n),children:[v(C,{d:i}),v("span",{class:"grow",children:s}),v(C,{d:S})]},n))})}function Ct({class:e,icon:t,children:r}){return v("button",{type:"button",class:e,onClick:()=>void bt().catch(()=>location.reload()),children:[t?v(C,{d:D}):null,r]})}function Pt(){let[e,t]=z(!1),r=$();return F(()=>t(!1),[r]),F(()=>{if(document.documentElement.classList.toggle("drawer",e),!e)return;let a=n=>n.key==="Escape"&&t(!1);return addEventListener("keydown",a),()=>removeEventListener("keydown",a)},[e]),v(he,{children:[v("button",{type:"button",class:"icon-btn only-m","aria-label":"Open navigation",onClick:()=>t(!e),children:v(C,{d:W})}),v("div",{class:"scrim",onClick:()=>t(!1)})]})}var Tt="side";function It({collapsed:e}){let[t,r]=z(e);return F(()=>{let a=document.querySelector(".app");if(!a)return;let n=()=>r(a.classList.contains("side-min"));n();let s=new MutationObserver(n);return s.observe(a,{attributes:!0,attributeFilter:["class"]}),()=>s.disconnect()},[]),v("button",{type:"button",class:"icon-btn side-toggle","aria-label":t?"Expand sidebar":"Collapse sidebar","data-tip":t?"Expand sidebar":"Collapse sidebar",onClick:()=>{let a=!t;document.querySelector(".app")?.classList.toggle("side-min",a),document.cookie=`${Tt}=${a?"min":"max"}; path=/; max-age=31536000; samesite=lax`},children:v(C,{d:t?U:V})})}import{$1a as At,$1b as Ht}from"./shared-init-17c1fd399ac53851.js";import{$2a as g}from"./shared-init-17c1fd399ac53851.js";import{$1g as fe,$1i as M,$1k as k}from"./shared-init-8f2ac936c95a7f7b.js";function ge({status:e}){return g("span",{class:`st ${e}`,children:[g("i",{}),be[e]??e]})}var be={queued:"waiting for slot",running:"running",waiting:"needs approval",completed:"completed",failed:"failed",cancelled:"cancelled"},P="coder:watched",ye="coder:notify",A="coder:toast",Q=new Set(["completed","failed","cancelled"]),jt=new Set([...Q,"waiting"]),Rt=20,me=3,Ot=8e3,ve="coder:events",K="coder:task",X="coder:task-replay",J="coder:task-reset",Y="coder:task-resync",Nt=6e4,Vt=200,G=()=>{try{return JSON.parse(localStorage.getItem(P)??"{}")??{}}catch{return{}}},Me=e=>{let t=Object.entries(e).sort(([,r],[,a])=>a.at-r.at).slice(0,Rt);localStorage.setItem(P,JSON.stringify(Object.fromEntries(t))),dispatchEvent(new Event(P))},$e=(e,t,r)=>dispatchEvent(new CustomEvent(A,{detail:{title:e,line:t,err:r}})),Ut=(e,t)=>$e(e,t,!0);function ke(e,t,r){let a=G(),n=a[e];!n&&Q.has(t)||n?.status===t&&(!r||n.title===r)||(a[e]={title:r||n?.title||e,status:t,at:n?.at??Date.now()},Me(a))}var we=e=>/^\/dash\/tasks\/([^/]+)$/.exec(e)?.[1];function qt(e){let t=n=>typeof n=="string"?n.trim().split(`
2
- `)[0]:"",r=e.approval??{},a=typeof e.result=="object"?e.result?.output:e.result;return e.status==="waiting"?t(r.summary)||t(r.reason)||t(r.kind)||"It is waiting for your approval.":e.status==="completed"?t(a)||"It finished.":t(e.error)||(e.status==="failed"?"It failed.":"It was stopped.")}function Ee(e,t,r){let a=k({on:e,reset:t,resync:r});a.current={on:e,reset:t,resync:r},M(()=>{let n=l=>a.current.on(l.detail),s=()=>a.current.reset?.(),i=()=>a.current.resync?.();return addEventListener(K,n),addEventListener(J,s),addEventListener(Y,i),dispatchEvent(new CustomEvent(X,{detail:l=>a.current.on(l)})),()=>{removeEventListener(K,n),removeEventListener(J,s),removeEventListener(Y,i)}},[])}function Zt(e,t){let r=k(e);r.current=e;let a=k(),n=[...e].sort().join(",");M(()=>{let s=new Map,i=c=>{s.delete(c.id),s.set(c.id,c),s.size>Vt&&s.delete(s.keys().next().value),dispatchEvent(new CustomEvent(K,{detail:c}))},l=c=>{for(let b of s.values())c.detail(b)};addEventListener(X,l);let f=typeof BroadcastChannel<"u"&&navigator.locks?new BroadcastChannel(ve):void 0,m=new AbortController,w,o=()=>{},d,u=c=>{w=c.id??w,c.event&&i(c.event),c.resync&&dispatchEvent(new Event(Y)),c.reset&&(s.clear(),dispatchEvent(new Event(J)))};f?.addEventListener("message",({data:c})=>{if(!c.hello)return u(c);d??=setTimeout(()=>{d=void 0,a.current?.abort.abort(),o()},300)}),f?.postMessage({hello:!0});let p=async()=>{t.current=!0;let c=setInterval(()=>{f?.postMessage({resync:!0}),u({resync:!0})},Nt);try{await E()}finally{clearInterval(c)}},E=async()=>{for(;!m.signal.aborted;){let c=new AbortController,b=()=>c.abort();m.signal.addEventListener("abort",b);let x=r.current;a.current={key:[...x].sort().join(","),abort:c};let te=1e3;try{let y=await Ht.tasks.events(x,w,c.signal);if(y.status===404)return void(t.current=!1);if(!y.ok||!y.body)te=[401,403].includes(y.status)?6e4:5e3;else for await(let{event:T,data:_e,id:ae}of At(y.body)){if(c.signal.aborted)break;let re={...ae?{id:ae}:{},...T==="task"?{event:JSON.parse(_e)}:{},...T==="reset"?{reset:!0}:{}};f?.postMessage(re),u(re)}}catch{}m.signal.removeEventListener("abort",b),!c.signal.aborted&&(await new Promise(y=>{let T=setTimeout(y,te);o=()=>{clearTimeout(T),y()}}),o=()=>{})}};return f?navigator.locks.request(ve,{signal:m.signal},p).catch(()=>{}):p(),()=>{m.abort(),o(),clearTimeout(d),f?.close(),removeEventListener(X,l)}},[]),M(()=>{a.current&&a.current.key!==n&&a.current.abort.abort()},[n])}function Bt({toast:e,dismiss:t}){return M(()=>{let r=setTimeout(()=>t(e.key),Ot);return()=>clearTimeout(r)},[]),g("div",{class:e.err?"toast err":"toast",onClick:()=>t(e.key),children:[g("p",{class:"toast-head",children:[e.id?g(L,{class:"cover",href:"/dash/tasks/[id]",params:{id:e.id},children:e.title}):g("span",{class:"cover",children:e.title}),e.status?g(ge,{status:e.status}):null]}),g("p",{class:"toast-line",children:e.line})]})}function Dt(){let e=$(),t=O(),[r,a]=fe({}),[n,s]=fe([]),i=k(we(e));i.current=we(e);let l=k({}),f=k(!1);M(()=>{let o=()=>{let d=G();for(let[u,p]of Object.entries(d))l.current[u]??=p.status;a(d)};return o(),addEventListener(P,o),addEventListener("storage",o),()=>{removeEventListener(P,o),removeEventListener("storage",o)}},[]),M(()=>{let o=d=>{let u=d.detail;s(p=>[{key:`${A}:${Date.now()}`,...u},...p].slice(0,me))};return addEventListener(A,o),()=>removeEventListener(A,o)},[]),M(()=>{if(!n.length)return;let o=d=>d.key==="Escape"&&s([]);return addEventListener("keydown",o),()=>removeEventListener("keydown",o)},[n.length]);let m=o=>s(d=>d.filter(u=>u.key!==o));Ee(o=>{let d=G(),u=d[o.id];if(!u)return;if(o.deleted)return delete d[o.id],Me(d);let p=l.current[o.id]??u.status;l.current[o.id]=o.status,p!==o.status&&w(o.id,{...o,result:o.result??void 0,error:o.error??void 0},u)});let w=(o,d,u)=>{if(ke(o,d.status),!jt.has(d.status)||i.current===o)return;let p={key:`${o}:${Date.now()}`,id:o,title:u.title,status:d.status,line:qt(d)};if(s(c=>[p,...c].slice(0,me)),!f.current||localStorage.getItem(ye)!=="1"||typeof Notification>"u"||Notification.permission!=="granted")return;let E=new Notification(`${p.title} (${be[p.status]})`,{body:p.line,tag:o});E.onclick=()=>{focus(),t.push("/dash/tasks/[id]",{params:{id:o}})}};return Zt(Object.entries(r).filter(([,o])=>!Q.has(o.status)).map(([o])=>o),f),g("section",{class:"toasts","aria-label":"Task updates","aria-live":"polite",children:n.map(o=>g(Bt,{toast:o,dismiss:m},o.key))})}import{$0a as ee}from"./shared-init-17c1fd399ac53851.js";import{$2a as h}from"./shared-init-17c1fd399ac53851.js";import{$1c as Wt,$1k as Ft,$1m as xe}from"./shared-init-8f2ac936c95a7f7b.js";function zt({summary:e,summaryClass:t,label:r,tip:a,align:n="right",wide:s,class:i,children:l}){let f=xe();return h("span",{class:`menu ${n}${i?` ${i}`:""}`,children:[h("button",{popovertarget:f,type:"button",class:t,"aria-label":r,title:a?void 0:r,"data-tip":a,children:e}),h("div",{id:f,class:s?"pop wide":"pop",popover:"auto",onBeforeToggle:m=>{if(m.newState!=="open")return;let w=m.currentTarget,o=w.parentElement?.querySelector("button")?.getBoundingClientRect();if(!o)return;let d=n==="up"?o.top-20:window.innerHeight-o.bottom-20;w.style.maxHeight=`${Math.max(120,Math.round(d))}px`},onClick:m=>{m.target.closest("a, button:not([data-keep])")&&m.currentTarget.hidePopover()},children:l})]})}function Kt({icon:e,title:t,sub:r,href:a,onClick:n,danger:s}){let i=h(Wt,{children:[e?h(ee,{d:e}):null,h("span",{class:"grow",children:[t,r?h("small",{children:r}):null]})]}),l=`pop-item${r?" rich":""}${s?" danger":""}`;return a?h("a",{class:l,href:a,.../^https?:\/\//.test(a)?{target:"_blank",rel:"noreferrer"}:{},children:i}):h("button",{type:"button",class:l,onClick:n,children:i})}function Xt({label:e,children:t}){let r=xe(),a=Ft(null),n=s=>i=>{i.pointerType==="mouse"&&a.current.togglePopover(s)};return h("span",{class:"more",onPointerEnter:n(!0),onPointerLeave:n(!1),children:[h("button",{popovertarget:r,type:"button",children:e}),h("div",{id:r,ref:a,class:"more-list scroll-box",popover:"auto",children:t})]})}function Jt({on:e,onPick:t,icon:r,children:a}){return h("button",{type:"button",role:"menuitemradio","aria-checked":e,class:e?"pop-item on":"pop-item",onClick:t,children:[typeof r=="string"?h(ee,{d:r}):r,h("span",{class:"grow",children:a}),e?h(ee,{d:S}):null]})}export{kt as $0a,Et as $0b,St as $0c,Ct as $0d,Pt as $0e,It as $0f,L as $1a,_ as $2a,j as $2b,vt as $3A,wt as $3B,gt as $3C,Ge as $3a,Qe as $3b,et as $3c,V as $3d,tt as $3e,U as $3f,q as $3g,Z as $3h,B as $3i,at as $3j,D as $3k,rt as $3l,nt as $3m,W as $3n,st as $3o,S as $3p,ot as $3q,it as $3r,lt as $3s,ct as $3t,dt as $3u,ut as $3v,pt as $3w,ht as $3x,ft as $3y,mt as $3z,ge as $4a,ye as $4b,$e as $4c,Ut as $4d,ke as $4e,Ee as $4f,Dt as $4g,O as $5a,$ as $5b,Be as $5c,N as $5d,zt as $6a,Kt as $6b,Xt as $6c,Jt as $6d};
@@ -1 +0,0 @@
1
- import{a as l}from"./chunks/sentinel-b4c91a38a5d79219.js";import{$0b as a,$0c as d,$0d as p,$0e as c,$0f as f}from"./chunks/shared-init-8a34c730aabe942d.js";import{$4g as s}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import{$6a as e,$6c as r}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import{$1c as m}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as t,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:u,remountRoute:L,unmountRoute:I}=t({islands:[{id:"c-30b20a1d70",Component:e},{id:"c-406d056fac",Component:a},{id:"c-5427c4fb35",Component:d},{id:"c-5bc004d6fd",Component:l},{id:"c-6340275418",Component:n},{id:"c-a658f1dd22",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-e9e914cf5dd959e9.js").then(o=>o.TasksList)},{id:"c-b3518e3c2f",options:{},load:()=>import("./chunks/composer-44516934e5619d32.js").then(o=>o.NewTaskButton)},{id:"c-b8a7a49ce0",options:{},load:()=>import("./chunks/platform-actions-4592c82f72b21b1a.js").then(o=>o.PlatformActions)},{id:"c-bd44f2aae0",Component:s},{id:"c-cffc8b5322",Component:p},{id:"c-d3b8e82f67",Component:c},{id:"c-e51aae6dfc",Component:r},{id:"c-f997c77c27",Component:f}]});m();i()||u();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:u,unmountRoute:I});export{u as mountRoute,L as remountRoute,I as unmountRoute};
@@ -1 +0,0 @@
1
- import{a as c}from"./chunks/sentinel-b4c91a38a5d79219.js";import{$0b as e,$0c as d,$0d as a,$0e as p,$0f as f}from"./chunks/shared-init-8a34c730aabe942d.js";import{$4g as s}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import{$6a as r}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import{$1c as m}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as t,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:l,remountRoute:g,unmountRoute:u}=t({islands:[{id:"c-30b20a1d70",Component:r},{id:"c-406d056fac",Component:e},{id:"c-5427c4fb35",Component:d},{id:"c-5bc004d6fd",Component:c},{id:"c-6340275418",Component:n},{id:"c-a658f1dd22",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-e9e914cf5dd959e9.js").then(o=>o.TasksList)},{id:"c-b3518e3c2f",options:{},load:()=>import("./chunks/composer-44516934e5619d32.js").then(o=>o.NewTaskButton)},{id:"c-bd44f2aae0",Component:s},{id:"c-cffc8b5322",Component:a},{id:"c-d3b8e82f67",Component:p},{id:"c-f997c77c27",Component:f}]});m();i()||l();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:l,unmountRoute:u});export{l as mountRoute,g as remountRoute,u as unmountRoute};
@@ -1 +0,0 @@
1
- import{a as f}from"./chunks/sentinel-b4c91a38a5d79219.js";import{$0b as r,$0c as e,$0d as s,$0e as a,$0f as p}from"./chunks/shared-init-8a34c730aabe942d.js";import{$4g as d}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import{$6a as m}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import{$1c as i}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as n}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as t}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:c,remountRoute:k,unmountRoute:u}=o({islands:[{id:"c-30b20a1d70",Component:m},{id:"c-406d056fac",Component:r},{id:"c-5427c4fb35",Component:e},{id:"c-5bc004d6fd",Component:f},{id:"c-6340275418",Component:t},{id:"c-a658f1dd22",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-e9e914cf5dd959e9.js").then(l=>l.TasksList)},{id:"c-bd44f2aae0",Component:d},{id:"c-cffc8b5322",Component:s},{id:"c-d3b8e82f67",Component:a},{id:"c-f997c77c27",Component:p}]});i();n()||c();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:c,unmountRoute:u});export{c as mountRoute,k as remountRoute,u as unmountRoute};
@@ -1 +0,0 @@
1
- import{a as f}from"./chunks/sentinel-b4c91a38a5d79219.js";import{$0b as i,$0c as e,$0d as d,$0e as s,$0f as p}from"./chunks/shared-init-8a34c730aabe942d.js";import{$4g as a}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/wular-pnext-37175329f2865f15-0.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import{$6a as r}from"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-8a34c730aabe942d.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import"./chunks/shared-init-17c1fd399ac53851.js";import{$1c as m}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0i as t}from"./chunks/shared-init-37175329f2865f15-2.js";import{$0a as o,$0b as n}from"./chunks/shared-init-8f2ac936c95a7f7b.js";import"./chunks/shared-init-8f2ac936c95a7f7b.js";var{mountRoute:c,remountRoute:h,unmountRoute:l}=o({islands:[{id:"c-30b20a1d70",Component:r},{id:"c-406d056fac",Component:i},{id:"c-5427c4fb35",Component:e},{id:"c-5bc004d6fd",Component:f},{id:"c-6340275418",Component:n},{id:"c-bd44f2aae0",Component:a},{id:"c-cffc8b5322",Component:d},{id:"c-d3b8e82f67",Component:s},{id:"c-f997c77c27",Component:p}]});m();t()||c();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:c,unmountRoute:l});export{c as mountRoute,h as remountRoute,l as unmountRoute};