@wular/coder 0.4.13 → 0.5.1

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 (519) hide show
  1. package/README.md +3 -3
  2. package/dist/actions-DO8MvHwc.js +3 -0
  3. package/dist/agent-Cgala63h.js +1 -0
  4. package/dist/app-server-dnlLhhZb.js +6 -0
  5. package/dist/approvals-C8XV7CK2.js +5 -0
  6. package/dist/apps-BORri-28.js +18 -0
  7. package/dist/args-CJsHYWbt.js +66 -0
  8. package/dist/async-BS9tyhva.js +3 -0
  9. package/dist/auth-C16ylySv.js +1 -0
  10. package/dist/builtin/coder/agent.json +6 -6
  11. package/dist/builtin/coder/system.md +7 -5
  12. package/dist/{chat-bwKd3y6V.js → chat-Bfu9XKRa.js} +1 -1
  13. package/dist/chat-czruXAt3.js +13 -0
  14. package/dist/cli.js +18 -13
  15. package/dist/{client-C4QCT6cG.js → client-nBo9Mhsr.js} +4 -4
  16. package/dist/cmd-C1gHyVG7.js +122 -0
  17. package/dist/config-_32PHl9g.js +5 -0
  18. package/dist/connection-CgA5_NJ7.js +1 -0
  19. package/dist/connections-B90TemYf.js +2 -0
  20. package/dist/context-C1XBbfEL.js +6 -0
  21. package/dist/crypto-Ittsv-m4.js +1 -0
  22. package/dist/dash/standalone/server/build-index.json +1 -1
  23. package/dist/dash/standalone/server/manifest.json +1690 -1452
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/event-json.856d33f567e58d0e.js +30 -0
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/http.e78b470f4ecf125b.js +58 -0
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.de1f1311bab4252f.js → index.91e126d7a389d4bd.js} +46 -75
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/task/{log-view.ec6391dbf3063330.js → view.e20379d8f741754a.js} +38 -0
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/types.9d22123d6296f5af.js +37 -0
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.30ed8c28774a1a82.js → load.858c062c7891a2c1.js} +18 -11
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.118a70787eff1761.js → page.9375ab741dc9791e.js} +5 -5
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.fcdfd50c21031895.js → loading.56c14183236be231.js} +2 -2
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.98dfcd316c306258.js → notify.c36570a56d279ce2.js} +1 -1
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.74c59322f5fe8a2c.js → page.13fdd9cc55ad3a52.js} +9 -9
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.730aa96b086ac996.js → sign-out.38a7f39cddc670f7.js} +4 -4
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.1be5795272b245c8.js → agent-menu.5c780867b82081b1.js} +3 -3
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.2c30ace077893029.js → agents-grid.2385ffa8fdad08d6.js} +9 -9
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.733f0acc2af5ceda.js → loading.0130f8533d8f1b1e.js} +4 -4
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.5ca6921e50484f8c.js +48 -0
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.b26006f060cd48f0.js → layout.afc4a8a5a8360975.js} +89 -32
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{loading.388aeaf0c2edf8f8.js → loading.90bf37c903ce6f0d.js} +1 -1
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.4b23e9df21433bd3.js → page.ba65063a1aa99a62.js} +22 -88
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.e06845585ca67abc.js → loading.d56ef50b0694f975.js} +2 -2
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.4048048acb374c67.js → page.03c5e72b0fe50ba9.js} +51 -123
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.000f2f87a48bfbc6.js → platform-actions.7c8c75bd0c05df4a.js} +234 -134
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-state.6b6132518ca61635.js +21 -0
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/platform-step.d6a980d1181dc940.js +82 -0
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.ee0bb2dc4d403ec3.js → agent-settings-form.b5299f5130a4e8af.js} +53 -76
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.0e3641f3e4abaa7c.js → loading.2800c65e45a4a1d9.js} +1 -1
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.649b4ba135ded99b.js → page.fad77cea17947d47.js} +10 -11
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.195e168e8e41d797.js → loading.4120e6979eaed441.js} +1 -1
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.96f7573208644f40.js → page.474b3524d5ea53b7.js} +1 -1
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.905293c9aa9afbc9.js → loading.3a615597ca648452.js} +4 -4
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.5f2b8585db8b27ad.js → page.7868a07efcaa26f4.js} +6 -6
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.8700f0106f4e8c15.js → versions-list.ba93a53773cab8a8.js} +3 -3
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.f94b2f9ab04aaf21.js → loading.6e53829bd1f3021d.js} +5 -5
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.e898c4b5ef16ecb0.js → page.5798ede8ba8ace97.js} +10 -10
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/app-cards.55778a4b3177846d.js +142 -0
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/loading.f0d91d48e2b79e50.js +14 -0
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/page.ce391cad0d78795f.js +99 -0
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.44e689e546fb042b.js → agent-pills.1012e04bfbc7bffd.js} +5 -5
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.4c67dfbb7d28a416.js → agent-toggle.0cec822c6099f058.js} +3 -3
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.9740a8e2f4b41f28.js → hero.7151c467e7ecf6a5.js} +4 -4
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{instructions.85b1cd986a9edbb5.js → instructions.1b8c9189961c5a4f.js} +13 -4
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.ff8b78a03153239b.js → connect-repositories.4e121d31ed0cfe02.js} +1 -1
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.471af698b8060eba.js → editor.f314d92af0bb33b0.js} +164 -127
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.b7b5c89e618e8f89.js → import-picker.11028d5329ad537b.js} +11 -11
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.ecb9dfd4d0f9d107.js → loading.9b65a8c1cdc8346f.js} +5 -5
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.880bdac7fe843635.js → page.1476d31e4554e88b.js} +9 -8
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.81f7e055829854a3.js → layout.150d950d191db477.js} +89 -26
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.3e72de86b86a7338.js +155 -0
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.8f8697b1b6b34ad7.js → page.6a4be3b1a473ff8c.js} +10 -10
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.fe608b8e661aba1d.js → page.262ed73437c17872.js} +1 -1
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/advanced-list.7180570379e2625c.js +63 -0
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connection-add.632b1847c16ecd42.js +526 -0
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.4378ae707b2092ed.js +439 -0
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.a4d8338c7f6a5702.js → credentials-list.e47897acb6867df8.js} +116 -101
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.1443bbed1ff1d441.js → credentials.6bd06f96afbe7329.js} +9 -9
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.38e70272eeb98cd0.js +201 -0
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{loading.7ca95dcb4fb3362b.js → loading.71ca4f6c99a8a9d5.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.a08cd37d0f7ff86c.js +635 -0
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.805d0f8a2c5817d6.js → page.f096b5a9ac419326.js} +67 -41
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.1e83449aa6593224.js → runners-list.0df1f9329df1b67d.js} +42 -37
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.17ac06593005b8ba.js → secrets-list.6d2f56fa7d6fcab0.js} +19 -17
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/chain-hint.65c4cc04c78e8bfd.js +18 -0
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.8c4a2b31b194ba3e.js → layout.0fd865c865e5bab4.js} +6 -6
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.0d6077fe68db3af9.js +147 -0
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-pick.695538b2edf9dd15.js +160 -0
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.a77996786278cda0.js → page.c57b81c2197cce0f.js} +1 -1
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.705be0b1129b97af.js → settings-head.004ced21e02ffa48.js} +5 -5
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{tunnel-guide.29eee1a0b1852168.js → tunnel-guide.1bc6bff9d8019098.js} +1 -1
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.19b4c50ef497aca1.js → create-link.60aadbe43ea1e39c.js} +5 -5
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-dialog.18cf32fa42247b91.js → outcome-dialog.a74e686aaed0c584.js} +3 -3
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/outcome-toast.e2b9ef0344b1a1a2.js +24 -0
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome.cbbc8cd1bbbee01b.js → outcome.22a83d756e4020a7.js} +3 -6
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.616f0b36bf7925bc.js → page.c456ad99c8a9f875.js} +8 -8
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.a911169a820ba604.js → activity.2ec05d78d609b7b2.js} +12 -6
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.76f851da5cc5268d.js → loading.779ecdd9c9d2ff09.js} +5 -5
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.ddb594bb6567ee13.js → page.578be2f6c89fcba0.js} +16 -9
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.d131453dd2a423c3.js +408 -0
  100. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-missing.33ec27a4a5eafefe.js +27 -0
  101. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.3276538e8306fd8a.js → task-view.3d72a4ecd2b3826e.js} +44 -81
  102. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.05fc39e1a7fd1ab7.js → composer-data.c16854be11a561e4.js} +4 -6
  103. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.dbf06b05c5e2eba3.js → composer.97be3e67214889c1.js} +130 -195
  104. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/pending-approvals.9175908da02960e1.js +40 -0
  105. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{status.cb704b48ce86cc7d.js → status.d2c05c397780b833.js} +7 -1
  106. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.f089c1c122ed6dd2.js → task.a25847399a4dfb30.js} +9 -26
  107. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.5a00d69851dae119.js → tasks-list.028798c79227a366.js} +43 -35
  108. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.36e70c93f7d0feee.js → tasks-section.9a9d13057b326f25.js} +16 -10
  109. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.185b1ba0c803db3f.js → page.045c6db0c56975b2.js} +5 -5
  110. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{custom-range.2e21c7f891966c15.js → custom-range.fe91164d7a311356.js} +3 -3
  111. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{day-chart.261b6651df2d3966.js → day-chart.20faaaf57c81ad9e.js} +1 -1
  112. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.a7e0ec01bfa769e3.js → loading.5b973a8bb29197d5.js} +3 -3
  113. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.d41fea7676e37bfc.js → page.938d29ff7edb678d.js} +7 -7
  114. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.69e68c9dae09f238.js → range-bar.0b9038e9df707843.js} +4 -4
  115. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{top-agents.18fc469e781e2305.js → top-agents.93c916167299ffb6.js} +2 -2
  116. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{layout.296d70b95894209f.js → layout.94ea3908b03bede6.js} +2 -2
  117. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/login/{page.a82be2fd23e9ac67.js → page.4827d64c71c0690a.js} +2 -2
  118. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{drawer.d3e61538dbc8ec39.js → drawer.1a08ff611df7fe38.js} +2 -2
  119. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{foreign-link.8c6adf9c5a6f467c.js → foreign-link.1d4f63a0379cbd1d.js} +3 -3
  120. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.1cea8a722c10b998.js → loading-card.77bea8c5870b5d3c.js} +5 -5
  121. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.87b92529dbb53ceb.js → page-head.2eb1e0213eb50349.js} +3 -2
  122. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.c32d78562f75db25.js → stream.2cdb8eabd8f6df70.js} +2 -2
  123. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.44075fa7e04575e8.js → task-toasts.8733901ca0e4c246.js} +28 -18
  124. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.85100ed66d6f9200.js → theme-choices.fc86071c1b634176.js} +2 -2
  125. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.d6109e72fbd04b45.js → back.7aa0ae82dbec38cd.js} +3 -3
  126. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.d3abfd4053b711ce.js → org.853d173b55368728.js} +1 -1
  127. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{side-toggle.489faf1a259479f7.js → side-toggle.be7d2a7529557435.js} +2 -2
  128. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{badge.c0bc352791a95fd6.js → badge.9f63fd615cf0ee22.js} +2 -2
  129. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/button.2b18ba19ae01e2bb.css.pnext-asset.js +0 -0
  130. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{button.ce9e6cdb08ca86db.js → button.b62fa52e18fa338b.js} +2 -2
  131. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/card.4ab7ad42a0770726.css.pnext-asset.js +0 -0
  132. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{card.9f0d45b73bc78b4f.js → card.c0030eafd76587e3.js} +21 -9
  133. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{collapse.93e4d1b20c2873ed.js → collapse.eb578fdf42029754.js} +1 -1
  134. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.54270c0251466fda.js → combo.e4e08287494081a3.js} +2 -2
  135. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{confirm.29e198be34578222.js → confirm.e21b7f5e486dafb8.js} +3 -3
  136. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{copy.bd6fc1577a393965.js → copy.043e0695c08c72f9.js} +2 -2
  137. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.81bb9a5c60cd1089.js → filter.0730dccad6332327.js} +6 -6
  138. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/filter.6fdff1e7355aaa0e.css.pnext-asset.js +0 -0
  139. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{icons.e36c72f54750663a.js → icons.f769275420d072ce.js} +4 -0
  140. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu-items.1d082ac4dae8f3d4.js → menu-items.759a1b1f7c5ee365.js} +2 -2
  141. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu.ee45bace979944b6.js → menu.7f558c7c6f6345d5.js} +3 -3
  142. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/menu.cd96fa0495fe0fde.css.pnext-asset.js +0 -0
  143. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{modal.0b69c7fd9db025b9.js → modal.08ac85d31f4c76c1.js} +7 -6
  144. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.2eb33e5bea28d804.js → select.0ee9e8f04ddd8b47.js} +9 -6
  145. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{tail.04132db0c5033d4f.js → tail.7eb303330802ac18.js} +2 -2
  146. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/toolbar.cdbd0357f2c5e1fe.css.pnext-asset.js +0 -0
  147. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.8b3a460a65edf85a.js → toolbar.ff8367c641d28c1e.js} +2 -2
  148. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.67dd6f8ab1ae067d.js → action.56cea462eb725c39.js} +1 -1
  149. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.78267fa3d7905d17.js → client.685154f230716834.js} +1 -1
  150. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/routes/http.394704f4f12ada08.js +165 -0
  151. package/dist/dash/standalone/server/modules-server-server-react-server/src/utils/crypto.24a6439ff8d10d3d.js +11 -0
  152. package/dist/dash/standalone/static/assets/chunks/advanced-list-b75a9c2bd11026de.js +1 -0
  153. package/dist/dash/standalone/static/assets/chunks/agent-pills-54564413a57d7fa7.js +2 -0
  154. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-55d294dad2ce5a0d.js +1 -0
  155. package/dist/dash/standalone/static/assets/chunks/agent-toggle-b5dcc4ea6292fb3d.js +1 -0
  156. package/dist/dash/standalone/static/assets/chunks/agents-grid-69461c53abbba433.js +1 -0
  157. package/dist/dash/standalone/static/assets/chunks/{back-e29cb10f5548ddae.js → back-ba5e4340a9f8bbd2.js} +1 -1
  158. package/dist/dash/standalone/static/assets/chunks/chain-hint-491eb09a20a15702.js +1 -0
  159. package/dist/dash/standalone/static/assets/chunks/{combo-702c94817bf6ac17.js → combo-6df61e8a1cc31037.js} +1 -1
  160. package/dist/dash/standalone/static/assets/chunks/composer-198b844da57b82a3.js +1 -0
  161. package/dist/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +1 -0
  162. package/dist/dash/standalone/static/assets/chunks/composer-data-b05f3d93fdc472d7.js +1 -0
  163. package/dist/dash/standalone/static/assets/chunks/{confirm-a78147b6ecef3847.js → confirm-14d018653fbe50fc.js} +1 -1
  164. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-7770ab805160028d.js → connect-repositories-5118edc019fc7890.js} +1 -1
  165. package/dist/dash/standalone/static/assets/chunks/connections-list-5412dad7e0def52f.js +1 -0
  166. package/dist/dash/standalone/static/assets/chunks/{copy-bdc60bdafe336316.js → copy-04781f9af4e10f06.js} +1 -1
  167. package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +1 -0
  168. package/dist/dash/standalone/static/assets/chunks/credentials-list-e64c973aee5602d3.js +1 -0
  169. package/dist/dash/standalone/static/assets/chunks/custom-range-b6919bab9846ebf7.js +1 -0
  170. package/dist/dash/standalone/static/assets/chunks/editor-68e9ccd1764fc512.js +6 -0
  171. package/dist/dash/standalone/static/assets/chunks/{field-bb8191aa02d07282.js → field-adcb6e6a5f9b7131.js} +1 -1
  172. package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +1 -0
  173. package/dist/dash/standalone/static/assets/chunks/instructions-7b274685ceb26457.js +2 -0
  174. package/dist/dash/standalone/static/assets/chunks/list-662f042656857c82.js +1 -0
  175. package/dist/dash/standalone/static/assets/chunks/model-options-5e07b3318d69d218.js +1 -0
  176. package/dist/dash/standalone/static/assets/chunks/models-list-ae1e2eff30d21824.js +1 -0
  177. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +1 -0
  178. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-fde11a52c282301d.js → outcome-dialog-fd86ded4c44c2de7.js} +1 -1
  179. package/dist/dash/standalone/static/assets/chunks/outcome-toast-c00becdb638cd9a8.js +1 -0
  180. package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +1 -0
  181. package/dist/dash/standalone/static/assets/chunks/platform-actions-f3979ab69a6ceb53.js +1 -0
  182. package/dist/dash/standalone/static/assets/chunks/platform-step-5454b6c0a19caefd.js +1 -0
  183. package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +1 -0
  184. package/dist/dash/standalone/static/assets/chunks/runners-list-20d42f19fb4bec8a.js +1 -0
  185. package/dist/dash/standalone/static/assets/chunks/{runtime-6e12333f12903a62-1.js → runtime-3fcac605fffcc273-1.js} +1 -1
  186. package/dist/dash/standalone/static/assets/chunks/secrets-list-89f89ee70edb3856.js +1 -0
  187. package/dist/dash/standalone/static/assets/chunks/{segmented-0b6dc6b93c35e0f5.js → segmented-66a8c77c6294fec3.js} +1 -1
  188. package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +1 -0
  189. package/dist/dash/standalone/static/assets/chunks/shared-init-96225b8c7758de9d.js +1 -0
  190. package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +1 -0
  191. package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +9 -0
  192. package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +1 -0
  193. package/dist/dash/standalone/static/assets/chunks/{tail-f8804b80cf32f8d0.js → tail-40f16e09eade7eee.js} +1 -1
  194. package/dist/dash/standalone/static/assets/chunks/task-396d849e58e50d59.js +1 -0
  195. package/dist/dash/standalone/static/assets/chunks/task-actions-0b3054dc0f8d17c0.js +3 -0
  196. package/dist/dash/standalone/static/assets/chunks/task-view-9e026dc5da58af5b.js +3 -0
  197. package/dist/dash/standalone/static/assets/chunks/tasks-list-04c6568d7f7237b7.js +1 -0
  198. package/dist/dash/standalone/static/assets/chunks/versions-list-ceb756236e69b761.js +1 -0
  199. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-6e12333f12903a62-0.js → wular-pnext-3fcac605fffcc273-0.js} +1 -1
  200. package/dist/dash/standalone/static/assets/create-param-id-2c72f3e32e7f8b8d.css +1 -0
  201. package/dist/dash/standalone/static/assets/dash-param-org-a7f30a8c5a6fa651.css +1 -0
  202. package/dist/dash/standalone/static/assets/dash-param-org-account-76fffb9337b633f2.css +1 -0
  203. package/dist/dash/standalone/static/assets/dash-param-org-agents-cc5d59edfc3cf0b1.css +1 -0
  204. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-170499c849114150.css +1 -0
  205. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-dd4ac319a0d62432.css +1 -0
  206. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-199a9991de1bf2d9.css +1 -0
  207. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css +1 -0
  208. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-param-app-a6d559f0e26bd01b.css +1 -0
  209. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css +1 -0
  210. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css +1 -0
  211. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css +1 -0
  212. package/dist/dash/standalone/static/assets/dash-param-org-operator-8d5ef55834d8deba.css +1 -0
  213. package/dist/dash/standalone/static/assets/dash-param-org-settings-7138821f5422d087.css +1 -0
  214. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-586fec34f285e9cb.css +1 -0
  215. package/dist/dash/standalone/static/assets/dash-param-org-setup-67679c1f84f352cf.css +1 -0
  216. package/dist/dash/standalone/static/assets/dash-param-org-tasks-be3cb3d64573f3d9.css +1 -0
  217. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-c20a0537bc82620d.css +1 -0
  218. package/dist/dash/standalone/static/assets/dash-param-org-usage-c534db20ce538fd2.css +1 -0
  219. package/dist/dash/standalone/static/assets/global-df2c26ad15039e8a.css +1 -0
  220. package/dist/dash/standalone/static/assets/{login-9760b85feae40270.css → login-148795638d6ff5d4.css} +1 -1
  221. package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +1 -0
  222. package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +1 -0
  223. package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +1 -0
  224. package/dist/dash/standalone/static/assets/pnext-client-27207e4f43f9a21b.js +1 -0
  225. package/dist/dash/standalone/static/assets/pnext-client-435db60553fa3a67.js +1 -0
  226. package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +1 -0
  227. package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +1 -0
  228. package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +1 -0
  229. package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +1 -0
  230. package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +1 -0
  231. package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +1 -0
  232. package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +1 -0
  233. package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +1 -0
  234. package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +1 -0
  235. package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +1 -0
  236. package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +1 -0
  237. package/dist/dash/standalone/static/assets/pnext-client-b1af82c6f0db0033.js +1 -0
  238. package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +1 -0
  239. package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +1 -0
  240. package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +1 -0
  241. package/dist/definition-D0OpQfGX.js +1 -0
  242. package/dist/discover-BfYHHJN_.js +1 -0
  243. package/dist/dispatch-BkoIU4GU.js +12 -0
  244. package/dist/{dist-DAnSqY1s.js → dist-B5qUdWUG.js} +35 -35
  245. package/dist/{dist-B2jiMMxZ.js → dist-Clxdruuu.js} +3 -3
  246. package/dist/{dist-ClCNj65n.js → dist-CymLGfHl.js} +4 -4
  247. package/dist/{adapter-Bz0E-DAY.js → dist-DX0JzVC6.js} +990 -990
  248. package/dist/{adapter-CsacmMmv.js → dist-DfD9WmV8.js} +39 -39
  249. package/dist/dist-node-B8VIVzUc.js +20 -0
  250. package/dist/docs-CxklYa3P.js +2 -0
  251. package/dist/drive-B7SBFfcb.js +1 -0
  252. package/dist/drizzle-orm-CYU7WOQS.js +2 -0
  253. package/dist/{emit-BrkJJPUE.js → emit-BgeqsCkC.js} +3 -3
  254. package/dist/env-BwFCHakK.js +1 -0
  255. package/dist/errors-DK_trCff.js +1 -0
  256. package/dist/exec-D9jF2F-H.js +3 -0
  257. package/dist/executor-DBW7R7Tf.js +11 -0
  258. package/dist/flow/builtin/review/index.d.ts +2 -2
  259. package/dist/flow/builtin/review/index.js +10 -15
  260. package/dist/flow/index.d.ts +2 -2
  261. package/dist/flow/index.js +1 -1
  262. package/dist/github-actions-2RjyRseX.js +36 -0
  263. package/dist/{hook-CIipj9MJ.js → hook-DN__zYOG.js} +1 -1
  264. package/dist/http-615JJgHo.js +5 -0
  265. package/dist/http-DRk8cDjf.js +1 -0
  266. package/dist/{index-ChcxzFdB.d.ts → index-CTAQrCRU.d.ts} +403 -307
  267. package/dist/integrations-DSZSa8Rc.js +9 -0
  268. package/dist/lib/broker.js +2 -2
  269. package/dist/load-BtIDghgd.js +2 -0
  270. package/dist/local-BzMvgiwL.js +5 -0
  271. package/dist/local-GIxwz_Or.js +1 -0
  272. package/dist/login-LlZrIlxb.js +8 -0
  273. package/dist/maintenance-DyiyHI8S.js +1 -0
  274. package/dist/mcp-Caq72REF.js +1 -0
  275. package/dist/mcp-CrtKQoVi.js +1 -0
  276. package/dist/mcp-cEIva8Pd.js +27 -0
  277. package/dist/metadata-D_bBfr3H.js +1 -0
  278. package/dist/models-BVxs3I8o.js +1 -0
  279. package/dist/output-BKeyLbvt.js +5 -0
  280. package/dist/permission-RSZM3DUk.js +1 -0
  281. package/dist/post-DLenID75.js +11 -0
  282. package/dist/prompt-CpwbsEWM.js +4 -0
  283. package/dist/refresh-CWEpTAkD.js +1 -0
  284. package/dist/remote-BDMuKaON.js +2 -0
  285. package/dist/remote-CY-qYX2C.js +1 -0
  286. package/dist/runner-CKMOh5Q3.js +1 -0
  287. package/dist/runner.json +1 -1
  288. package/dist/runner.tgz +0 -0
  289. package/dist/schema.d.ts +2 -2
  290. package/dist/schema.js +2 -3
  291. package/dist/sdk.d.ts +2857 -1405
  292. package/dist/sdk.js +1 -1
  293. package/dist/serve-D23JqDip.js +12 -0
  294. package/dist/serve-DoYbHm_k.js +5 -0
  295. package/dist/serve-YlU04KO7.js +1 -0
  296. package/dist/session-D7eeJIaH.js +1 -0
  297. package/dist/sessions-BGUfSe8L.js +1 -0
  298. package/dist/shared-BzNReirj.js +1 -0
  299. package/dist/sign-in-Dr6sU7vz.js +3 -0
  300. package/dist/state-CxAUec80.js +6 -0
  301. package/dist/store-BrnWdtRw.js +349 -0
  302. package/dist/task-CyqtCXo3.js +1 -0
  303. package/dist/task-DN4assR8.js +7 -0
  304. package/dist/tool-search-C9Ty3hhL.js +6 -0
  305. package/dist/tools-Ck-ZWtmB.js +1 -0
  306. package/dist/tools-DVtBtED6.js +1 -0
  307. package/dist/tools-search-BNDea9vZ.js +1 -0
  308. package/dist/turn-eI4iRPsq.js +3 -0
  309. package/dist/types-DHBqXFE2.js +1 -0
  310. package/dist/update-check-Bap3dwaj.js +1 -0
  311. package/dist/view-D-rbQ1Kz.js +4 -0
  312. package/dist/views-Bxm_5J6T.js +2 -0
  313. package/dist/worker-DJANNSCT.js +1 -0
  314. package/dist/worker-DeuC38Vp.js +7 -0
  315. package/dist/zod-_-snqfdO.js +1 -0
  316. package/dist/zod.js +65 -1
  317. package/docs/agents/coder.md +5 -1
  318. package/docs/agents/index.md +53 -82
  319. package/docs/approvals.md +47 -0
  320. package/docs/cli/agent.md +34 -13
  321. package/docs/cli/auth.md +1 -1
  322. package/docs/cli/connection.md +22 -21
  323. package/docs/cli/index.md +18 -14
  324. package/docs/cli/model.md +11 -11
  325. package/docs/cli/task.md +28 -30
  326. package/docs/config.md +37 -65
  327. package/docs/connections.md +80 -0
  328. package/docs/dash.md +23 -19
  329. package/docs/flows.md +46 -213
  330. package/docs/models.md +48 -78
  331. package/docs/review.md +49 -18
  332. package/docs/runners.md +49 -0
  333. package/docs/sdk.md +49 -73
  334. package/docs/self-host.md +81 -82
  335. package/package.json +4 -5
  336. package/plugins/agents/skills/coder/SKILL.md +3 -3
  337. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  338. package/plugins/claude/skills/dispatch/SKILL.md +3 -3
  339. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  340. package/plugins/cursor/README.md +3 -3
  341. package/plugins/cursor/skills/coder/SKILL.md +3 -3
  342. package/dist/actions-D12xDiQS.js +0 -4
  343. package/dist/adapter-DzpdWewB.js +0 -1
  344. package/dist/agent-JJStALIx.js +0 -8
  345. package/dist/apps-Bnk7F3A2.js +0 -379
  346. package/dist/args-Dqf5Y1RP.js +0 -1
  347. package/dist/async-Tj4zKHXR.js +0 -3
  348. package/dist/auth-BhpnOCbn.js +0 -1
  349. package/dist/base64url-CsVsW4Id.js +0 -1
  350. package/dist/chat-CSepnsrK.js +0 -13
  351. package/dist/cmd-BHZwhrfa.js +0 -118
  352. package/dist/connection-BkYTuJjV.js +0 -1
  353. package/dist/context-zhSlmXOp.js +0 -7
  354. package/dist/conversation-DT-35cEt.js +0 -1
  355. package/dist/core-DwsAMCnL.js +0 -65
  356. package/dist/dash/standalone/node_modules/contextjsx/dist/index.mjs +0 -1
  357. package/dist/dash/standalone/node_modules/contextjsx/dist/jsx-runtime.mjs +0 -1
  358. package/dist/dash/standalone/node_modules/contextjsx/dist/src-BJ0QFeB8.mjs +0 -2
  359. package/dist/dash/standalone/node_modules/contextjsx/package.json +0 -70
  360. package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/turn.6bb73458768e222e.js +0 -129
  361. package/dist/dash/standalone/server/modules-server-server-react-server/src/core/defaults.e972c134a1ae918f.js +0 -55
  362. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/auth/sign-in.661b3a4139af5bd7.js +0 -11
  363. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/connect/page.04762872666a6f0a.js +0 -26
  364. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/connect-apps.8a20501ccb244421.js +0 -36
  365. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/page.d066b77dd3187026.js +0 -65
  366. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/operator-apps.09bf294d753ee9d7.js +0 -115
  367. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/connections-list.97381888bfdd711b.js +0 -642
  368. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/engines-list.d47db60d7dc01ebd.js +0 -73
  369. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/list.a5b273558fb7f0f0.js +0 -156
  370. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/models-list.31d369f1b7ab45da.js +0 -444
  371. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/model-options.73f8d0d54f79d8e3.js +0 -100
  372. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/task-actions.51fbeac76459433a.js +0 -240
  373. package/dist/dash/standalone/static/assets/chunks/action-a76e495fb39a73d3.js +0 -1
  374. package/dist/dash/standalone/static/assets/chunks/agent-pills-4d3c6a2aa9eb1522.js +0 -2
  375. package/dist/dash/standalone/static/assets/chunks/agent-settings-form-f7231a66e391f6b6.js +0 -1
  376. package/dist/dash/standalone/static/assets/chunks/agent-toggle-d7d27123f2070f18.js +0 -1
  377. package/dist/dash/standalone/static/assets/chunks/agents-grid-185ecb3d86c6c447.js +0 -1
  378. package/dist/dash/standalone/static/assets/chunks/composer-56ebf36d63400423.js +0 -1
  379. package/dist/dash/standalone/static/assets/chunks/composer-a686289a79f64bae.js +0 -1
  380. package/dist/dash/standalone/static/assets/chunks/composer-data-f46a9bc7a14b4f9a.js +0 -1
  381. package/dist/dash/standalone/static/assets/chunks/connect-apps-696726aedab42c96.js +0 -1
  382. package/dist/dash/standalone/static/assets/chunks/connections-list-07559f145f3e3da3.js +0 -1
  383. package/dist/dash/standalone/static/assets/chunks/create-link-426b0a5871ee41dd.js +0 -1
  384. package/dist/dash/standalone/static/assets/chunks/credentials-list-f07d090410104148.js +0 -1
  385. package/dist/dash/standalone/static/assets/chunks/custom-range-6618f32ef6cd4e80.js +0 -1
  386. package/dist/dash/standalone/static/assets/chunks/editor-0860e370cbfc6b03.js +0 -6
  387. package/dist/dash/standalone/static/assets/chunks/engines-list-31b9bb7885924b05.js +0 -1
  388. package/dist/dash/standalone/static/assets/chunks/format-a27067f0186e78ac.js +0 -1
  389. package/dist/dash/standalone/static/assets/chunks/instructions-06b63e558f879da5.js +0 -1
  390. package/dist/dash/standalone/static/assets/chunks/instructions-2d9fbcbfadac4f40.js +0 -2
  391. package/dist/dash/standalone/static/assets/chunks/list-2773686bf8df64c7.js +0 -1
  392. package/dist/dash/standalone/static/assets/chunks/model-options-8d2170eebe0d061d.js +0 -1
  393. package/dist/dash/standalone/static/assets/chunks/models-list-03611e64b6a07efe.js +0 -1
  394. package/dist/dash/standalone/static/assets/chunks/notice-d14fdac28139c0a8.js +0 -1
  395. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-d3ba8ef89c59f801.js +0 -1
  396. package/dist/dash/standalone/static/assets/chunks/platform-actions-2a71c62b9f7eaef3.js +0 -1
  397. package/dist/dash/standalone/static/assets/chunks/platform-actions-70600c9943320152.js +0 -1
  398. package/dist/dash/standalone/static/assets/chunks/runners-list-edf536eb8003eab5.js +0 -1
  399. package/dist/dash/standalone/static/assets/chunks/secrets-list-e86122f73525ff95.js +0 -1
  400. package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +0 -1
  401. package/dist/dash/standalone/static/assets/chunks/shared-init-b281027d465e004f.js +0 -5
  402. package/dist/dash/standalone/static/assets/chunks/shared-init-c3bd249cf1eca6d1.js +0 -2
  403. package/dist/dash/standalone/static/assets/chunks/side-toggle-9b3af821cfe4c824.js +0 -1
  404. package/dist/dash/standalone/static/assets/chunks/task-a37e7c26e82eb77d.js +0 -1
  405. package/dist/dash/standalone/static/assets/chunks/task-actions-705395565f2d83b8.js +0 -1
  406. package/dist/dash/standalone/static/assets/chunks/task-view-cb21169f38b56d15.js +0 -6
  407. package/dist/dash/standalone/static/assets/chunks/tasks-list-d7dccfd7e0623ae0.js +0 -1
  408. package/dist/dash/standalone/static/assets/chunks/versions-list-f8f2e71df691efda.js +0 -1
  409. package/dist/dash/standalone/static/assets/connect-a550b6f3a8c00186.css +0 -1
  410. package/dist/dash/standalone/static/assets/create-param-id-c2c756f652f2fc30.css +0 -1
  411. package/dist/dash/standalone/static/assets/dash-param-org-account-702f8a1b213e4026.css +0 -1
  412. package/dist/dash/standalone/static/assets/dash-param-org-agents-aad2f9f93c06e9ab.css +0 -1
  413. package/dist/dash/standalone/static/assets/dash-param-org-agents-new-f9dcbcec36586f2b.css +0 -1
  414. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-8ff47f5d622c1f9b.css +0 -1
  415. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-edit-907036d553cfeb36.css +0 -1
  416. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-5cc77badad15f00c.css +0 -1
  417. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-settings-705d7c15868b4fd6.css +0 -1
  418. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-tasks-04e189c045098772.css +0 -1
  419. package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-76fcd1ce7b3dae71.css +0 -1
  420. package/dist/dash/standalone/static/assets/dash-param-org-eccb6bb9297a53e6.css +0 -1
  421. package/dist/dash/standalone/static/assets/dash-param-org-operator-635a121f7a9a95bd.css +0 -1
  422. package/dist/dash/standalone/static/assets/dash-param-org-settings-a3297dc4d9e0c961.css +0 -1
  423. package/dist/dash/standalone/static/assets/dash-param-org-settings-param-tab-bcb06f81d9e8268d.css +0 -1
  424. package/dist/dash/standalone/static/assets/dash-param-org-setup-df4be8b188b9777f.css +0 -1
  425. package/dist/dash/standalone/static/assets/dash-param-org-tasks-16f9866a1b4801cd.css +0 -1
  426. package/dist/dash/standalone/static/assets/dash-param-org-tasks-param-id-02ae551dcd852b57.css +0 -1
  427. package/dist/dash/standalone/static/assets/dash-param-org-usage-f2175403069aab99.css +0 -1
  428. package/dist/dash/standalone/static/assets/global-e1de614478b64717.css +0 -1
  429. package/dist/dash/standalone/static/assets/pnext-client-0dc829ba60df5c26.js +0 -1
  430. package/dist/dash/standalone/static/assets/pnext-client-14d191f7f1da6602.js +0 -1
  431. package/dist/dash/standalone/static/assets/pnext-client-169eaa63783b71fd.js +0 -1
  432. package/dist/dash/standalone/static/assets/pnext-client-1e34cfefafa70fac.js +0 -1
  433. package/dist/dash/standalone/static/assets/pnext-client-285d61f00a80f40b.js +0 -1
  434. package/dist/dash/standalone/static/assets/pnext-client-35b89c3ba23ee845.js +0 -1
  435. package/dist/dash/standalone/static/assets/pnext-client-6c42784e005d4b87.js +0 -1
  436. package/dist/dash/standalone/static/assets/pnext-client-6cd93f9bd4cf6ffd.js +0 -1
  437. package/dist/dash/standalone/static/assets/pnext-client-7355f473fade532d.js +0 -1
  438. package/dist/dash/standalone/static/assets/pnext-client-815c3c297f75efb0.js +0 -1
  439. package/dist/dash/standalone/static/assets/pnext-client-87fe73c10a4dc33c.js +0 -1
  440. package/dist/dash/standalone/static/assets/pnext-client-98b56a142d441260.js +0 -1
  441. package/dist/dash/standalone/static/assets/pnext-client-b4bafe68a40f720b.js +0 -1
  442. package/dist/dash/standalone/static/assets/pnext-client-bf61ff39bdc0db48.js +0 -1
  443. package/dist/dash/standalone/static/assets/pnext-client-c9fa86c244813f74.js +0 -1
  444. package/dist/dash/standalone/static/assets/pnext-client-d2e7a75e16221224.js +0 -1
  445. package/dist/dash/standalone/static/assets/pnext-client-d34e774405ea8da8.js +0 -1
  446. package/dist/dash/standalone/static/assets/pnext-client-d511822afdb41d1d.js +0 -1
  447. package/dist/dash/standalone/static/assets/pnext-client-e113aa2f25ecfe01.js +0 -1
  448. package/dist/dash/standalone/static/assets/pnext-client-eb62f461d0c32266.js +0 -1
  449. package/dist/discover-CHfF4cEz.js +0 -1
  450. package/dist/dist-node-Bv1kCqyi.js +0 -20
  451. package/dist/docs-KHc0_gFX.js +0 -2
  452. package/dist/drive-Bwl7Bjme.js +0 -1
  453. package/dist/env-6Y-NNnYD.js +0 -1
  454. package/dist/errors-DO_IltpP.js +0 -16
  455. package/dist/exec-BmTa0vcO.js +0 -4
  456. package/dist/executor-ufWRqhdS.js +0 -11
  457. package/dist/http-Cg8PSe-c.js +0 -1
  458. package/dist/integrations-I7fRDk_l.js +0 -4
  459. package/dist/load-BDlEFetB.js +0 -2
  460. package/dist/local-COlczLwI.js +0 -5
  461. package/dist/log-view-CfX9lakH.js +0 -4
  462. package/dist/maintenance-CKCIWOvn.js +0 -1
  463. package/dist/match-CufHAZQH.js +0 -1
  464. package/dist/mcp-BkwmRHI9.js +0 -2
  465. package/dist/mcp-CGU7aoJ-.js +0 -1
  466. package/dist/mcp-DAHbhfUh.js +0 -13
  467. package/dist/models-CzggS7p2.js +0 -1
  468. package/dist/output-SNqdgh9A.js +0 -17
  469. package/dist/permission-MWFjKxqX.js +0 -1
  470. package/dist/prompt-CIx4jwQF.js +0 -8
  471. package/dist/refresh-CxsaX5R9.js +0 -1
  472. package/dist/remote-C9Hj2cby.js +0 -2
  473. package/dist/remote-HUZCWgfl.js +0 -3
  474. package/dist/runner-DYysY1-G.js +0 -1
  475. package/dist/runners-CfaGE0nV.js +0 -36
  476. package/dist/serve-DdAdw7Su.js +0 -4
  477. package/dist/serve-NQykWAKV.js +0 -1
  478. package/dist/serve-vKNqVaVy.js +0 -12
  479. package/dist/slack-BtKvW_4v.js +0 -5
  480. package/dist/task-CFxs0E_J.js +0 -1
  481. package/dist/task-iuYQ0zAK.js +0 -7
  482. package/dist/tools-B6ZxcqRi.js +0 -2
  483. package/dist/tools-FVop8XYG.js +0 -1
  484. package/dist/tools-search-kjKKolwp.js +0 -1
  485. package/dist/turn-DQ13lkPF.js +0 -2
  486. package/dist/types-DPtbvoo3.js +0 -1
  487. package/dist/types-DmThhjcW.js +0 -1
  488. package/dist/views-CMHXBMJp.js +0 -3
  489. package/dist/wire-C9CupY_A.js +0 -1
  490. package/dist/worker-BQpx1dPr.js +0 -9
  491. package/dist/worker-sTJL2eoe.js +0 -1
  492. package/dist/zod-BoqHoRCH.js +0 -1
  493. package/docs/access.md +0 -33
  494. package/docs/mcp.md +0 -54
  495. /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{errors.1bd0542d832ae0c0.js → errors.200335e62a9d9564.js} +0 -0
  496. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.061f6006f2685f5e.css.pnext-asset.js → page.abe7a6d16eb15c41.css.pnext-asset.js} +0 -0
  497. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.107e622830bff31d.css.pnext-asset.js → page.1c7947d6f79d6447.css.pnext-asset.js} +0 -0
  498. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{settings/agent-settings-form.ca926c58d15044aa.css.pnext-asset.js → platforms/platform-step.a722e3b8539a0f85.css.pnext-asset.js} +0 -0
  499. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{agent/instructions.446bccc375f30eeb.css.pnext-asset.js → [slug]/(tabs)/settings/agent-settings-form.bf5430862c505c55.css.pnext-asset.js} +0 -0
  500. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/{editor/editor.1eb1bce282b289c9.css.pnext-asset.js → [slug]/platforms/[app]/@/app/dash/[org]/agents/[slug]/(tabs)/platforms/page.db05694ed4113dab.css.pnext-asset.js} +0 -0
  501. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.a4efa8d807fe5416.css.pnext-asset.js → agents/[slug]/platforms/[app]/app-cards.d2f5c8d620066e05.css.pnext-asset.js} +0 -0
  502. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/@/app/dash/[org]/setup/outcome.3ad5f7ec67e5238d.css.pnext-asset.js → agents/agent/instructions.4c31196fcbf9846c.css.pnext-asset.js} +0 -0
  503. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/connections-list.46786fe36b121a43.css.pnext-asset.js → agents/editor/editor.6b9a1d5c0a490153.css.pnext-asset.js} +0 -0
  504. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{settings/[tab]/credentials-list.f7c27f170ec1e868.css.pnext-asset.js → layout.52abe52dcfa736d7.css.pnext-asset.js} +0 -0
  505. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{engines-list.9927d602ebe9e7fc.css.pnext-asset.js → advanced-list.819e410e4178b328.css.pnext-asset.js} +0 -0
  506. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.8cbee173a5aff98d.css.pnext-asset.js → connections-list.87962937438296f1.css.pnext-asset.js} +0 -0
  507. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.53c7ea80b6fb734c.css.pnext-asset.js → credentials-list.973f91751525bcb6.css.pnext-asset.js} +0 -0
  508. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/[id]/task-view.42337a0d7c6ad0b6.css.pnext-asset.js → settings/[tab]/list.69d1b62c4066015b.css.pnext-asset.js} +0 -0
  509. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/composer.5b8687662e1629fa.css.pnext-asset.js → settings/[tab]/models-list.efd3f5781314c1d9.css.pnext-asset.js} +0 -0
  510. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{tasks/list/tasks-list.2f90c4410f843fff.css.pnext-asset.js → settings/[tab]/runners-list.df35d33aba0c8b07.css.pnext-asset.js} +0 -0
  511. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{globals.f8ac779f0ebf888b.css.pnext-asset.js → dash/[org]/settings/model-pick.74fababc0cc0bba7.css.pnext-asset.js} +0 -0
  512. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/{responsive.ebc5f7d77b4b86a0.css.pnext-asset.js → dash/[org]/tasks/[id]/task-view.440367ae07204ee7.css.pnext-asset.js} +0 -0
  513. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/frame/task-toasts.d13d9f628e530552.css.pnext-asset.js → app/dash/[org]/tasks/composer.33d49ad218253703.css.pnext-asset.js} +0 -0
  514. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/badge.0cb1513f8b077560.css.pnext-asset.js → app/dash/[org]/tasks/list/pending-approvals.07e59a9cae7ccf29.css.pnext-asset.js} +0 -0
  515. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/button.d7f4433f4e7faa80.css.pnext-asset.js → app/dash/[org]/tasks/list/tasks-list.f3737549b4696cc8.css.pnext-asset.js} +0 -0
  516. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/card.f80288cc42f9bcae.css.pnext-asset.js → app/globals.3b53a3feaa1d72e1.css.pnext-asset.js} +0 -0
  517. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/{comps/ui/filter.b53f21acc3e2cfef.css.pnext-asset.js → app/responsive.2979ffa0161a5afd.css.pnext-asset.js} +0 -0
  518. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/{ui/menu.25b184f68cba7b46.css.pnext-asset.js → frame/task-toasts.682322f6f729b33e.css.pnext-asset.js} +0 -0
  519. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{toolbar.19e1ce5224a23acf.css.pnext-asset.js → badge.8e2a9842b28f44a6.css.pnext-asset.js} +0 -0
