@wular/coder 0.5.1 → 0.6.0

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 (246) hide show
  1. package/dist/{actions-DO8MvHwc.js → actions-C35tq9KH.js} +2 -2
  2. package/dist/{agent-Cgala63h.js → agent-BZR4Eqdc.js} +1 -1
  3. package/dist/{apps-BORri-28.js → apps-CCqOsEZH.js} +4 -4
  4. package/dist/{async-BS9tyhva.js → async-BP5q3Une.js} +1 -1
  5. package/dist/{auth-C16ylySv.js → auth-CJOm9_Vh.js} +1 -1
  6. package/dist/{chat-czruXAt3.js → chat-BD2Fu3jU.js} +1 -1
  7. package/dist/cli.js +2 -2
  8. package/dist/{cmd-C1gHyVG7.js → cmd-BH1bmZGs.js} +29 -29
  9. package/dist/{connection-CgA5_NJ7.js → connection-DNzNYpha.js} +1 -1
  10. package/dist/{context-C1XBbfEL.js → context-DVGPu7f_.js} +1 -1
  11. package/dist/dash/standalone/server/build-index.json +1 -1
  12. package/dist/dash/standalone/server/manifest.json +1305 -1297
  13. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.91e126d7a389d4bd.js → index.a036e2c6ae93ec75.js} +3 -2
  14. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.858c062c7891a2c1.js → load.3e1c235ecb89201a.js} +1 -1
  15. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.9375ab741dc9791e.js → page.182d84c6c82e23ce.js} +3 -3
  16. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{loading.56c14183236be231.js → loading.d336cb9556ff8727.js} +1 -1
  17. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.c36570a56d279ce2.js → notify.62f2ed40b52a8634.js} +1 -1
  18. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.13fdd9cc55ad3a52.js → page.ff2419800c956e8d.js} +4 -4
  19. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.38a7f39cddc670f7.js → sign-out.e125b18b5682b3eb.js} +2 -2
  20. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agent-menu.5c780867b82081b1.js → agent-menu.eae818909ed5becf.js} +1 -1
  21. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.2385ffa8fdad08d6.js → agents-grid.dcc8b20efd8850e6.js} +5 -5
  22. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{loading.0130f8533d8f1b1e.js → loading.061efc737835250f.js} +2 -2
  23. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.5ca6921e50484f8c.js → page.6704febb2a60975e.js} +6 -6
  24. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.afc4a8a5a8360975.js → layout.32acdff971049f4d.js} +8 -8
  25. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.ba65063a1aa99a62.js → page.1208c1115d309a62.js} +6 -6
  26. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{loading.d56ef50b0694f975.js → loading.e4f77e054d5a5f00.js} +2 -2
  27. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.03c5e72b0fe50ba9.js → page.630dd03a59048b88.js} +14 -14
  28. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.7c8c75bd0c05df4a.js → platform-actions.184f6c441ac3d1c7.js} +5 -5
  29. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-step.d6a980d1181dc940.js → platform-step.d97e9a2290dbfae3.js} +1 -1
  30. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.b5299f5130a4e8af.js → agent-settings-form.840d93eb2ba648bd.js} +8 -8
  31. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{loading.2800c65e45a4a1d9.js → loading.707d269a647b6f56.js} +1 -1
  32. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.fad77cea17947d47.js → page.b79c235f7735fc3e.js} +6 -6
  33. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.4120e6979eaed441.js → loading.10ca51cc6fb65391.js} +1 -1
  34. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.474b3524d5ea53b7.js → page.a09314f795d5e740.js} +1 -1
  35. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{loading.3a615597ca648452.js → loading.10a0ff0d99710f70.js} +2 -2
  36. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.7868a07efcaa26f4.js → page.d88040124d4d2053.js} +4 -4
  37. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.ba93a53773cab8a8.js → versions-list.e6088baf4de7f41e.js} +1 -1
  38. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.6e53829bd1f3021d.js → loading.5228229c48332ccd.js} +3 -3
  39. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.5798ede8ba8ace97.js → page.c60cf1ea8ede39f6.js} +7 -7
  40. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{app-cards.55778a4b3177846d.js → app-cards.f17ab135e3e31e00.js} +2 -2
  41. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{loading.f0d91d48e2b79e50.js → loading.de17198764c127f5.js} +2 -2
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.ce391cad0d78795f.js → page.706499514893c5e0.js} +5 -5
  43. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-pills.1012e04bfbc7bffd.js → agent-pills.bd9808856ef860f3.js} +1 -1
  44. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.0cec822c6099f058.js → agent-toggle.901667176840cd25.js} +2 -2
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.7151c467e7ecf6a5.js → hero.fd2ffbf999c6c1e9.js} +3 -3
  46. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.4e121d31ed0cfe02.js → connect-repositories.e27bcba279f82d7b.js} +1 -1
  47. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.f314d92af0bb33b0.js → editor.edcfc2f0692e9059.js} +10 -10
  48. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.11028d5329ad537b.js → import-picker.515ab6c14afe14ac.js} +5 -5
  49. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{loading.9b65a8c1cdc8346f.js → loading.0cf7535fa7af7fbd.js} +2 -2
  50. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.1476d31e4554e88b.js → page.95eb2cd0671e7f6e.js} +5 -5
  51. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.150d950d191db477.js → layout.87f5bb00d4e34e6b.js} +7 -7
  52. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.3e72de86b86a7338.js → operator-apps.6a9975e2f64a9e5b.js} +6 -6
  53. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.6a4be3b1a473ff8c.js → page.3691b55916b17d14.js} +6 -6
  54. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.262ed73437c17872.js → page.7de674df6cd0e824.js} +1 -1
  55. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{advanced-list.7180570379e2625c.js → advanced-list.c7821de9a79fb144.js} +1 -1
  56. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.632b1847c16ecd42.js → connection-add.f102abaca93416ff.js} +7 -7
  57. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.4378ae707b2092ed.js → connections-list.098f57fd6b1570d8.js} +8 -8
  58. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.e47897acb6867df8.js → credentials-list.2a2d391b2fc563fc.js} +7 -7
  59. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.6bd06f96afbe7329.js → credentials.0eeab14f7a6236bb.js} +8 -8
  60. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.38e70272eeb98cd0.js → list.5a1847f3ed97bc5b.js} +3 -3
  61. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.a08cd37d0f7ff86c.js → models-list.d0954eca1a1ca3d2.js} +9 -9
  62. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.f096b5a9ac419326.js → page.f0e75930eb08c4bc.js} +14 -14
  63. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.0df1f9329df1b67d.js → runners-list.74bcad5271e5de01.js} +6 -6
  64. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.6d2f56fa7d6fcab0.js → secrets-list.d0c1121f216e0bcb.js} +4 -4
  65. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.0fd865c865e5bab4.js → layout.05700d93abe5a3d4.js} +4 -4
  66. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-pick.695538b2edf9dd15.js → model-pick.1d99ed9c886cabe5.js} +2 -2
  67. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.c57b81c2197cce0f.js → page.e439da4bae9d6d6c.js} +1 -1
  68. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{settings-head.004ced21e02ffa48.js → settings-head.08ab3f9bad326d47.js} +1 -1
  69. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.60aadbe43ea1e39c.js → create-link.161d0d636ca45721.js} +3 -3
  70. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.e2b9ef0344b1a1a2.js → outcome-toast.d6d0bd8663377fda.js} +1 -1
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.c456ad99c8a9f875.js → page.5f90915ba7faa83d.js} +5 -5
  72. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.2ec05d78d609b7b2.js → activity.f8d48c80747830ee.js} +1 -1
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.779ecdd9c9d2ff09.js → loading.3966ea5aa984c177.js} +4 -4
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.578be2f6c89fcba0.js → page.8ad4907125ab2593.js} +16 -10
  75. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.d131453dd2a423c3.js → task-actions.f4e6ea3320e0ae23.js} +14 -22
  76. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-missing.33ec27a4a5eafefe.js → task-missing.66dc41e2c7b199fb.js} +1 -1
  77. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.3d72a4ecd2b3826e.js → task-view.b7b9a82526087a6f.js} +83 -22
  78. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.97be3e67214889c1.js → composer.91fe18526ebad717.js} +10 -10
  79. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.9175908da02960e1.js → pending-approvals.319cefed5e3adb15.js} +1 -1
  80. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.a25847399a4dfb30.js → task.fcd21a71424503e9.js} +27 -7
  81. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.028798c79227a366.js → tasks-list.550288bcec62fea5.js} +61 -44
  82. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.9a9d13057b326f25.js → tasks-section.7e3bc3398baec1bd.js} +7 -7
  83. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.045c6db0c56975b2.js → page.98767f77d0fd9a05.js} +3 -3
  84. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{loading.5b973a8bb29197d5.js → loading.d2482006f8adc43a.js} +2 -2
  85. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.938d29ff7edb678d.js → page.26319c38995aceca.js} +4 -4
  86. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{range-bar.0b9038e9df707843.js → range-bar.3086edd9a97046c2.js} +2 -2
  87. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{loading-card.77bea8c5870b5d3c.js → loading-card.94d5645c958c77e9.js} +2 -2
  88. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{page-head.2eb1e0213eb50349.js → page-head.a6bd4a75087e6e53.js} +1 -1
  89. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.2cdb8eabd8f6df70.js → stream.c7ffa724145ce870.js} +1 -1
  90. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.8733901ca0e4c246.js → task-toasts.168a3d3f5fd52cb4.js} +48 -21
  91. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{theme-choices.fc86071c1b634176.js → theme-choices.9d0674c72d0ce188.js} +1 -1
  92. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{back.7aa0ae82dbec38cd.js → back.95ed3b5a6128d557.js} +2 -2
  93. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/nav/{org.853d173b55368728.js → org.efcee1c3404f6345.js} +1 -1
  94. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{combo.e4e08287494081a3.js → combo.3acd48652c3a66a6.js} +2 -2
  95. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{filter.0730dccad6332327.js → filter.6468dec3a8faed6f.js} +6 -6
  96. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{menu-items.759a1b1f7c5ee365.js → menu-items.725ede2a88ea76a9.js} +7 -3
  97. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/ui/{select.0ee9e8f04ddd8b47.js → select.b712227920cd0845.js} +1 -1
  98. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.56cea462eb725c39.js → action.55bd1d3e1b67a67e.js} +1 -1
  99. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.685154f230716834.js → client.b9225923da59febe.js} +1 -1
  100. package/dist/dash/standalone/static/assets/chunks/{advanced-list-b75a9c2bd11026de.js → advanced-list-d9a68433a13416df.js} +1 -1
  101. package/dist/dash/standalone/static/assets/chunks/{agent-pills-54564413a57d7fa7.js → agent-pills-1414a96077ec37de.js} +1 -1
  102. package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-55d294dad2ce5a0d.js → agent-settings-form-73da6b4b714e49b4.js} +1 -1
  103. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-b5dcc4ea6292fb3d.js → agent-toggle-d14e2838d11ab0f7.js} +1 -1
  104. package/dist/dash/standalone/static/assets/chunks/{agents-grid-69461c53abbba433.js → agents-grid-aea25444710f2634.js} +1 -1
  105. package/dist/dash/standalone/static/assets/chunks/{back-ba5e4340a9f8bbd2.js → back-57d4a59bf80377e6.js} +1 -1
  106. package/dist/dash/standalone/static/assets/chunks/{chain-hint-491eb09a20a15702.js → chain-hint-dcb6933d6f8a6324.js} +1 -1
  107. package/dist/dash/standalone/static/assets/chunks/{combo-6df61e8a1cc31037.js → combo-460bff876882c694.js} +1 -1
  108. package/dist/dash/standalone/static/assets/chunks/{composer-198b844da57b82a3.js → composer-8d12a215b107c9b3.js} +1 -1
  109. package/dist/dash/standalone/static/assets/chunks/composer-fe63697f84a538c2.js +1 -0
  110. package/dist/dash/standalone/static/assets/chunks/{confirm-14d018653fbe50fc.js → confirm-c0c0642856e64b11.js} +1 -1
  111. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-5118edc019fc7890.js → connect-repositories-3a317a5db3ea50b1.js} +1 -1
  112. package/dist/dash/standalone/static/assets/chunks/{connections-list-5412dad7e0def52f.js → connections-list-0110d160a25b388c.js} +1 -1
  113. package/dist/dash/standalone/static/assets/chunks/{copy-04781f9af4e10f06.js → copy-eeb076af6e19e501.js} +1 -1
  114. package/dist/dash/standalone/static/assets/chunks/create-link-e72ff4dd7ef06e1c.js +1 -0
  115. package/dist/dash/standalone/static/assets/chunks/{credentials-list-e64c973aee5602d3.js → credentials-list-90e6a2436041b18d.js} +1 -1
  116. package/dist/dash/standalone/static/assets/chunks/{custom-range-b6919bab9846ebf7.js → custom-range-721477a24237c90d.js} +1 -1
  117. package/dist/dash/standalone/static/assets/chunks/{editor-68e9ccd1764fc512.js → editor-64f6563f28d53ec5.js} +1 -1
  118. package/dist/dash/standalone/static/assets/chunks/{field-adcb6e6a5f9b7131.js → field-7c895f6d8d5d9eb3.js} +1 -1
  119. package/dist/dash/standalone/static/assets/chunks/{instructions-7b274685ceb26457.js → instructions-7b1485330fc4e8fd.js} +1 -1
  120. package/dist/dash/standalone/static/assets/chunks/instructions-ed61f719baf13b12.js +1 -0
  121. package/dist/dash/standalone/static/assets/chunks/{list-662f042656857c82.js → list-c0633e5e742dff16.js} +1 -1
  122. package/dist/dash/standalone/static/assets/chunks/{models-list-ae1e2eff30d21824.js → models-list-228b3503307bc1ff.js} +1 -1
  123. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-fd86ded4c44c2de7.js → outcome-dialog-36842dfe50be1c85.js} +1 -1
  124. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-630b20ddff39b01d.js +1 -0
  125. package/dist/dash/standalone/static/assets/chunks/outcome-toast-b7e33ff0d984f359.js +1 -0
  126. package/dist/dash/standalone/static/assets/chunks/{platform-actions-f3979ab69a6ceb53.js → platform-actions-055a2e246fca7af9.js} +1 -1
  127. package/dist/dash/standalone/static/assets/chunks/platform-actions-9e198b0c88df3206.js +1 -0
  128. package/dist/dash/standalone/static/assets/chunks/platform-step-111051da80de6577.js +1 -0
  129. package/dist/dash/standalone/static/assets/chunks/{platform-step-5454b6c0a19caefd.js → platform-step-c7473e57e0b2f824.js} +1 -1
  130. package/dist/dash/standalone/static/assets/chunks/{runners-list-20d42f19fb4bec8a.js → runners-list-973253df985a8306.js} +1 -1
  131. package/dist/dash/standalone/static/assets/chunks/{runtime-3fcac605fffcc273-1.js → runtime-9b28886f3cbe0ed3-1.js} +1 -1
  132. package/dist/dash/standalone/static/assets/chunks/{secrets-list-89f89ee70edb3856.js → secrets-list-4aa6e2bf0fef06d6.js} +1 -1
  133. package/dist/dash/standalone/static/assets/chunks/{segmented-66a8c77c6294fec3.js → segmented-a994b4c20434c0ad.js} +1 -1
  134. package/dist/dash/standalone/static/assets/chunks/shared-init-4f4cac48ca0ef193.js +9 -0
  135. package/dist/dash/standalone/static/assets/chunks/shared-init-5734a91cdb78a173.js +1 -0
  136. package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +1 -0
  137. package/dist/dash/standalone/static/assets/chunks/{shared-init-96225b8c7758de9d.js → shared-init-e8cf924a73e46497.js} +1 -1
  138. package/dist/dash/standalone/static/assets/chunks/side-toggle-a2d07f99f136e975.js +1 -0
  139. package/dist/dash/standalone/static/assets/chunks/{tail-40f16e09eade7eee.js → tail-d3ba4c4035c5453e.js} +1 -1
  140. package/dist/dash/standalone/static/assets/chunks/task-3b17e45e271a6480.js +1 -0
  141. package/dist/dash/standalone/static/assets/chunks/task-actions-e0c202536048edc0.js +3 -0
  142. package/dist/dash/standalone/static/assets/chunks/task-view-3822a8fe44f4aa92.js +3 -0
  143. package/dist/dash/standalone/static/assets/chunks/tasks-list-cb838b88110bbbb4.js +1 -0
  144. package/dist/dash/standalone/static/assets/chunks/{versions-list-ceb756236e69b761.js → versions-list-7cb9db8c25cdfaa7.js} +1 -1
  145. package/dist/dash/standalone/static/assets/chunks/{wular-pnext-3fcac605fffcc273-0.js → wular-pnext-9b28886f3cbe0ed3-0.js} +1 -1
  146. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-dd4ac319a0d62432.css → dash-param-org-agents-param-slug-ea5e0d8593150b35.css} +1 -1
  147. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css → dash-param-org-agents-param-slug-platforms-b45dbb9122cc7338.css} +1 -1
  148. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css → dash-param-org-agents-param-slug-settings-2a7be18387a422ff.css} +1 -1
  149. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css → dash-param-org-agents-param-slug-tasks-d12ff8047806bbf5.css} +1 -1
  150. package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css → dash-param-org-agents-param-slug-usage-72b55bb80667080b.css} +1 -1
  151. package/dist/dash/standalone/static/assets/{dash-param-org-tasks-be3cb3d64573f3d9.css → dash-param-org-tasks-e040b6497646a8a0.css} +1 -1
  152. package/dist/dash/standalone/static/assets/{dash-param-org-tasks-param-id-c20a0537bc82620d.css → dash-param-org-tasks-param-id-7df5e6c891e9e77f.css} +1 -1
  153. package/dist/dash/standalone/static/assets/pnext-client-019fddb658ef621e.js +1 -0
  154. package/dist/dash/standalone/static/assets/pnext-client-025682238ebc1ccd.js +1 -0
  155. package/dist/dash/standalone/static/assets/pnext-client-05cb69349250f079.js +1 -0
  156. package/dist/dash/standalone/static/assets/pnext-client-0abd872e45d259dd.js +1 -0
  157. package/dist/dash/standalone/static/assets/pnext-client-19072249ab9d929f.js +1 -0
  158. package/dist/dash/standalone/static/assets/pnext-client-24b6f98a5e678977.js +1 -0
  159. package/dist/dash/standalone/static/assets/pnext-client-2ed3001f7f4597c0.js +1 -0
  160. package/dist/dash/standalone/static/assets/pnext-client-3028d0d201243815.js +1 -0
  161. package/dist/dash/standalone/static/assets/pnext-client-63d9e54053266337.js +1 -0
  162. package/dist/dash/standalone/static/assets/pnext-client-7bfb634b06062acf.js +1 -0
  163. package/dist/dash/standalone/static/assets/pnext-client-915218deeaa531f2.js +1 -0
  164. package/dist/dash/standalone/static/assets/{pnext-client-b1af82c6f0db0033.js → pnext-client-a62685439dab6db4.js} +1 -1
  165. package/dist/dash/standalone/static/assets/{pnext-client-435db60553fa3a67.js → pnext-client-a793df411dc27890.js} +1 -1
  166. package/dist/dash/standalone/static/assets/pnext-client-ae5f820b1e3add50.js +1 -0
  167. package/dist/dash/standalone/static/assets/pnext-client-ba17d46e9f8417f8.js +1 -0
  168. package/dist/dash/standalone/static/assets/pnext-client-dbca01dae6b3ad8c.js +1 -0
  169. package/dist/dash/standalone/static/assets/pnext-client-ec303fb1cec93d9f.js +1 -0
  170. package/dist/dash/standalone/static/assets/pnext-client-ec8fde62be82a077.js +1 -0
  171. package/dist/dash/standalone/static/assets/pnext-client-f659576f3d4fea61.js +1 -0
  172. package/dist/dash/standalone/static/assets/pnext-client-f715825f54bb8e89.js +1 -0
  173. package/dist/{drive-B7SBFfcb.js → drive-MggMiKA0.js} +1 -1
  174. package/dist/{exec-D9jF2F-H.js → exec-CNygM6yF.js} +1 -1
  175. package/dist/{executor-DBW7R7Tf.js → executor-Ds4wDCzV.js} +1 -1
  176. package/dist/flow/builtin/review/index.js +1 -1
  177. package/dist/flow/index.js +1 -1
  178. package/dist/{hook-DN__zYOG.js → hook-CVJU-ZD0.js} +1 -1
  179. package/dist/{local-BzMvgiwL.js → local-CqOUpEtl.js} +1 -1
  180. package/dist/{local-GIxwz_Or.js → local-DFrTuJFN.js} +1 -1
  181. package/dist/{login-LlZrIlxb.js → login-93jO9qjx.js} +1 -1
  182. package/dist/{maintenance-DyiyHI8S.js → maintenance-BuDKnfc7.js} +1 -1
  183. package/dist/{mcp-CrtKQoVi.js → mcp-CTVOR7r6.js} +1 -1
  184. package/dist/{mcp-Caq72REF.js → mcp-EwT2mCaa.js} +1 -1
  185. package/dist/{models-BVxs3I8o.js → models-mKyePWrV.js} +1 -1
  186. package/dist/{permission-RSZM3DUk.js → permission-F6F25GJU.js} +1 -1
  187. package/dist/remote-Cl-j8r3W.js +1 -0
  188. package/dist/{runner-CKMOh5Q3.js → runner-DK0jnzPr.js} +1 -1
  189. package/dist/runner.json +1 -1
  190. package/dist/runner.tgz +0 -0
  191. package/dist/schema.js +1 -1
  192. package/dist/sdk.d.ts +34 -0
  193. package/dist/sdk.js +1 -1
  194. package/dist/serve-Cqlkgdfd.js +8 -0
  195. package/dist/{serve-YlU04KO7.js → serve-DHe6dZM6.js} +1 -1
  196. package/dist/{session-D7eeJIaH.js → session-BMbMzzPu.js} +1 -1
  197. package/dist/{shared-BzNReirj.js → shared-D-KqAi7b.js} +1 -1
  198. package/dist/{sign-in-Dr6sU7vz.js → sign-in-Dv-rdYD4.js} +1 -1
  199. package/dist/{store-BrnWdtRw.js → store-BpDipcKB.js} +18 -18
  200. package/dist/{task-CyqtCXo3.js → task-BRHXn5y1.js} +1 -1
  201. package/dist/{task-DN4assR8.js → task-CzXNLREX.js} +1 -1
  202. package/dist/{tools-DVtBtED6.js → tools-BCm26CeV.js} +1 -1
  203. package/dist/{tools-Ck-ZWtmB.js → tools-C69W1B6S.js} +1 -1
  204. package/dist/{tools-search-BNDea9vZ.js → tools-search-BDaeCoWe.js} +1 -1
  205. package/dist/{worker-DeuC38Vp.js → worker-DGhRPDDt.js} +2 -2
  206. package/dist/{worker-DJANNSCT.js → worker-DHNBRRl-.js} +1 -1
  207. package/package.json +1 -1
  208. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  209. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  210. package/dist/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +0 -1
  211. package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +0 -1
  212. package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +0 -1
  213. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +0 -1
  214. package/dist/dash/standalone/static/assets/chunks/outcome-toast-c00becdb638cd9a8.js +0 -1
  215. package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +0 -1
  216. package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +0 -1
  217. package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +0 -1
  218. package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +0 -1
  219. package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +0 -9
  220. package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +0 -1
  221. package/dist/dash/standalone/static/assets/chunks/task-396d849e58e50d59.js +0 -1
  222. package/dist/dash/standalone/static/assets/chunks/task-actions-0b3054dc0f8d17c0.js +0 -3
  223. package/dist/dash/standalone/static/assets/chunks/task-view-9e026dc5da58af5b.js +0 -3
  224. package/dist/dash/standalone/static/assets/chunks/tasks-list-04c6568d7f7237b7.js +0 -1
  225. package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +0 -1
  226. package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +0 -1
  227. package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +0 -1
  228. package/dist/dash/standalone/static/assets/pnext-client-27207e4f43f9a21b.js +0 -1
  229. package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +0 -1
  230. package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +0 -1
  231. package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +0 -1
  232. package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +0 -1
  233. package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +0 -1
  234. package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +0 -1
  235. package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +0 -1
  236. package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +0 -1
  237. package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +0 -1
  238. package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +0 -1
  239. package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +0 -1
  240. package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +0 -1
  241. package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +0 -1
  242. package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +0 -1
  243. package/dist/remote-CY-qYX2C.js +0 -1
  244. package/dist/serve-D23JqDip.js +0 -12
  245. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.440367ae07204ee7.css.pnext-asset.js → task-view.61d4afa987d59596.css.pnext-asset.js} +0 -0
  246. /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.f3737549b4696cc8.css.pnext-asset.js → tasks-list.835b11dc95c95cb5.css.pnext-asset.js} +0 -0