@@ -0,0 +1,349 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}from"./state-CxAUec80.js";import{n as a,x as o,y as s}from"./approvals-C8XV7CK2.js";import{c,l}from"./view-D-rbQ1Kz.js";import"./turn-eI4iRPsq.js";import{C as u,K as d,S as f,_ as p,b as m,d as ee,f as h,g,h as te,ht as _,m as v,p as y,u as b,v as ne,w as x,x as re,y as S}from"./drizzle-orm-CYU7WOQS.js";import{agent as C,agentVersion as w,approvalPost as T,c as ie,chatItem as ae,chatState as E,connection as oe,engineCredential as D,integrationApp as se,integrationAppInstallation as ce,platformLink as O,privateSpace as k,runner as A,secret as j,spaceMember as M,task as N,taskHistory as le,taskInbox as P,taskLog as F,taskSecret as I,taskTombstone as ue,workspace as L}from"./schema.js";import{At as de,Gt as fe,It as pe,Nt as me,Zt as he,ar as ge,cr as _e,ht as ve,kt as ye,lr as be,mt as xe,pt as Se,qt as Ce,sr as we,ur as Te,vt as Ee}from"./apps-BORri-28.js";import{S as De,T as Oe,l as ke,s as Ae,w as je,x as Me}from"./local-BzMvgiwL.js";import{i as R,r as z}from"./client-nBo9Mhsr.js";import{C as Ne,S as Pe,T as Fe,_ as B,a as V,b as Ie,c as H,d as U,f as Le,h as Re,i as W,l as G,m as ze,n as Be,o as K,p as q,r as Ve,s as J,u as Y,v as X,w as He,x as Ue,y as We}from"./shared-BzNReirj.js";import{createHash as Ge,randomBytes as Ke,randomUUID as qe}from"node:crypto";import{isDeepStrictEqual as Je}from"node:util";const Z=ie(W,`shared_app`),Q=ie(j,`installation_secret`),$=(e,t,n)=>K({id:e.key,integration:e.integration,agent:e.agent,name:e.name,agentsRepo:e.agentsRepo,branch:e.branch,builtin:e.organizationId===``||void 0,shared:n,credentials:t,createdAt:U(e.createdAt)});function Ye(e){let t=W;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,credentials:j.value,sharedKey:Z.key}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).leftJoin(Z,y(Z.id,t.sharedAppId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,credentials:t,sharedKey:n})=>({id:e.key,value:$(e,t,n)}))},put:(n,r)=>e.transaction(`app:${n}`,async e=>{let[i]=await e.db.select({secretId:t.credentialsSecretId,sharedAppId:t.sharedAppId,credentials:j.value}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).where(h(e.mine(t.organizationId),y(t.key,n))),[a]=r.shared?await e.db.select({id:t.id,secretId:t.credentialsSecretId}).from(t).where(h(y(t.organizationId,``),y(t.key,r.shared))):[];if(r.shared&&!a)throw Error(`No shared app ${r.shared}`);let o=i&&!i.sharedAppId?i.secretId:void 0,s=a?.secretId??o??await Be(e.db,r.credentials);o!==void 0&&i?.credentials!==r.credentials&&await Re(e.db,o,r.credentials);let c={integration:r.integration,agent:r.agent,name:r.name,agentsRepo:r.agentsRepo??null,branch:r.branch??null,credentialsSecretId:s,sharedAppId:a?.id??null,createdAt:V(r.createdAt),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:[t.organizationId,t.key],set:c}),i&&i.secretId!==s&&await J(e.db,[i.secretId])}),delete:n=>e.transaction(`app:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.credentialsSecretId});await J(e.db,r.map(e=>e.secretId))})}}function Xe(e,t,n){return K({id:e.key,app:t.key,integration:t.integration,account:e.account,token:n,installer:e.installer,self:e.self,covers:e.covers,repos:e.repos,createdAt:U(e.createdAt),deletedAt:e.deletedAt?U(e.deletedAt):void 0,uninstalled:e.uninstalled||void 0})}function Ze(e,t,n){let r=n.app.split(`/`)[0],i=[t.slice(n.app.length+1),...n.covers??[]],a=_`array[${_.join(i.map(e=>_`${e}`),_`, `)}]::text[]`;return e.transaction(`binding:${r}`,async e=>{let[n]=await e.db.select({id:Y.id}).from(Y).innerJoin(W,y(W.id,Y.appId)).where(h(x(p(Y.platformInstallId,i),_`${Y.covers} ?| ${a}`),S(Y.deletedAt),u(Y.key,t),x(y(W.key,r),_`left(${W.key}, ${r.length+1}) = ${`${r}/`}`))).limit(1);if(n)throw new De(`Installation "${t}" is bound through another app.`)})}function Qe(e){let t=Y;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,app:{key:W.key,integration:W.integration},token:j.value}).from(t).innerJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,app:t,token:n})=>({id:e.key,value:Xe(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({row:t,token:j.value,appKey:W.key,parent:_`(select id from ${W} where organization_id in (${e.organizationId}, ${``}) and key = ${r.app} order by organization_id desc limit 1)`}).from(_`(select 1) as anchor`).leftJoin(t,y(t.key,n)).leftJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)),a=i?.row,o=()=>Error(`Installation "${n}" belongs to another workspace.`);if(a&&a.organizationId!==e.organizationId)throw o();if(!i?.parent)throw Error(`Unknown app "${r.app}".`);r.deletedAt===void 0&&(!a||i.appKey!==r.app||a.deletedAt!==null||JSON.stringify(a.covers??[])!==JSON.stringify(r.covers??[]))&&await Ze(e,n,r);let s=a?.tokenSecretId??null;r.token&&(s?i.token!==r.token&&await Re(e.db,s,r.token):s=await Be(e.db,r.token));let c={appId:i.parent,platformInstallId:n.slice(r.app.length+1),account:r.account,tokenSecretId:r.token?s:null,installer:r.installer??null,self:r.self??null,covers:r.covers??null,repos:r.repos??null,createdAt:V(r.createdAt),updatedAt:e.at(),deletedAt:r.deletedAt===void 0?null:V(r.deletedAt),uninstalled:r.uninstalled??null},[l]=await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:t.key,set:c,setWhere:e.mine(t.organizationId)}).returning({id:t.id});if(!l)throw o();r.token||await J(e.db,[a?.tokenSecretId])}),delete:n=>e.transaction(`installation:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.tokenSecretId});await J(e.db,r.map(e=>e.secretId))})}}async function $e(e,t){let n=ie(Y,`locked`),[r]=await e.db.select({row:n,app:{key:W.key,integration:W.integration},token:j.value}).from(n).innerJoin(W,y(W.id,n.appId)).leftJoin(j,y(j.id,n.tokenSecretId)).where(h(e.mine(n.organizationId),y(n.key,t))).for(`update`,{of:n});return r&&Xe(r.row,r.app,r.token)}const et=(e,t)=>K({...ze(t),owner:e.owner,account:e.account,createdAt:U(e.createdAt)}),tt=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function nt(e,t){let n=D;return(await e.db.select({row:n,sealed:j.value}).from(n).innerJoin(j,y(j.id,n.secretId)).where(h(e.mine(n.organizationId),t?y(n.owner,t):S(n.owner))).orderBy(b(n.label)).for(`update`)).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t),row:e}))}async function rt(e,t,n,r){let i=D;if(!r){t&&(await e.db.delete(i).where(y(i.id,t.row.id)),await J(e.db,[t.row.secretId]));return}let a=Le(r),o={account:r.account??null,createdAt:r.createdAt===void 0?t?.row.createdAt??e.at():V(r.createdAt),updatedAt:e.at()};if(t){Le(t.value)!==a&&await Re(e.db,t.row.secretId,a),await e.db.update(i).set(o).where(y(i.id,t.row.id));return}let{owner:s,name:c}=he(n);await e.db.insert(i).values({organizationId:e.organizationId,owner:s??null,label:c,secretId:await Be(e.db,a),...o})}function it(e){let t=D,n=(t,n)=>{let{owner:r}=he(t);return e.transaction(tt(e,r),async e=>rt(e,(await nt(e,r)).find(e=>e.id===t),t,n))};return{key:_`coalesce(${t.owner} || '/', '') || ${t.label}`,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(_`coalesce(${t.owner} || '/', '') || ${t.label}`));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t)}))},put:(e,t)=>n(e,t),delete:e=>n(e,null)}}const at=e=>e.secret,ot=e=>{let t=G(D,e);return{id:Ce(t.owner??void 0,t.label),value:et(t,at(e))}},st=e=>{let t=G(A,e);return{id:t.publicId,value:vt(t,at(e))}},ct=e=>{let t=G(W,e.app);return{installation:Xe(G(Y,e.row),t,e.token),app:$(t,e.credentials)}};function lt(e,t,n,r){let i=E,a=t.map(t=>`${H(X(e,`snapshot`,Oe(t)))}%`),o=[...t,...n].map(t=>X(e,`snapshot`,je(t)));return _`(select coalesce(jsonb_object_agg(${i.key}, ${i.value}), '{}'::jsonb) from ${i}
2
+ where (${i.expiresAt} is null or ${i.expiresAt} > clock_timestamp()) and (${i.key} like any(${_.param(a)}::text[])
3
+ or ${i.key} in (select unnest(${_.param(o)}::text[])${r?_` union all ${r}`:_``})))`}function ut(e,t){let n=We(e,`snapshot`),r={held:new Map,drops:new Map};for(let[e,i]of Object.entries(t)){let t=e.slice(n.length);t.startsWith(`token-drop:`)?r.drops.set(t,i.drop):r.held.set(t,i)}return r}function dt(e){let t=_`coalesce((${E.value}->>'version')::bigint, jsonb_array_length(${E.value}->'messages') + (${E.value}->>'more')::bigint)`,n=_`greatest(coalesce((${E.value}->>'acknowledged')::bigint, 0), least(${e}, ${t}))`;return _`(select ${E.value} || jsonb_build_object('version', ${t}, 'acknowledged', ${n},
4
+ 'messages', remaining, 'more', ${t} - ${n} - jsonb_array_length(remaining))
5
+ from (select coalesce(jsonb_agg(item order by n) filter (where coalesce((item->>'sequence')::bigint, n) > ${n}), '[]'::jsonb) as remaining
6
+ from jsonb_array_elements(${E.value}->'messages') with ordinality e(item,n)) as pending)`}function ft(e,t){let n=E,r=We(e.organizationId,t),i=n.key;return{key:i,where:e=>h(e.id===void 0?_`${n.key} like ${`${H(r+(e.prefix??``))}%`}`:y(n.key,r+e.id),e.after===void 0?void 0:v(n.key,r+e.after)),rows:async(t,a)=>{let o=e.db.select({id:i,value:_`${n.value}`}).from(n).where(h(_`${n.key} like ${`${H(r)}%`}`,e.live(n.expiresAt),t)).orderBy(b(n.key));return(await(a===void 0?o:o.limit(a))).map(e=>({id:e.id.slice(r.length),value:e.value}))},put:async(i,a,o)=>{let s=t===`login`?o??e.at():o,c=e.db.insert(n).values({key:r+i,value:a,expiresAt:s}).onConflictDoUpdate({target:n.key,set:{value:a,expiresAt:t===`login`&&!o?_`${n.expiresAt}`:s}}),l=t===`delivery`&&i.startsWith(`connection-authorized:`)?e.notification(t,i):void 0;await(l?c.returning(l):c)},delete:async t=>{await e.db.delete(n).where(y(n.key,r+t))}}}function pt(e){let t=T,n=e=>e===void 0?null:V(e);return{key:t.key,where:e=>h(e.id===void 0?m(t.key,`${H(e.prefix??``)}%`):y(t.key,e.id),e.after===void 0?void 0:v(t.key,e.after)),rows:async(n,r)=>{let i=e.db.select({id:t.key,value:t.value}).from(t).where(h(e.mine(t.organizationId),e.live(t.expiresAt),n)).orderBy(b(t.key));return await(r===void 0?i:i.limit(r))},put:async(r,i,a)=>{let o={value:i,at:V(i.at),shownAt:i.shownAt?V(i.shownAt):null,retryAt:n(i.retryAt),expiresAt:a};await e.db.insert(t).values({organizationId:e.organizationId,key:r,...o}).onConflictDoUpdate({target:[t.organizationId,t.key],set:o})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n)))}}}function mt(e){let t=L;return{key:t.organizationId,where:()=>_`${t.config} is not null`,rows:async()=>{let[n]=await e.db.select({value:t.config}).from(t).where(h(e.mine(t.organizationId),_`${t.config} is not null`));return n?[{id:`workspace`,value:n.value}]:[]},put:async(n,r)=>{await e.db.insert(t).values({organizationId:e.organizationId,config:r}).onConflictDoUpdate({target:t.organizationId,set:{config:r}})},delete:async()=>{await e.db.update(t).set({config:null}).where(e.mine(t.organizationId))}}}const ht=(e,t)=>t===null?e:{...e,secret:t},gt=(e,t)=>`app:${e.organizationId}:connection:${t}`;function _t(e){let t=oe;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({id:t.key,record:t.record,sealed:j.value}).from(t).leftJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.id,value:ht(e.record,e.sealed)}))},put:(n,r)=>e.transaction(gt(e,n),async e=>{let{secret:i,...a}=r,[o]=await e.db.select({secretId:t.secretId,sealed:j.value}).from(t).leftJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),y(t.key,n))),s=o?.secretId??null;i&&(s?o.sealed!==i&&await Re(e.db,s,i):s=await Be(e.db,i));let c={owner:r.owner??null,record:a,secretId:i?s:null};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:[t.organizationId,t.key],set:c}),i||await J(e.db,[o?.secretId])}),delete:n=>e.transaction(gt(e,n),async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.secretId});await J(e.db,r.map(e=>e.secretId))})}}const vt=(e,t)=>K({name:e.name,owner:e.owner,kind:e.kind,scope:e.owner?`personal`:`workspace`,config:e.config,createdBy:e.createdBy,default:e.isDefault,lastSeen:e.lastSeen?U(e.lastSeen):void 0,secret:t,createdAt:U(e.createdAt),updatedAt:U(e.updatedAt)});function yt(e){let t=A;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:e.publicId,value:vt(e,t)}))},put:(n,r)=>e.transaction(`app:runners:${e.organizationId}`,async e=>{let[i]=await e.db.select({secretId:t.secretId,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),y(t.publicId,n)));i&&i.sealed!==r.secret&&await Re(e.db,i.secretId,r.secret);let a={owner:r.owner??null,name:r.name,kind:r.kind,config:r.config,createdBy:r.createdBy??null,isDefault:r.default,lastSeen:r.lastSeen===void 0?null:V(r.lastSeen),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,secretId:i?.secretId??await Be(e.db,r.secret),createdAt:V(r.createdAt),...a}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:a})}),delete:n=>e.transaction(`app:runners:${e.organizationId}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n))).returning({secretId:t.secretId});await J(e.db,r.map(e=>e.secretId))})}}const bt=e=>e.split(`:`)[1]??``,xt=e=>/^connection(s|-secrets):/.test(e),St=(e,t,n)=>K(e.startsWith(`connections:`)?{resolvedConnections:t,expiresAt:n&&U(n)}:{secret:t,expiresAt:n&&U(n)});function Ct(e){let t=I,n=t=>h(e.mine(N.organizationId),y(N.publicId,bt(t)));return{key:t.key,rows:async(n,r)=>{let i=e.db.select({id:t.key,sealed:j.value,expiresAt:t.expiresAt}).from(t).innerJoin(N,y(N.id,t.taskId)).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(N.organizationId),e.live(t.expiresAt),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.id,value:St(e.id,e.sealed,e.expiresAt)}))},put:(r,i,a)=>e.transaction(`app:${e.organizationId}:connections:${bt(r)}`,async e=>{let o=`secret`in i?i.secret:`resolvedConnections`in i?i.resolvedConnections:void 0,s=a??(`expiresAt`in i&&i.expiresAt?V(i.expiresAt):null);if(o===void 0)throw Error(`Not a task secret: ${r}`);let[c]=await e.db.select({taskId:N.id,secretId:t.secretId}).from(N).leftJoin(t,h(y(t.taskId,N.id),y(t.key,r))).where(n(r));if(c){if(c.secretId){await Re(e.db,c.secretId,o),await e.db.update(t).set({expiresAt:s}).where(y(t.secretId,c.secretId));return}await e.db.insert(t).values({taskId:c.taskId,key:r,secretId:await Be(e.db,o),expiresAt:s})}}),delete:r=>e.transaction(`app:${e.organizationId}:connections:${bt(r)}`,async e=>{let i=await e.db.delete(t).where(h(y(t.key,r),_`${t.taskId} in (select ${N.id} from ${N} where ${n(r)})`)).returning({secretId:t.secretId});await J(e.db,i.map(e=>e.secretId))})}}var wt=e({DrizzleQueue:()=>Vt});const Tt=(e,t)=>_`('[' || to_json(${e})::text || ',' || to_json(${t}::text)::text || ']:')`,Et=e=>_`(select ${Fe(_`to_jsonb(c)`,_`s.value`)} from ${D} c join ${j} s on s.id = c.secret_id
7
+ where c.organization_id = ${e}.organization_id and coalesce(c.owner || '/', '') || c.label = ${e}.models->0->>'credential')`,Dt=e=>_`(select ${L.config} from ${L} where ${L.organizationId} = ${e})`,Ot=e=>_`coalesce((select jsonb_strip_nulls(jsonb_build_object('slug', ${L.slug}, 'name', ${L.name}))
8
+ from ${L} where ${L.organizationId} = ${e}), '{}'::jsonb)`,kt=e=>_`(select ${Fe(_`to_jsonb(r)`,_`s.value`)} from ${A} r join ${j} s on s.id = r.secret_id
9
+ where r.organization_id = ${e}.organization_id and r.public_id = ${e}.runner_id)`,At=e=>_`(select jsonb_build_object('row', to_jsonb(a), 'credentials', s.value)
10
+ from ${se} a join ${j} s on s.id = a.credentials_secret_id where ${e})`,jt=e=>_`task_secrets as (delete from ${I} where task_id in (${e}) returning secret_id),
11
+ dropped_secrets as (delete from ${j} where id in (select secret_id from task_secrets))`;function Mt(e,t){if(typeof t==`number`)return _`to_jsonb(coalesce(case when jsonb_typeof(${e}) = 'number' then (${e} #>> '{}')::numeric end, 0) + ${t}::numeric)`;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=Object.entries(t).map(([t,n])=>_`${t}::text, ${Mt(_`(${e} -> ${t}::text)`,n)}`);return _`(case when jsonb_typeof(${e}) = 'object' then ${e} else '{}'::jsonb end || jsonb_build_object(${_.join(n,_`, `)}))`}const Nt=e=>_`(case ${e} ${_.join([...ye,...n].map(e=>_`when ${e} then ${_.raw(String(c(e)))}`),_` `)} end)`,Pt=e=>_`date_trunc('milliseconds', ${e})`,Ft=e=>_`${e} collate "C"`,It=x(y(N.status,`waiting`),_`jsonb_path_exists(${N.context}, '$.approvals[*] ? (!(exists(@.response)) || @.response == null)')`),Lt=_`'space:' || ${k.integration} || ':' || ${k.account} || ':' || ${k.space}`,Rt=(e,t)=>_`array(select ${Lt} from ${k} join ${M} on ${M.spaceId} = ${k.id} join ${O} on ${O.platform} = ${k.integration} and ${O.platformUserId} = ${M.member} where ${O.userId} = ${t} and ${k.organizationId} = ${e})`,zt=e=>[b(Nt(e.status)),ee(Pt(e.createdAt)),ee(Ft(e.publicId))],Bt=e=>[b(e.updatedAt),b(Ft(e.publicId))];var Vt=class{db;constructor(e){this.db=e}async metrics(e,t){let n=await this.db.select({status:N.status,total:_`count(*)::int`,recent:_`count(*) filter (where ${N.createdAt} >= ${new Date(t).toISOString()}::timestamptz)::int`}).from(N).where(y(N.organizationId,e)).groupBy(N.status),r={tasks:{queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},queueDepth:0};for(let e of n)r.tasks[e.status]=e.recent,e.status===`queued`&&(r.queueDepth=e.total);return r}where(e,t){return h(y(N.organizationId,e),y(N.publicId,t))}fence(e,t,n={}){return h(this.where(e,t),n.generation===void 0?void 0:y(N.generation,n.generation),n.attempts===void 0?void 0:y(N.attempts,n.attempts),n.tokenHash===void 0?void 0:n.tokenHash===null?S(N.tokenHash):y(N.tokenHash,n.tokenHash),n.handle===void 0?void 0:n.handle===null?S(N.handle):y(N.handle,n.handle),n.lastSeenAt===void 0?void 0:n.lastSeenAt===null?S(N.lastSeenAt):y(N.lastSeenAt,new Date(n.lastSeenAt)),n.updatedAt===void 0?void 0:y(N.updatedAt,new Date(n.updatedAt)),n.statuses?p(N.status,n.statuses):void 0,n.unanswered===void 0?void 0:_`not exists (select 1 from jsonb_array_elements(coalesce(${N.context} -> 'approvals', '[]'::jsonb)) as entry where entry ->> 'id' = ${n.unanswered} and jsonb_typeof(entry -> 'response') = 'object')`)}async enqueue(e,t,n,r,i,a){let o=this.insertion(e,t,n,r,i,void 0,a),[s]=await z(this.db,i===void 0?[]:[_`select pg_advisory_xact_lock(1, hashtext(${e}))`],o);if(!s?.allowed)throw Error(`Organization task queue is full`);return!!s.inserted}insertion(e,t,n,r,i,a,o){let s=t.event,{audience:c,space:l}=Te(t),u=new Date(n).toISOString(),d=e=>_`${e===void 0?null:JSON.stringify(e)}::jsonb`,f=t=>X(e,`delivery`,t),p=r?_`
12
+ receipt as (
13
+ insert into ${E} (key, value, expires_at)
14
+ select ${f(r.key)}, ${d({at:n})}, ${new Date(n+r.ttlMs).toISOString()}::timestamptz
15
+ from capacity where allowed ${a?_`and (${a.create} or exists (select 1 from target))`:_``}
16
+ on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at
17
+ where ${E.expiresAt} <= ${u}::timestamptz or ${E.value}->>'owner' = ${r.owner??null}::text
18
+ returning key
19
+ ),`:_``,m=_`exists (select 1 from inserted)`,ee=_`on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at`,{conversation:h,unseen:g,secrets:te}=o??{},v=_`${h?_`, remembered as (insert into ${E} (key, value, expires_at)
20
+ select key, value, ${new Date(n+h.ttlMs).toISOString()}::timestamptz from (values
21
+ (${f(h.key)}, ${d(h.record)}), (${f(h.root)}, ${d({at:h.record.at})})) as row(key, value)
22
+ where ${m} ${ee})`:_``}${g?_`, acknowledged as (update ${E} set value = ${dt(g.version)}
23
+ where key = ${f(`since:${g.key}`)} and ${E.value}->>'epoch' is not distinct from ${g.epoch??null}::text
24
+ and (expires_at is null or expires_at > ${u}::timestamptz) and ${m})`:_``}${te?.length?_`, ${nn(te,_`select id from inserted`)}`:_``}`;return _`
25
+ with ${a?_`target as materialized (${a.target}),`:_``} capacity as (
26
+ select ${i===void 0?_`true`:_`(select count(*) from ${N} where organization_id = ${e} and status = 'queued') < ${i} ${r?_`or exists (select 1 from ${E} where key = ${f(r.key)} and expires_at > ${u}::timestamptz and value->>'owner' is distinct from ${r.owner??null}::text)`:_``}`} ${a?_`or exists (select 1 from target) or not ${a.create}`:_``} as allowed
27
+ ), ${p} ${a?_`advanced as (
28
+ update ${N} set inbox_seq = inbox_seq + 1, updated_at = ${u}::timestamptz where id in (select id from target) and exists (select 1 from receipt)
29
+ returning id, inbox_seq, generation
30
+ ), forwarded as (
31
+ insert into ${P} (task_id, seq, generation, at, kind, value)
32
+ select id, inbox_seq, generation, ${u}::timestamptz, 'steer', ${d({text:a.steer,asker:t.context?.asker??null})} from advanced returning seq
33
+ ),`:_``} inserted as (
34
+ insert into ${N} (organization_id, public_id, source, status, agent, flow, runner_kind, access,
35
+ installation_id, event, audience, space, parent, connections, models, name, cwd, prompt, args, mcp, append_system, add_dirs, author, definition, requested_by,
36
+ runner_id, engine_settings, tools, context, files, failure_reply, notice, task_url, settings_url, attempts, created_at, updated_at)
37
+ select ${e}, ${t.id}, ${t.source}, 'queued', ${t.agent}, ${t.flow}, ${t.runner}, ${t.access??null},
38
+ ${s?_`coalesce((select id from ${ce} where key = ${`${s.appId}:${s.installationId}`} and organization_id = ${e}), 0)`:_`null`},
39
+ ${d(s)}, ${c}, ${l??null}, ${t.parent??null}, ${d(t.connections)}, ${d(t.models)},
40
+ ${t.name??null}, ${t.cwd??null}, ${t.prompt??null}, ${d(t.args)}, ${d(t.mcp)},
41
+ ${t.appendSystem??null}, ${d(t.addDirs)}, ${t.author??null}, ${d(t.definition)},
42
+ ${t.requestedBy??null}, ${t.runnerId??null}, ${d(t.usage)}, ${d(t.tools)},
43
+ ${d(t.context)}, ${d(t.files)}, ${t.failureReply??null}, ${t.notice??null}, ${t.taskUrl??null}, ${t.settingsUrl??null},
44
+ 0, ${u}::timestamptz, ${u}::timestamptz
45
+ from capacity where allowed ${a?_`and ${a.create} and not exists (select 1 from target)`:_``} ${r?_`and exists (select 1 from receipt)`:_``}
46
+ returning id
47
+ )${v} select allowed, exists (select 1 from inserted) as inserted ${a?_`, exists (select 1 from forwarded) as steered`:_``} from capacity`}async deliver(e,t,n,r,i,a,o=!0,s){if(i===void 0)return o&&await this.enqueue(e,t,n,r,a,s)?{taskId:t.id}:{};let c=t.event,l=_`select id from ${N} where organization_id = ${e} and status in ('queued', 'running', 'waiting')
48
+ and agent = ${t.agent} and source = ${t.source} and flow = 'default'
49
+ and event->>'appId' is not distinct from ${c?.appId??null}
50
+ and event->>'installationId' is not distinct from ${c?.installationId??null}
51
+ and event->'chat'->'thread'->>'id' = ${c?.chat?.thread.id||null}
52
+ order by created_at desc, public_id desc limit 1 for update`,u=this.insertion(e,t,n,r,a,{target:l,create:o,steer:i},s),d=[_`select pg_advisory_xact_lock(3, hashtext(${JSON.stringify([e,pe(t)])}))`];a!==void 0&&o&&d.push(_`select pg_advisory_xact_lock(1, hashtext(${e}))`);let[f]=await z(this.db,d,u);if(!f?.allowed)throw Error(`Organization task queue is full`);return f.inserted?{taskId:t.id}:f.steered?{steered:!0}:{}}async claim(e,t,n=!1,r){let i=r===void 0?_`true`:_`(select count(*) from ${N} active where active.organization_id = ${N.organizationId} and active.status in ('running', 'waiting')) < ${r}`;if(!n){let[e]=await R(this.db,()=>q(this.db,_`select exists (select 1 from ${N} where status = 'queued' and ${i})
53
+ and ${t===void 0?_`true`:_`(select count(*) from ${N} where status in ('running', 'waiting')) < ${t}`} as ready`));if(!e?.ready)return}let a=Ke(32).toString(`base64url`),o=_`translate(rtrim(replace(encode(convert_to(format('{"task":%s,"organization":%s,"attempt":%s}',
54
+ to_json(public_id), to_json(organization_id), attempts + 1), 'UTF8'), 'base64'), E'\\n', ''), '='), '+/', '-_') || '.' || ${a}`,s=_`with stamp as materialized (select date_trunc('milliseconds', clock_timestamp()) as at), picked as materialized (
55
+ select id, ${o} as bearer from ${N} where status = 'queued'
56
+ and ${i}
57
+ ${t===void 0?_``:_`and (select count(*) from ${N} where status in ('running', 'waiting')) < ${t}`}
58
+ order by created_at, id limit 1 for update
59
+ ), claimed as (
60
+ update ${N} set status = 'running', attempts = attempts + 1, logs_complete = null,
61
+ started_at = (select at from stamp), updated_at = (select at from stamp), last_seen_at = (select at from stamp),
62
+ token_hash = translate(rtrim(encode(sha256(convert_to(picked.bearer, 'UTF8')), 'base64'), '='), '+/', '-_')
63
+ from picked where ${N.id} = picked.id returning ${N}.*
64
+ ) select to_jsonb(claimed) as record, exists (select 1 from ${N} where status = 'queued' and id <> claimed.id
65
+ and ${r===void 0?_`true`:_`(select count(*) from ${N} active where active.organization_id = ${N.organizationId} and active.status in ('running', 'waiting')) + case when ${N.organizationId} = claimed.organization_id then 1 else 0 end < ${r}`})
66
+ and ${t===void 0?_`true`:_`(select count(*) from ${N} where status in ('running', 'waiting')) + 1 < ${t}`} as more,
67
+ ${Et(_`claimed`)} as credential, ${Dt(_`claimed.organization_id`)} as config, ${kt(_`claimed`)} as runner
68
+ from claimed`,[c]=await z(this.db,[_`select pg_advisory_xact_lock(2, 0)`],s);if(!c)return;let l=G(N,c.record);return{organizationId:l.organizationId,status:Ie(l),token:we(l.publicId,l.organizationId,l.attempts,a).token,more:c.more,loaded:{credential:c.credential?ot(c.credential).value:void 0,config:c.config??void 0,runner:c.runner?st(c.runner).value:void 0}}}async authorize(e,t,n,r,i,a={}){let o=new Date(i).toISOString(),s=this.fence(r,e,{tokenHash:t,attempts:n,statuses:a.allowCompleted?[`running`,`waiting`,`completed`,`failed`,`cancelled`]:[`running`,`waiting`]}),c=_`${p(N.status,[`running`,`waiting`])} and (${N.lastSeenAt} is null or ${N.lastSeenAt} < ${new Date(i-15e3).toISOString()}::timestamptz)`,l=this.db.update(N).set({lastSeenAt:new Date(i)}).where(h(s,c)).returning(),u=this.db.select().from(N).where(h(s,_`not exists (select 1 from beaten)`)),d=a.include===`context`,f=!!a.include,m=E,ee=_`touched.organization_id`,g=e=>_`('o:' || ${Tt(ee,`snapshot`)} || ${e})`,te=e=>_`replace(replace(replace(${e}, '\\', '\\\\'), '%', '\\%'), '_', '\\_')`,v=_`(${m.expiresAt} is null or ${m.expiresAt} > ${o}::timestamptz)`,[y]=await q(this.db,_`with beaten as (${l.getSQL()}), touched as (
69
+ select * from beaten union all ${u.getSQL()}
70
+ ), target as (
71
+ select i.key, a.key as app from touched, ${ce} i join ${se} a on a.id = i.app_id
72
+ where i.key = touched.event->>'appId' || ':' || (touched.event->>'installationId') and i.organization_id = touched.organization_id and ${d}
73
+ )
74
+ select to_jsonb(touched) as status,
75
+ case when ${d} then ${At(_`a.key = touched.event->>'appId' and a.organization_id in (touched.organization_id, '')`)} end as app,
76
+ case when ${f} then (select jsonb_build_object('row', to_jsonb(i), 'app', to_jsonb(a), 'credentials', cs.value, 'token', ts.value)
77
+ from ${ce} i join ${se} a on a.id = i.app_id join ${j} cs on cs.id = a.credentials_secret_id left join ${j} ts on ts.id = i.token_secret_id
78
+ where i.key = touched.event->>'appId' || ':' || (touched.event->>'installationId') and i.organization_id = touched.organization_id and i.deleted_at is null) end as installation,
79
+ case when ${f} then ${Et(_`touched`)} end as credential,
80
+ case when ${f} then (select coalesce(jsonb_agg(${Fe(_`to_jsonb(c)`,_`s.value`)}), '[]'::jsonb)
81
+ from ${D} c join ${j} s on s.id = c.secret_id where c.organization_id = touched.organization_id
82
+ and (c.owner is null or c.owner = touched.requested_by)) end as credentials,
83
+ case when ${f} then ${Dt(ee)} end as config,
84
+ case when ${d} then ${Ot(ee)} end as workspace,
85
+ case when ${d} then ${kt(_`touched`)} end as runner,
86
+ case when ${f} then jsonb_build_object('rows', coalesce((select jsonb_agg(s.value) from ${I} ts join ${j} s on s.id = ts.secret_id
87
+ where ts.task_id = touched.id and starts_with(ts.key, 'connection-secrets:' || touched.public_id || ':') and ts.expires_at > ${o}::timestamptz), '[]'::jsonb)) end as secrets,
88
+ case when ${d} then (select jsonb_build_object('key', ts.key, 'value', jsonb_build_object('resolvedConnections', s.value, 'expiresAt', (extract(epoch from ts.expires_at) * 1000)::bigint))
89
+ from ${I} ts join ${j} s on s.id = ts.secret_id where ts.task_id = touched.id
90
+ and starts_with(ts.key, 'connections:' || touched.public_id || ':' || touched.generation || ':' || touched.attempts || ':') and ts.expires_at > ${o}::timestamptz limit 1) end as resolved,
91
+ case when ${d} then (select coalesce(jsonb_object_agg(${m.key}, ${m.value}), '{}'::jsonb) from ${m} where ${v} and (
92
+ ${m.key} like any (select ${te(g(_`'token:' || key || ':'`))} || '%' from target)
93
+ or ${m.key} in (select ${g(_`'token-drop:' || key`)} from target union all select ${g(_`'token-drop:' || app`)} from target))) end as tokens
94
+ from touched`);if(!y)return;let b=G(N,y.status),ne=(e,t)=>e?t(e):void 0;return{organizationId:b.organizationId,status:Ie(b),...f?{loaded:{installation:ne(y.installation,e=>ct(e).installation),credential:ne(y.credential,e=>ot(e).value),...y.credentials?{credentials:y.credentials.map(ot)}:{},secrets:y.secrets??void 0,config:y.config??void 0,...d?{app:ne(y.app,e=>$(G(se,e.row),e.credentials)),workspace:y.workspace??void 0,runner:ne(y.runner,e=>st(e).value),resolved:ne(y.resolved,e=>({id:e.key,value:e.value})),tokens:ut(b.organizationId,y.tokens??{})}:{}}}:{}}}async touch(e,t,n,r,i,a=!1){return(await this.authorize(t,n,r,e,i,{allowCompleted:a}))?.status}async patchTask(e,t,n,r,i={}){let{answer:a,approvals:o,archivedAt:c,autoArchived:l,lastSeenAt:u,logsComplete:d,resolvedModel:f,...p}=n,[m]=await this.db.transaction(async l=>{let[m]=o?await l.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`):[];return l.update(N).set({...Object.fromEntries(Object.entries(p).map(([e,t])=>[e,t??null])),...o?{context:_`jsonb_set(coalesce(${N.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(s(m?.context?.approvals??[],o))}::jsonb)`}:{},...Object.hasOwn(n,`logsComplete`)?{logsComplete:d??null}:Object.hasOwn(n,`handle`)?{logsComplete:_`case when ${N.handle} is distinct from ${n.handle??null}::text then null else ${N.logsComplete} end`}:{},...a===void 0?{}:{answer:_`coalesce(${N.answer}, '[]'::jsonb) || ${JSON.stringify([a])}::jsonb`},...f?{engineSettings:_`coalesce(${N.engineSettings}, '{}'::jsonb) || ${JSON.stringify({resolvedModel:f})}::jsonb`}:{},...Object.hasOwn(n,`archivedAt`)?{archivedAt:c===void 0?null:new Date(c)}:{},...Object.hasOwn(n,`lastSeenAt`)?{lastSeenAt:u===void 0?null:new Date(u)}:{},updatedAt:new Date(r)}).where(this.fence(e,t,i)).returning({id:N.id})});return!!m}async setRequestedBy(e,t,n,r){let[i]=await this.db.update(N).set({requestedBy:n,audience:_`case when ${N.audience} = 'dm:' then ${`dm:${n}`} else ${N.audience} end`,updatedAt:new Date(r)}).where(h(this.where(e,t),S(N.requestedBy))).returning({id:N.id});return!!i}async archiveStopped(e,t,i){await this.db.update(N).set({archivedAt:new Date(t),updatedAt:new Date(t)}).where(h(e===void 0?void 0:y(N.organizationId,e),i?p(N.publicId,i):void 0,S(N.archivedAt),p(N.status,[...n]),re(_`coalesce(${N.finishedAt}, ${N.updatedAt})`,_`${new Date(t-r).toISOString()}::timestamptz`)))}async requeue(e,t,n,r={}){let[i]=await this.db.update(N).set({status:`queued`,handle:null,tokenHash:null,lastSeenAt:null,logsComplete:null,updatedAt:new Date(n)}).where(this.fence(e,t,{...r,statuses:[`running`,`waiting`]})).returning({id:N.id});return!!i}connectionLock(e,t){return _`select pg_advisory_xact_lock(3, hashtext(${`app:${e}:connections:${t}`}))`}async deleteTask(e,t,n){let[r]=await z(this.db,[this.connectionLock(e,t)],_`
95
+ with gone as (
96
+ delete from ${N} where ${this.fence(e,t,n)}
97
+ returning id, organization_id, public_id, audience, requested_by
98
+ ), marked as (
99
+ insert into ${ue} (organization_id, public_id, audience, requested_by, deleted_at)
100
+ select organization_id, public_id, audience, requested_by, clock_timestamp() from gone
101
+ ), ${jt(_`select id from gone`)}
102
+ select count(*)::int as deleted from gone`);return!!r?.deleted}async finish(e,t,n,r,i={}){let a=new Date(r),o=this.db.update(N).set({status:n.status,result:n.result??null,error:n.error??null,tokens:n.tokens??null,lastSeenAt:a,finishedAt:a,updatedAt:a}).where(this.fence(e,t,{...i,statuses:[`queued`,`running`,`waiting`]})).returning({id:N.id}),[s]=await z(this.db,[this.connectionLock(e,t)],_`
103
+ with finished as (${o.getSQL()}), ${jt(_`select id from finished`)}
104
+ select id from finished`);return!!s}async continueTask(e,t,n,r,i){let[a]=await this.db.transaction(async a=>{let[o]=await a.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`),c=n.context&&{...n.context,approvals:s(n.context.approvals??[],o?.context?.approvals??[])};return a.update(N).set({prompt:n.prompt??null,context:c??null,...n.event?{event:n.event}:{},...n.definition?{definition:n.definition}:{},...n.usage?{engineSettings:n.usage}:{},...n.tools?{tools:n.tools}:{},...`files`in n?{files:n.files??null}:{},...`access`in n?{access:n.access??null}:{},...n.models?{models:n.models}:{},...n.runner?{runnerKind:n.runner}:{},...`runnerId`in n?{runnerId:n.runnerId??null}:{},...`failureReply`in n?{failureReply:n.failureReply??null}:{},...`notice`in n?{notice:n.notice??null}:{},status:`queued`,attempts:0,generation:_`${N.generation} + 1`,inboxAck:-1,typingEnded:null,result:null,error:null,tokens:null,handle:null,tokenHash:null,lastSeenAt:null,logCursor:null,logsComplete:null,startedAt:null,finishedAt:null,cancelRequestedAt:null,approval:null,answer:null,archivedAt:null,updatedAt:new Date(r)}).where(this.fence(e,t,{...i,statuses:[`completed`,`failed`,`cancelled`]})).returning({id:N.id})});return!!a}async completeTask(e,t,n,r){let{outcome:i,usage:a}=n,o=new Date(r).toISOString(),s=n.logsComplete?_`, logs_complete = true`:_``,c=n.known?.length?_`, posts as (insert into ${E} (key, value, expires_at)
105
+ select key, ${JSON.stringify({at:r})}::jsonb, expires_at from (values ${_.join(n.known.map(t=>_`(${X(e,`delivery`,t.id)}, ${new Date(r+t.ttlMs).toISOString()}::timestamptz)`),_`, `)}) as row(key, expires_at) where exists (select 1 from finished)
106
+ on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at)`:_``,[l]=await z(this.db,[this.connectionLock(e,t)],_`
107
+ with finished as (
108
+ update ${N} set status = ${i.status}, result = ${JSON.stringify(i.result??null)}::jsonb,
109
+ error = ${i.error??null}, tokens = ${JSON.stringify(i.tokens??null)}::jsonb,
110
+ engine = ${a.engine??null}, model = ${a.model??null}, credential = ${a.credential??null}, runner_ms = coalesce(runner_ms, 0) + ${a.runnerElapsedMs},
111
+ token_count = coalesce(token_count, 0) + ${ve(a.tokens)}, usage_tokens = ${Mt(_`usage_tokens`,a.tokens)},
112
+ last_seen_at = ${o}::timestamptz, finished_at = ${o}::timestamptz, updated_at = ${o}::timestamptz${s}
113
+ where ${this.fence(e,t,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]})}
114
+ returning id, generation
115
+ ), ${jt(_`select id from finished`)}, inbox as (delete from ${P} where (task_id, generation) in (select id, generation from finished))${c}
116
+ select exists (select 1 from finished) as completed`);return!!l?.completed}async cancel(e,n,r,i={}){let a=new Date(r).toISOString(),[o]=await z(this.db,[this.connectionLock(e,n)],_`
117
+ with cancelled as (
118
+ update ${N} set status = case when status = 'queued' then 'cancelled' else status end,
119
+ finished_at = case when status = 'queued' then ${a}::timestamptz else finished_at end,
120
+ error = case when status = 'queued' then ${t} else error end,
121
+ inbox_seq = case when status = 'queued' then inbox_seq else inbox_seq + 1 end,
122
+ cancel_requested_at = ${a}::timestamptz, updated_at = ${a}::timestamptz
123
+ where ${this.fence(e,n,{...i,statuses:ye})} returning id, generation, inbox_seq, status
124
+ ), ${jt(_`select id from cancelled where status = 'cancelled'`)}, message as (
125
+ insert into ${P} (task_id, seq, generation, kind, value, at)
126
+ select id, inbox_seq, generation, 'cancel', 'null'::jsonb, ${a}::timestamptz from cancelled where status in ('running', 'waiting')
127
+ ) select exists(select 1 from cancelled) as accepted`);return!!o?.accepted}async cancelRequested(e,t){let[n]=await R(this.db,()=>this.db.select({at:N.cancelRequestedAt}).from(N).where(this.where(e,t)));return!!n?.at}filter(e,t){let n=t.status&&t.status!==`waiting`?[t.status]:t.statuses,r=t.q?.trim(),i=r&&`%${r.replace(/[\\%_]/g,`\\$&`)}%`;return h(y(N.organizationId,e),n?p(N.status,n):void 0,t.status===`waiting`?It:void 0,t.agent?y(N.agent,t.agent):void 0,t.source?y(N.source,t.source):void 0,t.parent?y(N.parent,t.parent):void 0,t.runnerId?y(N.runnerId,t.runnerId):void 0,t.archived===void 0?void 0:t.archived?ne(N.archivedAt):S(N.archivedAt),t.viewer===void 0?void 0:x(y(N.audience,``),y(N.requestedBy,t.viewer.id),t.viewer.spaces?t.viewer.spaces.length?p(N.audience,t.viewer.spaces):void 0:_`${N.audience} = any(${Rt(e,t.viewer.id)})`),i?x(g(_`${N.event}->>'text'`,i),g(N.prompt,i),g(N.agent,i),g(N.publicId,i)):void 0)}pageQuery(e,t){let{before:n}=t,r=t.summary?{publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,prompt:N.prompt,access:N.access,requestedBy:N.requestedBy,event:_`case when ${N.event} is not null then jsonb_strip_nulls(jsonb_build_object('integration', ${N.event}->>'integration', 'type', ${N.event}->>'type', 'text', ${N.event}->>'text', 'actor', ${N.event}->'actor')) end`.as(`event`),context:_`jsonb_strip_nulls(jsonb_build_object('user', ${N.context}->'user', 'approvals', ${N.context}->'approvals', 'turns', case when ${N.context}->'turns'->0 is not null then jsonb_build_array(jsonb_build_object('prompt', ${N.context}->'turns'->0->'prompt')) end))`.as(`context`),usage:_`jsonb_strip_nulls(case when coalesce(${N.engineSettings}->>'engine', ${N.engineSettings}->>'model') is not null then jsonb_build_object('engine', ${N.engineSettings}->>'engine', 'model', ${N.engineSettings}->>'model', 'effort', ${N.engineSettings}->>'effort') else jsonb_build_object('model', ${N.definition}->>'model') end || jsonb_build_object('resolvedModel', ${N.engineSettings}->>'resolvedModel'))`.as(`usage`),status:N.status,attempts:N.attempts,approval:N.approval,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,lastSeenAt:N.lastSeenAt,updatedAt:N.updatedAt}:d(N),i=this.db.select(r).from(N).where(h(this.filter(e,t),t.since===void 0?void 0:x(v(N.updatedAt,new Date(t.since)),t.sinceId?h(y(N.updatedAt,new Date(t.since)),v(Ft(N.publicId),t.sinceId)):void 0),n?this.after(n):void 0)).orderBy(...t.since===void 0?zt(N):Bt(N));return t.limit===void 0?i:i.limit(t.limit)}after(e){if(`updatedAt`in e)return x(v(N.updatedAt,new Date(e.updatedAt)),h(y(N.updatedAt,new Date(e.updatedAt)),v(Ft(N.publicId),e.id)));let t=_`(${Pt(N.createdAt)}, ${Ft(N.publicId)}) < (${new Date(e.createdAt).toISOString()}::timestamptz, ${e.id})`;return x(v(Nt(N.status),e.rank),h(y(Nt(N.status),e.rank),t))}record(e,t){return t?K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,prompt:e.prompt,access:e.access,requestedBy:e.requestedBy,event:e.event,context:Object.keys(e.context??{}).length?e.context:void 0,usage:Object.keys(e.usage??{}).length?e.usage:void 0}),status:e.status,attempts:e.attempts,approval:e.approval,archivedAt:e.archivedAt?U(e.archivedAt):void 0,createdAt:U(e.createdAt),startedAt:e.startedAt?U(e.startedAt):void 0,finishedAt:e.finishedAt?U(e.finishedAt):void 0,lastSeenAt:e.lastSeenAt?U(e.lastSeenAt):void 0,updatedAt:U(e.updatedAt)}):Ie(e)}async list(e,t={}){return(await R(this.db,()=>this.pageQuery(e,t))).map(e=>this.record(e,t.summary))}async memberSpaces(e,t,n){return n.length?(await R(this.db,()=>this.db.selectDistinct({audience:Lt}).from(k).innerJoin(M,y(M.spaceId,k.id)).innerJoin(O,h(y(O.platform,k.integration),y(O.platformUserId,M.member))).where(h(y(k.organizationId,e),y(O.userId,t),p(Lt,n))))).map(e=>e.audience):[]}async listedSpaces(e,t){return(await R(this.db,()=>this.db.select({integration:k.integration,appId:k.app,installationId:k.installation,account:k.account,kind:k.kind,id:k.space}).from(k).where(h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),_`exists (select 1 from ${N} where ${N.organizationId} = ${k.organizationId} and ${N.audience} = ${Lt})`)))).map(({account:e,kind:t,id:n,...r})=>({...r,...e===r.installationId?{}:{account:e},space:{kind:t,id:n}}))}async linkedMembers(e,t){return(await R(this.db,()=>this.db.select({id:O.platformUserId,login:O.login}).from(O).where(h(y(O.platform,t),_`${O.organizations} @> ${JSON.stringify([e])}::jsonb`)))).map(e=>K(e))}async spaceSynced(e,t){let[n]=await R(this.db,()=>this.db.select({syncedAt:k.syncedAt}).from(k).where(this.space(e,t)));return n?.syncedAt?U(n.syncedAt):void 0}async claimSpace(e,t,n,r=!1){let i=new Date(n).toISOString(),[a]=await q(this.db,_`insert into ${k} (organization_id, integration, app, installation, account, kind, space, claimed_at)
128
+ values (${e}, ${t.integration}, ${t.appId}, ${t.installationId}, ${t.account??t.installationId}, ${t.space?.kind??`channel`}, ${t.space?.id??``}, ${i}::timestamptz)
129
+ on conflict (organization_id, integration, account, space) do update set claimed_at = excluded.claimed_at
130
+ where ${r} or ${k.claimedAt} is null or ${k.claimedAt} < ${new Date(n-ge).toISOString()}::timestamptz
131
+ returning id`);return!!a}async saveSpaceMembers(e,t,n,r){let i=h(this.space(e,t),y(k.claimedAt,new Date(r)));if(!n){await this.db.update(k).set({claimedAt:null}).where(i);return}await z(this.db,[],_`
132
+ with saved as (
133
+ update ${k} set synced_at = ${new Date(r).toISOString()}::timestamptz, claimed_at = null
134
+ where ${i} returning id
135
+ ), gone as (
136
+ delete from ${M} where space_id = (select id from saved) and member <> all(${_.param(n)}::text[])
137
+ )
138
+ insert into ${M} (space_id, member)
139
+ select saved.id, member from saved, unnest(${_.param(n)}::text[]) as member
140
+ on conflict do nothing`)}async spaceChanged(e,t,n,r){let i=_`select id from ${k} where ${this.space(e,t)}`;if((n.joined||n.left)&&await this.db.update(k).set({claimedAt:null}).where(this.space(e,t)),n.joined&&await this.db.execute(_`insert into ${M} (space_id, member) select id, ${n.joined} from (${i}) as saved on conflict do nothing`),n.left&&await this.db.execute(_`delete from ${M} where space_id in (${i}) and member = ${n.left}`),n.private===void 0)return;let a=_`to_jsonb(${n.private}::boolean)`;await this.db.update(N).set({audience:n.private?_e(t):``,event:_`case when ${N.event}->'space' is not null then jsonb_set(${N.event}, '{space,private}', ${a}) else ${N.event} end`,updatedAt:new Date(r)}).where(h(y(N.organizationId,e),y(N.space,be(t)),_`${N.audience} not like 'dm:%'`)),await this.db.delete(k).where(this.space(e,t))}space(e,t){return h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),y(k.space,t.space?.id??``))}async changes(e,t){if(!e.length)return{rows:[],deleted:[]};let n=e.map(e=>e.organizationId),r=t=>{let n=e.flatMap(e=>e[t].map(()=>e.organizationId)),r=e.flatMap(e=>e[t]);return r.length?_`(${N.organizationId}, ${N.publicId}) in (select * from unnest(${_.param(n)}::text[], ${_.param(r)}::text[]))`:void 0},i=r(`ids`)??_`false`,a=r(`fresh`),[o,s]=await Promise.all([R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,requestedBy:N.requestedBy,audience:N.audience,parent:N.parent,status:N.status,approval:N.approval,approvals:_`case when ${i} then ${N.context}->'approvals' end`,answer:_`case when ${i} then ${N.answer} end`,result:_`case when ${i} then ${N.result} end`,error:_`case when ${i} then ${N.error} end`,attempts:N.attempts,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,updatedAt:N.updatedAt}).from(N).where(x(h(p(N.organizationId,n),v(N.updatedAt,new Date(t))),a))),R(this.db,()=>this.db.select().from(ue).where(h(p(ue.organizationId,n),v(ue.deletedAt,new Date(t)))))]);return{rows:o.map(e=>({organizationId:e.organizationId,status:K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,requestedBy:e.requestedBy,audience:e.audience,parent:e.parent}),status:e.status,approval:e.approval,approvals:Array.isArray(e.approvals)?e.approvals:void 0,answer:Array.isArray(e.answer)?e.answer:void 0,result:e.result,error:e.error,attempts:e.attempts,archivedAt:e.archivedAt&&U(e.archivedAt),createdAt:U(e.createdAt),startedAt:e.startedAt&&U(e.startedAt),finishedAt:e.finishedAt&&U(e.finishedAt),updatedAt:U(e.updatedAt)})})),deleted:s.map(e=>({organizationId:e.organizationId,id:e.publicId,at:U(e.deletedAt),...e.audience===null?{}:{audience:e.audience},...e.requestedBy===null?{}:{requestedBy:e.requestedBy}}))}}async logTails(e,t){if(!e.length)return[];let n=_`(line->>'seq')::int`,r=await R(this.db,()=>q(this.db,_`select tail.n::int as n, ${N.status} as status, ${N.approval} as approval,
141
+ ${N.audience} as audience, ${N.requestedBy} as requested_by,
142
+ (select coalesce(jsonb_agg(line order by ${n}), '[]'::jsonb) from (
143
+ select line from ${F} cross join jsonb_array_elements(${F.lines}) line
144
+ where ${F.taskId} = ${N.id} and ${F.seqTo} > tail.after and ${n} > tail.after
145
+ order by ${n} limit ${t}) page) as lines
146
+ from unnest(${_.param(e.map(e=>e.organizationId))}::text[], ${_.param(e.map(e=>e.id))}::text[], ${_.param(e.map(e=>e.after))}::int[])
147
+ with ordinality as tail(organization_id, public_id, after, n)
148
+ join ${N} on ${N.organizationId} = tail.organization_id and ${N.publicId} = tail.public_id`)),i=new Map(r.map(e=>[e.n-1,e]));return e.map((e,t)=>{let n=i.get(t);return n&&{status:K({status:n.status,approval:n.approval,task:K({id:e.id,audience:n.audience,requestedBy:n.requested_by})}),lines:n.lines.map(e=>{let t=l(e.line);return t?{...e,entry:t}:e})}})}countQuery(e,t){return this.db.select({all:_`count(*)::int`.as(`all`),active:_`(count(*) filter (where ${p(N.status,ye)}))::int`.as(`active`),waiting:_`(count(*) filter (where ${It}))::int`.as(`waiting`)}).from(N).where(this.filter(e,t))}async counts(e,t={}){let[n]=await R(this.db,()=>this.countQuery(e,t));return n??{all:0,active:0,waiting:0}}async activeCounts(e){return(await R(this.db,()=>this.db.select({audience:N.audience,requestedBy:N.requestedBy,active:_`count(*)::int`}).from(N).where(h(y(N.organizationId,e),p(N.status,ye),S(N.archivedAt))).groupBy(N.audience,N.requestedBy))).map(e=>K(e))}async listWithCounts(e,t){let n=this.db.$with(`totals`).as(this.countQuery(e,t)),r=this.db.$with(`page`).as(this.pageQuery(e,{...t,limit:t.limit??20})),i=Object.fromEntries(Object.keys(r._.selectedFields).map(e=>[e,r[e]])),a=await R(this.db,()=>this.db.with(n,r).select({...i,all:n.all,active:n.active,waiting:n.waiting}).from(n).leftJoin(r,_`true`).orderBy(...t.since===void 0?zt({status:i.status,createdAt:i.createdAt,publicId:i.publicId}):Bt({updatedAt:i.updatedAt,publicId:i.publicId}))),{all:o=0,active:s=0,waiting:c=0}=a[0]??{};return{items:a.filter(e=>e.publicId!==null&&e.publicId!==void 0).map(e=>this.record(e,t.summary)),counts:{all:o,active:s,waiting:c}}}async runningCount(){let[e]=await R(this.db,()=>this.db.select({value:_`count(*)::int`}).from(N).where(p(N.status,[`running`,`waiting`])));return e?.value??0}async running(){return(await R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,runner:N.runnerKind,runnerId:N.runnerId,status:N.status,attempts:N.attempts,generation:N.generation,handle:N.handle,tokenHash:N.tokenHash,lastSeenAt:N.lastSeenAt,logsComplete:N.logsComplete,startedAt:N.startedAt,cancelRequestedAt:N.cancelRequestedAt,updatedAt:N.updatedAt}).from(N).where(p(N.status,[`running`,`waiting`])))).map(({organizationId:e,publicId:t,runner:n,runnerId:r,...i})=>({organizationId:e,status:K({...i,task:K({id:t,runner:n,runnerId:r}),lastSeenAt:i.lastSeenAt&&U(i.lastSeenAt),startedAt:i.startedAt&&U(i.startedAt),cancelRequestedAt:i.cancelRequestedAt&&U(i.cancelRequestedAt),updatedAt:U(i.updatedAt)})}))}async appendLogs(e,t,n,r,i,a,o){let s=n.length?_`, inserted as (
149
+ insert into ${F} (task_id, seq_from, seq_to, lines)
150
+ select accepted.id, ${n[0].seq}, ${n[n.length-1].seq}, ${JSON.stringify(n)}::jsonb from accepted
151
+ on conflict (task_id, seq_from) do update set seq_to = excluded.seq_to, lines = excluded.lines
152
+ )`:_``,[c]=await q(this.db,_`
153
+ with accepted as (
154
+ update ${N} set log_cursor = ${i.cursor}, log_seq = ${i.seq}, log_bytes = ${i.bytes}
155
+ where ${this.fence(e,t,o)} and coalesce(log_seq, 0) = ${r.seq} and coalesce(log_cursor, -1) = ${r.cursor}
156
+ returning id
157
+ ) ${s} select exists (select 1 from accepted) as accepted`);return!!c?.accepted}async readInbox(e,t,n,r){return(await R(this.db,()=>this.db.select({seq:P.seq,generation:P.generation,at:P.at,kind:P.kind,value:P.value}).from(P).innerJoin(N,y(N.id,P.taskId)).where(h(this.where(e,t),y(N.generation,n),p(N.status,ye),y(P.generation,n),_`${P.seq} > ${r}`)).orderBy(b(P.seq)).limit(100))).map(e=>({...e,at:U(e.at)}))}async appendInbox(e,t,n,r,i,c,l,u){return u?this.db.transaction(async d=>{let[f]=await d.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`);for(let e of u){let t=o(f?.context?.approvals?.find(t=>t.id===e.id),e);if(t)throw new a(t)}let p=s(f?.context?.approvals??[],u);return this.insertInbox(d,e,t,n,r,i,c,l,p)}):this.insertInbox(this.db,e,t,n,r,i,c,l)}async insertInbox(e,t,n,r,i,a,o,s,c){let l=s?_`select key, value from ${E}
158
+ where key = ${X(t,`delivery`,s.key)}
159
+ and value->'sending'->>'owner' = ${s.owner}
160
+ and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&me(s),d=u?_`, context = coalesce(${N.context}, '{}'::jsonb) || jsonb_build_object('admissions',
161
+ coalesce(${N.context}->'admissions', '{}'::jsonb) || ${JSON.stringify(u)}::jsonb)`:c?_`, context = jsonb_set(coalesce(${N.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(c)}::jsonb)`:_``,f=_`(${E.value}->'sending'->>'count')::int`,p=_`coalesce((select n from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
162
+ where n <= ${f} and item->>'admission' = ${s?.through??null}::text limit 1), 0)`,[m]=await q(e,_`
163
+ with held as materialized (${l}), next as (
164
+ update ${N} set inbox_seq = inbox_seq + 1, updated_at = ${new Date(a).toISOString()}::timestamptz${d}
165
+ where ${this.fence(t,n,{generation:o,statuses:ye})}
166
+ and exists(select 1 from held) returning id, inbox_seq, generation
167
+ ), admitted as (
168
+ insert into ${P} (task_id, seq, generation, kind, value, at)
169
+ select id, inbox_seq, generation, ${r}, ${JSON.stringify(u?{...i,admissions:u}:i??null)}::jsonb, ${new Date(a).toISOString()}::timestamptz from next returning seq
170
+ ) ${s?_`, acknowledged as (
171
+ update ${E} set value = (${E.value} - 'sending') || jsonb_build_object(
172
+ 'items', coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n) where n > ${p}), '[]'::jsonb)) ||
173
+ case when ${f} > ${p} then jsonb_build_object('sending',
174
+ (${E.value}->'sending') || jsonb_build_object('count', ${f} - ${p}, 'until', ${a+Me}::bigint)) else '{}'::jsonb end
175
+ where key in (select key from held) and exists(select 1 from admitted)
176
+ )`:_``}
177
+ select (select seq from admitted) as seq, exists(select 1 from held) as held`);if(s&&!m?.held)throw new de;return m?.seq==null?void 0:{seq:m.seq,generation:o,at:a,kind:r,value:i}}async fetchInbox(e,t,n,r,i){let[a]=await R(this.db,()=>q(this.db,_`
178
+ select coalesce(jsonb_agg(jsonb_build_object('seq', i.seq, 'generation', i.generation, 'at', extract(epoch from i.at) * 1000, 'kind', i.kind, 'value', i.value) order by i.seq) filter (where i.seq is not null), '[]'::jsonb) as entries
179
+ from ${N} left join ${P} i on i.task_id = ${N.id} and i.generation = ${N.generation} and i.seq > ${i}
180
+ where ${this.fence(e,t,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})} group by ${N.id}`));return a?.entries}async ackInbox(e,n,r,i){if(i.generation!==void 0&&i.generation!==r.generation)return;let[a]=await z(this.db,[this.connectionLock(e,n)],_`
181
+ with current as (
182
+ select id from ${N} where ${this.fence(e,n,{...i,generation:r.generation,statuses:void 0})}
183
+ and inbox_seq >= ${r.seq} and (status in ('running', 'waiting') or (status in ('completed', 'failed', 'cancelled') and inbox_ack >= ${r.seq})) for update
184
+ ), applied as (
185
+ delete from ${P} where task_id in (select id from current) and generation = ${r.generation} and seq <= ${r.seq} returning seq, kind, value
186
+ ), answers as (
187
+ select jsonb_agg(a.value order by a.seq) as value from jsonb_to_recordset(${JSON.stringify(r.answers??[])}::jsonb) a(seq int, value jsonb)
188
+ where exists (select 1 from applied where applied.seq = a.seq and applied.kind = 'ask')
189
+ ), updated as (
190
+ update ${N} set inbox_ack = greatest(inbox_ack, ${r.seq}), answer = coalesce(answer, '[]'::jsonb) || coalesce(answers.value, '[]'::jsonb),
191
+ status = case when exists(select 1 from applied where kind = 'cancel') then 'cancelled'
192
+ when exists(select 1 from applied where kind = 'approve' and value->>'approvalId' = ${N.approval}->>'id') then 'running' else status end,
193
+ approval = case when exists(select 1 from applied where kind = 'approve' and value->>'approvalId' = ${N.approval}->>'id') then null else approval end,
194
+ finished_at = case when exists(select 1 from applied where kind = 'cancel') then now() else finished_at end,
195
+ error = case when exists(select 1 from applied where kind = 'cancel') then ${t} else error end,
196
+ updated_at = now()
197
+ from answers where id in (select id from current) returning id, status
198
+ ), ${jt(_`select id from updated where status = 'cancelled'`)}
199
+ select exists (select 1 from current) as accepted, (select status from updated) as status`);return a?.accepted?a.status??void 0:void 0}async pendingInbox(e){return(await R(this.db,()=>this.db.select().from(N).where(h(e===void 0?void 0:y(N.organizationId,e),p(N.status,[`running`,`waiting`]),_`exists (select 1 from ${P} where ${P.taskId} = ${N.id} and ${P.generation} = ${N.generation})`)))).map(e=>({organizationId:e.organizationId,status:Ie(e)}))}};function Ht(e,t,n,r){return e.db.transaction(async i=>{let[a]=await i.insert(C).values({organizationId:e.organizationId,slug:t.id,name:t.name,description:t.description??null,source:t.source,repo:t.repo??null,path:t.path??null,currentVersion:0,createdAt:V(t.createdAt),updatedAt:V(t.updatedAt)}).onConflictDoUpdate({target:[C.organizationId,C.slug],set:{slug:t.id}}).returning(),o=Ve(a);if(r&&o.currentVersion!==r.currentVersion)return;let[s]=o.currentVersion?await i.select().from(w).where(h(y(w.agentId,a.id),y(w.version,o.currentVersion))):[],c=s&&He(s,t.id),l=!!(c&&Je(c.definition,n.definition)&&c.systemPrompt===n.systemPrompt&&Je(c.files,n.files)),u=l?c:{...n,version:o.currentVersion+1},d={...t,currentVersion:u.version,createdAt:o.createdAt,...o.settings?{settings:o.settings}:{},updatedAt:o.updatedAt};if(l&&Je(d,o))return{record:o,version:u,unchanged:l};d={...d,updatedAt:t.updatedAt};let f=l?_``:_`with published as (
200
+ insert into ${w} (agent_id, version, definition, system_prompt, files, commit, imported_from, created_at)
201
+ values (${a.id}, ${u.version}, ${JSON.stringify(u.definition)}::jsonb, ${u.systemPrompt},
202
+ ${u.files?JSON.stringify(u.files):null}::jsonb, ${u.commit??null}, ${u.importedFrom}, ${V(u.createdAt).toISOString()}::timestamptz)
203
+ returning version
204
+ )`;return await i.execute(_`${f} update ${C} set
205
+ name = ${d.name}, description = ${d.description??null}, problems = null, source = ${d.source},
206
+ repo = ${d.repo??null}, path = ${d.path??null},
207
+ current_version = ${l?_`${u.version}`:_`(select version from published)`}, updated_at = ${V(d.updatedAt).toISOString()}::timestamptz
208
+ where id = ${a.id}`),{record:d,version:u,unchanged:l}})}function Ut(e){let t=C;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:Ve(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,problems:r.problems??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,engineSettings:r.settings??null,createdAt:V(r.createdAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.slug,n)))}}}async function Wt(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(w).values({agentId:_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${t.slice(0,r)})`,version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:V(n.createdAt)}).onConflictDoNothing().returning({id:w.id})).length>0}function Gt(e){let t=w,n=_`${C.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>h(y(C.slug,e),n===void 0?void 0:r?y(t.version,n):v(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:C.slug,key:n}).from(t).innerJoin(C,y(C.id,t.agentId)).where(h(e.mine(C.organizationId),r)).orderBy(b(C.slug),b(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:He(e,t)}))},put:async(t,n)=>{await Wt(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${n.slice(0,r)})`;await e.db.delete(t).where(h(y(t.agentId,i),y(t.version,Number(n.slice(r+1)))))}}}const Kt=(e,t)=>_`(select ${N.id} from ${N} where ${N.organizationId} = ${e.organizationId} and ${N.publicId} = ${t})`;function qt(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:Ie(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,{audience:s,space:c}=Te(o),l={source:o.source,status:r.status,agent:o.agent,flow:o.flow,runnerKind:o.runner,access:o.access??null,installationId:o.event?_`(select id from ${Y} where organization_id = ${e.organizationId} and key = ${`${o.event.appId}:${o.event.installationId}`})`:null,event:o.event??null,audience:s,space:c??null,parent:o.parent??null,connections:o.connections??null,models:o.models??null,name:o.name??null,cwd:o.cwd??null,prompt:o.prompt??null,args:o.args??null,mcp:o.mcp??null,appendSystem:o.appendSystem??null,addDirs:o.addDirs??null,author:o.author??null,definition:o.definition,requestedBy:o.requestedBy??null,runnerId:o.runnerId??null,engineSettings:o.usage??null,tools:o.tools,context:o.context??null,files:o.files??null,failureReply:o.failureReply??null,notice:o.notice??null,taskUrl:o.taskUrl??null,settingsUrl:o.settingsUrl??null,result:r.result??null,error:r.error??null,fallbacks:r.fallbacks??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:V(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,logsComplete:r.logsComplete??null,archivedAt:r.archivedAt===void 0?null:V(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:V(r.createdAt),startedAt:r.startedAt===void 0?null:V(r.startedAt),finishedAt:r.finishedAt===void 0?null:V(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:V(r.cancelRequestedAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...l}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...l,archivedAt:a.unarchive?l.archivedAt:_`coalesce(${t.archivedAt}, ${l.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}async function Jt(e,t){return(await e.db.select({engine:le.engine,conversation:le.conversation,savedAt:le.savedAt}).from(le).innerJoin(N,y(N.id,le.taskId)).where(h(e.mine(N.organizationId),y(N.publicId,t))).orderBy(b(le.savedAt))).map(e=>({...e,savedAt:U(e.savedAt)}))}function Yt(e){let t=le,n=_`${N.publicId} || ':' || ${t.conversation}`,r=e=>[e.slice(0,e.indexOf(`:`)),e.slice(e.indexOf(`:`)+1)];return{key:n,where:({id:n,prefix:i})=>{let[a,o]=r(n??i??``);return h(e.mine(N.organizationId),y(N.publicId,a),n===void 0?void 0:y(t.conversation,o))},rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(t.savedAt));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:K({engine:e.engine,conversation:e.conversation,data:e.data,state:e.state,savedAt:U(e.savedAt)})}))},put:async(n,i)=>{let a={engine:i.engine,data:i.data,state:i.state??null,savedAt:V(i.savedAt)};await e.db.insert(t).values({taskId:Kt(e,r(n)[0]),conversation:i.conversation,...a}).onConflictDoUpdate({target:[t.taskId,t.conversation],set:a})},delete:async n=>{let[i,a]=r(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,i)),y(t.conversation,a)))}}}function Xt(e){let t=F,n=_`(line->>'seq')::int`,r=_`${N.publicId} || ':' || lpad(${n}::text, 6, '0')`;return{key:r,split:(r,i,a)=>h(e.mine(N.organizationId),y(N.publicId,r),i===void 0?void 0:a?te(t.seqTo,i):v(t.seqTo,i),i===void 0?void 0:a?y(n,i):v(n,i)),rows:async(i,a)=>{let o=e.db.select({key:r,line:_`line`}).from(t).innerJoin(N,y(N.id,t.taskId)).innerJoin(_`jsonb_array_elements(${t.lines}) line`,_`true`).where(i).orderBy(b(N.publicId),b(n));return(await(a===void 0?o:o.limit(a))).map(({key:e,line:t})=>({id:e,value:{at:t.at,level:t.level,line:t.line}}))},put:async(t,n)=>{let[r,i]=B(t);await Zt(e,r,[{seq:i,...n}])},delete:async n=>{let[r,i]=B(n);await e.db.update(t).set({lines:_`(select coalesce(jsonb_agg(line), '[]'::jsonb) from jsonb_array_elements(${t.lines}) line where ${i} <> ${i})`}).where(h(y(t.taskId,Kt(e,r)),te(t.seqTo,i),f(t.seqFrom,i)))}}}async function Zt(e,t,n){n.length&&await e.db.insert(F).values({taskId:Kt(e,t),seqFrom:n[0].seq,seqTo:n[n.length-1].seq,lines:n}).onConflictDoUpdate({target:[F.taskId,F.seqFrom],set:{seqTo:_`excluded.seq_to`,lines:_`excluded.lines`}})}function Qt(e){let t=P,n=_`${N.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>h(e.mine(N.organizationId),y(N.publicId,n),r===void 0?void 0:i?y(t.seq,r):v(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(N.publicId),b(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:U(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{await e.db.insert(t).values({taskId:Kt(e,n.slice(0,n.lastIndexOf(`:`))),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:V(r.at)})},delete:async n=>{let[r,i]=B(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,r)),y(t.seq,i)))}}}function $t(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,installationKey:Y.key}).from(t).leftJoin(Y,y(Y.id,t.installationId)).where(h(e.mine(t.organizationId),ne(t.runnerMs),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).flatMap(({row:e,installationKey:t})=>{let n=Ue(e,t);return n?[{id:e.publicId,value:n}]:[]})},put:async(n,r)=>{let i=B(n)?.[0]??n;await e.db.update(t).set({engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokenCount:ve(r.tokens),usageTokens:r.tokens??null,finishedAt:V(r.at)}).where(h(e.mine(t.organizationId),y(t.publicId,i)))},delete:async n=>{await e.db.update(t).set({engine:null,model:null,runnerMs:null,tokenCount:null,usageTokens:null}).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}var en=e({DrizzleStore:()=>tn,taskSecretRows:()=>nn}),tn=class e{db;organizationId;now;encryption;locks;notifications;recordChannel(e,t){return`record_${Ge(`sha256`).update(JSON.stringify([this.organizationId,e,t])).digest(`hex`).slice(0,48)}`}notification(e,t){return this.notifications?{notified:_`pg_notify(${this.recordChannel(e,t)}, '')`}:void 0}async watch(e,t){let n=i(),r=this.db.$client,a=r?.listen?await r.listen(this.recordChannel(e,t),n.notify,n.notify).catch(()=>void 0):void 0;return{...n,close(){a?.unlisten().catch(()=>{}),n.close()}}}publishAgent=(e,t,n)=>Ht(this,e,t,n);kinds;constructor(e,t,n=Date.now,r={},i,a=!!e.$client?.unsafe){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.locks=i,this.notifications=a,this.kinds={agent:Ut(this),agentversion:Gt(this),app:Ye(this),installation:Qe(this),credential:it(this),task:qt(this),history:Yt(this),tasklog:Xt(this),inbox:Qt(this),usage:$t(this),delivery:ft(this,`delivery`),login:ft(this,`login`),config:mt(this),runner:yt(this),snapshot:ft(this,`snapshot`),connection:_t(this)},this.posts=pt(this),this.secrets=Ct(this)}posts;secrets;kind(e,t){return e===`delivery`&&t?.startsWith(`approval:`)?this.posts:e===`snapshot`&&t&&xt(t)?this.secrets:this.kinds[e]}static async webhookTarget(e,t,n){let[r]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Y,h(y(Y.appId,W.id),y(Y.key,n??``),S(Y.deletedAt))).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(y(W.key,t)));if(r&&!r.installation&&n){let r=`${t}/`,[i]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(Y).innerJoin(W,y(W.id,Y.appId)).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(_`left(${W.key}, ${r.length}) = ${r}`,y(Y.platformInstallId,n.slice(t.length+1)),S(Y.deletedAt))).limit(1));if(i)return{organizationId:i.app.organizationId,app:$(i.app,i.credentials),bound:{organizationId:i.installation.organizationId,installation:Xe(i.installation,i.app,i.token)}}}return r&&{organizationId:r.app.organizationId,app:$(r.app,r.credentials),...r.installation?{bound:{organizationId:r.installation.organizationId,installation:Xe(r.installation,r.app,r.token)}}:{}}}static async appRecord(e,t){let[n]=await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.key,t)));return n&&{organizationId:n.row.organizationId,app:$(n.row,n.credentials)}}static async apps(e,t){return(await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.integration,t)))).map(({row:e,credentials:t})=>({organizationId:e.organizationId,app:$(e,t)}))}static async installationOrganization(e,t){let[n]=await R(e,()=>e.select({organizationId:Y.organizationId}).from(Y).where(y(Y.key,t)));return n?.organizationId}static async installations(e,t){return R(e,()=>e.select({key:Y.key,organizationId:Y.organizationId}).from(Y).where(h(_`${Y.key} like ${`${H(t)}:%`}`,S(Y.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await R(e,()=>e.select({organizationId:N.organizationId}).from(N).where(h(y(N.publicId,t),y(N.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await R(this.db,()=>this.db.select({row:W,credentials:j.value,sharedKey:Z.key}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).where(h(p(W.organizationId,[this.organizationId,``]),p(W.key,e))))).map(e=>({id:e.row.key,value:$(e.row,e.credentials,e.sharedKey)})):[]}async listCredentials(e){let t=D,n=this.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(this.mine(t.organizationId),e.owner?x(S(t.owner),y(t.owner,e.owner)):S(t.owner))).orderBy(b(_`case when ${t.owner} is null then 'workspace' else 'personal' end`),b(t.label));return(await R(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t)}))}async updateMetadata(e,t,n){return e===`installation`&&(`covers`in n||`deletedAt`in n)?this.transaction(`installation:${t}`,async r=>{let i=await r.get(`installation`,t);if(!i)return!1;let a={...i,...n};return a.deletedAt===void 0&&await Ze(r,t,a),r.writeMetadata(e,t,n)}):this.writeMetadata(e,t,n)}async writeMetadata(e,t,n){let r=e===`app`?W:e===`installation`?Y:A,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`self`,`covers`,`repos`,`deletedAt`,`uninstalled`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?V(t):t])),o=e===`runner`?A.publicId:e===`app`?W.key:Y.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?V(n.updatedAt):this.at()}).where(h(this.mine(r.organizationId),y(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){let n=/^connections?[:-]/.test(e)?`${this.organizationId}:${e}`:e;return this.transaction(`app:${n}`,t)}queue(){return new Vt(this.db)}withConfigLock(e){return this.transaction(`config:${this.organizationId}`,e)}async transaction(t,n){let r=_`select pg_advisory_xact_lock(3, hashtext(${t}))`;return this.locks?(this.locks.has(t)||await this.db.execute(r),this.locks.add(t),n(this)):this.db.transaction(async i=>(await i.execute(r),n(new e(i,this.organizationId,this.now,this.encryption,new Set([t]),this.notifications))))}withCredential(e,t,n){if(e===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>ke(e,`runner`,t,n));if(e===`installation`)return this.transaction(`installation:${t}`,async e=>{let r=await $e(e,t),i=await n(r,r?[{id:t,value:r}]:[],e);for(let t of i??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!i?.length});let{owner:r}=he(t);return this.transaction(tt(this,r),async e=>{let i=await nt(e,r),a=i.map(({id:e,value:t})=>({id:e,value:t})),o=await n(a.find(e=>e.id===t)?.value,a,e);for(let t of o??[])await rt(e,i.find(e=>e.id===t.id),t.id,t.value);return!!o?.length})}at(){return V(this.now())}live(e){return x(S(e),v(e,this.at()))}mine(e){return y(e,this.organizationId)}async get(e,t){if(e===`app`)return(await this.getApps([t]))[0]?.value;let n=this.kind(e,t),r=B(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):_`${n.key} = ${t}`;return(await R(this.db,async()=>await n.rows(i,1)))[0]?.value}async patchLogin(e,t,n={}){let[r]=await this.db.update(E).set({value:_`jsonb_strip_nulls(${E.value} || ${JSON.stringify(t)}::jsonb)`}).where(h(y(E.key,X(this.organizationId,`login`,e)),this.live(E.expiresAt),_`(${E.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?p(_`${E.value}->>${e}`,t):_`${E.value}->>${e} = ${t}`))).returning({value:_`${E.value}`,...this.notification(`login`,e)});return r?.value}completeLogin(e,t,n){return fe(this,e,t,n)}async listAgentsWithVersions(e){return(await R(this.db,()=>this.db.select({record:C,version:w}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e===void 0?void 0:Array.isArray(e)?e.length?p(C.slug,e):_`false`:y(C.slug,e))).orderBy(b(C.slug)))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:He(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${H(e.q)}%`:void 0,n=_`${C.source} <> 'builtin'`,r=this.db.select({record:C,version:Pe}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e.slug===void 0?void 0:y(C.slug,e.slug),e.after?_`(${n}, ${C.slug}) > (${e.after[0]===`1`}, ${e.after.slice(2)})`:void 0,e.source?y(C.source,e.source):void 0,t?x(g(C.slug,t),g(C.name,t),g(C.description,t),g(C.repo,t)):void 0,e.platform?_`${w.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(n,b(C.slug));return(await R(this.db,()=>e.limit===void 0?r:r.limit(e.limit))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:Ne(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:Pe}).from(w).innerJoin(C,y(C.id,w.agentId)).where(h(this.mine(C.organizationId),y(C.slug,e),n===void 0?t===void 0?void 0:f(w.version,C.currentVersion):re(w.version,n),t===void 0?void 0:te(w.version,n===void 0?_`${C.currentVersion} + 1 - ${t}`:n-t))).orderBy(b(w.version));return(await R(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:Ne(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);await this.kind(e,t).put(t,n,i,r)}async putMany(e,t,n={}){if(!t.length)return;if(e===`delivery`&&!t.some(e=>e.id.startsWith(`approval:`))){await this.db.insert(E).values(t.map(({id:t,value:r})=>({key:X(this.organizationId,e,t),value:r,expiresAt:n.ttlMs===void 0?null:V(this.now()+n.ttlMs)}))).onConflictDoUpdate({target:E.key,set:{value:_`excluded.value`,expiresAt:_`excluded.expires_at`}});return}if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let[r]=B(t[0].id),i=t.map(e=>{let[t,n]=B(e.id);if(t!==r)throw Error(`A log batch must belong to one task`);return{seq:n,...e.value}});await Zt(this,r,i)}async approvalPostsDue(e,t){let n=T;return R(this.db,()=>this.db.select({organizationId:n.organizationId,id:n.key,value:n.value}).from(n).where(h(this.live(n.expiresAt),x(f(n.retryAt,V(e)),h(S(n.shownAt),f(n.at,V(e-t)))))))}async list(e,t={}){return e===`snapshot`&&!t.ids&&`connections:`.startsWith(t.prefix??``)?[...await this.listRows(e,t,this.kinds.snapshot),...await this.listRows(e,t,this.secrets)].sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)).slice(0,t.limit):this.listRows(e,t,this.kind(e,t.prefix))}async listRows(e,t,n){let r=[];if(t.ids&&r.push(t.ids.length?p(_`${n.key}`,t.ids.map(t=>n.where?X(this.organizationId,e,t):t)):_`false`),t.runner&&r.push(e===`runner`?x(y(A.publicId,t.runner),y(A.name,t.runner)):_`false`),t.defaults&&r.push(e===`runner`?y(A.isDefault,!0):_`false`),t.installation&&r.push(e===`usage`?y(Y.key,t.installation):_`false`),t.agent&&r.push(e===`app`||e===`installation`?y(W.agent,t.agent):e===`agent`?y(C.slug,t.agent):_`false`),t.active&&r.push(e===`installation`?x(S(Y.deletedAt),...t.includeUninstalled?[y(Y.uninstalled,!0)]:[]):void 0),t.apps&&r.push(e===`installation`&&t.apps.length?p(W.key,t.apps):_`false`),Object.hasOwn(t,`visibleTo`)){let n=e===`runner`?A.owner:e===`credential`?D.owner:oe.owner;r.push(x(S(n),t.visibleTo?y(_`${n}`,t.visibleTo):void 0))}if(n.where)return R(this.db,async()=>await n.rows(h(n.where(t),...r),t.limit));let i=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,a=t.after===void 0?void 0:B(t.after);if(n.split&&i&&!i.includes(`:`)&&(t.after===void 0||a?.[0]===i))return R(this.db,async()=>await n.rows(n.split(i,a?.[1]),t.limit));let o=t.prefix?_`${n.key} like ${`${H(t.prefix)}%`}`:void 0,s=t.after?_`${n.key} > ${t.after}`:void 0,c=h(o,s,...r);return R(this.db,async()=>await n.rows(c,t.limit))}async delete(e,t){let n=e===`login`?this.notification(e,t):void 0;if(n){await this.db.delete(E).where(y(E.key,X(this.organizationId,e,t))).returning(n);return}await this.kind(e,t).delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Wt(this,t,n);if(e===`connection`)return this.transaction(gt(this,t),async e=>{let{secret:r,...i}=n,a=r?await Be(e.db,r):null,o=await e.db.insert(oe).values({organizationId:e.organizationId,key:t,owner:i.owner,record:i,secretId:a}).onConflictDoNothing().returning({id:oe.id});return o.length||await J(e.db,[a]),o.length>0});if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);if(t.startsWith(`approval:`)){let e=n,r={value:e,at:V(e.at),shownAt:e.shownAt?V(e.shownAt):null,retryAt:e.retryAt===void 0?null:V(e.retryAt),expiresAt:i};return(await this.db.insert(T).values({organizationId:this.organizationId,key:t,...r}).onConflictDoUpdate({target:[T.organizationId,T.key],set:r,setWhere:f(T.expiresAt,this.at())}).returning({id:T.id})).length>0}return(await this.db.insert(E).values({key:X(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:E.key,set:{value:n,expiresAt:i},setWhere:f(E.expiresAt,this.at())}).returning({key:E.key})).length>0}async claimDeliveryLease(e,t,n){let r=_`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(E).values({key:X(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:E.key,set:{value:_`${E.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:_`${E.expiresAt} <= clock_timestamp()`}).returning({value:E.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t} and ${E.expiresAt} > clock_timestamp()`),a=_`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n.next===void 0?n:_`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:E.key})).length>0}async updateDelivery(e,t,n,r={}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t}`,this.live(E.expiresAt));return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n,expiresAt:r.ttlMs===void 0?null:V(this.now()+r.ttlMs)}).where(i).returning({key:E.key})).length>0}listHistory(e){return Jt(this,e)}async installationApp(e){let[t]=await R(this.db,()=>this.db.select({installation:Y,app:W,credentials:j.value,token:Q.value,sharedKey:Z.key}).from(Y).innerJoin(W,h(y(W.id,Y.appId),p(W.organizationId,[this.organizationId,``]))).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(this.mine(Y.organizationId),y(Y.key,e),S(Y.deletedAt))));return t&&{installation:Xe(t.installation,t.app,t.token),app:$(t.app,t.credentials,t.sharedKey)}}async conversationState(e){let t=ie(E,`unseen`),n=ie(E,`batch`),[r]=await R(this.db,()=>this.db.select({record:E.value,unseen:t.value,batch:n.value,task:N}).from(_`(select 1) as anchor`).leftJoin(E,h(y(E.key,X(this.organizationId,`delivery`,e)),this.live(E.expiresAt))).leftJoin(t,h(y(t.key,X(this.organizationId,`delivery`,`since:${e}`)),this.live(t.expiresAt))).leftJoin(n,h(y(n.key,X(this.organizationId,`delivery`,`batch:${e}`)),this.live(n.expiresAt))).leftJoin(N,h(this.mine(N.organizationId),y(N.publicId,_`${E.value}->>'taskId'`),y(N.flow,`default`))));return{...r?.record?{record:r.record}:{},...r?.unseen?{unseen:r.unseen}:{},...r?.batch?{batch:r.batch}:{},...r?.task?{status:Ie(r.task)}:{}}}async heldTokens(e,t){let[n]=await R(this.db,()=>q(this.db,_`select ${lt(this.organizationId,e,t)} as tokens`));return ut(this.organizationId,n?.tokens??{})}async holdToken(e){let t=E,n=e=>X(this.organizationId,`snapshot`,e);await this.db.execute(_`insert into ${t} (key, value, expires_at)
209
+ select ${n(e.key)}, ${JSON.stringify(e.value)}::jsonb, ${V(this.now()+e.ttlMs).toISOString()}::timestamptz
210
+ where ${_.join(e.drops.map(e=>_`coalesce((select ${t.value}->>'drop' from ${t} where ${t.key} = ${n(e.key)} and ${this.live(t.expiresAt)}), '') = ${e.drop??``}`),_` and `)}
211
+ on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at`)}async saveTaskSecrets(e,t){let[n]=await z(this.db,[_`select pg_advisory_xact_lock(3, hashtext(${`app:${this.organizationId}:connections:${e}`}))`],_`with active as (select id from ${N} where ${this.mine(N.organizationId)} and ${N.publicId} = ${e} and ${N.status} in ('queued', 'running', 'waiting')),
212
+ ${nn(t,_`select id from active`)}
213
+ select exists (select 1 from active) as active`);return!!n?.active}async dispatchState(e){let t=E,n=e=>X(this.organizationId,`delivery`,e),r=e.conversation??``,i=e=>_`(select ${t.value} from ${t} where ${t.key} = ${n(e)} and ${this.live(t.expiresAt)})`,a=e=>_`(${e} is null or ${e} = (select requester from member))`,o=e=>_`${e} = ${this.organizationId}`,s=(e,t)=>_`(select coalesce(jsonb_agg(${Fe(_`to_jsonb(r)`,_`s.value`)}), '[]'::jsonb)
214
+ from ${e} r join ${j} s on s.id = r.secret_id where ${t})`,c=We(this.organizationId,`snapshot`),l=e.files.map(e=>`${H(c+e)}%`),[u]=await q(this.db,_`
215
+ with claim as (
216
+ insert into ${t} (key, value, expires_at)
217
+ values (${n(e.delivery.key)}, ${JSON.stringify({at:e.delivery.at,owner:e.delivery.owner,pending:!0})}::jsonb, ${V(e.delivery.at+e.delivery.ttlMs).toISOString()}::timestamptz)
218
+ on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at
219
+ where ${t.expiresAt} <= ${this.at().toISOString()}::timestamptz
220
+ returning key
221
+ ), conversation as (select ${i(r)} as value),
222
+ member as (select ${O.userId} as requester, ${O.name} as name, ${O.email} as email from ${O}
223
+ where ${O.platform} = ${e.actor?.platform??null}::text and ${O.platformUserId} = ${e.actor?.id??null}::text
224
+ and ${O.organizations} ? ${this.organizationId} limit 1)
225
+ select exists (select 1 from claim) as claimed,
226
+ (select to_jsonb(a) from ${C} a where ${o(_`a.organization_id`)} and a.slug = ${e.agent}) as record,
227
+ (select to_jsonb(v) from ${w} v join ${C} a on a.id = v.agent_id and v.version = a.current_version
228
+ where ${o(_`a.organization_id`)} and a.slug = ${e.agent}) as version,
229
+ (select value from conversation) as conversation,
230
+ ${i(`since:${r}`)} as unseen,
231
+ ${i(`batch:${r}`)} as batch,
232
+ (select to_jsonb(t) from ${N} t, conversation c where ${o(_`t.organization_id`)} and t.public_id = c.value->>'taskId' and t.flow = 'default') as task,
233
+ (select jsonb_build_object('id', requester, 'name', name, 'email', email) from member) as member,
234
+ ${s(_`${D}`,_`${o(_`r.organization_id`)} and ${a(_`r.owner`)}`)} as credentials,
235
+ ${s(_`${A}`,_`${o(_`r.organization_id`)} and r.is_default and ${a(_`r.owner`)}`)} as runners,
236
+ (select coalesce(jsonb_agg(${Fe(_`c.record`,_`s.value`)} order by c.key), '[]'::jsonb) from ${oe} c left join ${j} s on s.id = c.secret_id
237
+ where ${o(_`c.organization_id`)} and ${a(_`c.owner`)}) as connections,
238
+ coalesce((select jsonb_strip_nulls(jsonb_build_object('slug', ${L.slug}, 'name', ${L.name}))
239
+ from ${L} where ${o(L.organizationId)}), '{}'::jsonb) as workspace,
240
+ (select coalesce(jsonb_object_agg(${t.key}, ${t.value}), '{}'::jsonb) from ${t}
241
+ where ${this.live(t.expiresAt)} and ${t.key} like any(${_.param(l)}::text[])) as files,
242
+ ${lt(this.organizationId,[e.installation.id],[e.installation.app])} as tokens`);if(!u?.claimed)return{claimed:!1};let d=u.record?Ve(G(C,u.record)):void 0,f=u.version&&d?He(G(w,u.version),d.id):void 0;return{claimed:!0,loaded:{...d?{record:d}:{},...f?{version:f}:{},conversation:{...u.conversation?{record:u.conversation}:{},...u.unseen?{unseen:u.unseen}:{},...u.batch?{batch:u.batch}:{},...u.task?{status:Ie(G(N,u.task))}:{}},...u.member?{member:u.member}:{},credentials:u.credentials.map(ot),runners:u.runners.map(st),connections:u.connections,...u.workspace?{workspace:u.workspace}:{},files:Object.fromEntries(Object.entries(u.files).map(([e,t])=>[e.slice(c.length),t])),tokens:ut(this.organizationId,u.tokens)}}}async markConversation(e,t,n,r,i){await this.db.update(E).set({value:_`${E.value} || ${JSON.stringify({at:r,seen:n})}::jsonb`,expiresAt:V(this.now()+i)}).where(h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'taskId' = ${t}`,this.live(E.expiresAt)))}async appendUnseen(e,t,n){let r=_`coalesce((${E.value}->>'version')::bigint, jsonb_array_length(${E.value}->'messages') + (${E.value}->>'more')::bigint)`,i={messages:[{...t,sequence:1}],more:0,version:1,epoch:qe()};await this.db.execute(_`
243
+ insert into ${E} (key, value, expires_at)
244
+ select ${X(this.organizationId,`delivery`,`since:${e}`)}, ${JSON.stringify(i)}::jsonb, ${V(this.now()+n).toISOString()}::timestamptz
245
+ where exists (select 1 from ${E} where key = ${X(this.organizationId,`delivery`,e)} and ${this.live(E.expiresAt)})
246
+ on conflict (key) do update set value = case when ${E.expiresAt} <= ${this.at().toISOString()}::timestamptz then excluded.value else
247
+ ${E.value} || jsonb_build_object('version', ${r} + 1,
248
+ 'messages', case when jsonb_array_length(${E.value}->'messages') < ${50} then
249
+ (${E.value}->'messages') || jsonb_build_array(${JSON.stringify(t)}::jsonb || jsonb_build_object('sequence', ${r} + 1)) else ${E.value}->'messages' end,
250
+ 'more', (${E.value}->>'more')::int + case when jsonb_array_length(${E.value}->'messages') < ${50} then 0 else 1 end) end,
251
+ expires_at = excluded.expires_at
252
+ `)}async acknowledgeUnseen(e,t,n){await this.db.update(E).set({value:dt(t)}).where(h(y(E.key,X(this.organizationId,`delivery`,`since:${e}`)),_`${E.value}->>'epoch' is not distinct from ${n??null}::text`,this.live(E.expiresAt)))}async appendBatch(e,t,n,r,i){let a=Ae(void 0,t,n,r),o=V(this.now()+i);await this.db.insert(E).values({key:X(this.organizationId,`delivery`,e),value:a,expiresAt:o}).onConflictDoUpdate({target:E.key,set:{value:_`case when ${E.expiresAt} <= ${this.at().toISOString()}::timestamptz then excluded.value else
253
+ (select ${E.value} || excluded.value || jsonb_build_object(
254
+ 'items', prefix || coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(pending) with ordinality e(item,n) where n > greatest(jsonb_array_length(pending) - 50, 0)), '[]'::jsonb),
255
+ 'more', coalesce((${E.value}->>'more')::int, 0) + coalesce((excluded.value->>'more')::int, 0) + greatest(jsonb_array_length(pending) - 50, 0),
256
+ 'mustReply', coalesce((${E.value}->>'mustReply')::boolean, false) or coalesce((excluded.value->>'mustReply')::boolean, false) or exists(select 1 from jsonb_array_elements(pending) with ordinality e(item,n) where n <= greatest(jsonb_array_length(pending) - 50, 0) and item->'event'->>'mustReply' = 'true'))
257
+ from (select coalesce(jsonb_agg(item order by n) filter (where n <= coalesce((${E.value}->'sending'->>'count')::int, 0)), '[]'::jsonb) as prefix,
258
+ coalesce(jsonb_agg(item order by n) filter (where n > coalesce((${E.value}->'sending'->>'count')::int, 0)), '[]'::jsonb) || (excluded.value->'items') as pending
259
+ from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)) queued) end`,expiresAt:o}})}async claimBatch(e,t){let n=X(this.organizationId,`delivery`,e),r=(await q(this.db,_`
260
+ with held as materialized (
261
+ select key as batch_key, value as previous from ${E}
262
+ where key = ${n} and value->>'owner' = ${t} and ${this.live(E.expiresAt)} for update
263
+ ), claimed as (
264
+ update ${E} set value = (
265
+ select ready || jsonb_build_object('more', 0, 'mustReply', false, 'sending', jsonb_build_object(
266
+ 'owner', ${t}::text, 'until', ${this.now()+Me}::bigint,
267
+ 'count', jsonb_array_length(ready->'items'), 'more', ready->'more', 'mustReply', ready->'mustReply'))
268
+ from (select (value - 'sending') || jsonb_build_object(
269
+ 'items', coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(value->'items') with ordinality e(item,n)
270
+ where n > greatest(jsonb_array_length(value->'items') - 50, 0)), '[]'::jsonb),
271
+ 'more', coalesce((value->>'more')::int, 0) + coalesce((value->'sending'->>'more')::int, 0) + greatest(jsonb_array_length(value->'items') - 50, 0),
272
+ 'mustReply', coalesce((value->>'mustReply')::boolean, false) or coalesce((value->'sending'->>'mustReply')::boolean, false) or exists(
273
+ select 1 from jsonb_array_elements(value->'items') with ordinality e(item,n)
274
+ where n <= greatest(jsonb_array_length(value->'items') - 50, 0) and item->'event'->>'mustReply' = 'true')) as ready) as available)
275
+ from held where key = held.batch_key and coalesce((value->'sending'->>'until')::bigint, 0) <= ${this.now()}
276
+ and jsonb_array_length(value->'items') > 0
277
+ returning value
278
+ ) select value, true as claimed from claimed
279
+ union all select previous, false from held where not exists (select 1 from claimed)
280
+ `))[0];return r?.claimed?{...r.value,more:r.value.sending?.more,mustReply:r.value.sending?.mustReply}:r?.value.sending?null:void 0}async finishBatch(e,t,n,r){let i=_`(${E.value}->'sending'->>'count')::int`,a=r===void 0?i:_`coalesce((select n from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
281
+ where n <= ${i} and item->>'admission' = ${r} limit 1), 0)`;return(await this.db.update(E).set({value:_`case when ${n} and ${i} > ${a} then
282
+ ${E.value} || jsonb_build_object('items',
283
+ coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
284
+ where n > ${a}), '[]'::jsonb),
285
+ 'sending', (${E.value}->'sending') || jsonb_build_object(
286
+ 'count', ${i} - ${a},
287
+ 'until', ${this.now()+Me}::bigint))
288
+ else (${E.value} - 'sending') || jsonb_build_object('items',
289
+ case when ${n} then coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${E.value}->'items') with ordinality as entries(item, n)
290
+ where n > ${i}), '[]'::jsonb) else
291
+ coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
292
+ where n > greatest(jsonb_array_length(${E.value}->'items') - 50, 0)), '[]'::jsonb) end,
293
+ 'more', coalesce((${E.value}->>'more')::int, 0) + case when ${n} then 0 else coalesce((${E.value}->'sending'->>'more')::int, 0) + greatest(jsonb_array_length(${E.value}->'items') - 50, 0) end,
294
+ 'mustReply', coalesce((${E.value}->>'mustReply')::boolean, false) or (not ${n} and (coalesce((${E.value}->'sending'->>'mustReply')::boolean, false) or exists(select 1 from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
295
+ where n <= greatest(jsonb_array_length(${E.value}->'items') - 50, 0) and item->'event'->>'mustReply' = 'true')))) end`}).where(h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->'sending'->>'owner' = ${t}`,this.live(E.expiresAt))).returning({key:E.key})).length>0}async take(e,t,n){if(e===`delivery`||e===`snapshot`){let[r]=await this.db.delete(E).where(h(y(E.key,X(this.organizationId,e,t)),this.live(E.expiresAt),n?_`${E.value} @> ${JSON.stringify(n)}::jsonb`:void 0)).returning({value:E.value});return r?.value}let r=await this.get(e,t);if(!(r===void 0||Object.entries(n??{}).some(([e,t])=>r[e]!==t)))return await this.delete(e,t),r}async usageSummary(e,t){let n=N,r=_`case groups.kind when 'agent' then ${n.agent} when 'engine' then coalesce(${n.engine}, 'unknown') else coalesce(${Y.key}, 'none') end`,i=t?r:_`groups.kind || ':' || (${r})`,a=(await R(this.db,()=>q(this.db,_`
296
+ select ${i} as key, count(*)::int as tasks, sum(${n.runnerMs})::float8 as runner_ms,
297
+ jsonb_agg(${n.usageTokens} order by ${n.publicId}) filter (where ${n.usageTokens} is not null) as tokens
298
+ from ${n} left join ${Y} on ${Y.id} = ${n.installationId}
299
+ cross join unnest(${_.param(t?[t]:[`agent`,`installation`,`engine`])}::text[]) groups(kind)
300
+ where ${this.mine(n.organizationId)} and ${n.runnerMs} is not null and ${n.finishedAt} >= ${new Date(e).toISOString()}::timestamptz
301
+ group by 1 order by 1
302
+ `))).map(e=>{let t=e.tokens?.reduce(Se,void 0);return{key:e.key,tasks:e.tasks,runnerMs:e.runner_ms,...t===void 0?{}:{tokens:t}}});if(t)return a;let o={agent:[],installation:[],engine:[]};for(let e of a){let t=e.key.indexOf(`:`);o[e.key.slice(0,t)].push({...e,key:e.key.slice(t+1)})}return o}async usageTotals(e){let t=N,n=e.by===`agent`?_`${t.agent}`:e.by===`engine`?_`coalesce(${t.engine}, 'unknown')`:e.by===`installation`?_`coalesce(${Y.key}, 'none')`:_`to_char(${t.finishedAt} at time zone ${Ee(e.tz)}, 'YYYY-MM-DD')`,r=h(this.mine(t.organizationId),ne(t.runnerMs),te(t.finishedAt,V(e.since)),e.until===void 0?void 0:re(t.finishedAt,V(e.until)),e.agent?y(t.agent,e.agent):void 0),i={tasks:_`count(*)`,runnerMs:_`coalesce(sum(${t.runnerMs}), 0)`,tokenCount:_`coalesce(sum(${t.tokenCount}), 0)`},a=e.top?_`case when ${t.agent} in (
303
+ select ${t.agent} from ${t} where ${r} group by ${t.agent}
304
+ order by ${i[e.top.by]} desc, ${t.agent} limit ${e.top.count}
305
+ ) then ${t.agent} end`:e.parts?.length?_`case when ${p(t.agent,e.parts)} then ${t.agent} end`:_`null::text`,o=e.by===`installation`?_`left join ${Y} on ${Y.id} = ${t.installationId}`:_``,s=await R(this.db,()=>q(this.db,_`
306
+ select ${n} as key, ${a} as part, ${i.tasks}::int as tasks,
307
+ ${i.runnerMs}::float8 as runner_ms,
308
+ ${i.tokenCount}::float8 as token_count
309
+ from ${t} ${o}
310
+ where ${r}
311
+ group by 1, 2
312
+ `)),c=new Map;for(let e of s){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=c.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};xe(n,t),e.part&&((n.parts??={})[e.part]=t),c.set(e.key,n)}return[...c.values()].sort((e,t)=>e.key.localeCompare(t.key))}async sweep(e=1e3){if(!Number.isInteger(e)||e<1)throw Error(`Sweep batch must be positive`);let t=this.at().toISOString();await this.db.execute(_`
313
+ with tombstones as (
314
+ delete from ${ue} where (organization_id, public_id) in (
315
+ select organization_id, public_id from ${ue}
316
+ where deleted_at < ${new Date(this.now()-6e5).toISOString()}::timestamptz
317
+ order by deleted_at limit ${e}
318
+ )
319
+ ), expired_state as (
320
+ delete from ${E} where expires_at <= clock_timestamp() and key in (
321
+ select key from ${E} where expires_at <= clock_timestamp() order by expires_at limit ${e}
322
+ )
323
+ ), expired_posts as (
324
+ delete from ${T} where id in (
325
+ select id from ${T} where expires_at <= clock_timestamp() order by expires_at limit ${e}
326
+ )
327
+ ), expired_task_secrets as (
328
+ delete from ${I} where id in (
329
+ select id from ${I} where expires_at <= clock_timestamp() order by expires_at limit ${e}
330
+ ) returning secret_id
331
+ ), expired_secrets as (
332
+ delete from ${j} where id in (select secret_id from expired_task_secrets)
333
+ ), lists as (
334
+ select expired.key from ${ae} as expired
335
+ where expired.key like 'k:%' and expired.expires_at <= ${t}::timestamptz
336
+ and not exists (select 1 from ${ae} as newer where newer.key = expired.key and newer.seq > expired.seq)
337
+ order by expired.expires_at limit ${e}
338
+ ), expired_items as (
339
+ select key, seq from ${ae} where key in (select key from lists) order by seq limit ${e}
340
+ ), expired_queue as (
341
+ select key, seq from ${ae} where key like 'q:%' and expires_at <= ${t}::timestamptz order by expires_at limit ${e}
342
+ )
343
+ delete from ${ae} where (key, seq) in (
344
+ select key, seq from expired_items union all select key, seq from expired_queue
345
+ )`)}};function nn(e,t){let n=_.join(e.map(e=>_`(${e.id}, ${e.value}, ${V(e.expiresAt).toISOString()}::timestamptz)`),_`, `);return _`task_secret_rows as (select * from (values ${n}) as row(key, value, expires_at)
346
+ where not exists (select 1 from ${I} where task_id in (${t}) and key = row.key)),
347
+ sealed as (insert into ${j} (value) select value from task_secret_rows where exists (${t}) returning id, value),
348
+ kept as (insert into ${I} (task_id, key, secret_id, expires_at)
349
+ select (${t}), r.key, s.id, r.expires_at from task_secret_rows r join sealed s on s.value = r.value)`}export{en as n,wt as r,tn as t};
@@ -0,0 +1 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{_ as t,a as n,b as r,f as i,h as a,i as o,m as s,o as c,p as l,r as u,u as d,y as f}from"./actions-DO8MvHwc.js";var p=e({tasks:()=>m});const m={run:s,result:l,list:d,watch:r,stream:f,steer:a,ask:c,approvals:u,approve:o,stop:t,archive:n,delete:i};export{m as n,p as t};
@@ -0,0 +1,7 @@
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{$ as t,N as n,T as r,V as i,b as a,bt as o,et as s,f as c,gt as l,m as u,mt as d,o as f,u as p,vt as m,w as h,y as g,yt as _}from"./state-CxAUec80.js";import{R as ee,l as v,u as y,w as b}from"./config-_32PHl9g.js";import{a as x,f as S}from"./connections-B90TemYf.js";import{v as C}from"./app-server-dnlLhhZb.js";import{t as w}from"./integrations-DSZSa8Rc.js";import{a as te}from"./definition-D0OpQfGX.js";import{B as ne,C as T,D as re,L as ie,R as E,S as D,_ as ae,d as oe,s as se,u as O,w as k}from"./dispatch-BkoIU4GU.js";import{t as A}from"./sessions-BGUfSe8L.js";import{_ as ce}from"./approvals-C8XV7CK2.js";import{i as le,r as ue}from"./view-D-rbQ1Kz.js";import{g as de,l as j,n as M,s as N,v as fe}from"./actions-DO8MvHwc.js";import{i as P,o as F}from"./mcp-cEIva8Pd.js";import{a as pe,d as me,r as he,s as ge,u as _e}from"./exec-D9jF2F-H.js";import{s as ve}from"./http-DRk8cDjf.js";import{t as ye}from"./tools-DVtBtED6.js";import{i as be,n as xe,r as Se}from"./async-BS9tyhva.js";import{r as Ce}from"./post-DLenID75.js";import I from"node:path";import L from"node:process";import{execFile as R}from"node:child_process";import z from"node:net";import B from"node:os";import{createHash as we}from"node:crypto";import V from"node:http";import H from"node:fs/promises";import{promisify as U}from"node:util";import{gunzipSync as W,gzipSync as Te}from"node:zlib";const G=e=>we(`sha256`).update(e).digest(`hex`);function K(e,t,n){if(e===`claude`)return I.join(T(),process.env.CLAUDE_CODE_PROJECT_DIR_NAME||`coder`,`${t}.jsonl`);let r=new Date(JSON.parse(n.slice(0,n.indexOf(`
2
+ `))).timestamp).toISOString().slice(0,19).replaceAll(`:`,`-`);return I.join(A(),`sessions`,...r.slice(0,10).split(`-`),`rollout-${r}-${t}.jsonl`)}function Ee(e,t){return t.flatMap(e=>[e,...e.startsWith(`Bearer `)?[e.slice(7)]:[]]).filter(e=>e.length>=8).flatMap(e=>[e,JSON.stringify(e).slice(1,-1)]).sort((e,t)=>t.length-e.length).reduce((e,t)=>e.replaceAll(t,`[REDACTED]`),e)}function De(e,t){let n=new Map;return{async restore(){let t=await e(`/history`).catch(e=>(console.error(`coder runner: saved history could not be listed`,e),[])),r=t.at(-1),i;return await Promise.all(t.map(async({engine:t,conversation:a})=>{if(D.test(a))try{let{data:o,state:s}=await e(`/history/${a}`);a===r.conversation&&(i=s);let c=W(Buffer.from(o,`base64`)).toString(`utf8`);for(let e of c.split(`
3
+ `))e.trim()&&JSON.parse(e);let[l]=await re({engine:t},a);l||(l=K(t,a,c),await H.mkdir(I.dirname(l),{recursive:!0,mode:448}),await H.writeFile(l,c,{mode:384})),n.set(a,{engine:t,hash:G(c),file:l})}catch(e){console.error(`coder runner: history ${a} could not be restored`,e)}})),{...r?{resume:{...i,engine:r.engine,threadId:r.conversation}}:{},restored:!!(r&&n.has(r.conversation))}},async save(r){let i=new Map([...n].map(([e,{engine:t}])=>[e,t]));if(r?.engine===`claude`||r?.engine===`codex`)for(let e of k(r))i.delete(e),i.set(e,r.engine);let a=await t();for(let[t,o]of i){let i=n.get(t)?.file,s=i&&await H.stat(i).then(e=>e.isFile(),()=>!1)?i:(await re({engine:o},t))[0],c=s?await H.readFile(s,`utf8`).catch(()=>``):``,l=t===r?.threadId;if(!c||!l&&G(c)===n.get(t)?.hash)continue;let u=Te(Ee(c,a)).toString(`base64`);if(u.length>3145728){console.error(`coder runner: history ${t} is too large to save`);continue}let d=l?{previousThreadIds:r.previousThreadIds}:void 0;await e(`/history`,{method:`POST`,body:JSON.stringify({engine:o,conversation:t,data:u,...d?{state:d}:{}})}).then(()=>n.set(t,{engine:o,hash:G(c),file:s}),e=>console.error(`coder runner: history ${t} was not saved`,e))}}}}var q=e({INBOX_COMMAND:()=>Qe,INBOX_SOCKET:()=>Ye,applyTaskMessage:()=>Ge,checkout:()=>Z,checkoutCache:()=>ke,inboxSocket:()=>Xe,liveConnections:()=>Ue,prepareRepo:()=>ze,receiveInbox:()=>$e,releaseCheckout:()=>Ae,requestInboxControl:()=>Ve,runTask:()=>qe,sendInbox:()=>Ze,serveTaskServer:()=>tt,serverConnections:()=>He,startInboxControl:()=>Be,taskServer:()=>Y,withCheckoutLock:()=>Q});const J=U(R);function Y(){let e=L.env.CODER_SERVER?.replace(/\/+$/,``),t=L.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function X(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function Oe(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function Z(e,t,n,r,i){let a=e.event?.repo,o=I.join(t,`work`);if(!a)return await H.mkdir(o,{recursive:!0}),o;let s=e=>H.stat(e).then(Boolean,()=>!1);if(await s(I.join(o,`.git`))&&(r||await s(I.join(t,`.runner-task.json`))))return o;if(!Oe(a.defaultBranch))throw Error(`Invalid repository ref`);let c=new URL(a.cloneUrl),l=w[e.event.integration]?.repos?.cloneHosts??[];if(c.protocol!==`https:`||!l.includes(c.hostname))throw Error(`Repository clone host does not match the integration`);await H.mkdir(t,{recursive:!0});let u=await H.mkdtemp(I.join(t,`.git-credential-`)),d=I.join(u,`token`),f=I.join(u,`askpass.sh`);n&&(await H.writeFile(d,n,{mode:384}),await H.writeFile(f,`#!/bin/sh
4
+ case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
5
+ `,{mode:448}));let p=n?{env:{...L.env,GIT_ASKPASS:f,CODER_GIT_TOKEN_FILE:d,GIT_TERMINAL_PROMPT:`0`}}:void 0;try{let e={...p,signal:i,maxBuffer:67108864};r?await Q(r,async()=>{if(!await H.stat(I.join(r,`.git`)).catch(()=>void 0)){let t=await H.mkdtemp(`${r}-clone-`);try{await J(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,t],e),await H.rename(t,r)}finally{await H.rm(t,{recursive:!0,force:!0})}}await J(`git`,[`-C`,r,`worktree`,`prune`,`--expire`,`now`],e),await J(`git`,[`-C`,r,`remote`,`set-url`,`origin`,a.cloneUrl],e),await J(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await J(`git`,[`-C`,r,`worktree`,`add`,`--detach`,o,`FETCH_HEAD`],e)}):(await s(I.join(o,`.git`))||await J(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,o],e),await J(`git`,[`-C`,o,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await J(`git`,[`-C`,o,`checkout`,`--detach`,`FETCH_HEAD`],e)),await H.writeFile(je(t),(await J(`git`,[`-C`,o,`rev-parse`,`HEAD`])).stdout)}finally{await H.rm(u,{recursive:!0,force:!0})}return o}function ke(e){let t=e.event?.repo;if(t){if(![t.owner,t.name].every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e)))throw Error(`Invalid repository name`);return c(`checkouts`,new URL(t.cloneUrl).hostname,t.owner,t.name)}}async function Q(e,t){return _(`${e}.lock`,t,1/0,3e5)}async function Ae(e){if(!(await H.stat(I.join(e,`.git`)).catch(()=>void 0))?.isFile())return;let t=await J(`git`,[`-C`,e,`rev-parse`,`--git-common-dir`]).catch(async t=>{if(await H.stat(I.join(e,`.git`)).catch(()=>void 0))throw t});if(!t)return;let{stdout:n}=t,r=I.resolve(e,n.trim());await Q(I.dirname(r),async()=>{await H.stat(I.join(e,`.git`)).catch(()=>void 0)&&await J(`git`,[`--git-dir`,r,`worktree`,`remove`,`--force`,e])})}const $=1048576,je=e=>I.join(e,`.checkout-base`);async function Me(e,t){let n={maxBuffer:67108864},r=(await H.readFile(je(t),`utf8`).catch(()=>`HEAD`)).trim();await J(`git`,[`-C`,e,`add`,`--intent-to-add`,`--all`],n);let{stdout:i}=await J(`git`,[`-C`,e,`diff`,r],n);return Buffer.byteLength(i)>$?`${Buffer.from(i).subarray(0,$).toString()}\n[diff truncated]`:i}async function Ne(e,t,n){L.env.CODER_SERVER=`unix:${n}`,e.dashboard&&(L.env.CODER_DASHBOARD=e.dashboard),delete L.env.CODER_TASK_TOKEN,delete L.env.APP_TOKEN;for(let t of Object.keys(e.tokens))delete L.env[F(t)];for(let t of e.engineCredentials??[])for(let e of Object.keys(t.credential.env))delete L.env[e];let{CODEX_AUTH_JSON:r,[v]:i,...a}=e.credential.env;if(Object.assign(L.env,a),L.env[y]=JSON.stringify(e.config??{}),delete L.env.CODER_GIT_AUTHOR,e.gitAuthor&&(L.env.CODER_GIT_AUTHOR=JSON.stringify(e.gitAuthor)),L.env.CODER_MCP_MODE=`cloud`,L.env.CODER_MCP_CONNECTION_ENV=JSON.stringify(S(e.connections??{})),!r)return;let o=await H.mkdtemp(I.join(t,`.codex-`));return await H.writeFile(I.join(o,`auth.json`),r,{mode:384}),L.env.CODEX_HOME=o,o}async function Pe(e,t){let{ANTHROPIC_API_KEY:n,CLAUDE_CODE_OAUTH_TOKEN:r}=e.credential.env;if(e.credential.engine!==`claude`||!n&&!r)return;let i=await H.mkdtemp(I.join(t,`.claude-`));return L.env.CLAUDE_CONFIG_DIR=i,L.env.CLAUDE_CODE_PROJECT_DIR_NAME=`coder`,i}async function Fe(e,t,n){let r=n?await H.readFile(I.join(n,`auth.json`),`utf8`).catch(()=>``):``,i=(e=``)=>{let t=[];try{JSON.parse(e,(e,n)=>(typeof n==`string`&&/token|key/i.test(e)&&t.push(n),n))}catch{e&&console.error(`coder runner: history credentials could not be parsed`)}return t};return[t,...Object.values(e.tokens),...e.checksToken?[e.checksToken]:[],...e.postToken?[e.postToken]:[],...Object.values(e.connectionEnv??{}),...Object.entries(e.credential.env).filter(([e])=>/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|AUTH/i.test(e)).map(([,e])=>e),...i(e.credential.env.CODEX_AUTH_JSON),...e.engineCredentials?.flatMap(e=>[...Object.values(e.credential.env),...i(e.credential.env.CODEX_AUTH_JSON)])??[],...i(r)]}async function Ie(e,t,n,r){if(!r)return;let i=await H.readFile(I.join(r,`auth.json`),`utf8`).catch(()=>``);i&&n.id&&i!==n.authJson&&await X(e.server,e.token,t,`/credential`,{method:`POST`,body:JSON.stringify({authJson:i,credentialId:n.id})}).catch(()=>{}),await H.rm(r,{recursive:!0,force:!0})}function Le(e,t,n,r){let i=new Map;return{credentials:async a=>{let o=e.engineCredentials??[],s=a.engine===`custom`?b(t).models?.[a.model??``]?.envKey??`OPENAI_API_KEY`:void 0,c=o.filter(e=>s?e.credential.env[s]!==void 0:e.credential.engine===a.engine),l=e.task.runner===`http`||e.task.models?.some(e=>!e.credential);if(!c.length)return l?[{}]:[];let u=Object.fromEntries(o.flatMap(e=>Object.keys(e.credential.env)).map(e=>[e,void 0]));return Promise.all(c.map(async e=>{let{CODEX_AUTH_JSON:a,...o}=e.credential.env,s=e.id===r(),c=a&&s?L.env.CODEX_HOME:n.CODEX_HOME;if(a&&!s){if(!i.has(e.id)){let n=await H.mkdtemp(I.join(t,`.codex-`));await H.writeFile(I.join(n,`auth.json`),a,{mode:384}),i.set(e.id,{home:n,authJson:a})}c=i.get(e.id).home}return{...u,...o,CODEX_HOME:c,CLAUDE_CONFIG_DIR:s?L.env.CLAUDE_CONFIG_DIR:n.CLAUDE_CONFIG_DIR}}))},release:async(e,t)=>{await Promise.all([...i].map(([n,{home:r,authJson:i}])=>Ie(e,t,{id:n,authJson:i},r))),i.clear()}}}const Re=[[`bun.lock`,`bun`,[`install`,`--frozen-lockfile`]],[`bun.lockb`,`bun`,[`install`,`--frozen-lockfile`]],[`pnpm-lock.yaml`,`npx`,[`-y`,`pnpm`,`install`,`--frozen-lockfile`]],[`yarn.lock`,`npx`,[`-y`,`yarn`,`install`,`--frozen-lockfile`]],[`package-lock.json`,`npm`,[`ci`]]];async function ze(e,t){let n=Y(),r=await X(n.server,n.token,e),i=r.task.event;if(!i?.repo)throw Error(`The task has no repository`);let a=await Z(r.task,t,r.tokens[i.integration]);for(let[e,t,n]of Re)if(await H.stat(I.join(a,e)).catch(()=>void 0)){await J(t,n,{cwd:a,maxBuffer:67108864}).catch(()=>{});break}let o=(await J(`git`,[`-C`,a,`rev-parse`,`HEAD`])).stdout.trim();return console.log(`coder-snapshot ${o}`),{sha:o}}function Be(e,t,n){let r=new Set,i=ne(I.join(e,`inbox-control`),{apply(e){let i=e.entry;if(e.task!==t||!Number.isInteger(i?.seq)||i.seq<0||!Number.isInteger(i.generation)||i.generation<0||![`steer`,`ask`,`approve`].includes(i.kind))throw Error(`Invalid engine inbox command`);let a=n(i);return r.add(a),a.finally(()=>r.delete(a)).catch(()=>{}),a}});return{close:async()=>{i(),await Promise.allSettled([...r])}}}function Ve(e,t,n){let r=E({task:t,generation:n.generation,seq:n.seq});return ie(`apply`,{task:t,entry:n},{dir:I.join(e,`inbox-control`),id:r,keepReply:!0,timeoutMs:3e4})}function He(e){return async()=>{let t=await fetch(e.url,{headers:{authorization:`Bearer ${e.token}`},signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`Coder server answered ${t.status}`);let n=await t.json(),r=x(n.connections??{},n.connectionEnv),i=P(n.task,n.tokens,{...e,...n.dashboard?{dashboard:n.dashboard}:{}});return{mcp:r.mcp,env:{...r.env,...i.env},warnings:[]}}}function Ue(e){return async t=>{let n=O(e.mcp,L.env).find(e=>e.name===`conversation`)?.env;return(n?.CODER_REPLY_URL&&n.CODER_REPLY_TOKEN?He({url:n.CODER_REPLY_URL,token:n.CODER_REPLY_TOKEN}):j(e.mcp))(t)}}function We(e){return{...typeof e?.model==`string`&&e.model?{model:e.model}:{},...e?.access===`read-only`||e?.access===`auto`?{access:e.access}:{}}}async function Ge(e,t,n,a=Ue(t)){let o={task:t.name?.slice(6)??t.id,generation:n.generation,seq:n.seq},c=I.join(i(e,t.id),`inbox-control`,`${E(o)}.transcript.jsonl`);return _(`${c}.lock`,async()=>{let i=await H.readFile(c,`utf8`).catch(e=>{if(e.code===`ENOENT`)return``;throw e});for(let e of i.split(`
6
+ `)){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}if(E(t.command)===E(o)&&Object.hasOwn(t,`result`))return t.result}let l=n.value;if(n.kind===`steer`){let i=String(l?.text??n.value??``),c=!1;t.threadId||(c=await s(e,t.id,()=>{let n=r(e,t.id)??t;if(n.threadId)return!1;if(n.steerClosed||![`running`,`queued`].includes(n.status))throw Error(`Task stopped before it opened a conversation`);return u(e,t.id,i),!0})),c||await de(e,r(e,t.id)??t,i,{command:o,resolveConnections:a,...We(l)})}else if(n.kind===`ask`){let r=await N(e,t,String(l?.question??n.value??``),{command:o,...typeof l?.model==`string`&&l.model?{model:l.model}:{}});return r.finalMessage??r.error?.message??``}else if(n.kind===`approve`){let n=String(l?.approvalId??l?.id??``);try{await M(e,t,n,l?.decision===`deny`||l?.decision===`decline`?`decline`:`accept`,{...typeof l?.reason==`string`?{reason:l.reason}:{},command:o,resolveConnections:a})}catch(r){if(!(r instanceof Error&&r.message.includes(`already approved`)))throw r;f(e,t.id,{kind:`status`,message:`Ignored an answer to approval ${n}: ${r.message}`})}}await H.mkdir(I.dirname(c),{recursive:!0}),await H.appendFile(c,JSON.stringify({command:o,result:null})+`
7
+ `)})}async function Ke(e){for(let t=1;;t++)try{return await e()}catch(e){let n=e.status;if(n!==void 0&&n<500||t>=6)throw e;console.error(`coder runner: Coder server did not take the request, trying again: ${e instanceof Error?e.message:e}`),await new Promise(e=>setTimeout(e,1e3*2**(t-1)))}}async function qe(e,t){let n=Y();C(`runner.credentials.start`);let i=await Ke(()=>X(n.server,n.token,e)).catch(async t=>{throw await X(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`failed`,error:t instanceof Error?t.message:String(t)})}).catch(()=>{}),t});C(`runner.credentials.done`);let a=i.task.event,o=a&&i.tokens[a.integration],s=L.env.CODER_INBOX_MODE===`poll`;delete L.env.CODER_INBOX_MODE;let c=L.env.CODER_CHECKOUT_CACHE;delete L.env.CODER_CHECKOUT_CACHE;let u,d,f={CODEX_HOME:L.env.CODEX_HOME,CLAUDE_CONFIG_DIR:L.env.CLAUDE_CONFIG_DIR},p,m,h=new AbortController,g=setTimeout(()=>h.abort(Error(`timeout`)),i.timeoutMs??18e5),_=setInterval(()=>{X(n.server,n.token,e,`/heartbeat`,{method:`POST`,signal:AbortSignal.timeout(1e4)}).catch(()=>{})},3e4),v,b=async()=>{let a=l(I.join(t,`.runner-task.json`)),o=v&&a?.generation===i.generation?r(v,a.id):void 0;await p?.save(o??void 0).catch(e=>console.error(`coder runner: history upload failed`,e)),d&&await H.rm(d,{recursive:!0,force:!0}),await Ie(n,e,{id:x,authJson:i.credential.env.CODEX_AUTH_JSON},u)},x=i.task.models?.[0]?.credential,S=Le(i,t,f,()=>x),te=!1,ne=async t=>{te=!0,await b(),await S.release(n,e),await Ke(()=>X(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify(t)}))};try{let r=(async()=>{m=await tt(n),[u,d]=await Promise.all([Ne(i,t,m.socketPath),Pe(i,t)]),p=i.task.flow==="default"?De((t,r)=>X(n.server,n.token,e,t,r),()=>Fe(i,n.token,u)):void 0,C(`runner.environment.done`);let r=await p?.restore();return C(`runner.history.done`),r})();C(`runner.checkout.start`);let a=Promise.race([Z(i.task,t,o,c,h.signal),new Promise((e,t)=>h.signal.addEventListener(`abort`,()=>t(h.signal.reason),{once:!0}))]).then(e=>(v=e,C(`runner.checkout.done`),e)),[l,g]=await Promise.allSettled([a,r]);if(l.status===`rejected`)throw l.reason;if(g.status===`rejected`)throw g.reason;return h.signal.throwIfAborted(),await Je(e,t,n,i,l.value,o,s,h.signal,b,ne,g.value,async e=>{if(e.credential===x)return!0;let n=i.engineCredentials?.find(t=>t.id===e.credential);if(e.credential&&!n)return!1;await b();for(let[e,t]of Object.entries(f))t===void 0?delete L.env[e]:L.env[e]=t;return i.credential=n?.credential??{engine:ee(e.model).engine,env:{}},x=e.credential,[u,d]=await Promise.all([Ne(i,t,m.socketPath),Pe(i,t)]),!0},S.credentials)}catch(e){throw te||await ne({status:`failed`,error:e instanceof Error?e.message:String(e),...i.task.event&&w[i.task.event.integration]?.isUninstalled?.(e)?{installationRevoked:!0}:{}}).catch(e=>console.error(`coder runner: result delivery failed`,e)),e}finally{clearTimeout(g),clearInterval(_),await m?.close(),delete L.env[y],delete L.env.CODER_MCP_MODE,delete L.env.CODER_MCP_CONNECTION_ENV,delete L.env.CODER_SERVER,delete L.env.CODER_DASHBOARD}}async function Je(e,s,c,_,v,y,x,S,C,ne,T,re,ie){let E=_.task.event,D=_.task.flow==="default"?_.postToken:y,O=new AbortController,k,A,j=!1,M=await $e({root:s,generation:_.generation,apply:async t=>{let n=k&&r(v,k);if(!n)throw Error(`The task is not ready`);if(t.kind===`cancel`){await fe(v,n),j=!0,await Te(),await C();return}return Ve(i(v,n.id),e,t)}}),N=M.ack().seq>=0?M.ack():void 0,P,F=()=>{if(P)return P;if(!N)return Promise.resolve();let t=N;return P=X(c.server,c.token,e,`/ack`,{method:`POST`,body:JSON.stringify(t),signal:O.signal}).then(()=>{N&&N.seq<=t.seq&&(N=void 0)}).catch(e=>{throw(e.status===401||e.status===403)&&(N=void 0),e}).finally(()=>{P=void 0}),P},ve=async()=>{let t=await X(c.server,c.token,e,`/messages?after=${M.ack().seq}`,{signal:O.signal});try{t.length&&await M.apply(t)}finally{t.length&&M.ack().seq>=0&&(N=M.ack()),await F().catch(()=>{})}},L=setInterval(()=>{F().catch(()=>{})},1e3),R=l(I.join(s,`.runner-task.json`)),z=new Map,B=new Map,we=(_.logCursor??-1)+1,V=0,H=[],U,W=()=>{for(let e of B.values())for(let t of e()){if(V>=2097152)continue;let e=Buffer.byteLength(t)>65536?`A task log entry exceeded 64 KB`:t;H.push({seq:we++,at:Date.now(),level:`out`,line:e}),V+=Buffer.byteLength(e)}return U||(U=(async()=>{for(;H.length;){let t=0,n=H.slice(0,100).filter(e=>(t+=Buffer.byteLength(JSON.stringify(e)))<524288);if(!n.length)throw Error(`Task log batch is too large`);let r=!1;for(let t=0;t<3;t++)try{await X(c.server,c.token,e,`/logs`,{method:`POST`,signal:AbortSignal.timeout(5e3),body:JSON.stringify({entries:n})}),r=!0;break}catch(e){if(t===2)throw e;await new Promise(e=>setTimeout(e,1e3))}r&&H.splice(0,n.length)}})().finally(()=>{U=void 0}),U)},Te=()=>W().catch(e=>{console.error(`coder runner: log delivery failed`,e)}),G,K,Ee=!1,De=R?.generation===_.generation?R.usageStart:0,q=R?.generation===_.generation?R.turn:0,J=q+1,Y=e=>pe(w[E.integration],E,e,D,_.task.author),Oe=()=>k?ce(i(v,k)):[],Z=async t=>{await X(c.server,c.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`waiting`,approval:t,approvals:Oe()})})},ke=0,Q=async t=>{let n=k&&r(v,k)?.fallbacks||[];n.length<=ke||(ke=n.length,await X(c.server,c.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`running`,fallbacks:n,model:t.model,...t.credential?{credential:t.credential}:{}})}).catch(e=>console.error(`coder runner: fallback report failed`,e)))},Ae=new Set,$=e=>xe(i(v,e)).then(t=>{for(let n of t){let t=ye.find(e=>e.name===n.tool);if(!t)continue;let r=Se(t,n.runId,v,e,n.timeout,{integrationToken:t.platform?_.tokens[t.platform]:void 0,checksToken:_.checksToken,links:Ce(c.server,_.task.taskUrl,_.reviewAssets),onModel:ie,stop:S}).catch(e=>console.error(`coder runner: ${n.tool} ${n.runId} failed`,e)).finally(()=>Ae.delete(r));Ae.add(r)}}).catch(e=>console.error(`coder runner: async calls could not be read`,e));try{let l=_.task.models?.[0]?.model,h=T?.restored&&T.resume?.engine===(l?ee(l).engine:oe(te(_.task),b(v)).engine),y,C=he({cwd:v,...R?.generation===_.generation?{resumeTaskId:R.id,resumeTurn:q}:{},...T?.resume?{resume:T.resume}:{},agent:_.task.agent,flow:_.task.flow,task:h?{..._.task,context:{..._.task.context,messages:void 0}}:_.task,toolEnvironment:{tokens:_.tokens},replyEndpoint:{url:`${c.server}/tasks/${encodeURIComponent(e)}`,token:c.token,..._.dashboard?{dashboard:_.dashboard}:{}},connections:_.connections,connectionEnv:_.connectionEnv,post:_.task.source===E?.integration,...D?{postToken:D}:{},onStart(e){A=e},onWorker(e,t){y=t,t.once(`error`,()=>{y=void 0})},async onTask(e,t){if(k=e,S.aborted){let t=r(v,e);throw t&&await fe(v,t),S.reason}B.has(e)||B.set(e,d(I.join(i(v,e),`log.jsonl`))),z.has(e)||z.set(e,m(i(v,e),t=>{(!t||t===`log.jsonl`)&&W().catch(()=>{}),(!t||t===`async.json`)&&$(e)})),W().catch(()=>{}),$(e),o(I.join(s,`.runner-task.json`),{generation:_.generation,id:e,turn:t??q,usageStart:De}),await F().catch(()=>{}),await ve().catch(()=>{}),clearInterval(G),x&&(G=setInterval(()=>{K||=ve().catch(()=>{}).finally(()=>{K=void 0})},4e3))},onApproval:Z,async onModel(e){return await Q(e),re(e)},onFlowModel:ie}),w=new Promise((e,t)=>{let n=()=>t(S.reason);S.addEventListener(`abort`,n,{once:!0}),S.aborted&&n()}),O=await Promise.race([C,w]);if(J=(O.turn??q)+1,k&&_.task.flow==="default"){let o=[...O.postedMessages??[]],s=t(v,k,y);try{for(;;){let t=n(v,k);for(let[e,n]of t.slice(J).entries()){let t=_e(_.task,n,j,n);t.skipped&&f(v,k,{kind:`status`,message:ue}),_.task.source===E?.integration&&t.text&&!t.duplicate&&o.push(...await ge(v,k,J+e,()=>Y(t.text))),O.reply=t.text,O.ok=n.status===0,O.error=n.error?.message}J=Math.max(J,t.length);let l=r(v,k);if(l?.status===`running`||l?.status===`queued`){await Promise.race([me(v,k,Z,(e,t,n)=>ae(e,t,{...n,turn:J,worker:y,signal:S})),w]);continue}if(l&&!a(l.pid)&&g(v,k)){if(l.status!==`completed`){let e=p(v,k).length;f(v,k,{kind:`status`,message:`Discarded ${e} queued follow-up${e===1?``:`s`}: the task is ${l.status}.`});continue}let[t,...n]=p(v,k);for(let e of n)u(v,k,e);if(t){await de(v,l,t,{resolveConnections:He({url:`${c.server}/tasks/${encodeURIComponent(e)}`,token:c.token}),onWorker:e=>{y=e}});continue}}if(y?.exitCode===null&&!y.signalCode||g(v,k)||be(i(v,k))){await Promise.race([s.wait(3e4),w]);continue}if(!Ee){clearInterval(G),await K,await M.close(),Ee=!0;continue}if(n(v,k).length<=J)break}}finally{s.close()}let l=(r(v,k)?.turnUsage??[]).slice(De).flatMap(e=>e.tokens?[e.tokens]:[]);O.tokens=l.length?l.reduce((e,t)=>le(e,t)):se(v,k)?.tokens??O.tokens,o.length&&(O.postedMessages=o)}for(await Te();N;)S.throwIfAborted(),await F().catch(()=>{}),N&&await new Promise(e=>setTimeout(e,1e3));return await ne({status:j?`cancelled`:O.ok?`completed`:`failed`,result:O.reply??O.result,...!O.ok&&O.error?{error:O.error}:{},tokens:O.tokens,...Oe().length?{approvals:Oe()}:{},...O.postedMessages?.length?{postedMessages:O.postedMessages}:{},...E?.repo?{diff:await Me(v,s).catch(()=>void 0)}:{}}),O}catch(t){if(S.aborted){A?.requestStop();let t=new Set([...k?[k]:[],...A?.runningIds()??[],...h(v).filter(t=>t.name===`agent:${e}`||A&&t.flowRunId===A.runId).map(e=>e.id)]);for(let e of t){B.has(e)||B.set(e,d(I.join(i(v,e),`log.jsonl`)));let t=r(v,e);t&&await fe(v,t)}}throw await Te(),t}finally{for(let e of z.values())e.close();await U?.catch(()=>{}),clearInterval(L),clearInterval(G),O.abort(),await Promise.allSettled([K,P]),Ee||await M.close()}}const Ye=`/tmp/coder-inbox.sock`,Xe=e=>I.join(B.tmpdir(),`coder-${we(`sha256`).update(e).digest(`hex`).slice(0,24)}.sock`);function Ze(e,t){return new Promise((n,r)=>{let i=V.request({socketPath:e,path:`/messages`,method:`POST`,headers:{"content-type":`application/json`}},e=>{let t=``;e.on(`data`,e=>{t+=e}),e.on(`end`,()=>{if(e.statusCode!==200)return r(Error(`Task inbox answered ${e.statusCode}`));try{n(JSON.parse(t))}catch(e){r(e)}}),e.on(`error`,r)});i.setTimeout(1e4,()=>i.destroy(Error(`Task inbox timed out`))),i.on(`error`,r),i.end(JSON.stringify({entries:t}))})}const Qe=`const http=require('node:http');const req=http.request({socketPath:process.env.CODER_INBOX_SOCKET||'/tmp/coder-inbox.sock',path:'/messages',method:'POST',headers:{'content-type':'application/json'}},res=>{res.pipe(process.stdout);res.on('end',()=>{if(res.statusCode!==200)process.exitCode=1})});req.on('error',()=>{process.exitCode=1});req.setTimeout(10000,()=>req.destroy());req.end(JSON.stringify({entries:JSON.parse(process.env.CODER_INBOX_MESSAGES)}));`;async function $e(e){let t=I.join(e.root,`.runner-inbox.json`),n=l(t),r=n?.generation===e.generation?n:{generation:e.generation,seq:-1,answers:[]},i=Promise.resolve(),a=n=>{let a=async()=>{if(!Array.isArray(n)||n.some(t=>!Number.isInteger(t.seq)||t.seq<0||t.generation!==e.generation||![`steer`,`ask`,`approve`,`cancel`].includes(t.kind)))throw Error(`Invalid task messages`);for(let i of[...n].sort((e,t)=>e.seq-t.seq)){if(i.seq<=r.seq)continue;let n=await e.apply(i),a={generation:e.generation,seq:i.seq,answers:[...r.answers??[],...i.kind===`ask`?[{seq:i.seq,value:n}]:[]]};o(t,a),r=a}return r},s=i.then(a,a);return i=s.then(()=>{},()=>{}),s},s=e.socketPath??L.env.CODER_INBOX_SOCKET??Xe(e.root);if(await H.lstat(s).then(()=>!0,()=>!1)){if(!await new Promise((e,t)=>{let n=z.connect(s);n.once(`connect`,()=>{n.destroy(),e(!1)}),n.once(`error`,n=>n.code===`ECONNREFUSED`?e(!0):t(n))}))throw Error(`The task inbox is already running`);await H.unlink(s)}let c=V.createServer(async(e,t)=>{if(e.method!==`POST`||e.url!==`/messages`){t.writeHead(404).end();return}let n=``;try{for await(let t of e)if(n+=t,Buffer.byteLength(n)>1048576)throw Error(`Messages too large`);let r=await a(JSON.parse(n).entries);t.writeHead(200,{"content-type":`application/json`}).end(JSON.stringify(r))}catch{t.writeHead(409).end()}});return await H.mkdir(e.root,{recursive:!0}),await new Promise((e,t)=>{c.once(`error`,t),c.listen(s,e)}),await H.chmod(s,384),{apply:a,ack:()=>r,close:async()=>{await i,await new Promise(e=>c.close(()=>e()))}}}const et=new Set([`authorization`,`proxy-authorization`,`cookie`,`host`,`connection`,`keep-alive`,`upgrade`,`transfer-encoding`,`content-length`,`content-encoding`]);async function tt(e){let t=await H.realpath(await H.mkdtemp(`/tmp/coder-`)),n=I.join(t,`server.sock`),r=V.createServer(ve(async t=>{let n=new URL(t.url);if(!n.pathname.startsWith(`/admin/`))return Response.json({error:`Not found`},{status:404});let r=new URL(`${e.server}${n.pathname}${n.search}`),i=new Headers(t.headers);for(let e of et)i.delete(e);i.set(`authorization`,`Bearer ${e.token}`);let a=await fetch(r,{method:t.method,headers:i,body:t.body,duplex:`half`,redirect:`manual`,signal:t.signal}),o=new Headers(a.headers);for(let e of et)o.delete(e);return new Response(a.body,{status:a.status,headers:o})}));return await new Promise((e,t)=>{r.once(`error`,t),r.listen(n,e)}),await H.chmod(n,384),{socketPath:n,close:async()=>{r.closeAllConnections(),await new Promise(e=>r.close(()=>e())),await H.rm(t,{recursive:!0,force:!0})}}}export{Xe as a,Y as c,ke as i,q as l,Ye as n,Ae as o,Ge as r,Ze as s,Qe as t,Q as u};