@@ -0,0 +1,8 @@
1
+ import{t as e}from"./errors-DK_trCff.js";import{E as t,T as n,V as r}from"./state-CxAUec80.js";import{n as i}from"./types-DHBqXFE2.js";import{Z as a,s as o}from"./config-_32PHl9g.js";import{n as s}from"./integrations-DSZSa8Rc.js";import{i as c,n as l}from"./crypto-Ittsv-m4.js";import"./dispatch-BkoIU4GU.js";import{_ as u,a as d,g as f,l as p,o as m,p as h,r as g,s as _,t as v}from"./http-DRk8cDjf.js";import{n as y,r as b}from"./env-BwFCHakK.js";import{l as x}from"./github-actions-2RjyRseX.js";import{$ as S,$n as C,$r as w,$t as ee,A as te,An as T,Ar as E,At as D,B as O,Bn as k,Br as ne,Bt as re,C as ie,Cn as ae,Cr as oe,Ct as se,D as ce,Dn as le,Dr as ue,Dt as de,E as fe,En as pe,Er as me,Et as he,F as A,Fn as ge,Fr as _e,G as ve,Gn as ye,Gr as j,Gt as be,H as xe,Hn as Se,I as Ce,In as we,Ir as Te,It as Ee,Jn as De,Jr as Oe,Jt as ke,K as Ae,Kn as je,Kr as Me,L as Ne,Ln as Pe,Lr as Fe,Lt as Ie,M as Le,Mn as Re,Mr as ze,N as Be,Nn as Ve,Nr as He,Nt as Ue,O as We,On as Ge,Or as Ke,P as M,Pn as qe,Pr as Je,Pt as Ye,Q as Xe,Qr as Ze,Qt as Qe,R as N,Rn as $e,Rr as et,Rt as P,S as tt,Sn as nt,Sr as rt,St as it,T as at,Tn as ot,Tr as st,Tt as ct,U as lt,Un as ut,Ut as dt,V as F,Vn as ft,Vr as pt,Vt as mt,W as ht,Wn as gt,Wr as _t,X as vt,Xn as yt,Xr as bt,Y as I,Yn as xt,Yr as St,Yt as Ct,Z as wt,Zn as Tt,Zr as Et,_ as Dt,_n as Ot,_r as kt,a as At,an as jt,ar as L,at as Mt,b as Nt,bn as Pt,br as Ft,bt as It,c as R,ci as Lt,cn as Rt,ct as zt,d as Bt,dn as Vt,dr as Ht,dt as Ut,ei as z,en as Wt,er as Gt,et as Kt,f as qt,fn as Jt,fr as Yt,g as Xt,gn as Zt,gr as Qt,gt as $t,h as en,hn as tn,hr as nn,ht as rn,i as an,ii as on,it as sn,j as cn,jn as ln,jr as un,k as B,kn as dn,kr as fn,l as pn,ln as mn,lr as hn,lt as gn,m as _n,mn as vn,mr as yn,n as bn,ni as xn,nn as V,nr as Sn,nt as Cn,o as wn,on as Tn,or as En,ot as Dn,p as On,pn as kn,pr as An,q as jn,qn as Mn,qr as Nn,r as H,ri as Pn,rn as U,rr as Fn,rt as In,s as Ln,si as Rn,sn as zn,st as Bn,ti as W,tn as Vn,tr as Hn,tt as G,u as Un,un as Wn,ur as K,ut as Gn,v as Kn,vn as qn,vr as Jn,w as Yn,wn as Xn,wr as Zn,wt as Qn,x as q,xn as $n,xr as er,xt as tr,y as nr,yn as rr,yr as ir,z as J,zn as ar,zr as or,zt as sr}from"./apps-CCqOsEZH.js";import{m as cr,p as lr,v as ur}from"./local-CqOUpEtl.js";import{a as dr,c as fr,n as pr,o as mr,r as hr,s as gr}from"./metadata-D_bBfr3H.js";import _r from"node:path";import Y from"node:process";import vr from"node:fs";import{spawnSync as yr}from"node:child_process";import{createHash as br,randomBytes as xr,randomUUID as Sr}from"node:crypto";import Cr from"node:http";async function wr(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function Tr(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await Er(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,d({ok:r},r?200:503,{"cache-control":`no-store`})}async function Er(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Dr(e){let t=(e.now??Date.now)();if(!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await wr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...U(e.local.cwd,!1),...U(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await wr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}async function Or(e,t,n,r){let i=t.session.user.id,a=(await e.json().catch(()=>({}))).engine??``;if(!Nr.has(a)||!t.config.subscriptions?.[a])return d({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return d({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=(await t.store.list(`login`)).find(({value:e})=>e.owner===i&&e.engine===a&&e.state!==`done`&&e.state!==`failed`&&e.expiresAt>X(t));if(s)return d(Z(s.id,s.value));let c=`login-${xr(12).toString(`base64url`)}`,l=En(c,t.organizationId,0),u={owner:i,engine:a,state:`starting`,tokenHash:l.hash,runner:o.kind,createdAt:X(t),expiresAt:X(t)+Mr};await Pr(t,c,u);let f;try{let e=await o.start({id:c},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:l.token,CODER_LOGIN:a},void 0,{timeoutMs:Mr,hosts:[or[a].api,...or[a].account]}),n=await t.store.patchLogin(c,{handle:e},{tokenHash:u.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),d({error:`This sign-in is gone. Start again.`},409);f=n}catch(e){return await t.store.delete(`login`,c),d({error:e instanceof Error?e.message:String(e)},502)}return d(Z(c,f),201)}async function kr(e,t,n,r){let i=n.id??``;if(!r.searchParams.has(`state`)){let e=i&&!i.includes(`/`)?await Q(t,i):void 0;return e?d(Z(i,e)):d({error:`This sign-in is gone. Start again.`},404)}let a=await t.store.watch(`login`,i);try{let n=i&&!i.includes(`/`)?await Q(t,i):void 0;if(!n)return d({error:`This sign-in is gone. Start again.`},404);let o=r.searchParams.get(`state`),s=Date.now()+25e3;for(;o&&n.state===o&&Date.now()<s&&!e.signal.aborted;)if(await a.wait(Math.min(1e4,s-Date.now()),e.signal),n=await Q(t,i),!n)return d({error:`This sign-in is gone. Start again.`},404);return d(Z(i,n))}finally{a.close()}}async function Ar(e,t,n,r){let i=n.id??``,a=i&&!i.includes(`/`)?await Q(t,i):void 0;if(!a)return d({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:on(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?d({error:`This sign-in is not waiting for a code.`},409):d({ok:!0})}async function jr(e,t,n,r){let i=n.id??``,a=i&&!i.includes(`/`)?await Q(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),d({ok:!0})):d({error:`This sign-in is gone. Start again.`},404)}const Mr=6e5,Nr=new Set([`claude`,`codex`]),X=e=>(e.now??Date.now)();function Pr(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-X(e))})}function Z(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{}}}async function Q(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}function Fr(e,t){let n=t.handle&&e.runners[t.runner]?.stop(t.handle);if(!n)return;let r=n.catch(e=>console.error(`coder server: could not stop the machine of a finished ${t.engine} sign-in`,e));e.waitUntil?.(r)}async function Ir(e,t,n,r){let i=n.id,a=await t.store.watch(`login`,i),o=Date.now()+25e3;try{for(;;){if(e.signal.aborted)return d({});let n=await t.store.get(`login`,i);if(!n||n.tokenHash!==t.callbackLogin.tokenHash)return new Response(`Unauthorized`,{status:401});if(n.input){let e=await t.store.patchLogin(i,{input:null},{input:n.input,tokenHash:n.tokenHash});return d(e?{code:xn(t.config,n.input)}:{})}if(n.state===`verifying`||n.state===`done`||n.state===`failed`||Date.now()>=o)return d({});await a.wait(Math.min(1e4,o-Date.now()),e.signal)}}finally{a.close()}}async function Lr(e,t,n,r){return d({engine:t.callbackLogin.engine})}async function Rr(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return d({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s)&&Fr(t,a),d({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return d({error:`Invalid sign-in result`},400);let n=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,{...Pn(t.config,{env:c}),createdAt:(t.now??Date.now)(),...n?.email||n?.plan?{account:{...typeof n.email==`string`?{email:n.email}:{},...typeof n.plan==`string`?{plan:n.plan}:{}}}:{}})?(Fr(t,a),d({ok:!0})):d({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return await t.store.patchLogin(i,l.url?{...l,state:`open`}:l,s)?d({ok:!0}):d({error:`This sign-in changed. Try again.`},409)}const zr=e=>`create-finished:${c(e)}`;async function Br(e,t){let n=await e.store.get(`delivery`,zr(t));return n&&`target`in n?n.target:void 0}async function Vr(e,t,n){let r=e.operatorApp??!1,i=r?`*`:e.session?.user.id??`anonymous`;if(!e.integrations[t])return{error:`Unknown integration "${t}"; run coder agent integrations list to see them`,status:404};if(!e.config.publicUrl)return{error:`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,status:400};if(r&&!e.integrations[t].app.shareable)return{error:`Create this app in your workspace from the agent's Platforms tab.`,status:400};let a=Un(n);if(!a)return{error:`Setup link is missing or malformed; start again from the agent's Platforms tab`,status:400};if(!a.definition.integrations[t])return{error:`This agent declares no ${t} integration in its agent.json`,status:400};if(a.state.public&&!r&&!e.integrations[t].publicApps)return{error:`${e.integrations[t].name} apps cannot be public here. Create a private one.`,status:400};let o=wn(t,a.state),s=a.state.tx?await Rn(e,a.state.tx,`create`,i)===o?a.state.tx:void 0:await Lt(e,`create`,i,o);return s?{state:{...a.state,tx:s},definition:a.definition}:{error:`This app creation link is invalid, expired, or already used`,status:403}}async function Hr(e,t,n,r){let i=r.searchParams.get(`tx`);if(t.operatorApp&&i&&(await Rn(t,i,`create`,`*`)||await Br(t,i)===n.id))return await bt(e,t.dashboardHosts)??St();let a=new URLSearchParams(r.searchParams);return a.set(`create`,n.id),h(`${Ln(t)}${_n(Xt(t),`/setup`)}?${a}`)}async function Ur(e,t,n){let r=await Vr(e,t,n);if(`error`in r)return d({error:r.error},r.status);let{app:i}=e.integrations[t],a=r.state.tx,o=i.createStep&&(e.operatorApp||r.state.public)?i.createStep(e.config.publicUrl,{saved:await Bt(e,t),name:r.definition.name,public:r.state.public}):void 0,s=e.config.publicUrl;if(i.createPost&&q.has(new URL(s).hostname))return d({error:`${e.integrations[t].name} cannot reach ${s}. Set a public address first.`},400);let c=e.operatorApp?void 0:pn(e,r.state.agent),u=i.createPost?.({publicUrl:s,spec:H(r.definition,r.state.agent,t),state:l({tx:a,...c?{back:c}:{}}),...r.state.owner?{owner:r.state.owner}:{},...r.state.public?{public:!0}:{}});return d({tx:a,...u?{post:u}:{},...o?{create:o}:{}})}async function Wr(e,t,n,r){return Ur(t,n.id,r.searchParams)}async function Gr(e,t,n){let r=await e.json().catch(()=>void 0);return Ur(t,n.integration,new URLSearchParams(r&&typeof r==`object`?r:{}))}async function Kr(e,t,n,r,a){let o=t.operatorApp??!1,s=o?`*`:t.session?.user.id??`anonymous`,c=t.integrations[n];if(!c)return R(t,`unknown-integration`,{platform:n},a);if(o&&!c.app.shareable)return d({error:`Create this app in your workspace from the agent's Platforms tab.`},400);let u=t.config.publicUrl;if(!u)return R(t,`no-public-url`,{},a);let f=r?await qt(t,r,n,s):void 0;if(!f)return R(t,`create-expired`,{platform:n},a);o&&await t.store.put(`delivery`,zr(r),{at:t.now?.()??Date.now(),target:n},{ttlMs:6e5});let p=o?`/create/${n}`:pn(t,f.state.agent),m=o?{tx:r}:{},g=o?void 0:(await bn(t)).find(e=>e.integration===n),_=await c.app.createCallback(e,{publicUrl:u,spec:H(f.definition,f.state.agent,n),fetch:t.fetch??fetch,tokens:an(t,n),...g?{shared:xn(t.config,g.credentials)}:{}}).catch(r=>r instanceof i&&r.code===`invalid-field`&&e.headers.get(`accept`)===`application/json`?d({error:r.message},400):r instanceof i?R(t,r.code,{platform:n,error:r.error,...m},p):(console.error(`coder server: creating the ${n} app failed`,r),R(t,`failed`,{platform:n,...m},p)));if(_ instanceof Response)return _;let v={id:`${n}:${_.platformAppId}`,integration:n,agent:f.state.agent,name:_.name,...f.state.repo?{agentsRepo:f.state.repo}:{},...f.state.repo?{branch:f.state.branch??`main`}:{},...o?{builtin:!0}:{},...`shared`in _?{shared:g.id,credentials:``}:{credentials:on(t.config,_.credentials)},createdAt:t.now?.()??Date.now()};if(await t.store.put(`app`,v.id,v),c.app.values&&await t.store.put(`delivery`,un(v.id),{version:0,manifest:c.app.values(v,{publicUrl:u,spec:H(f.definition,v.agent,n)}).lines,changed:!1}),o)return await Ft(t,`Created the shared app`,`${_.name} on ${c.name}`),R(t,`created`,{platform:n,app:_.name,...m},p);let y=await Lt(t,`install`,s,v.id);return h(`${u}/install/${n}?app=${encodeURIComponent(v.id)}&state=${l({tx:y,back:p})}`)}async function qr(e,t,n,r){let i=g(r.searchParams.get(`state`));return Kr(e,t,n.id,i?.tx,At(i?.back))}async function Jr(e,t,n,r){let i=new URLSearchParams(await e.clone().text()).get(`tx`),a=await Kr(e,t,n.id,i,void 0),o=a.headers.get(`location`);return o&&e.headers.get(`accept`)===`application/json`?d({url:o}):a}async function Yr(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await ue(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=await mn(e,n,i,xn(e.config,a.credentials));if(i.repos?.includes(t)||(await n.repos.list(Wn(e,i),r)).includes(t))return{contents:n,token:r,app:a,installation:i}}catch(e){console.error(`coder server: repository access for ${i.id} failed`,e)}}}async function Xr(e,t,n){let r=await Yr(e,t);if(!r)return d({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,Ke,r.token,n).catch(()=>[]),o=await Promise.all(i.map(async i=>{let o=await r.contents.repos.readFile(t,`${Ke}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(o===void 0)return;let s={};try{let e=JSON.parse(o);e&&typeof e==`object`&&(s=e)}catch{}let c=Object.entries(s.mcp&&typeof s.mcp==`object`&&!Array.isArray(s.mcp)?s.mcp:{}).flatMap(([e,t])=>a(e,t)),l=await lr(e.store,i),u=l?.source===`repo`&&l.repo===t,d=u?await cr(e.store,i):void 0;return{id:i,name:typeof s.name==`string`?s.name:i,...c.length?{warnings:c}:{},...typeof s.description==`string`?{description:s.description}:{},...u?{version:l.currentVersion,...d?.source?{commit:d.source.commit}:{}}:{},...l&&!u?{taken:!0}:{}}}));return d({repo:t,agents:o.filter(Boolean)})}async function Zr(e,t,n,r){let i=r.searchParams.get(`repo`);return i?Xr(t,i,r.searchParams.get(`ref`)||`HEAD`):d({error:`repo is required`},400)}async function Qr(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return d({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await Yr(t,i.repo);if(!e)return d({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await lr(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return d({error:`Agent id "${e}" is already taken`},409)}let o=await fn(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await ze(t,o),d({imported:o.map(e=>e.agent)})}catch(e){return d({error:e instanceof Error?e.message:String(e)},400)}}async function $r(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1,s=t.routeTask??await t.store.get(`task`,i);if(!s&&t.taskPrincipal)return d({error:`No task "${i}"`},404);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!V(n,i,!1))return d({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return ui(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=V(n,i);if(t)return{status:t,lines:Vn(n,i,e,ri),pendingResult:ni(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o);return ui(e,t,i,Number.isFinite(c)?c:o,{ctx:t,id:i},ti(t))}const ei=3e4;function ti(e){let t=e.now??Date.now,n={at:t(),seen:!0};return async r=>{let{task:i}=r,a=await K(e);return L(a&&{...a,spaces:[]},i)?!0:i.audience?.startsWith(`space:`)?((n.audience!==i.audience||t()-n.at>=ei)&&(n={at:t(),audience:i.audience,seen:L(await K(e,[i.audience]),i)}),n.seen):!1}}function ni(e,t,i=!1){if(!vn.has(t.status)||t.error||t.status===`cancelled`)return!1;let a=n(e,t.task.id),o=Date.parse(a?.resumedAt??a?.createdAt??``)||0;return i||(vr.statSync(_r.join(r(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<o}const ri=500,$=3e4;function ii(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new si,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-29e4),a):a,p=u>0&&(!d||u<f)?`event: reset
2
+ data: {}
3
+
4
+ `:``,m=new TextEncoder,h=()=>{},g=new ReadableStream({start(n){n.enqueue(m.encode(`id: ${f}${s}\n\n${p}`)),h=o.watch(t,i,f,e=>n.enqueue(m.encode(e)),()=>n.close());let r=()=>{h();try{n.close()}catch{}};e.signal.aborted?r():e.signal.addEventListener(`abort`,r)},cancel(){h()}});return new Response(g,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}function ai(e,t){let{task:n,approval:r,archivedAt:i,createdAt:a,startedAt:o,finishedAt:s}=e;return{id:n.id,agent:n.agent,status:e.status,approval:r??null,approvals:e.approvals??n.context?.approvals??null,archivedAt:e.autoArchived&&!t?void 0:i,createdAt:a,startedAt:o,finishedAt:s,...Ee(e),...t?{result:e.result??null,error:e.error??null,answer:e.answer??null}:{}}}const oi=(e,t)=>`${e}:${t??``}`;var si=class{options;watches=new Set;counts=new Map;views=new Map;runners=new Map;reading=!1;closed=!1;scans=new Map;left=new Map;archived=new Map;reads=0;generation=Sr().slice(0,8);constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a={ctx:e,ids:new Set(t),from:n,tag:this.tag(e),send:r,close:i};return this.watches.add(a),this.poll(),()=>this.watches.delete(a)}tag(e){return`-${br(`sha256`).update(e.organizationId).digest(`hex`).slice(0,8)}${e.queue instanceof D?`.${this.generation}`:``}`}runnersChanged(e){this.runners.delete(e)}close(){this.closed=!0;for(let e of[...this.watches])this.end(e)}end(e){this.watches.delete(e);try{e.close()}catch{}}poll(){if(this.reading||!this.watches.size)return;this.reading=!0;let e=[...this.watches];this.read(e,Date.now()).catch(e=>console.error(`coder server: task events failed`,e)).finally(()=>{for(let t of e)this.end(t);this.reading=!1,this.poll()})}async read(e,t){for(let[e,{at:n}]of this.counts)t-n>=$&&this.counts.delete(e);for(let[e,{at:n}]of this.views)t-n>=ei&&this.views.delete(e);for(let[e,{at:n}]of this.runners)t-n>=15e3&&this.runners.delete(e);let n=new Map;for(let t of e){let e=n.get(t.ctx.organizationId)??{ctx:t.ctx,ids:new Set};for(let n of t.ids)e.ids.add(n);n.set(t.ctx.organizationId,e)}this.reads++;let r=await this.changes(n,Math.min(...e.map(e=>e.from))-$,t).catch(e=>{console.error(`coder server: task events failed`,e)});if(!r)return;let i=new Map;try{for(let[a,{ctx:o}]of n){let n=JSON.stringify([[...r.rows.get(a)??[]].map(([e,t])=>[e,t.status,t.archivedAt]).sort(),[...r.deleted.get(a)?.keys()??[]].sort()]),s=e.filter(e=>e.ctx.organizationId===a);for(let e of new Set(s.map(e=>e.ctx.taskPrincipal?.task))){let s=oi(a,e),c=this.counts.get(s),l=c?.fingerprint!==n,u=o.local?[...r.rows.get(a)?.values()??[]].filter(t=>!t.archivedAt&&[`queued`,`running`,`waiting`].includes(t.status)&&(!e||t.task.parent===e)).map(e=>({...hn(e.task),requestedBy:e.task.requestedBy,active:1})):l?e?[{audience:``,active:(await o.queue.counts(a,{archived:!1,statuses:[`queued`,`running`,`waiting`],parent:e})).active}]:await o.queue.activeCounts(a):c.groups;i.set(s,u),this.counts.set(s,{groups:u,fingerprint:n,at:l?t:c.at})}}}catch(e){console.error(`coder server: task counts failed`,e);return}let a=new Map(await Promise.all(e.map(async e=>{let{organizationId:n,session:a,taskPrincipal:o}=e.ctx,s=`${n}:${a?.user.id??``}:${o?.task??``}`,c=[...r.rows.get(n)?.values()??[]],l=new Set([...c.map(e=>e.task.audience),...[...r.deleted.get(n)?.values()??[]].map(e=>e.audience),...(i.get(oi(n,o?.task))??[]).map(e=>e.audience)].filter(e=>!!e?.startsWith(`space:`))),u=this.views.get(s);if(!u||[...l].some(e=>!u.audiences.has(e))||c.some(e=>e.updatedAt>u.at&&l.has(e.task.audience))){let n=K(e.ctx,[...l]),r={at:t,audiences:l,view:n};this.views.set(s,r),n.catch(()=>this.views.get(s)===r&&this.views.delete(s))}return[e,await this.views.get(s).view]})));await Promise.all([...n].filter(([e])=>!this.runners.has(e)).map(async([e,{ctx:n}])=>{this.runners.set(e,{at:t,records:[]});let r=this.runners.get(e);try{let t=await n.store.list(`runner`);this.runners.get(e)===r&&(r.records=t)}catch(t){this.runners.get(e)===r&&this.runners.delete(e),console.error(`coder server: runner events failed`,t)}}));for(let n of e){if(!this.watches.has(n))continue;let e=[];try{let o=a.get(n);e=this.news(n,r,t,o);let s=i.get(oi(n.ctx.organizationId,n.ctx.taskPrincipal?.task))?.filter(e=>L(o,e)).reduce((e,t)=>e+t.active,0);s!==void 0&&e.push(`id: ${t}${n.tag}\nevent: counts\ndata: ${JSON.stringify({active:s})}\n\n`);let c=this.runners.get(n.ctx.organizationId);c&&e.push(`id: ${t}${n.tag}\nevent: runners\ndata: ${JSON.stringify({items:he(n.ctx,c.records,t)})}\n\n`)}catch{}e.length||e.push(`id: ${t}${n.tag}\n\n`);try{n.send(e.join(``))}catch{}}}async changes(e,t,r){let i=await[...e.values()][0].ctx.queue.changes([...e].map(([e,t])=>({organizationId:e,ids:[...t.ids],fresh:[...t.ids]})),t),a=new Map;for(let{organizationId:e,status:t}of i.rows){let n=a.get(e)??new Map;a.set(e,n.set(t.task.id,t))}let o=new Map;for(let{organizationId:e,id:t,...n}of i.deleted){let r=o.get(e)??new Map;o.set(e,r.set(t,n))}for(let[t,{ctx:i}]of e){if(!i.local)continue;let e=[...a.get(t)?.values()??[]],o=this.scans.get(i.local.cwd);if(!o||r-o.at>=(this.options.localScanMs??4e3)||e.some(e=>e.updatedAt>o.at)){let e=!o||r-o.archivedAt>=(this.options.archiveScanMs??15e3);await zn(i,i.local.cwd);let t=e?U(i.local.cwd,!0):o.archived,a=U(i.local.cwd,!1),s=new Set(a.map(e=>e.task.id)),c=[...a,...t.filter(e=>!s.has(e.task.id))],l=new Set(c.map(e=>e.task.id)),u=this.left.get(i.local.cwd)??new Map;for(let e of o?.rows??[])l.has(e.task.id)||u.set(e.task.id,o.at);for(let[e,t]of u)(t<r-6e5||l.has(e))&&u.delete(e);let d=this.archived.get(i.local.cwd)??new Set;for(let e of d)l.has(e)?d.delete(e):n(i.local.cwd,e)||(u.set(e,o?.at??r),d.delete(e));this.left.set(i.local.cwd,u),this.scans.set(i.local.cwd,o={at:r,rows:c,archived:t,archivedAt:e?r:o.archivedAt})}a.set(t,new Map(nt(i.local.cwd,o.rows,e).map(e=>[e.task.id,e])))}return{rows:a,deleted:o}}news(e,{rows:t,deleted:n},r,i){let{ctx:a}=e,o=a.taskPrincipal?.task,s=t.get(a.organizationId)??new Map;if(o)for(let t of e.ids)s.get(t)?.task.parent!==o&&e.ids.delete(t);let c=[],l=new Map,u=(t,n)=>{let i=JSON.stringify(n);l.get(t)!==i&&(l.set(t,i),c.push(`id: ${r}${e.tag}\nevent: task\ndata: ${i}\n\n`))},d=e=>({id:e,deleted:!0}),f=t=>{let n=a.local&&!o&&V(a.local.cwd,t,e.ids.has(t));if(u(t,n?ai(n,e.ids.has(t)):d(t)),n&&a.local){let e=this.archived.get(a.local.cwd)??new Set;this.archived.set(a.local.cwd,e.add(t))}};for(let[t,n]of s){if(o&&n.task.parent!==o||!L(i,n.task))continue;let s=e.ids.has(t),c=ai(s&&a.local&&n.local&&vn.has(n.status)?V(a.local.cwd,t)??n:n,s);if(a.local&&n.local&&r-(n.finishedAt??0)<$&&ni(a.local.cwd,n)){l.set(t,``);continue}(s||n.updatedAt>e.from-$)&&u(t,c)}for(let t of e.ids)s.has(t)||f(t);for(let[t,{at:r,...s}]of n.get(a.organizationId)??[])r>e.from-$&&L(i,s)&&(!o||s.parent===o)&&u(t,d(t));if(a.local)for(let[t,n]of this.left.get(a.local.cwd)??[])n>e.from-$&&!s.has(t)&&l.get(t)!==JSON.stringify(d(t))&&f(t);return c}};const ci=1e4;var li=class{options;feeds=new Map;closed=!1;reads=0;constructor(e={}){this.options=e}watch(e,t,n,r,i,a){if(this.closed)return queueMicrotask(i),()=>{};let o=this.feeds.get(e),s=o?.reading!==void 0&&Date.now()-o.reading>=(this.options.stallMs??ci);if(!o||s){let t={key:e,source:n,watches:new Set};if(o){for(let e of o.watches)t.watches.add(Object.assign(e,{feed:t}));o.watches.clear()}this.feeds.set(e,o=t)}let c={cursor:t,feed:o,send:r,close:i,sees:a};return o.watches.add(c),o.reading===void 0&&this.read(o),()=>this.drop(c)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;!t.watches.delete(e)||t.watches.size||this.feeds.get(t.key)===t&&this.feeds.delete(t.key)}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){let t=[...e.watches],n=Math.min(...t.map(e=>e.cursor));e.reading=Date.now(),this.reads++;let r=e=>(console.error(`coder server: task log read failed`,e),null),{source:i}=e,a;if(typeof i==`function`)a=await i(n).catch(r);else{let{ctx:e,id:t}=i,o=()=>e.queue.logTails([{organizationId:e.organizationId,id:t,after:n}],500);a=await(e.statementTimeout?e.statementTimeout(ci,o):o()).then(([e])=>e).catch(r)}await this.settle(e,t,a)}async settle(e,t,n){let r=n?await Promise.all(t.map(async e=>await e.sees?.(n.status).catch(()=>!1)===!1)):[];if(e.reading=void 0,this.feeds.get(e.key)!==e)return;t.forEach((e,t)=>r[t]&&this.end(e));let i=t.filter(t=>e.watches.has(t)),a=i.length<e.watches.size;if(n){let{status:e,lines:t,pendingLogs:r,pendingResult:o}=n,s=t.length===500,c=vn.has(e.status)&&!s&&!r&&!o,l=t.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]);s&&(a=!0);let u=e.status===`waiting`?e.approval:void 0;for(let e of i){let n=l.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);!s&&!c&&(n+=`event: caught-up
5
+ data: {}
6
+
7
+ `),!s&&u?.id&&(n+=`event: approval\ndata: ${JSON.stringify(u)}\n\n`),e.cursor=Math.max(e.cursor,t.at(-1)?.seq??-1),c?this.end(e,`${n}event: end\ndata: {}\n\n`):s?this.send(e,n):this.end(e,n)}}else for(let e of i)this.end(e);a&&this.feeds.get(e.key)===e&&this.read(e)}};function ui(e,t,n,r,i,a){let o=t.logWatcher??new li,s=new TextEncoder,c=()=>{},l=new ReadableStream({start(l){c=o.watch(`${t.organizationId}:${n}`,r,i,e=>l.enqueue(s.encode(e)),()=>l.close(),a);let u=()=>{c();try{l.close()}catch{}};e.signal.aborted?u():e.signal.addEventListener(`abort`,u)},cancel(){c()}});return new Response(l,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}const di={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},fi=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function pi(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=fi([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function mi(e){let t=e.remotes?.find(e=>e.type===`streamable-http`);if(t)return{type:`http`,url:t.url,env:[],headers:fi(t.headers)};let n=e.packages?.find(e=>di[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=di[n.registryType],a=[],o=pi(n.runtimeArguments,`runtime`,a),s=pi(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:fi(n.environmentVariables),headers:[]}}function hi(e,t){let[n=``,r]=e.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),[i=``,a]=t.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),o=n.localeCompare(i,`en`,{numeric:!0});if(o)return o;if(r===void 0||a===void 0)return Number(r===void 0)-Number(a===void 0);let s=r.split(`.`),c=a.split(`.`);for(let e=0;e<Math.max(s.length,c.length);e++){let t=s[e],n=c[e];if(t===void 0||n===void 0)return Number(t!==void 0)-Number(n!==void 0);let r=/^\d+$/.test(t),i=/^\d+$/.test(n),a=r===i?t.localeCompare(n,`en`,{numeric:r}):Number(i)-Number(r);if(a)return a}return 0}function gi(e,t,n){for(let{server:r,_meta:i}of n){let n=i?.[`io.modelcontextprotocol.registry/official`]?.isLatest===!0,a=r.version??``,o=t.get(r.name);if(o&&(o.latest===n?hi(o.version,a)>=0:o.latest))continue;let s=mi(r),c=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+\//i.test(r.name)&&!/^io\.github(?:\.|\/)/i.test(r.name),l=r.name.split(`/`).pop()??r.name,u=c&&/^(mcp|mcp-server|server)$/i.test(l)?r.name.split(`/`)[0].split(`.`).pop():l;t.set(r.name,{version:a,latest:n,found:s?{name:r.name,title:r._meta?.[`io.modelcontextprotocol.registry/publisher-provided`]?.github?.displayName??r.title??u,description:r.description??``,...c?{verified:!0}:{},...e.curated?{curated:!0}:{},...s}:void 0})}}var _i=class{sources=[{url:`https://api.mcp.github.com/v0.1/servers`,curated:!0,rows:new Map,ready:!1,failed:!1},{url:`https://registry.modelcontextprotocol.io/v0.1/servers`,curated:!1,rows:new Map,ready:!1,failed:!1}];refreshAt=0;timer;controller;closed=!1;inFlight;async response(e,t){(e.now??Date.now)()>=this.refreshAt&&this.refresh(e);let n=t.trim().toLowerCase(),r=n?await Promise.all(this.sources.map(async t=>{let r=new Map;if(!t.ready)try{let i=new URLSearchParams({search:n,limit:`100`}),a=await(e.fetch??fetch)(`${t.url}?${i}`,{headers:{accept:`application/json`},signal:AbortSignal.any([this.controller.signal,AbortSignal.timeout(2e4)])});if(!a.ok)throw Error(`Registry unavailable`);let{servers:o}=await a.json();gi(t,r,o)}catch{}return r})):[],i=this.sources.map((e,t)=>{let n=r[t];if(!n?.size)return e.rows;let i=new Map(e.rows);for(let[e,t]of n)i.has(e)||i.set(e,t);return i});if(!this.inFlight&&this.sources.some(e=>e.failed)&&!i.some(e=>[...e.values()].some(e=>e.found)))return d({error:`The MCP registry did not answer. Try again.`},502);let a=new Set,o=this.sources.flatMap((e,t)=>[...i[t]].flatMap(([t,{found:r}],i)=>{if(a.has(t)||(a.add(t),!r))return[];let o=r.verified?r.name.split(`/`)[0].split(`.`).pop().toLowerCase():void 0,s=[r.name.split(`/`).pop(),r.title,...o?[o]:[]].map(e=>e.toLowerCase()),c=!n||s.includes(n)?0:s.some(e=>e.startsWith(n))?1:s.some(e=>e.includes(n))?2:r.description.toLowerCase().includes(n)?3:4;if(c===4)return[];let l=!n||c===3?2:o===n?0:r.verified?1:2;return[{found:r,curated:e.curated,order:i,vendor:l,quality:c}]})),s=e=>Number(e===3);return o.sort((e,t)=>s(e.quality)-s(t.quality)||Number(t.curated)-Number(e.curated)||(e.curated?e.order-t.order:e.vendor-t.vendor||e.quality-t.quality||e.found.name.localeCompare(t.found.name))),d(o.slice(0,30).map(({found:e})=>e),200,this.sources.every(e=>e.ready)?{}:{partial:`true`})}refresh(e){if(this.inFlight||this.closed)return;this.timer&&clearTimeout(this.timer);let t=this.controller=new AbortController;this.inFlight=Promise.all(this.sources.map(n=>this.fill(e,n,t.signal))).then(()=>{}).finally(()=>{this.inFlight=void 0,this.refreshAt=(e.now??Date.now)()+36e5,this.closed||(this.timer=setTimeout(()=>this.refresh(e),36e5),this.timer.unref())}),e.waitUntil?.(this.inFlight)}async fill(e,t,n){let r=new Map,i=new Set,a;try{do{let o=new URLSearchParams({limit:`100`});a&&o.set(`cursor`,a);let s=await(e.fetch??fetch)(`${t.url}?${o}`,{headers:{accept:`application/json`},signal:AbortSignal.any([n,AbortSignal.timeout(2e4)])});if(!s.ok)throw Error(`Registry unavailable`);let{servers:c,metadata:l}=await s.json();if(gi(t,r,c),t.ready||(t.rows=new Map(r)),a=l?.nextCursor,a&&i.has(a))throw Error(`Registry cursor repeated`);a&&i.add(a)}while(a);t.rows=r,t.ready=!0,t.failed=!1}catch{t.failed=!0}}close(){this.closed=!0,this.timer&&clearTimeout(this.timer),this.controller?.abort()}};async function vi(e,t,n){let r=t.settings??={};return await(r.registry??=new _i).response(t,n.searchParams.get(`q`)??``)}const yi=[W(`GET`,`/runner/:file`,x),W(`GET`,Kn,Nt),W(`GET`,dr,fr,{guard:F}),W(`GET`,pr,mr,{guard:F}),W(`GET`,hr,gr,{guard:F}),W(`GET`,`/health`,(e,t)=>Tr(t)),W(`GET`,new URL(o).pathname,Vt),W(`GET`,`/`,Nn,{guard:ve}),W(`GET`,`/login`,Et,{guard:wt}),...z(`/login`,Oe,wt).filter(e=>e.method!==`GET`),W(`POST`,`/dash/token`,Me,{guard:Le}),...z(`/dash/:org/operator`,j,ht),...z(`/dash`,j,cn)],bi=[W(`GET`,`/api/auth/capabilities`,(e,t)=>d({wular:t.auth?.issuer??null})),...z(`/api/auth`,(e,t)=>t.auth.handler(e),fe),W(`GET`,`/me`,en,{guard:tt})],xi=[...w(`/tasks`,[W(`GET`,`/:id/messages`,Mt,{guard:M}),W(`POST`,`/:id/ack`,Cn,{guard:M}),W(`POST`,`/:id/heartbeat`,In,{guard:M}),W(`POST`,`/:id/logs`,Bn,{guard:O}),W(`POST`,`/:id/result`,zt,{guard:I}),W(`POST`,`/:id/credential`,Dn,{guard:I}),W(`POST`,`/:id/connection`,Ut,{guard:G}),W(`POST`,`/:id/reply`,Gn,{guard:G}),W(`POST`,`/:id/react`,gn,{guard:G}),W(`GET`,`/:id/history`,Hn,{guard:G}),W(`GET`,`/:id/history/:conversation`,Sn,{guard:G}),W(`POST`,`/:id/history`,Fn,{guard:I}),W(`GET`,`/:id`,sn,{guard:We})]),...w(`/logins`,[W(`GET`,`/:id/input`,Ir,{guard:J}),W(`GET`,`/:id`,Lr,{guard:J}),W(`POST`,`/:id`,Rr,{guard:J})]),...w(`/runners`,[W(`POST`,`/register`,ct)])],Si=[...w(`/create`,[W(`GET`,`/:id`,Hr,{guard:B}),W(`POST`,`/:id`,Wr,{guard:B}),W(`GET`,`/:id/callback`,qr,{guard:B}),W(`POST`,`/:id/callback`,Jr,{guard:B})]),...w(`/install`,[W(`GET`,`/:id`,Re,{guard:A}),W(`POST`,`/:id`,Re,{guard:A}),W(`GET`,`/:id/callback`,ln,{guard:A}),W(`POST`,`/:id/callback`,ln,{guard:A})])],Ci=w(`/connect`,[W(`GET`,`/:integration`,Dt,{guard:xe}),W(`GET`,`/:integration/callback`,On,{guard:xe})]),wi=[...w(`/hooks`,[W(`POST`,`/*`,(e,t,n)=>le(e,t,n[`*`]),{guard:(e,t,n)=>t.integrations[n[`*`]]?t:p()})]),...Si,...Ci],Ti=[W(`GET`,`/metrics`,async(e,t)=>d(await Dr(t),200,{"cache-control":`no-store`}),{guard:Yn}),W(`GET`,`/usage`,rn,{approvalPolicy:`allow`}),W(`GET`,`/usage/totals`,$t,{approvalPolicy:`allow`})],Ei=w(``,[W(`GET`,`/folders`,(e,t)=>d(_e(t.local.cwd))),W(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return d(He(n?.path))}),W(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return d(await Je(n?.url))}),W(`POST`,`/folders/pick`,async(e,t)=>d(await Te()))],Ne),Di=w(``,[W(`GET`,`/engines/status`,async(e,t)=>d(await Wt(t))),W(`POST`,`/engines/:engine/login`,Qe),W(`POST`,`/engines/:engine/logout`,ee)],Be),Oi=[W(`POST`,`/apps/:id/install`,(e,t,n,r)=>Ht(e,t,n.id,r.searchParams.get(`back`))),W(`POST`,`/apps/create/:integration`,Gr),W(`GET`,`/apps`,yn),W(`DELETE`,`/apps/:id`,kt),W(`GET`,`/apps/:id/drift`,Qt),W(`POST`,`/apps/:id/update`,ir),W(`GET`,`/installations`,nn),W(`DELETE`,`/installations/:id`,Jn,{guard:(e,t)=>jn(t,`Only an owner or admin can uninstall an app.`)}),W(`GET`,`/connections`,mt,{guard:P,approvalPolicy:`allow`}),W(`POST`,`/connections`,sr,{guard:P}),W(`PATCH`,`/connections/:id`,dt,{guard:P}),W(`DELETE`,`/connections/:id`,re,{guard:P}),W(`POST`,`/connections/:id/authorize`,Ie,{guard:P}),W(`GET`,`/integrations`,(e,t,n,r)=>An(t,r)),W(`GET`,`/repositories`,(e,t)=>Yt(t)),W(`POST`,`/repositories/refresh`,(e,t)=>Yt(t,!0))],ki=[W(`GET`,`/agents/import`,Zr),W(`POST`,`/agents/import`,Qr),W(`GET`,`/agents`,je,{approvalPolicy:`allow`}),W(`PATCH`,`/agents/:slug/settings`,ye,{guard:at,approvalPolicy:`ask`,change:`agent-settings`}),W(`GET`,`/agents/:slug/versions`,Mn),W(`GET`,`/agents/:slug/versions/:version`,xt,{approvalPolicy:`allow`}),W(`GET`,`/agents/:slug`,De,{approvalPolicy:`allow`}),W(`DELETE`,`/agents/:slug`,ut,{guard:(e,t)=>jn(t,`Only an owner or admin can delete an agent.`)}),W(`PUT`,`/agents/:slug`,gt,{approvalPolicy:`ask`,change:`agent-version`})],Ai=[W(`GET`,`/credentials`,Ct,{approvalPolicy:`allow`}),W(`POST`,`/credentials`,be,{guard:te}),W(`DELETE`,`/credentials/:name`,ke),W(`POST`,`/logins`,Or,{guard:N}),W(`GET`,`/logins/:id`,kr,{guard:N}),W(`POST`,`/logins/:id`,Ar,{guard:N}),W(`DELETE`,`/logins/:id`,jr,{guard:N})],ji=[W(`GET`,`/runners`,se,{approvalPolicy:`allow`}),W(`POST`,`/runners`,tr),W(`POST`,`/runners/pair`,Qn),W(`POST`,`/runners/:id/test`,It),W(`PATCH`,`/runners/:id`,de,{approvalPolicy:`ask`,change:`runner-default`}),W(`DELETE`,`/runners/:id`,it)],Mi=[W(`GET`,`/composer`,Pt),W(`GET`,`/tasks`,$n,{approvalPolicy:`allow`}),W(`POST`,`/tasks`,tn,{guard:Kt,approvalPolicy:`allow`}),W(`GET`,`/tasks/:id`,ae,{guard:S(),approvalPolicy:`allow`}),W(`DELETE`,`/tasks/:id`,Xn,{guard:S()}),W(`GET`,`/tasks/:id/logs`,pe,{guard:S(),approvalPolicy:`allow`}),W(`GET`,`/tasks/:id/stream`,$r,{guard:S(),approvalPolicy:`allow`}),W(`POST`,`/tasks/:id/steer`,ot,{guard:S(!0),approvalPolicy:`allow`}),W(`POST`,`/tasks/:id/ask`,qn,{guard:S(!0),approvalPolicy:`allow`}),W(`POST`,`/tasks/:id/approve`,Zt,{guard:S(!0),approvalPolicy:`allow`}),W(`POST`,`/tasks/:id/requests/:approval`,Ve,{guard:S()}),W(`GET`,`/approvals/pending`,(e,t)=>qe(t),{guard:Yn}),W(`POST`,`/tasks/:id/cancel`,rr,{guard:S(),approvalPolicy:`allow`}),W(`POST`,`/tasks/:id/archive`,Ot,{guard:S(),approvalPolicy:`allow`}),W(`GET`,`/events`,ii,{approvalPolicy:`allow`})],Ni=[W(`GET`,`/config`,kn),W(`PATCH`,`/config`,Jt)],Pi=[W(`POST`,`/models/probe`,(e,t)=>ft(e,t)),W(`GET`,`/models`,k,{approvalPolicy:`allow`}),W(`POST`,`/models`,we),W(`DELETE`,`/models/:name`,Pe),W(`PATCH`,`/models/:name`,Se,{approvalPolicy:`ask`,change:`model-update`}),W(`POST`,`/models/:name/alias`,ge,{approvalPolicy:`ask`,change:`model-alias`}),W(`POST`,`/models/:name/disable`,$e,{approvalPolicy:`ask`,change:`model-disable`}),W(`POST`,`/models/:name/enable`,ar,{approvalPolicy:`ask`,change:`model-enable`})],Fi=[W(`GET`,`/mcp-registry`,(e,t,n,r)=>vi(e,t,r))],Ii=w(`/operator`,[W(`GET`,`/apps`,rt),W(`POST`,`/apps/:integration`,oe),W(`GET`,`/apps/:integration/drift`,Zn),W(`POST`,`/apps/:integration/update`,st),W(`GET`,`/audit`,er)],lt),Li=[W(`GET`,`/flows`,Ge),W(`GET`,`/pulls`,dn),W(`POST`,`/flows/:name/run`,T)],Ri=w(`/admin`,[...Ti,...Ei,...Di,...Oi,...ki,...Ai,...ji,...Mi,...Ni,...Pi,...Fi,...Li,...Ii]).map(e=>({...e,guard:ie(e.guard,e)})),zi=[W(`GET`,`/connections/oauth/callback`,(e,t,n,r)=>nr(e,t,r),{guard:ce}),...xi,...Ri,...bi,...wi,...yi];async function Bi(e,t,n){if(!Ce(e,t))return p();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await Ze(zi,e,t,r)??j(e,t))}async function Vi(e,t,n={}){t.limits??=new C((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new si,t.logWatcher??=new li,t.dashboardHosts??=new _t;let r=()=>Hi(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function Hi(e,t,n){let r=await m(e,v(new URL(e.url).pathname));if(r instanceof Response)return r;let i=Ae(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await Gt(i.req,i.ctx,r),s=u(o instanceof Response?o:await Bi(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,d=c[1]===`admin`&&c[2]===`tasks`;if(e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&!(o instanceof Response)){let e=o.scope instanceof Response?void 0:o.scope??i.ctx;e&&Ye(e,e.organizationId)}return e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&[`heartbeat`,`logs`].includes(c[3]))&&!(d&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||d||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&Tt(t,d&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?f(s,i.end):s}finally{a||i.end()}}async function Ui(t={}){let n=t.env??Y.env,r=y(n,t.host??`node`),i=t.runner??r.runner;if((t.host===`vercel`||n.VERCEL)&&(i===`local`||i===`local-docker`))throw new e(`invalid-option`,`The ${i} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(r.store===`memory`&&i!==`local`&&i!==`local-docker`)throw new e(`invalid-option`,`The ${i} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!r.publicUrl)throw new e(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let a=[];if(r.store===`memory`&&!t.local&&a.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!n.SERVER_ENCRYPTION_KEY&&!t.local&&a.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),r.store===`postgres`&&!r.encryptionKey)throw new e(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let o=s(r.integrations),c=r.store===`memory`&&!r.adminToken?xr(18).toString(`base64url`):void 0;r.store===`postgres`&&r.adminToken&&a.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let l={...r,...r.store===`postgres`?{adminToken:void 0}:{},...c?{adminToken:c}:{},...t.runner?{runner:t.runner}:{}},u=await me(l,{local:!!t.local});try{l.store===`memory`&&await ur(u.store(u.defaultOrganizationId),Date.now());let r=u.connection&&l.auth?await(await import(`./auth-CJOm9_Vh.js`)).createAuth(u.connection.db,l):void 0,i=t.cwd??Y.cwd(),s=u.store(u.defaultOrganizationId),d=et({kind:l.runner,workDir:l.workDir,config:l.runnerConfig,local:!(t.host===`vercel`||n.VERCEL),sandbox:{region:ne(l.databaseUrl),snapshots:pt(s)}});if(!d[l.runner])throw await u.close(),new e(`invalid-option`,`Runner ${l.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let f=new _t,p=new C,m=new _i,h=new Map,g=new Map,_=new si,v=new li,y=e=>{let n=h.get(e);if(n)return n;let a=u.store(e),s=new Map,c={registry:m},b={limits:p,...u.connection?{databaseHealth:async()=>{let{sql:e}=await import(`./drizzle-orm-CYU7WOQS.js`).then(e=>e.t);await u.connection.db.execute(e`select 1`)},statementTimeout:u.connection.statementTimeout}:{},config:l,settings:c,organizationId:e,integrations:o,runners:d,store:a,queue:u.queue,requestScopes:g,taskWatcher:_,logWatcher:v,dashboardHosts:f,dbProfile:u.connection?.profile,chatState:u.chatState,fileReads:s,repositoryLists:new Map,loadAgent:E(o,{...t.local?{cwd:i}:{},config:l,store:a,fileReads:s,settings:c}),...r?{auth:r}:{},scope:y,webhookTarget:(e,t)=>u.webhookTarget(e,t),appRecord:e=>u.appRecord(e),apps:e=>u.apps(e),installationOrganization:e=>u.installationOrganization(e),installations:e=>u.installations(e),serverOrganizationId:u.defaultOrganizationId,taskOrganization:(e,t)=>u.taskOrganization(e,t),...t.local?{local:t.local}:{}};return h.set(e,b),b};globalThis.__coder={handle:e=>Vi(e,y(u.defaultOrganizationId),{inProcess:!0})};let b=y(u.defaultOrganizationId);b.local&&Wt(b).catch(()=>{});let x;return t.local&&(await jt(b),x=setImmediate(()=>{Rt(b).catch(()=>void 0)})),{config:l,context:y,defaultContext:b,warnings:a,...c?{mintedToken:c}:{},sweep:u.sweep,close:async()=>{m.close(),_.close(),v.close(),x&&clearImmediate(x),await b.local?.usageSync?.catch(()=>void 0),await Tn(b),await u.close()}}}catch(e){throw await u.close(),e}}const Wi=36e5;function Gi(e){try{let t=new URL(e);return q.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function Ki(e=Y.env,t=e.VERCEL?`vercel`:`node`){b();let n,r,i=()=>n??=Ui({env:e,host:t}).catch(e=>{throw n=void 0,e}),a=e=>Promise.all([e.sweep(),yt(e.defaultContext,!1,!0),Ue(e.defaultContext)]).then(()=>void 0);return Object.assign(async(t,n)=>{let o=await i(),s=n?e=>n(e):e=>void e.catch(()=>{}),c=Date.now();(r===void 0||c-r>=Wi)&&(r=c,s(o.defaultContext.store.create(`delivery`,`maintenance:${o.config.publicUrl}`,{at:c},{ttlMs:Wi}).then(e=>e?a(o):void 0).catch(e=>console.error(`coder server: maintenance failed`,e))));let l=e=>({...o.context(e),waitUntil:s,scope:l});return Vi(t,l(o.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await i();await a(e)},close:async()=>{let e=n;n=void 0,r=void 0,await(await e)?.close()}})}function qi(e){let t=yr(`lsof`,[`-nP`,`-iTCP:${e}`,`-sTCP:LISTEN`,`-t`],{encoding:`utf8`}),n=Number(t.stdout?.split(`
8
+ `)[0]);if(n)return{pid:n,command:yr(`ps`,[`-o`,`command=`,`-p`,String(n)],{encoding:`utf8`}).stdout?.trim().slice(0,120)||`another process`}}function Ji(t){let n=qi(t),r=n&&/\bcoder (dash|server serve)\b/.test(n.command);return new e(`server`,n?r?`Coder is already running on port ${t} (pid ${n.pid}): http://localhost:${t}`:`Port ${t} is in use by ${n.command} (pid ${n.pid}).`:`Port ${t} is in use.`,{hint:n?`Stop it with \`kill ${n.pid}\`, or use another port: --port ${t+1}`:`Use another port: --port ${t+1}`})}async function Yi(n={}){b();let r=n.env??Y.env;if(n.runner&&!Fe.includes(n.runner))throw new e(`invalid-option`,`Invalid --runner value: use ${Fe.join(`, `)}`);if(n.port!==void 0&&(!Number.isInteger(n.port)||n.port<1||n.port>65535))throw new e(`invalid-option`,`Invalid port: use 1 through 65535.`);let i=r.PORT&&/^\d+$/.test(r.PORT)?Number(r.PORT):void 0,a=Gi(r.PUBLIC_URL),o=n.port??i??a??8787;if(!Number.isInteger(o)||o<1||o>65535)throw new e(`invalid-option`,`Invalid PORT: use 1 through 65535.`);let s=r.PUBLIC_URL?r:{...r,PUBLIC_URL:`http://localhost:${o}`},c=!!(r.DATABASE_URL||r.POSTGRES_URL);if(c&&n.memory)throw new e(`invalid-option`,`A memory server cannot use DATABASE_URL.`,{hint:`Unset DATABASE_URL, or drop --memory.`});let l=(n.host??r.HOST??(c?void 0:`127.0.0.1`))?.replace(/^\[(.*)\]$/,`$1`),u=!c&&!n.memory;if(u&&!q.has(l))throw new e(`invalid-option`,`A local server listens on loopback only.`,{hint:`Reach it through a tunnel or a proxy on this machine; set DATABASE_URL for a deployment, or use --memory for a test server.`});if(n.memory&&r.VERCEL)throw new e(`invalid-option`,`A memory server cannot run on Vercel.`,{hint:`Set DATABASE_URL for a real deployment.`});let d,f,p=u?new Promise((e,n)=>{f=n,d=()=>{t().then(e,n)}}):void 0,m=p?.then(()=>void 0).catch(()=>void 0),h=u?{cwd:n.cwd??Y.cwd(),port:o,cacheMaintenance:m}:void 0,g=await Ui({cwd:n.cwd,env:s,runner:n.runner,...h?{local:h}:{}}),v=g.defaultContext,y=()=>{g.sweep().catch(e=>console.error(`coder server: sweep failed`,e))};y();let x=setInterval(y,Wi);x.unref();let S=setInterval(()=>{yt(v,!1,!0).catch(e=>console.error(`coder server: scheduled kick failed`,e)),Ue(v).catch(e=>console.error(`coder server: inbox flush failed`,e))},6e4);S.unref();let C=Cr.createServer(_((e,t)=>Vi(e,v,{clientIp:t}),{admit:e=>c||Xe(e.socket.remoteAddress,e.url??`/`)})),w=g.config.publicUrl;a!==void 0&&a!==o&&g.warnings.push(`PUBLIC_URL points at port ${a} but the server listens on ${o}`),await new Promise((e,t)=>{C.once(`error`,t),C.listen(o,l,e)}).catch(async e=>{throw f?.(e),clearInterval(S),clearInterval(x),await g.close(),e.code===`EADDRINUSE`?Ji(o):e}),d?.();let ee=!1,te=async()=>{ee||(ee=!0,clearInterval(S),clearInterval(x),v.taskWatcher?.close(),v.logWatcher?.close(),await new Promise((e,t)=>C.close(n=>n?t(n):e())),await m,await g.close())},T=v.auth?`Wular Auth (${v.auth.issuer})`:void 0,E=`http://localhost:${o}`,D=vt(v),O=D===`local`?E:w,k=g.config.store===`memory`?g.mintedToken??r.ADMIN_TOKEN:void 0;return{address:E,publicUrl:w,warnings:g.warnings,close:te,runner:g.config.runner,store:g.config.store,mode:D,...p?{cacheMigration:p}:{},maxTasks:g.config.maxTasks??g.config.limits?.concurrentTasks??10,...T?{signIn:T}:{},...g.mintedToken?{mintedToken:g.mintedToken}:{},...g.config.store===`postgres`&&r.DATABASE_URL?{database:(await import(`./client-nBo9Mhsr.js`).then(e=>e.n)).describeDatabase(r.DATABASE_URL)}:{},...q.has(new URL(O).hostname)?{dashboard:`${O}/dash${k?`#token=${encodeURIComponent(k)}`:``}`}:{}}}async function Xi(t={}){try{return await Yi(t)}catch(t){if(t instanceof e)throw t;let n=t instanceof Error&&t.cause instanceof Error?`: ${t.cause.message}`:``;throw new e(`server`,`${t instanceof Error?t.message:String(t)}${n}`)}}export{Xi as serve,Ki as serverHandler};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{K as n,p as r}from"./state-CxAUec80.js";import{r as i}from"./crypto-Ittsv-m4.js";import{n as a,o}from"./remote-CY-qYX2C.js";import"./dispatch-BkoIU4GU.js";import{o as s,s as c,t as l}from"./http-DRk8cDjf.js";import{t as u}from"./local-GIxwz_Or.js";import d from"node:path";import f from"node:fs";import p from"node:os";import{createHmac as m,randomBytes as h}from"node:crypto";import g from"node:http";var _=e({runnerController:()=>T,serveRunner:()=>S});const v=()=>r(`runners.json`);function y(){try{return JSON.parse(f.readFileSync(v(),`utf8`))}catch{return{}}}function b(e){f.mkdirSync(d.dirname(v()),{recursive:!0}),f.writeFileSync(v(),JSON.stringify(e,null,2),{mode:384})}const x=e=>[`cloudflared tunnel --url http://localhost:${e}`,`ngrok http ${e}`,`tailscale funnel ${e}`,`VS Code: forward port ${e} in the Ports view and set its visibility to Public`];async function S(e={}){let r=e.port??4100,i=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!i)throw new t(`invalid-option`,e.token?`Expose this runner and set CODER_RUNNER_URL or --runner-url to its public HTTPS address.`:`Expose this runner with a tunnel, then pass its public URL with --url.`,{hint:x(r)});let d=e.token?o({...e,server:e.url??e.server,yes:!0}):o(e),f=y(),m=f[d]??{secret:h(32).toString(`base64url`)},_=new u(n()),v=T({secret:m.secret,server:d,runner:_}),S=g.createServer(c(async e=>{let t=await s(e,l(new URL(e.url).pathname));return t instanceof Response?t:v(t)}));await new Promise((e,t)=>{S.once(`error`,t),S.listen(r,`127.0.0.1`,e)});let C=()=>new Promise(e=>S.close(()=>e())),w=e.name??p.hostname(),E=[],D=async(e,n)=>{let r=E,a=await fetch(`${d}/runners/register`,{method:`POST`,redirect:`manual`,signal:AbortSignal.timeout(5e3),headers:{"content-type":`application/json`},body:JSON.stringify({...e?{token:e}:{id:m.id,organizationId:m.organizationId},name:w,url:i,secret:m.secret,...n?{offline:n}:{},...r.length?{removed:r}:{}})});if(!a.ok)throw new t(`server`,`Runner registration failed`,{status:a.status});let{deleted:o=[],...s}=await a.json();E=E.filter(e=>!r.includes(e));for(let e of o)await _.remove(e).then(()=>E.push(e),t=>console.error(`coder runner: folder of deleted task ${e} not removed`,t));return s},O;try{if(e.token){let t=await D(e.token);O=t,m.organizationId=t.organizationId}else{let n=m.id&&m.organizationId?await D().catch(e=>{if(!(e instanceof t&&e.status===401))throw e}):void 0;if(n)O=n;else{let t=a(e),n=await t.me();O=await t.runners.add({kind:`http`,name:w,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:i,secret:m.secret}}),m.organizationId=n.organization?.id,m.id=O.id,O=await D()}}m.id=O.id,b({...f,[d]:m})}catch(e){throw await C(),e}let k=Promise.resolve(),A=setInterval(()=>{k=k.then(()=>D().then(()=>{})).catch(()=>{})},6e4);return{...O,port:r,server:d,close:async()=>{clearInterval(A),await k,await D(void 0,!0).catch(()=>{}),await C()}}}const C=3e5,w=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function T(e){let t=e.now??Date.now,n=new Map,r=(r,a)=>{let o=r.headers.get(`x-coder-timestamp`)??``,s=r.headers.get(`x-coder-nonce`)??``,c=r.headers.get(`x-coder-signature`)??``,l=Number(o);if(!s||!Number.isFinite(l)||Math.abs(t()-l)>C)return!1;let u=m(`sha256`,e.secret).update(`${a}.${o}.${s}`).digest(`base64url`);if(!i(c,u))return!1;for(let[e,r]of n)r<t()&&n.delete(e);return!n.has(s)&&(n.set(s,l+C),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return w({error:`Unauthorized`},401);let[,i,a]=new URL(t.url).pathname.split(`/`).map(decodeURIComponent);try{if(t.method===`POST`&&i===`start`&&!a){let t=JSON.parse(n);if(typeof t.task!=`string`||!t.env)return w({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return w({error:`Invalid start`},400);let i={CODER_SERVER:e.server,CODER_TASK_TOKEN:r,CODER_INBOX_MODE:e.runner.push?`push`:`poll`,...t.env.CODER_LOGIN===`claude`||t.env.CODER_LOGIN===`codex`?{CODER_LOGIN:t.env.CODER_LOGIN}:{}};return w({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&i===`health`&&!a)return w({ok:!0});if(!a)return w({error:`Not found`},404);if(t.method===`POST`&&i===`messages`&&e.runner.push){let{entries:t}=JSON.parse(n);return!Array.isArray(t)||!t.length?w({error:`Invalid messages`},400):w(await e.runner.push(a,t))}return t.method===`GET`&&i===`status`?w(await e.runner.status(a)):t.method===`POST`&&i===`stop`?(await e.runner.stop(a),new Response(null,{status:204})):w({error:`Not found`},404)}catch(e){return w({error:e instanceof Error?e.message:String(e)},400)}}}export{_ as n,S as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{K as n,p as r}from"./state-CxAUec80.js";import{r as i}from"./crypto-Ittsv-m4.js";import{n as a,o}from"./remote-Cl-j8r3W.js";import"./dispatch-BkoIU4GU.js";import{o as s,s as c,t as l}from"./http-DRk8cDjf.js";import{t as u}from"./local-DFrTuJFN.js";import d from"node:path";import f from"node:fs";import p from"node:os";import{createHmac as m,randomBytes as h}from"node:crypto";import g from"node:http";var _=e({runnerController:()=>T,serveRunner:()=>S});const v=()=>r(`runners.json`);function y(){try{return JSON.parse(f.readFileSync(v(),`utf8`))}catch{return{}}}function b(e){f.mkdirSync(d.dirname(v()),{recursive:!0}),f.writeFileSync(v(),JSON.stringify(e,null,2),{mode:384})}const x=e=>[`cloudflared tunnel --url http://localhost:${e}`,`ngrok http ${e}`,`tailscale funnel ${e}`,`VS Code: forward port ${e} in the Ports view and set its visibility to Public`];async function S(e={}){let r=e.port??4100,i=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!i)throw new t(`invalid-option`,e.token?`Expose this runner and set CODER_RUNNER_URL or --runner-url to its public HTTPS address.`:`Expose this runner with a tunnel, then pass its public URL with --url.`,{hint:x(r)});let d=e.token?o({...e,server:e.url??e.server,yes:!0}):o(e),f=y(),m=f[d]??{secret:h(32).toString(`base64url`)},_=new u(n()),v=T({secret:m.secret,server:d,runner:_}),S=g.createServer(c(async e=>{let t=await s(e,l(new URL(e.url).pathname));return t instanceof Response?t:v(t)}));await new Promise((e,t)=>{S.once(`error`,t),S.listen(r,`127.0.0.1`,e)});let C=()=>new Promise(e=>S.close(()=>e())),w=e.name??p.hostname(),E=[],D=async(e,n)=>{let r=E,a=await fetch(`${d}/runners/register`,{method:`POST`,redirect:`manual`,signal:AbortSignal.timeout(5e3),headers:{"content-type":`application/json`},body:JSON.stringify({...e?{token:e}:{id:m.id,organizationId:m.organizationId},name:w,url:i,secret:m.secret,...n?{offline:n}:{},...r.length?{removed:r}:{}})});if(!a.ok)throw new t(`server`,`Runner registration failed`,{status:a.status});let{deleted:o=[],...s}=await a.json();E=E.filter(e=>!r.includes(e));for(let e of o)await _.remove(e).then(()=>E.push(e),t=>console.error(`coder runner: folder of deleted task ${e} not removed`,t));return s},O;try{if(e.token){let t=await D(e.token);O=t,m.organizationId=t.organizationId}else{let n=m.id&&m.organizationId?await D().catch(e=>{if(!(e instanceof t&&e.status===401))throw e}):void 0;if(n)O=n;else{let t=a(e),n=await t.me();O=await t.runners.add({kind:`http`,name:w,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:i,secret:m.secret}}),m.organizationId=n.organization?.id,m.id=O.id,O=await D()}}m.id=O.id,b({...f,[d]:m})}catch(e){throw await C(),e}let k=Promise.resolve(),A=setInterval(()=>{k=k.then(()=>D().then(()=>{})).catch(()=>{})},6e4);return{...O,port:r,server:d,close:async()=>{clearInterval(A),await k,await D(void 0,!0).catch(()=>{}),await C()}}}const C=3e5,w=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function T(e){let t=e.now??Date.now,n=new Map,r=(r,a)=>{let o=r.headers.get(`x-coder-timestamp`)??``,s=r.headers.get(`x-coder-nonce`)??``,c=r.headers.get(`x-coder-signature`)??``,l=Number(o);if(!s||!Number.isFinite(l)||Math.abs(t()-l)>C)return!1;let u=m(`sha256`,e.secret).update(`${a}.${o}.${s}`).digest(`base64url`);if(!i(c,u))return!1;for(let[e,r]of n)r<t()&&n.delete(e);return!n.has(s)&&(n.set(s,l+C),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return w({error:`Unauthorized`},401);let[,i,a]=new URL(t.url).pathname.split(`/`).map(decodeURIComponent);try{if(t.method===`POST`&&i===`start`&&!a){let t=JSON.parse(n);if(typeof t.task!=`string`||!t.env)return w({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return w({error:`Invalid start`},400);let i={CODER_SERVER:e.server,CODER_TASK_TOKEN:r,CODER_INBOX_MODE:e.runner.push?`push`:`poll`,...t.env.CODER_LOGIN===`claude`||t.env.CODER_LOGIN===`codex`?{CODER_LOGIN:t.env.CODER_LOGIN}:{}};return w({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&i===`health`&&!a)return w({ok:!0});if(!a)return w({error:`Not found`},404);if(t.method===`POST`&&i===`messages`&&e.runner.push){let{entries:t}=JSON.parse(n);return!Array.isArray(t)||!t.length?w({error:`Invalid messages`},400):w(await e.runner.push(a,t))}return t.method===`GET`&&i===`status`?w(await e.runner.status(a)):t.method===`POST`&&i===`stop`?(await e.runner.stop(a),new Response(null,{status:204})):w({error:`Not found`},404)}catch(e){return w({error:e instanceof Error?e.message:String(e)},400)}}}export{_ as n,S as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{p as n,yt as r}from"./state-CxAUec80.js";import{a as i,o as a}from"./http-615JJgHo.js";import o from"node:path";import s from"node:fs";import{createHash as c}from"node:crypto";var l=e({DEFAULT_SERVER:()=>m,isKnownServer:()=>_,rememberServer:()=>v,renewal:()=>S,resolveServer:()=>h,savedSession:()=>y,savedSessions:()=>d,sessionFile:()=>u,validateServer:()=>g,writeSessions:()=>b});function u(){return n(`session.json`)}function d(){try{let e=JSON.parse(s.readFileSync(u(),`utf8`));return Object.fromEntries(Object.entries(e).filter(e=>!!(e[1].token&&e[1].refreshToken&&e[1].user)))}catch{return{}}}function f(){try{return JSON.parse(s.readFileSync(u(),`utf8`))}catch{return{}}}const p=e=>e.replace(/\/+$/,``),m=`https://coder.wular.ai`,h=e=>p((e===!0?void 0:e)??process.env.CODER_SERVER??`https://coder.wular.ai`);function g(e){let t=h(e);return i()&&t===process.env.CODER_SERVER?t:a(t)}function _(e){let t=p(e),n=process.env.CODER_MCP_MODE===`cloud`&&process.env.CODER_SERVER;return t===`https://coder.wular.ai`||n&&t===p(n)||!!f()[t]}function v(e){let t=f(),n=p(e),r=t[n]??{};x({...t,[n]:{...r,confirmedAt:Date.now()}})}function y(e){return d()[p(e)]}function b(e){let t=f(),n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,{confirmedAt:t.confirmedAt??Date.now()}]));x(Object.fromEntries(Object.entries({...n,...e}).map(([e,n])=>[e,{...n,...t[e]?{confirmedAt:t[e].confirmedAt??Date.now()}:{}}])))}function x(e){let t=u();s.mkdirSync(o.dirname(t),{recursive:!0}),s.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,{mode:384}),s.chmodSync(t,384)}function S(e,t){let n=t,i;return{expiresAt:()=>n.expiresAt,async renew(){return i||=r(`${u()}.${c(`sha256`).update(e).digest(`hex`)}.lock`,()=>C(e,n)).finally(()=>{i=void 0}),n=await i,n.token}}}async function C(e,n){let r=e=>e&&e.refreshToken!==n.refreshToken?e:void 0,i=r(d()[e]);if(i&&i.expiresAt>n.expiresAt)return i;let{refreshSignIn:a}=await import(`./sign-in-Dr6sU7vz.js`).then(e=>e.n),o=await a(e,n),s=d();if(o){let t={...n,...o};return b({...s,[e]:t}),t}let c=r(s[e]);if(c)return c;throw delete s[e],b(s),new t(`login-failed`,`Signed out of ${e}.`,{hint:`Sign in again: coder auth login`})}export{y as a,g as c,S as i,b as l,_ as n,d as o,v as r,l as s,m as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{p as n,yt as r}from"./state-CxAUec80.js";import{a as i,o as a}from"./http-615JJgHo.js";import o from"node:path";import s from"node:fs";import{createHash as c}from"node:crypto";var l=e({DEFAULT_SERVER:()=>m,isKnownServer:()=>_,rememberServer:()=>v,renewal:()=>S,resolveServer:()=>h,savedSession:()=>y,savedSessions:()=>d,sessionFile:()=>u,validateServer:()=>g,writeSessions:()=>b});function u(){return n(`session.json`)}function d(){try{let e=JSON.parse(s.readFileSync(u(),`utf8`));return Object.fromEntries(Object.entries(e).filter(e=>!!(e[1].token&&e[1].refreshToken&&e[1].user)))}catch{return{}}}function f(){try{return JSON.parse(s.readFileSync(u(),`utf8`))}catch{return{}}}const p=e=>e.replace(/\/+$/,``),m=`https://coder.wular.ai`,h=e=>p((e===!0?void 0:e)??process.env.CODER_SERVER??`https://coder.wular.ai`);function g(e){let t=h(e);return i()&&t===process.env.CODER_SERVER?t:a(t)}function _(e){let t=p(e),n=process.env.CODER_MCP_MODE===`cloud`&&process.env.CODER_SERVER;return t===`https://coder.wular.ai`||n&&t===p(n)||!!f()[t]}function v(e){let t=f(),n=p(e),r=t[n]??{};x({...t,[n]:{...r,confirmedAt:Date.now()}})}function y(e){return d()[p(e)]}function b(e){let t=f(),n=Object.fromEntries(Object.entries(t).map(([e,t])=>[e,{confirmedAt:t.confirmedAt??Date.now()}]));x(Object.fromEntries(Object.entries({...n,...e}).map(([e,n])=>[e,{...n,...t[e]?{confirmedAt:t[e].confirmedAt??Date.now()}:{}}])))}function x(e){let t=u();s.mkdirSync(o.dirname(t),{recursive:!0}),s.writeFileSync(t,`${JSON.stringify(e,null,2)}\n`,{mode:384}),s.chmodSync(t,384)}function S(e,t){let n=t,i;return{expiresAt:()=>n.expiresAt,async renew(){return i||=r(`${u()}.${c(`sha256`).update(e).digest(`hex`)}.lock`,()=>C(e,n)).finally(()=>{i=void 0}),n=await i,n.token}}}async function C(e,n){let r=e=>e&&e.refreshToken!==n.refreshToken?e:void 0,i=r(d()[e]);if(i&&i.expiresAt>n.expiresAt)return i;let{refreshSignIn:a}=await import(`./sign-in-Dv-rdYD4.js`).then(e=>e.n),o=await a(e,n),s=d();if(o){let t={...n,...o};return b({...s,[e]:t}),t}let c=r(s[e]);if(c)return c;throw delete s[e],b(s),new t(`login-failed`,`Signed out of ${e}.`,{hint:`Sign in again: coder auth login`})}export{y as a,g as c,S as i,b as l,_ as n,d as o,v as r,l as s,m as t};
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{K as t,_ as n,ht as r,p as i}from"./drizzle-orm-CYU7WOQS.js";import{agentVersion as a,integrationApp as o,integrationAppInstallation as s,s as c,secret as l}from"./schema.js";import{yt as u}from"./apps-BORri-28.js";import{t as d}from"./client-nBo9Mhsr.js";var f=e({UNSCOPED_ORGANIZATION:()=>``,addSecret:()=>j,agentValue:()=>C,app:()=>h,date:()=>v,defined:()=>b,dropSecrets:()=>N,escapeLike:()=>y,fromJson:()=>D,install:()=>g,ms:()=>_,opaque:()=>k,rows:()=>R,sealedParts:()=>A,setSecret:()=>M,splitKey:()=>m,stateKey:()=>L,statePrefix:()=>I,taskRecord:()=>O,usageRecord:()=>F,versionColumns:()=>T,versionSummary:()=>E,versionValue:()=>w,withSecret:()=>P});const p=``;function m(e){let t=e.lastIndexOf(`:`),n=e.slice(t+1);return t>0&&/^\d+$/.test(n)?[e.slice(0,t),Number(n)]:void 0}const h=o,g=s,_=e=>e.getTime(),v=e=>new Date(e),y=e=>e.replace(/[\\%_]/g,`\\$&`),b=e=>Object.fromEntries(Object.entries(e).filter(([,e])=>e!=null)),x=e=>e?_(e):void 0,S=(e,t)=>{let n=/^repo:([^@]+)@(.+)$/.exec(e);return n&&t?{repo:n[1],ref:n[2],commit:t}:void 0},C=e=>b({id:e.slug,name:e.name,description:e.description,problems:e.problems,source:e.source,repo:e.repo,path:e.path,currentVersion:e.currentVersion,settings:e.engineSettings,createdAt:_(e.createdAt),updatedAt:_(e.updatedAt)}),w=(e,t)=>b({agent:t,version:e.version,definition:e.definition,systemPrompt:e.systemPrompt,files:e.files,commit:e.commit,source:S(e.importedFrom,e.commit),importedFrom:e.importedFrom,createdAt:_(e.createdAt)}),T={id:a.id,agentId:a.agentId,version:a.version,definition:a.definition,commit:a.commit,importedFrom:a.importedFrom,createdAt:a.createdAt},E=(e,t)=>{let{systemPrompt:n,files:r,...i}=w({...e,systemPrompt:``,files:null},t);return i};function D(e,n){let r=new c(d);return Object.fromEntries(Object.entries(t(e)).map(([e,t])=>{let i=n[r.getColumnCasing(t)];return[e,i==null?null:t.mapFromDriverValue(i)]}))}function O(e){return b({task:b({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,runner:e.runnerKind,access:e.access,event:e.event,name:e.name,cwd:e.cwd,prompt:e.prompt,args:e.args,mcp:e.mcp,appendSystem:e.appendSystem,addDirs:e.addDirs,connections:e.connections,author:e.author,definition:e.definition,models:e.models,requestedBy:e.requestedBy,audience:e.audience,space:e.space,parent:e.parent,runnerId:e.runnerId,usage:e.engineSettings,tools:e.tools,context:e.context,files:e.files,failureReply:e.failureReply,notice:e.notice,taskUrl:e.taskUrl,settingsUrl:e.settingsUrl}),status:e.status,attempts:e.attempts,generation:e.generation,inboxSeq:e.inboxSeq,inboxAck:e.inboxAck<0?void 0:{generation:e.generation,seq:e.inboxAck},result:e.result,error:e.error,fallbacks:e.fallbacks,tokens:e.tokens,handle:e.handle,tokenHash:e.tokenHash,lastSeenAt:x(e.lastSeenAt),logCursor:e.logCursor??void 0,logSeq:e.logSeq??void 0,logBytes:e.logBytes??void 0,logsComplete:e.logsComplete,typingEnded:e.typingEnded,archivedAt:x(e.archivedAt),approval:e.approval,answer:Array.isArray(e.answer)?e.answer:void 0,createdAt:_(e.createdAt),startedAt:x(e.startedAt),finishedAt:x(e.finishedAt),cancelRequestedAt:x(e.cancelRequestedAt),updatedAt:_(e.updatedAt)})}function k(e){return e.iv===`plain`?`plain.${e.ciphertext}`:`${e.iv}.${e.tag}.${e.ciphertext}`}function A(e){if(e.startsWith(`plain.`))return{iv:`plain`,tag:``,ciphertext:e.slice(6)};let[t,n,r]=e.split(`.`);if(!t||!n||!r)throw Error(`Invalid encrypted secret`);return{iv:t,tag:n,ciphertext:r}}async function j(e,t){let[n]=await e.insert(l).values({value:t}).returning({id:l.id});return n.id}async function M(e,t,n){await e.update(l).set({value:n}).where(i(l.id,t))}async function N(e,t){let i=t.filter(e=>typeof e==`number`);i.length&&await e.delete(l).where(r`${n(l.id,i)} and not exists (select 1 from ${o} where ${o.credentialsSecretId} = ${l.id})`)}const P=(e,t)=>r`${e} || jsonb_strip_nulls(jsonb_build_object('secret', ${t}))`;function F(e,t){if(!(e.runnerMs===null||!e.finishedAt))return b({installationId:t,taskId:e.publicId,agent:e.agent,target:u({event:e.event??void 0,source:e.source}),engine:e.engine,model:e.model,credential:e.credential??`unknown`,runnerElapsedMs:e.runnerMs,tokens:e.usageTokens,at:_(e.finishedAt)})}const I=(e,t)=>`o:${JSON.stringify([e,t])}:`,L=(e,t,n)=>I(e,t)+n;async function R(e,t){let n=await e.execute(t);return Array.isArray(n)?n:n.rows}export{E as C,T as S,P as T,m as _,v as a,O as b,y as c,_ as d,k as f,f as g,M as h,h as i,D as l,A as m,j as n,b as o,R as p,C as r,N as s,p as t,g as u,L as v,w,F as x,I as y};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{K as t,_ as n,ht as r,p as i}from"./drizzle-orm-CYU7WOQS.js";import{agentVersion as a,integrationApp as o,integrationAppInstallation as s,s as c,secret as l}from"./schema.js";import{vt as u}from"./apps-CCqOsEZH.js";import{t as d}from"./client-nBo9Mhsr.js";var f=e({UNSCOPED_ORGANIZATION:()=>``,addSecret:()=>j,agentValue:()=>C,app:()=>h,date:()=>v,defined:()=>b,dropSecrets:()=>N,escapeLike:()=>y,fromJson:()=>D,install:()=>g,ms:()=>_,opaque:()=>k,rows:()=>R,sealedParts:()=>A,setSecret:()=>M,splitKey:()=>m,stateKey:()=>L,statePrefix:()=>I,taskRecord:()=>O,usageRecord:()=>F,versionColumns:()=>T,versionSummary:()=>E,versionValue:()=>w,withSecret:()=>P});const p=``;function m(e){let t=e.lastIndexOf(`:`),n=e.slice(t+1);return t>0&&/^\d+$/.test(n)?[e.slice(0,t),Number(n)]:void 0}const h=o,g=s,_=e=>e.getTime(),v=e=>new Date(e),y=e=>e.replace(/[\\%_]/g,`\\$&`),b=e=>Object.fromEntries(Object.entries(e).filter(([,e])=>e!=null)),x=e=>e?_(e):void 0,S=(e,t)=>{let n=/^repo:([^@]+)@(.+)$/.exec(e);return n&&t?{repo:n[1],ref:n[2],commit:t}:void 0},C=e=>b({id:e.slug,name:e.name,description:e.description,problems:e.problems,source:e.source,repo:e.repo,path:e.path,currentVersion:e.currentVersion,settings:e.engineSettings,createdAt:_(e.createdAt),updatedAt:_(e.updatedAt)}),w=(e,t)=>b({agent:t,version:e.version,definition:e.definition,systemPrompt:e.systemPrompt,files:e.files,commit:e.commit,source:S(e.importedFrom,e.commit),importedFrom:e.importedFrom,createdAt:_(e.createdAt)}),T={id:a.id,agentId:a.agentId,version:a.version,definition:a.definition,commit:a.commit,importedFrom:a.importedFrom,createdAt:a.createdAt},E=(e,t)=>{let{systemPrompt:n,files:r,...i}=w({...e,systemPrompt:``,files:null},t);return i};function D(e,n){let r=new c(d);return Object.fromEntries(Object.entries(t(e)).map(([e,t])=>{let i=n[r.getColumnCasing(t)];return[e,i==null?null:t.mapFromDriverValue(i)]}))}function O(e){return b({task:b({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,runner:e.runnerKind,access:e.access,event:e.event,name:e.name,cwd:e.cwd,prompt:e.prompt,args:e.args,mcp:e.mcp,appendSystem:e.appendSystem,addDirs:e.addDirs,connections:e.connections,author:e.author,definition:e.definition,models:e.models,requestedBy:e.requestedBy,audience:e.audience,space:e.space,parent:e.parent,runnerId:e.runnerId,usage:e.engineSettings,tools:e.tools,context:e.context,files:e.files,failureReply:e.failureReply,notice:e.notice,taskUrl:e.taskUrl,settingsUrl:e.settingsUrl}),status:e.status,attempts:e.attempts,generation:e.generation,inboxSeq:e.inboxSeq,inboxAck:e.inboxAck<0?void 0:{generation:e.generation,seq:e.inboxAck},result:e.result,error:e.error,fallbacks:e.fallbacks,tokens:e.tokens,handle:e.handle,tokenHash:e.tokenHash,lastSeenAt:x(e.lastSeenAt),logCursor:e.logCursor??void 0,logSeq:e.logSeq??void 0,logBytes:e.logBytes??void 0,logsComplete:e.logsComplete,typingEnded:e.typingEnded,archivedAt:x(e.archivedAt),approval:e.approval,answer:Array.isArray(e.answer)?e.answer:void 0,createdAt:_(e.createdAt),startedAt:x(e.startedAt),finishedAt:x(e.finishedAt),cancelRequestedAt:x(e.cancelRequestedAt),updatedAt:_(e.updatedAt)})}function k(e){return e.iv===`plain`?`plain.${e.ciphertext}`:`${e.iv}.${e.tag}.${e.ciphertext}`}function A(e){if(e.startsWith(`plain.`))return{iv:`plain`,tag:``,ciphertext:e.slice(6)};let[t,n,r]=e.split(`.`);if(!t||!n||!r)throw Error(`Invalid encrypted secret`);return{iv:t,tag:n,ciphertext:r}}async function j(e,t){let[n]=await e.insert(l).values({value:t}).returning({id:l.id});return n.id}async function M(e,t,n){await e.update(l).set({value:n}).where(i(l.id,t))}async function N(e,t){let i=t.filter(e=>typeof e==`number`);i.length&&await e.delete(l).where(r`${n(l.id,i)} and not exists (select 1 from ${o} where ${o.credentialsSecretId} = ${l.id})`)}const P=(e,t)=>r`${e} || jsonb_strip_nulls(jsonb_build_object('secret', ${t}))`;function F(e,t){if(!(e.runnerMs===null||!e.finishedAt))return b({installationId:t,taskId:e.publicId,agent:e.agent,target:u({event:e.event??void 0,source:e.source}),engine:e.engine,model:e.model,credential:e.credential??`unknown`,runnerElapsedMs:e.runnerMs,tokens:e.usageTokens,at:_(e.finishedAt)})}const I=(e,t)=>`o:${JSON.stringify([e,t])}:`,L=(e,t,n)=>I(e,t)+n;async function R(e,t){let n=await e.execute(t);return Array.isArray(n)?n:n.rows}export{E as C,T as S,P as T,m as _,v as a,O as b,y as c,_ as d,k as f,f as g,M as h,h as i,D as l,A as m,j as n,b as o,R as p,C as r,N as s,p as t,g as u,L as v,w,F as x,I as y};
@@ -1,3 +1,3 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{i as n}from"./prompt-CpwbsEWM.js";import{o as r}from"./remote-CY-qYX2C.js";import{l as i,o as a}from"./session-D7eeJIaH.js";import{_t as o,a as s,c,f as l,h as u,i as d,l as f,m as p,p as m,r as h,s as g,t as _,u as v,vt as y}from"./build-CmtlB7pX.js";import b from"node:process";import x from"node:http";var S=e({hasBrowser:()=>P,logoutSession:()=>I,refreshSignIn:()=>j,revokeSignIn:()=>M,selectLoginOrganization:()=>N,sessions:()=>L,signIn:()=>F});const C=`openid profile email offline_access organizations:read`,w=e=>`<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>Coder · ${e}</title>
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{i as n}from"./prompt-CpwbsEWM.js";import{o as r}from"./remote-Cl-j8r3W.js";import{l as i,o as a}from"./session-BMbMzzPu.js";import{_t as o,a as s,c,f as l,h as u,i as d,l as f,m as p,p as m,r as h,s as g,t as _,u as v,vt as y}from"./build-CmtlB7pX.js";import b from"node:process";import x from"node:http";var S=e({hasBrowser:()=>P,logoutSession:()=>I,refreshSignIn:()=>j,revokeSignIn:()=>M,selectLoginOrganization:()=>N,sessions:()=>L,signIn:()=>F});const C=`openid profile email offline_access organizations:read`,w=e=>`<!doctype html><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>Coder · ${e}</title>
2
2
  <style>:root{color-scheme:light dark}body{margin:0;min-height:100vh;display:grid;place-items:center;font:15px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;background:light-dark(#fafafa,#111);color:light-dark(#111,#eee)}main{text-align:center;padding:32px}h1{margin:0 0 8px;font-size:20px}p{margin:0;opacity:.7}</style>
3
3
  <main><h1>${e}</h1><p>You can close this tab and return to the terminal.</p></main>`,T=e=>`${e}/.well-known/oauth-cli-client.json`;async function E(e,n){let r=new URL(e).origin,i=await fetch(`${r}/.well-known/oauth-protected-resource`).catch(n=>{throw new t(`login-failed`,`No Coder server answers at ${e}: ${n.message}`)}),a=await i.json().catch(()=>({})),o=Array.isArray(a.authorization_servers)?a.authorization_servers[0]:void 0;if(!i.ok||a.resource!==r||typeof o!=`string`)throw new t(`login-failed`,`${e} does not offer sign-in.`,{hint:`Sign-in needs a Postgres-backed server; see coder docs self-host`});if(n!==void 0&&o!==n)throw new t(`login-failed`,`The server's sign-in issuer has changed. Sign in again before using this session.`);return{config:await c(new URL(o),T(e),void 0,_(),new URL(o).protocol===`http:`?{execute:[h]}:void 0).catch(e=>{throw new t(`login-failed`,`Wular Auth at ${o} did not answer: ${e.message}`)}),resource:r}}function D(e,n,r){let i=n.claims(),a=n.refresh_token??r?.refreshToken;if(!a)throw new t(`login-failed`,`Wular Auth returned no refresh token.`);return{token:n.access_token,refreshToken:a,expiresAt:Date.now()+(n.expires_in??600)*1e3,issuer:e.serverMetadata().issuer,user:i?{name:typeof i.name==`string`?i.name:``,email:typeof i.email==`string`?i.email:``}:r?.user??{name:``,email:``}}}const O=e=>new t(`login-failed`,e instanceof y||e instanceof o?e.error===`access_denied`?`Sign-in was denied in the browser.`:e.error_description??e.error:e instanceof Error?e.message:String(e));async function k(e,n){let{config:r,resource:i}=await E(e),a=l(),o=m(),c=x.createServer();await new Promise(e=>c.listen(0,`127.0.0.1`,e));let{port:u}=c.address(),f=`http://127.0.0.1:${u}/callback`;try{let e=new Promise((e,n)=>{let r=setTimeout(()=>n(new t(`login-failed`,`Sign-in timed out.`)),3e5);c.on(`request`,(t,n)=>{let i=new URL(t.url??`/`,f);if(i.pathname!==`/callback`||i.searchParams.get(`state`)!==o){n.writeHead(404).end();return}n.writeHead(200,{"content-type":`text/html; charset=utf-8`}).end(w(i.searchParams.has(`error`)?`Sign-in failed`:`Signed in`)),clearTimeout(r),e(i)})});return n(s(r,{redirect_uri:f,scope:C,resource:i,code_challenge:await g(a),code_challenge_method:`S256`,state:o}).href),D(r,await d(r,await e,{pkceCodeVerifier:a,expectedState:o},{resource:i}).catch(e=>{throw O(e)}))}finally{c.close(),c.closeAllConnections()}}async function A(e,t){let{config:n,resource:r}=await E(e);try{let e=await f(n,{scope:C,resource:r});return t(e.user_code,e.verification_uri_complete??e.verification_uri),D(n,await v(n,e,{resource:r}))}catch(e){throw O(e)}}async function j(e,n){let{config:r,resource:i}=await E(e,n.issuer);try{return D(r,await p(r,n.refreshToken,{resource:i}),n)}catch(e){if(e instanceof y&&(e.error===`invalid_grant`||e.error===`invalid_client`))return;throw new t(`server`,`Wular Auth did not refresh the session: ${e instanceof Error?e.message:String(e)}`)}}async function M(e,t){let{config:n}=await E(e,t.issuer);n.serverMetadata().revocation_endpoint&&await u(n,t.refreshToken,{token_type_hint:`refresh_token`})}async function N(e,n,r){if(!e.length)throw new t(`login-failed`,`This account belongs to no workspace.`);if(n){let r=e.find(e=>e.slug===n);if(!r)throw new t(`login-failed`,`You are not a member of workspace "${n}".`);return r}if(e.length<=1)return e[0];if(!r)throw new t(`login-failed`,`Choose a workspace for this server.`,{hint:`Pass --workspace <slug>.`});let i=await r(e);return e.find(e=>e.slug===i)}const P=()=>!b.env.SSH_CONNECTION&&(b.platform!==`linux`||!!(b.env.DISPLAY||b.env.WAYLAND_DISPLAY));async function F(e,r={}){let i=r.device?await A(e,r.onCode??(()=>{})):await k(e,r.open??n),a=await fetch(`${e}/me`,{headers:{authorization:`Bearer ${i.token}`}}).catch(n=>{throw new t(`login-failed`,`No Coder server answers at ${e}: ${n.message}`)}),o=await a.json().catch(()=>({}));if(!a.ok)throw new t(`login-failed`,`Signed in, but the server refused the token.`);let s=await N(o.organizations??[],r.organization,r.chooseOrganization);return{...i,...s?{organization:s}:{},at:Date.now()}}async function I(e){let n=a(),r=n[e];if(!r)throw new t(`login-failed`,`Not signed in to ${e}.`);return await M(e,r).catch(()=>void 0),delete n[e],i(n),{ok:!0,server:e}}const L={async login(e={}){let t=r(e),n=await F(t,e);return e.save!==!1&&i({...a(),[t]:n}),{...n,server:t}},logout:(e={})=>I(r(e)),status:()=>Object.fromEntries(Object.entries(a()).map(([e,t])=>[e,{user:t.user,organization:t.organization,at:t.at}]))};export{S as n,L as t};
@@ -1,4 +1,4 @@
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}
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{Ft as de,Kt as fe,Mt as pe,Ot as me,Wt as he,Xt as ge,_t as _e,cr as ve,ft as ye,ir as be,kt as xe,lr as Se,mt as Ce,or as we,pt as Te,sr as Ee}from"./apps-CCqOsEZH.js";import{S as De,T as Oe,l as ke,s as Ae,w as je,x as Me}from"./local-CqOUpEtl.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-D-KqAi7b.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:fe(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}=ge(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}=ge(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:fe(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:fe(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
2
  where (${i.expiresAt} is null or ${i.expiresAt} > clock_timestamp()) and (${i.key} like any(${_.param(a)}::text[])
3
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
4
  'messages', remaining, 'more', ${t} - ${n} - jsonb_array_length(remaining))
@@ -8,7 +8,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
8
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
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
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?_`
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([...me,...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}=Se(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
12
  receipt as (
13
13
  insert into ${E} (key, value, expires_at)
14
14
  select ${f(r.key)}, ${d({at:n})}, ${new Date(n+r.ttlMs).toISOString()}::timestamptz
@@ -49,7 +49,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
49
49
  and event->>'appId' is not distinct from ${c?.appId??null}
50
50
  and event->>'installationId' is not distinct from ${c?.installationId??null}
51
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})
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,de(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
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
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
55
  select id, ${o} as bearer from ${N} where status = 'queued'
@@ -94,10 +94,10 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
94
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
95
  with gone as (
96
96
  delete from ${N} where ${this.fence(e,t,n)}
97
- returning id, organization_id, public_id, audience, requested_by
97
+ returning id, organization_id, public_id, audience, requested_by, parent
98
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
99
+ insert into ${ue} (organization_id, public_id, audience, requested_by, parent, deleted_at)
100
+ select organization_id, public_id, audience, requested_by, parent, clock_timestamp() from gone
101
101
  ), ${jt(_`select id from gone`)}
102
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
103
  with finished as (${o.getSQL()}), ${jt(_`select id from finished`)}
@@ -108,7 +108,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
108
108
  update ${N} set status = ${i.status}, result = ${JSON.stringify(i.result??null)}::jsonb,
109
109
  error = ${i.error??null}, tokens = ${JSON.stringify(i.tokens??null)}::jsonb,
110
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)},
111
+ token_count = coalesce(token_count, 0) + ${Ce(a.tokens)}, usage_tokens = ${Mt(_`usage_tokens`,a.tokens)},
112
112
  last_seen_at = ${o}::timestamptz, finished_at = ${o}::timestamptz, updated_at = ${o}::timestamptz${s}
113
113
  where ${this.fence(e,t,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]})}
114
114
  returning id, generation
@@ -120,14 +120,14 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
120
120
  error = case when status = 'queued' then ${t} else error end,
121
121
  inbox_seq = case when status = 'queued' then inbox_seq else inbox_seq + 1 end,
122
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
123
+ where ${this.fence(e,n,{...i,statuses:me})} returning id, generation, inbox_seq, status
124
124
  ), ${jt(_`select id from cancelled where status = 'cancelled'`)}, message as (
125
125
  insert into ${P} (task_id, seq, generation, kind, value, at)
126
126
  select id, inbox_seq, generation, 'cancel', 'null'::jsonb, ${a}::timestamptz from cancelled where status in ('running', 'waiting')
127
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
128
  values (${e}, ${t.integration}, ${t.appId}, ${t.installationId}, ${t.account??t.installationId}, ${t.space?.kind??`channel`}, ${t.space?.id??``}, ${i}::timestamptz)
129
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
130
+ where ${r} or ${k.claimedAt} is null or ${k.claimedAt} < ${new Date(n-be).toISOString()}::timestamptz
131
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
132
  with saved as (
133
133
  update ${k} set synced_at = ${new Date(r).toISOString()}::timestamptz, claimed_at = null
@@ -137,7 +137,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
137
137
  )
138
138
  insert into ${M} (space_id, member)
139
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,
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?Ee(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,ve(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},...e.parent===null?{}:{parent:e.parent}}))}}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
141
  ${N.audience} as audience, ${N.requestedBy} as requested_by,
142
142
  (select coalesce(jsonb_agg(line order by ${n}), '[]'::jsonb) from (
143
143
  select line from ${F} cross join jsonb_array_elements(${F.lines}) line
@@ -145,7 +145,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
145
145
  order by ${n} limit ${t}) page) as lines
146
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
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 (
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,me)}))::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,me),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
149
  insert into ${F} (task_id, seq_from, seq_to, lines)
150
150
  select accepted.id, ${n[0].seq}, ${n[n.length-1].seq}, ${JSON.stringify(n)}::jsonb from accepted
151
151
  on conflict (task_id, seq_from) do update set seq_to = excluded.seq_to, lines = excluded.lines
@@ -154,15 +154,15 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
154
154
  update ${N} set log_cursor = ${i.cursor}, log_seq = ${i.seq}, log_bytes = ${i.bytes}
155
155
  where ${this.fence(e,t,o)} and coalesce(log_seq, 0) = ${r.seq} and coalesce(log_cursor, -1) = ${r.cursor}
156
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}
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,me),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
158
  where key = ${X(t,`delivery`,s.key)}
159
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',
160
+ and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&pe(s),d=u?_`, context = coalesce(${N.context}, '{}'::jsonb) || jsonb_build_object('admissions',
161
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
162
  where n <= ${f} and item->>'admission' = ${s?.through??null}::text limit 1), 0)`,[m]=await q(e,_`
163
163
  with held as materialized (${l}), next as (
164
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})}
165
+ where ${this.fence(t,n,{generation:o,statuses:me})}
166
166
  and exists(select 1 from held) returning id, inbox_seq, generation
167
167
  ), admitted as (
168
168
  insert into ${P} (task_id, seq, generation, kind, value, at)
@@ -174,7 +174,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
174
174
  (${E.value}->'sending') || jsonb_build_object('count', ${f} - ${p}, 'until', ${a+Me}::bigint)) else '{}'::jsonb end
175
175
  where key in (select key from held) and exists(select 1 from admitted)
176
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,_`
177
+ select (select seq from admitted) as seq, exists(select 1 from held) as held`);if(s&&!m?.held)throw new xe;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
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
179
  from ${N} left join ${P} i on i.task_id = ${N.id} and i.generation = ${N.generation} and i.seq > ${i}
180
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)],_`
@@ -205,7 +205,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
205
205
  name = ${d.name}, description = ${d.description??null}, problems = null, source = ${d.source},
206
206
  repo = ${d.repo??null}, path = ${d.path??null},
207
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)
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}=Se(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:Ce(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:fe(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}=ge(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 he(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
209
  select ${n(e.key)}, ${JSON.stringify(e.value)}::jsonb, ${V(this.now()+e.ttlMs).toISOString()}::timestamptz
210
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
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')),
@@ -299,7 +299,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
299
299
  cross join unnest(${_.param(t?[t]:[`agent`,`installation`,`engine`])}::text[]) groups(kind)
300
300
  where ${this.mine(n.organizationId)} and ${n.runnerMs} is not null and ${n.finishedAt} >= ${new Date(e).toISOString()}::timestamptz
301
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 (
302
+ `))).map(e=>{let t=e.tokens?.reduce(ye,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 ${_e(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
303
  select ${t.agent} from ${t} where ${r} group by ${t.agent}
304
304
  order by ${i[e.top.by]} desc, ${t.agent} limit ${e.top.count}
305
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,_`
@@ -309,7 +309,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
309
309
  from ${t} ${o}
310
310
  where ${r}
311
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(_`
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};Te(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
313
  with tombstones as (
314
314
  delete from ${ue} where (organization_id, public_id) in (
315
315
  select organization_id, public_id from ${ue}
@@ -1 +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};
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-C35tq9KH.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};