@wular/coder 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{actions-CkMAM1Km.js → actions-DO8MvHwc.js} +2 -2
- package/dist/{agent-Bi5nbUhA.js → agent-Cgala63h.js} +1 -1
- package/dist/{app-server-BTpa5GBV.js → app-server-dnlLhhZb.js} +1 -1
- package/dist/{approvals-CRwkc9vB.js → approvals-C8XV7CK2.js} +1 -1
- package/dist/apps-BORri-28.js +18 -0
- package/dist/async-BS9tyhva.js +3 -0
- package/dist/{auth-oCvlHitk.js → auth-C16ylySv.js} +1 -1
- package/dist/builtin/coder/system.md +6 -3
- package/dist/{chat-4AiZEqKh.js → chat-czruXAt3.js} +1 -1
- package/dist/cli.js +3 -3
- package/dist/{cmd-Cu3OquA_.js → cmd-C1gHyVG7.js} +34 -34
- package/dist/{config-D_RuO6gX.js → config-_32PHl9g.js} +1 -1
- package/dist/{connection-BXjn7gCC.js → connection-CgA5_NJ7.js} +1 -1
- package/dist/{connections-Cswv7r8Z.js → connections-B90TemYf.js} +1 -1
- package/dist/{context-CFrDYenS.js → context-C1XBbfEL.js} +1 -1
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1391 -1391
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.54c45900f2153d34.js → index.91e126d7a389d4bd.js} +0 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.252f972b42c690e2.js → load.858c062c7891a2c1.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.11efd0e175db9053.js → page.9375ab741dc9791e.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.59ae138dc182d7c3.js → notify.c36570a56d279ce2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.e9386951cedea737.js → page.13fdd9cc55ad3a52.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.713d3ec10951fde5.js → sign-out.38a7f39cddc670f7.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f989d6f2d9ece6e4.js → agents-grid.2385ffa8fdad08d6.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.0f88720e52db99a2.js → page.5ca6921e50484f8c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.8d2f0997462fc958.js → layout.afc4a8a5a8360975.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.bc93891522c8120d.js → page.ba65063a1aa99a62.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.cf5cf9afe38ab0e4.js → page.03c5e72b0fe50ba9.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.c44c7df7841719f2.js → platform-actions.7c8c75bd0c05df4a.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-step.6e90cbfe308f28a0.js → platform-step.d6a980d1181dc940.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.61de585104c2be10.js → agent-settings-form.b5299f5130a4e8af.js} +16 -17
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.4d06f759984a63b3.js → page.fad77cea17947d47.js} +8 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.ea2925eab1d2e594.js → loading.4120e6979eaed441.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.fb069bf82b727d27.js → page.474b3524d5ea53b7.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.0a472a0e269b8c01.js → page.7868a07efcaa26f4.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.7ef7dfd5d8f5de43.js → versions-list.ba93a53773cab8a8.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.007326a04f05d46c.js → loading.6e53829bd1f3021d.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.a26aa7bc6ab655f0.js → page.5798ede8ba8ace97.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{app-cards.361918fe58349aa1.js → app-cards.55778a4b3177846d.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.3f60cf67517d0d31.js → page.ce391cad0d78795f.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.ffbf9a8b8b2fbde7.js → agent-toggle.0cec822c6099f058.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.0ae015a4fbe6321e.js → hero.7151c467e7ecf6a5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.9abe365f0098d358.js → connect-repositories.4e121d31ed0cfe02.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.6548f8f757578f90.js → editor.f314d92af0bb33b0.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.577b1d84c7ab84e1.js → import-picker.11028d5329ad537b.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.2b326d00ccef5544.js → page.1476d31e4554e88b.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.45a09107b19f0a7e.js → layout.150d950d191db477.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.f8d679f2d06b0ebc.js → operator-apps.3e72de86b86a7338.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.5aa3ddc669366703.js → page.6a4be3b1a473ff8c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.5a5188f0fc75dcd2.js → page.262ed73437c17872.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{advanced-list.73cdadb2968a39d2.js → advanced-list.7180570379e2625c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.353ec01fbb814f78.js → connection-add.632b1847c16ecd42.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.cf4061ae909272c3.js → connections-list.4378ae707b2092ed.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.fc4cff0289267551.js → credentials-list.e47897acb6867df8.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.db01de2581ac65f3.js → credentials.6bd06f96afbe7329.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.e7d6a422f6a869ea.js → list.38e70272eeb98cd0.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.acb92b39cab1d11c.js → models-list.a08cd37d0f7ff86c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.95fe939e36e5be55.js → page.f096b5a9ac419326.js} +13 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.5764eac3307d67cc.js → runners-list.0df1f9329df1b67d.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.d316bb157f747f6c.js → secrets-list.6d2f56fa7d6fcab0.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.4eb70f2de8674f93.js → layout.0fd865c865e5bab4.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.dc630cb6e2cbf83a.js → model-options.0d6077fe68db3af9.js} +2 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-pick.a143e77f5ed5f9d3.js → model-pick.695538b2edf9dd15.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.70cad0e981c33fa5.js → page.c57b81c2197cce0f.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.18bd2b92cd23b73f.js → create-link.60aadbe43ea1e39c.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.95f7be49430248eb.js → outcome-toast.e2b9ef0344b1a1a2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.e39ee9236664d043.js → page.c456ad99c8a9f875.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.441e82ab00344fb2.js → activity.2ec05d78d609b7b2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.24e121ea6eb578ba.js → page.578be2f6c89fcba0.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.4a4052a38db4bad3.js → task-actions.d131453dd2a423c3.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.0cd3ec2655f44cc7.js → task-view.3d72a4ecd2b3826e.js} +7 -53
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.73225456d60d63e3.js → composer-data.c16854be11a561e4.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.ee326fbf5e526fb1.js → composer.97be3e67214889c1.js} +24 -82
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.7607998094780fdd.js → pending-approvals.9175908da02960e1.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.e486cbd16ea3e963.js → tasks-list.028798c79227a366.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.01510523d1556d59.js → tasks-section.9a9d13057b326f25.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.ede64f82388f9480.js → page.045c6db0c56975b2.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.0499098badd3f5f8.js → page.938d29ff7edb678d.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e3800e736f832124.js → stream.2cdb8eabd8f6df70.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.3b7eeee29fc327de.js → task-toasts.8733901ca0e4c246.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.f22057e7dfac40fe.js → action.56cea462eb725c39.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.c8d7efefb6194d7d.js → client.685154f230716834.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{advanced-list-850a950afe4f6996.js → advanced-list-b75a9c2bd11026de.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-pills-9f6fa120182db948.js → agent-pills-54564413a57d7fa7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-55d294dad2ce5a0d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{agent-toggle-521136f20a71400d.js → agent-toggle-b5dcc4ea6292fb3d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-bcd13cd7a46224a6.js → agents-grid-69461c53abbba433.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{back-2d67134b122334f4.js → back-ba5e4340a9f8bbd2.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{chain-hint-53675e299a865420.js → chain-hint-491eb09a20a15702.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-cb2c62fe580a8903.js → combo-6df61e8a1cc31037.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-198b844da57b82a3.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{composer-data-890f71bade4f0616.js → composer-data-b05f3d93fdc472d7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{confirm-d6b2c5b1deccd1e8.js → confirm-14d018653fbe50fc.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-226bf70aa81c29d8.js → connect-repositories-5118edc019fc7890.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connections-list-a33d6637e2d52fcf.js → connections-list-5412dad7e0def52f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{copy-294c6052b3b69424.js → copy-04781f9af4e10f06.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-90fc1c6d202e1461.js → credentials-list-e64c973aee5602d3.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{custom-range-efa1b6a71ba84597.js → custom-range-b6919bab9846ebf7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-53a3e1a893644fff.js → editor-68e9ccd1764fc512.js} +3 -3
- package/dist/dash/standalone/static/assets/chunks/{field-4d374d5ed3f43d7e.js → field-adcb6e6a5f9b7131.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{instructions-d3dc01b2f90820db.js → instructions-7b274685ceb26457.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{list-16247e39898cd20e.js → list-662f042656857c82.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-5e07b3318d69d218.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{models-list-6d93523660503dfb.js → models-list-ae1e2eff30d21824.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-755fc581cbc2836e.js → outcome-dialog-fd86ded4c44c2de7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-c00becdb638cd9a8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-08e9b3816dcd62b1.js → platform-actions-f3979ab69a6ceb53.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{platform-step-5881a8be1e761e00.js → platform-step-5454b6c0a19caefd.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runners-list-dd759d408c643a29.js → runners-list-20d42f19fb4bec8a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runtime-9b28886f3cbe0ed3-1.js → runtime-3fcac605fffcc273-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{secrets-list-be1f634a1b077baa.js → secrets-list-89f89ee70edb3856.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-f646bfa8aa0aa449.js → segmented-66a8c77c6294fec3.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{shared-init-953965859f7bf6b9.js → shared-init-96225b8c7758de9d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +9 -0
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-d13c4cc0cf11ffd1.js → tail-40f16e09eade7eee.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-423e6a3f2527f534.js → task-396d849e58e50d59.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-actions-5917357eac6504ca.js → task-actions-0b3054dc0f8d17c0.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-9e026dc5da58af5b.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-2c5ce592e00fda45.js → tasks-list-04c6568d7f7237b7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-177ae397ad64dcea.js → versions-list-ceb756236e69b761.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-9b28886f3cbe0ed3-0.js → wular-pnext-3fcac605fffcc273-0.js} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-00243b34eb094b95.css → dash-param-org-agents-param-slug-dd4ac319a0d62432.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css → dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css → dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css → dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-tasks-8a44e171984d32a1.css → dash-param-org-tasks-be3cb3d64573f3d9.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css → dash-param-org-tasks-param-id-c20a0537bc82620d.css} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-27207e4f43f9a21b.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-7ecbd7a0cbe4e231.js → pnext-client-435db60553fa3a67.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-ed31510d4615a5a5.js → pnext-client-b1af82c6f0db0033.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +1 -0
- package/dist/{definition-4on4SG5J.js → definition-D0OpQfGX.js} +1 -1
- package/dist/{discover-DvzAbQvU.js → discover-BfYHHJN_.js} +1 -1
- package/dist/{dispatch-BaW2X6Sc.js → dispatch-BkoIU4GU.js} +2 -2
- package/dist/{docs-CbgaMPvq.js → docs-CxklYa3P.js} +1 -1
- package/dist/{drive-Tk6JvQK5.js → drive-B7SBFfcb.js} +1 -1
- package/dist/env-BwFCHakK.js +1 -0
- package/dist/{exec-CAaYFJD1.js → exec-D9jF2F-H.js} +2 -2
- package/dist/{executor-Chc0zawh.js → executor-DBW7R7Tf.js} +6 -6
- package/dist/flow/builtin/review/index.d.ts +2 -2
- package/dist/flow/builtin/review/index.js +10 -15
- package/dist/flow/index.d.ts +2 -2
- package/dist/flow/index.js +1 -1
- package/dist/{hook-COWDSO4a.js → hook-DN__zYOG.js} +1 -1
- package/dist/{index-ezhbF5wC.d.ts → index-CTAQrCRU.d.ts} +71 -66
- package/dist/integrations-DSZSa8Rc.js +9 -0
- package/dist/lib/broker.js +1 -1
- package/dist/{load-PqaDHiHX.js → load-BtIDghgd.js} +2 -2
- package/dist/{local-BzZuOwgI.js → local-BzMvgiwL.js} +1 -1
- package/dist/{local-BMGcCk8N.js → local-GIxwz_Or.js} +1 -1
- package/dist/{login-BDKTNynK.js → login-LlZrIlxb.js} +1 -1
- package/dist/maintenance-DyiyHI8S.js +1 -0
- package/dist/{mcp-BGam3G_B.js → mcp-Caq72REF.js} +1 -1
- package/dist/{mcp-BNz_l5TV2.js → mcp-CrtKQoVi.js} +1 -1
- package/dist/{mcp-BGx48pyR.js → mcp-cEIva8Pd.js} +6 -4
- package/dist/{models-D1NXi6ni.js → models-BVxs3I8o.js} +1 -1
- package/dist/{permission-BkYxjiFR.js → permission-RSZM3DUk.js} +1 -1
- package/dist/post-DLenID75.js +11 -0
- package/dist/{refresh-yfEi5SQs.js → refresh-CWEpTAkD.js} +1 -1
- package/dist/{remote-rArUa01V.js → remote-BDMuKaON.js} +1 -1
- package/dist/{remote-BbXx6S9P.js → remote-CY-qYX2C.js} +1 -1
- package/dist/{runner-DG9jrX5H.js → runner-CKMOh5Q3.js} +1 -1
- package/dist/runner.json +1 -1
- package/dist/runner.tgz +0 -0
- package/dist/schema.js +1 -1
- package/dist/sdk.d.ts +15 -45
- package/dist/sdk.js +1 -1
- package/dist/serve-D23JqDip.js +12 -0
- package/dist/{serve-B-5rDiZm.js → serve-YlU04KO7.js} +1 -1
- package/dist/{session-Dtje9y-r.js → session-D7eeJIaH.js} +1 -1
- package/dist/{sessions-DIz9fyRN.js → sessions-BGUfSe8L.js} +1 -1
- package/dist/{shared--aE4olIO.js → shared-BzNReirj.js} +1 -1
- package/dist/{sign-in-wWkyaq5X.js → sign-in-Dr6sU7vz.js} +2 -2
- package/dist/{state-Br-Fuaxg.js → state-CxAUec80.js} +1 -1
- package/dist/store-BrnWdtRw.js +349 -0
- package/dist/{task-CFt85vTy.js → task-CyqtCXo3.js} +1 -1
- package/dist/task-DN4assR8.js +7 -0
- package/dist/{tool-search-BkdgVolu.js → tool-search-C9Ty3hhL.js} +1 -1
- package/dist/{tools-DNgEptor.js → tools-Ck-ZWtmB.js} +1 -1
- package/dist/{tools-oQvFAnh5.js → tools-DVtBtED6.js} +1 -1
- package/dist/{tools-search-D1zArRyJ.js → tools-search-BNDea9vZ.js} +1 -1
- package/dist/{turn-Cc-v-eSy.js → turn-eI4iRPsq.js} +1 -1
- package/dist/{update-check-UyRob3yy.js → update-check-Bap3dwaj.js} +1 -1
- package/dist/{views-3TxH367C.js → views-Bxm_5J6T.js} +1 -1
- package/dist/{worker-BMuKKiIa.js → worker-DJANNSCT.js} +1 -1
- package/dist/worker-DeuC38Vp.js +7 -0
- package/docs/agents/coder.md +1 -1
- package/docs/cli/index.md +5 -3
- package/docs/connections.md +1 -1
- package/docs/flows.md +1 -1
- package/docs/review.md +36 -8
- package/docs/self-host.md +2 -1
- package/package.json +1 -1
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/apps-B6mUToTa.js +0 -18
- package/dist/async-CNhQ4wyZ.js +0 -3
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +0 -9
- package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-b42d2c06c25d1e2b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +0 -3
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +0 -1
- package/dist/env-_AxrvBXP.js +0 -1
- package/dist/integrations-BVmsk64f.js +0 -9
- package/dist/maintenance-d43Ml540.js +0 -1
- package/dist/serve-CvnrGAj7.js +0 -12
- package/dist/store-CzQLgCzt.js +0 -352
- package/dist/task-N0qhnKpK.js +0 -7
- package/dist/worker-CIHY9L42.js +0 -7
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{types.5bf5a41cedb54154.js → types.9d22123d6296f5af.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.aae9fa481b9015d1.css.pnext-asset.js → task-view.440367ae07204ee7.css.pnext-asset.js} +0 -0
package/dist/store-CzQLgCzt.js
DELETED
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}from"./state-Br-Fuaxg.js";import{n as a,x as o,y as s}from"./approvals-CRwkc9vB.js";import{c,l}from"./view-D-rbQ1Kz.js";import"./turn-Cc-v-eSy.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 x,w as S,x as ne,y as C}from"./drizzle-orm-CYU7WOQS.js";import{agent as w,agentVersion as T,approvalPost as E,c as re,chatItem as ie,chatState as D,connection as ae,engineCredential as O,integrationApp as oe,integrationAppInstallation as se,platformLink as k,privateSpace as A,runner as j,secret as M,spaceMember as N,task as P,taskHistory as ce,taskInbox as F,taskLog as I,taskSecret as le,taskTombstone as ue,workspace as L}from"./schema.js";import{At as de,Ft as fe,Jt as pe,Kt as me,Lt as he,Nt as ge,Qt as _e,dr as ve,fr as ye,ht as be,kt as xe,lr as Se,mt as Ce,pt as we,sr as Te,ur as Ee,vt as De}from"./apps-B6mUToTa.js";import{S as Oe,T as ke,l as Ae,s as je,w as Me,x as Ne}from"./local-BzZuOwgI.js";import{i as R,r as z}from"./client-nBo9Mhsr.js";import{C as Pe,S as Fe,T as Ie,_ as B,a as V,b as Le,c as H,d as U,f as Re,h as ze,i as W,l as G,m as Be,n as Ve,o as K,p as q,r as He,s as J,u as Y,v as X,w as Ue,x as We,y as Ge}from"./shared--aE4olIO.js";import{createHash as Ke,randomBytes as qe,randomUUID as Je}from"node:crypto";import{isDeepStrictEqual as Ye}from"node:util";const Z=re(W,`shared_app`),Q=re(M,`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 Xe(e){let t=W;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,credentials:M.value,sharedKey:Z.key}).from(t).innerJoin(M,y(M.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:M.value}).from(t).innerJoin(M,y(M.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 Ve(e.db,r.credentials);o!==void 0&&i?.credentials!==r.credentials&&await ze(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 Ze(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 Qe(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(S(p(Y.platformInstallId,i),_`${Y.covers} ?| ${a}`),C(Y.deletedAt),u(Y.key,t),S(y(W.key,r),_`left(${W.key}, ${r.length+1}) = ${`${r}/`}`))).limit(1);if(n)throw new Oe(`Installation "${t}" is bound through another app.`)})}function $e(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:M.value}).from(t).innerJoin(W,y(W.id,t.appId)).leftJoin(M,y(M.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:Ze(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({row:t,token:M.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(M,y(M.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 Qe(e,n,r);let s=a?.tokenSecretId??null;r.token&&(s?i.token!==r.token&&await ze(e.db,s,r.token):s=await Ve(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 et(e,t){let n=re(Y,`locked`),[r]=await e.db.select({row:n,app:{key:W.key,integration:W.integration},token:M.value}).from(n).innerJoin(W,y(W.id,n.appId)).leftJoin(M,y(M.id,n.tokenSecretId)).where(h(e.mine(n.organizationId),y(n.key,t))).for(`update`,{of:n});return r&&Ze(r.row,r.app,r.token)}const tt=(e,t)=>K({...Be(t),owner:e.owner,account:e.account,createdAt:U(e.createdAt)}),nt=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function rt(e,t){let n=O;return(await e.db.select({row:n,sealed:M.value}).from(n).innerJoin(M,y(M.id,n.secretId)).where(h(e.mine(n.organizationId),t?y(n.owner,t):C(n.owner))).orderBy(b(n.label)).for(`update`)).map(({row:e,sealed:t})=>({id:pe(e.owner??void 0,e.label),value:tt(e,t),row:e}))}async function it(e,t,n,r){let i=O;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=Re(r),o={account:r.account??null,createdAt:r.createdAt===void 0?t?.row.createdAt??e.at():V(r.createdAt),updatedAt:e.at()};if(t){Re(t.value)!==a&&await ze(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}=_e(n);await e.db.insert(i).values({organizationId:e.organizationId,owner:s??null,label:c,secretId:await Ve(e.db,a),...o})}function at(e){let t=O,n=(t,n)=>{let{owner:r}=_e(t);return e.transaction(nt(e,r),async e=>it(e,(await rt(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:M.value}).from(t).innerJoin(M,y(M.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:pe(e.owner??void 0,e.label),value:tt(e,t)}))},put:(e,t)=>n(e,t),delete:e=>n(e,null)}}const ot=e=>e.secret,st=e=>{let t=G(O,e);return{id:pe(t.owner??void 0,t.label),value:tt(t,ot(e))}},ct=e=>{let t=G(j,e);return{id:t.publicId,value:yt(t,ot(e))}},lt=e=>{let t=G(W,e.app);return{installation:Ze(G(Y,e.row),t,e.token),app:$(t,e.credentials)}};function ut(e,t,n,r){let i=D,a=t.map(t=>`${H(X(e,`snapshot`,ke(t)))}%`),o=[...t,...n].map(t=>X(e,`snapshot`,Me(t)));return _`(select coalesce(jsonb_object_agg(${i.key}, ${i.value}), '{}'::jsonb) from ${i}
|
|
2
|
-
where (${i.expiresAt} is null or ${i.expiresAt} > clock_timestamp()) and (${i.key} like any(${_.param(a)}::text[])
|
|
3
|
-
or ${i.key} in (select unnest(${_.param(o)}::text[])${r?_` union all ${r}`:_``})))`}function dt(e,t){let n=Ge(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 ft(e){let t=_`coalesce((${D.value}->>'version')::bigint, jsonb_array_length(${D.value}->'messages') + (${D.value}->>'more')::bigint)`,n=_`greatest(coalesce((${D.value}->>'acknowledged')::bigint, 0), least(${e}, ${t}))`;return _`(select ${D.value} || jsonb_build_object('version', ${t}, 'acknowledged', ${n},
|
|
4
|
-
'messages', remaining, 'more', ${t} - ${n} - jsonb_array_length(remaining))
|
|
5
|
-
from (select coalesce(jsonb_agg(item order by n) filter (where coalesce((item->>'sequence')::bigint, n) > ${n}), '[]'::jsonb) as remaining
|
|
6
|
-
from jsonb_array_elements(${D.value}->'messages') with ordinality e(item,n)) as pending)`}function pt(e,t){let n=D,r=Ge(e.organizationId,t),i=n.key;return{key:i,where:e=>h(e.id===void 0?_`${n.key} like ${`${H(r+(e.prefix??``))}%`}`:y(n.key,r+e.id),e.after===void 0?void 0:v(n.key,r+e.after)),rows:async(t,a)=>{let o=e.db.select({id:i,value:_`${n.value}`}).from(n).where(h(_`${n.key} like ${`${H(r)}%`}`,e.live(n.expiresAt),t)).orderBy(b(n.key));return(await(a===void 0?o:o.limit(a))).map(e=>({id:e.id.slice(r.length),value:e.value}))},put:async(i,a,o)=>{let s=t===`login`?o??e.at():o,c=e.db.insert(n).values({key:r+i,value:a,expiresAt:s}).onConflictDoUpdate({target:n.key,set:{value:a,expiresAt:t===`login`&&!o?_`${n.expiresAt}`:s}}),l=t===`delivery`&&i.startsWith(`connection-authorized:`)?e.notification(t,i):void 0;await(l?c.returning(l):c)},delete:async t=>{await e.db.delete(n).where(y(n.key,r+t))}}}function mt(e){let t=E,n=e=>e===void 0?null:V(e);return{key:t.key,where:e=>h(e.id===void 0?m(t.key,`${H(e.prefix??``)}%`):y(t.key,e.id),e.after===void 0?void 0:v(t.key,e.after)),rows:async(n,r)=>{let i=e.db.select({id:t.key,value:t.value}).from(t).where(h(e.mine(t.organizationId),e.live(t.expiresAt),n)).orderBy(b(t.key));return await(r===void 0?i:i.limit(r))},put:async(r,i,a)=>{let o={value:i,at:V(i.at),shownAt:i.shownAt?V(i.shownAt):null,retryAt:n(i.retryAt),expiresAt:a};await e.db.insert(t).values({organizationId:e.organizationId,key:r,...o}).onConflictDoUpdate({target:[t.organizationId,t.key],set:o})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n)))}}}function ht(e){let t=L;return{key:t.organizationId,where:()=>_`${t.config} is not null`,rows:async()=>{let[n]=await e.db.select({value:t.config}).from(t).where(h(e.mine(t.organizationId),_`${t.config} is not null`));return n?[{id:`workspace`,value:n.value}]:[]},put:async(n,r)=>{await e.db.insert(t).values({organizationId:e.organizationId,config:r}).onConflictDoUpdate({target:t.organizationId,set:{config:r}})},delete:async()=>{await e.db.update(t).set({config:null}).where(e.mine(t.organizationId))}}}const gt=(e,t)=>t===null?e:{...e,secret:t},_t=(e,t)=>`app:${e.organizationId}:connection:${t}`;function vt(e){let t=ae;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({id:t.key,record:t.record,sealed:M.value}).from(t).leftJoin(M,y(M.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.id,value:gt(e.record,e.sealed)}))},put:(n,r)=>e.transaction(_t(e,n),async e=>{let{secret:i,...a}=r,[o]=await e.db.select({secretId:t.secretId,sealed:M.value}).from(t).leftJoin(M,y(M.id,t.secretId)).where(h(e.mine(t.organizationId),y(t.key,n))),s=o?.secretId??null;i&&(s?o.sealed!==i&&await ze(e.db,s,i):s=await Ve(e.db,i));let c={owner:r.owner??null,record:a,secretId:i?s:null};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:[t.organizationId,t.key],set:c}),i||await J(e.db,[o?.secretId])}),delete:n=>e.transaction(_t(e,n),async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.secretId});await J(e.db,r.map(e=>e.secretId))})}}const yt=(e,t)=>K({name:e.name,owner:e.owner,kind:e.kind,scope:e.owner?`personal`:`workspace`,config:e.config,createdBy:e.createdBy,default:e.isDefault,lastSeen:e.lastSeen?U(e.lastSeen):void 0,secret:t,createdAt:U(e.createdAt),updatedAt:U(e.updatedAt)});function bt(e){let t=j;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:M.value}).from(t).innerJoin(M,y(M.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:e.publicId,value:yt(e,t)}))},put:(n,r)=>e.transaction(`app:runners:${e.organizationId}`,async e=>{let[i]=await e.db.select({secretId:t.secretId,sealed:M.value}).from(t).innerJoin(M,y(M.id,t.secretId)).where(h(e.mine(t.organizationId),y(t.publicId,n)));i&&i.sealed!==r.secret&&await ze(e.db,i.secretId,r.secret);let a={owner:r.owner??null,name:r.name,kind:r.kind,config:r.config,createdBy:r.createdBy??null,isDefault:r.default,lastSeen:r.lastSeen===void 0?null:V(r.lastSeen),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,secretId:i?.secretId??await Ve(e.db,r.secret),createdAt:V(r.createdAt),...a}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:a})}),delete:n=>e.transaction(`app:runners:${e.organizationId}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n))).returning({secretId:t.secretId});await J(e.db,r.map(e=>e.secretId))})}}const xt=e=>e.split(`:`)[1]??``,St=e=>/^connection(s|-secrets):/.test(e),Ct=(e,t,n)=>K(e.startsWith(`connections:`)?{resolvedConnections:t,expiresAt:n&&U(n)}:{secret:t,expiresAt:n&&U(n)});function wt(e){let t=le,n=t=>h(e.mine(P.organizationId),y(P.publicId,xt(t)));return{key:t.key,rows:async(n,r)=>{let i=e.db.select({id:t.key,sealed:M.value,expiresAt:t.expiresAt}).from(t).innerJoin(P,y(P.id,t.taskId)).innerJoin(M,y(M.id,t.secretId)).where(h(e.mine(P.organizationId),e.live(t.expiresAt),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.id,value:Ct(e.id,e.sealed,e.expiresAt)}))},put:(r,i,a)=>e.transaction(`app:${e.organizationId}:connections:${xt(r)}`,async e=>{let o=`secret`in i?i.secret:`resolvedConnections`in i?i.resolvedConnections:void 0,s=a??(`expiresAt`in i&&i.expiresAt?V(i.expiresAt):null);if(o===void 0)throw Error(`Not a task secret: ${r}`);let[c]=await e.db.select({taskId:P.id,secretId:t.secretId}).from(P).leftJoin(t,h(y(t.taskId,P.id),y(t.key,r))).where(n(r));if(c){if(c.secretId){await ze(e.db,c.secretId,o),await e.db.update(t).set({expiresAt:s}).where(y(t.secretId,c.secretId));return}await e.db.insert(t).values({taskId:c.taskId,key:r,secretId:await Ve(e.db,o),expiresAt:s})}}),delete:r=>e.transaction(`app:${e.organizationId}:connections:${xt(r)}`,async e=>{let i=await e.db.delete(t).where(h(y(t.key,r),_`${t.taskId} in (select ${P.id} from ${P} where ${n(r)})`)).returning({secretId:t.secretId});await J(e.db,i.map(e=>e.secretId))})}}var Tt=e({DrizzleQueue:()=>Ht});const Et=(e,t)=>_`('[' || to_json(${e})::text || ',' || to_json(${t}::text)::text || ']:')`,Dt=e=>_`(select ${Ie(_`to_jsonb(c)`,_`s.value`)} from ${O} c join ${M} s on s.id = c.secret_id
|
|
7
|
-
where c.organization_id = ${e}.organization_id and coalesce(c.owner || '/', '') || c.label = ${e}.models->0->>'credential')`,Ot=e=>_`(select ${L.config} from ${L} where ${L.organizationId} = ${e})`,kt=e=>_`coalesce((select jsonb_strip_nulls(jsonb_build_object('slug', ${L.slug}, 'name', ${L.name}))
|
|
8
|
-
from ${L} where ${L.organizationId} = ${e}), '{}'::jsonb)`,At=e=>_`(select ${Ie(_`to_jsonb(r)`,_`s.value`)} from ${j} r join ${M} s on s.id = r.secret_id
|
|
9
|
-
where r.organization_id = ${e}.organization_id and r.public_id = ${e}.runner_id)`,jt=e=>_`(select jsonb_build_object('row', to_jsonb(a), 'credentials', s.value)
|
|
10
|
-
from ${oe} a join ${M} s on s.id = a.credentials_secret_id where ${e})`,Mt=e=>_`task_secrets as (delete from ${le} where task_id in (${e}) returning secret_id),
|
|
11
|
-
dropped_secrets as (delete from ${M} where id in (select secret_id from task_secrets))`;function Nt(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, ${Nt(_`(${e} -> ${t}::text)`,n)}`);return _`(case when jsonb_typeof(${e}) = 'object' then ${e} else '{}'::jsonb end || jsonb_build_object(${_.join(n,_`, `)}))`}const Pt=e=>_`(case ${e} ${_.join([...xe,...n].map(e=>_`when ${e} then ${_.raw(String(c(e)))}`),_` `)} end)`,Ft=e=>_`date_trunc('milliseconds', ${e})`,It=e=>_`${e} collate "C"`,Lt=S(y(P.status,`waiting`),_`jsonb_path_exists(${P.context}, '$.approvals[*] ? (!(exists(@.response)) || @.response == null)')`),Rt=_`'space:' || ${A.integration} || ':' || ${A.account} || ':' || ${A.space}`,zt=(e,t)=>_`array(select ${Rt} from ${A} join ${N} on ${N.spaceId} = ${A.id} join ${k} on ${k.platform} = ${A.integration} and ${k.platformUserId} = ${N.member} where ${k.userId} = ${t} and ${A.organizationId} = ${e})`,Bt=e=>[b(Pt(e.status)),ee(Ft(e.createdAt)),ee(It(e.publicId))],Vt=e=>[b(e.updatedAt),b(It(e.publicId))];var Ht=class{db;constructor(e){this.db=e}async metrics(e,t){let n=await this.db.select({status:P.status,total:_`count(*)::int`,recent:_`count(*) filter (where ${P.createdAt} >= ${new Date(t).toISOString()}::timestamptz)::int`}).from(P).where(y(P.organizationId,e)).groupBy(P.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(P.organizationId,e),y(P.publicId,t))}fence(e,t,n={}){return h(this.where(e,t),n.generation===void 0?void 0:y(P.generation,n.generation),n.attempts===void 0?void 0:y(P.attempts,n.attempts),n.tokenHash===void 0?void 0:n.tokenHash===null?C(P.tokenHash):y(P.tokenHash,n.tokenHash),n.handle===void 0?void 0:n.handle===null?C(P.handle):y(P.handle,n.handle),n.lastSeenAt===void 0?void 0:n.lastSeenAt===null?C(P.lastSeenAt):y(P.lastSeenAt,new Date(n.lastSeenAt)),n.updatedAt===void 0?void 0:y(P.updatedAt,new Date(n.updatedAt)),n.statuses?p(P.status,n.statuses):void 0,n.unanswered===void 0?void 0:_`not exists (select 1 from jsonb_array_elements(coalesce(${P.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}=ye(t),u=new Date(n).toISOString(),d=e=>_`${e===void 0?null:JSON.stringify(e)}::jsonb`,f=t=>X(e,`delivery`,t),p=r?_`
|
|
12
|
-
receipt as (
|
|
13
|
-
insert into ${D} (key, value, expires_at)
|
|
14
|
-
select ${f(r.key)}, ${d({at:n})}, ${new Date(n+r.ttlMs).toISOString()}::timestamptz
|
|
15
|
-
from capacity where allowed ${a?_`and (${a.create} or exists (select 1 from target))`:_``}
|
|
16
|
-
on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at
|
|
17
|
-
where ${D.expiresAt} <= ${u}::timestamptz or ${D.value}->>'owner' = ${r.owner??null}::text
|
|
18
|
-
returning key
|
|
19
|
-
),`:_``,m=_`exists (select 1 from inserted)`,ee=_`on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at`,{conversation:h,unseen:g,secrets:te}=o??{},v=_`${h?_`, remembered as (insert into ${D} (key, value, expires_at)
|
|
20
|
-
select key, value, ${new Date(n+h.ttlMs).toISOString()}::timestamptz from (values
|
|
21
|
-
(${f(h.key)}, ${d(h.record)}), (${f(h.root)}, ${d({at:h.record.at})})) as row(key, value)
|
|
22
|
-
where ${m} ${ee})`:_``}${g?_`, acknowledged as (update ${D} set value = ${ft(g.version)}
|
|
23
|
-
where key = ${f(`since:${g.key}`)} and ${D.value}->>'epoch' is not distinct from ${g.epoch??null}::text
|
|
24
|
-
and (expires_at is null or expires_at > ${u}::timestamptz) and ${m})`:_``}${te?.length?_`, ${rn(te,_`select id from inserted`)}`:_``}`;return _`
|
|
25
|
-
with ${a?_`target as materialized (${a.target}),`:_``} capacity as (
|
|
26
|
-
select ${i===void 0?_`true`:_`(select count(*) from ${P} where organization_id = ${e} and status = 'queued') < ${i} ${r?_`or exists (select 1 from ${D} where key = ${f(r.key)} and expires_at > ${u}::timestamptz and value->>'owner' is distinct from ${r.owner??null}::text)`:_``}`} ${a?_`or exists (select 1 from target) or not ${a.create}`:_``} as allowed
|
|
27
|
-
), ${p} ${a?_`advanced as (
|
|
28
|
-
update ${P} set inbox_seq = inbox_seq + 1, updated_at = ${u}::timestamptz where id in (select id from target) and exists (select 1 from receipt)
|
|
29
|
-
returning id, inbox_seq, generation
|
|
30
|
-
), forwarded as (
|
|
31
|
-
insert into ${F} (task_id, seq, generation, at, kind, value)
|
|
32
|
-
select id, inbox_seq, generation, ${u}::timestamptz, 'steer', ${d({text:a.steer,asker:t.context?.asker??null})} from advanced returning seq
|
|
33
|
-
),`:_``} inserted as (
|
|
34
|
-
insert into ${P} (organization_id, public_id, source, status, agent, flow, review_key, runner_kind, access,
|
|
35
|
-
installation_id, event, audience, space, parent, connections, models, name, cwd, prompt, args, mcp, append_system, add_dirs, author, definition, requested_by,
|
|
36
|
-
runner_id, engine_settings, tools, context, files, failure_reply, notice, task_url, settings_url, attempts, created_at, updated_at)
|
|
37
|
-
select ${e}, ${t.id}, ${t.source}, 'queued', ${t.agent}, ${t.flow}, ${fe(t)??null}, ${t.runner}, ${t.access??null},
|
|
38
|
-
${s?_`coalesce((select id from ${se} where key = ${`${s.appId}:${s.installationId}`} and organization_id = ${e}), 0)`:_`null`},
|
|
39
|
-
${d(s)}, ${c}, ${l??null}, ${t.parent??null}, ${d(t.connections)}, ${d(t.models)},
|
|
40
|
-
${t.name??null}, ${t.cwd??null}, ${t.prompt??null}, ${d(t.args)}, ${d(t.mcp)},
|
|
41
|
-
${t.appendSystem??null}, ${d(t.addDirs)}, ${t.author??null}, ${d(t.definition)},
|
|
42
|
-
${t.requestedBy??null}, ${t.runnerId??null}, ${d(t.usage)}, ${d(t.tools)},
|
|
43
|
-
${d(t.context)}, ${d(t.files)}, ${t.failureReply??null}, ${t.notice??null}, ${t.taskUrl??null}, ${t.settingsUrl??null},
|
|
44
|
-
0, ${u}::timestamptz, ${u}::timestamptz
|
|
45
|
-
from capacity where allowed ${a?_`and ${a.create} and not exists (select 1 from target)`:_``} ${r?_`and exists (select 1 from receipt)`:_``}
|
|
46
|
-
returning id
|
|
47
|
-
)${v} select allowed, exists (select 1 from inserted) as inserted ${a?_`, exists (select 1 from forwarded) as steered`:_``} from capacity`}async deliver(e,t,n,r,i,a,o=!0,s){if(i===void 0)return o&&await this.enqueue(e,t,n,r,a,s)?{taskId:t.id}:{};let c=t.event,l=_`select id from ${P} where organization_id = ${e} and status in ('queued', 'running', 'waiting')
|
|
48
|
-
and agent = ${t.agent} and source = ${t.source} and flow = 'default'
|
|
49
|
-
and event->>'appId' is not distinct from ${c?.appId??null}
|
|
50
|
-
and event->>'installationId' is not distinct from ${c?.installationId??null}
|
|
51
|
-
and event->'chat'->'thread'->>'id' = ${c?.chat?.thread.id||null}
|
|
52
|
-
order by created_at desc, public_id desc limit 1 for update`,u=this.insertion(e,t,n,r,a,{target:l,create:o,steer:i},s),d=[_`select pg_advisory_xact_lock(3, hashtext(${JSON.stringify([e,he(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=_`not exists (select 1 from ${P} reviewing
|
|
53
|
-
where reviewing.organization_id = ${P.organizationId} and reviewing.status in ('running', 'waiting')
|
|
54
|
-
and reviewing.review_key = ${P.reviewKey})`,a=r===void 0?_`true`:_`(select count(*) from ${P} active where active.organization_id = ${P.organizationId} and active.status in ('running', 'waiting')) < ${r}`;if(!n){let[e]=await R(this.db,()=>q(this.db,_`select exists (select 1 from ${P} where status = 'queued' and ${a} and ${i})
|
|
55
|
-
and ${t===void 0?_`true`:_`(select count(*) from ${P} where status in ('running', 'waiting')) < ${t}`} as ready`));if(!e?.ready)return}let o=qe(32).toString(`base64url`),s=_`translate(rtrim(replace(encode(convert_to(format('{"task":%s,"organization":%s,"attempt":%s}',
|
|
56
|
-
to_json(public_id), to_json(organization_id), attempts + 1), 'UTF8'), 'base64'), E'\\n', ''), '='), '+/', '-_') || '.' || ${o}`,c=_`with stamp as materialized (select date_trunc('milliseconds', clock_timestamp()) as at), picked as materialized (
|
|
57
|
-
select id, ${s} as bearer from ${P} where status = 'queued'
|
|
58
|
-
and ${a} and ${i}
|
|
59
|
-
${t===void 0?_``:_`and (select count(*) from ${P} where status in ('running', 'waiting')) < ${t}`}
|
|
60
|
-
order by created_at, id limit 1 for update
|
|
61
|
-
), claimed as (
|
|
62
|
-
update ${P} set status = 'running', attempts = attempts + 1, logs_complete = null,
|
|
63
|
-
started_at = (select at from stamp), updated_at = (select at from stamp), last_seen_at = (select at from stamp),
|
|
64
|
-
token_hash = translate(rtrim(encode(sha256(convert_to(picked.bearer, 'UTF8')), 'base64'), '='), '+/', '-_')
|
|
65
|
-
from picked where ${P.id} = picked.id returning ${P}.*
|
|
66
|
-
) select to_jsonb(claimed) as record, exists (select 1 from ${P} where status = 'queued' and id <> claimed.id
|
|
67
|
-
and ${i} and (${P.organizationId} <> claimed.organization_id or ${P.reviewKey} is null or ${P.reviewKey} is distinct from claimed.review_key)
|
|
68
|
-
and ${r===void 0?_`true`:_`(select count(*) from ${P} active where active.organization_id = ${P.organizationId} and active.status in ('running', 'waiting')) + case when ${P.organizationId} = claimed.organization_id then 1 else 0 end < ${r}`})
|
|
69
|
-
and ${t===void 0?_`true`:_`(select count(*) from ${P} where status in ('running', 'waiting')) + 1 < ${t}`} as more,
|
|
70
|
-
${Dt(_`claimed`)} as credential, ${Ot(_`claimed.organization_id`)} as config, ${At(_`claimed`)} as runner
|
|
71
|
-
from claimed`,[l]=await z(this.db,[_`select pg_advisory_xact_lock(2, 0)`],c);if(!l)return;let u=G(P,l.record);return{organizationId:u.organizationId,status:Le(u),token:Se(u.publicId,u.organizationId,u.attempts,o).token,more:l.more,loaded:{credential:l.credential?st(l.credential).value:void 0,config:l.config??void 0,runner:l.runner?ct(l.runner).value:void 0}}}async authorize(e,t,n,r,i,a={}){let o=new Date(i).toISOString(),s=this.fence(r,e,{tokenHash:t,attempts:n,statuses:a.allowCompleted?[`running`,`waiting`,`completed`,`failed`,`cancelled`]:[`running`,`waiting`]}),c=_`${p(P.status,[`running`,`waiting`])} and (${P.lastSeenAt} is null or ${P.lastSeenAt} < ${new Date(i-15e3).toISOString()}::timestamptz)`,l=this.db.update(P).set({lastSeenAt:new Date(i)}).where(h(s,c)).returning(),u=this.db.select().from(P).where(h(s,_`not exists (select 1 from beaten)`)),d=a.include===`context`,f=!!a.include,m=D,ee=_`touched.organization_id`,g=e=>_`('o:' || ${Et(ee,`snapshot`)} || ${e})`,te=e=>_`replace(replace(replace(${e}, '\\', '\\\\'), '%', '\\%'), '_', '\\_')`,v=_`(${m.expiresAt} is null or ${m.expiresAt} > ${o}::timestamptz)`,[y]=await q(this.db,_`with beaten as (${l.getSQL()}), touched as (
|
|
72
|
-
select * from beaten union all ${u.getSQL()}
|
|
73
|
-
), target as (
|
|
74
|
-
select i.key, a.key as app from touched, ${se} i join ${oe} a on a.id = i.app_id
|
|
75
|
-
where i.key = touched.event->>'appId' || ':' || (touched.event->>'installationId') and i.organization_id = touched.organization_id and ${d}
|
|
76
|
-
)
|
|
77
|
-
select to_jsonb(touched) as status,
|
|
78
|
-
case when ${d} then ${jt(_`a.key = touched.event->>'appId' and a.organization_id in (touched.organization_id, '')`)} end as app,
|
|
79
|
-
case when ${f} then (select jsonb_build_object('row', to_jsonb(i), 'app', to_jsonb(a), 'credentials', cs.value, 'token', ts.value)
|
|
80
|
-
from ${se} i join ${oe} a on a.id = i.app_id join ${M} cs on cs.id = a.credentials_secret_id left join ${M} ts on ts.id = i.token_secret_id
|
|
81
|
-
where i.key = touched.event->>'appId' || ':' || (touched.event->>'installationId') and i.organization_id = touched.organization_id and i.deleted_at is null) end as installation,
|
|
82
|
-
case when ${f} then ${Dt(_`touched`)} end as credential,
|
|
83
|
-
case when ${f} then (select coalesce(jsonb_agg(${Ie(_`to_jsonb(c)`,_`s.value`)}), '[]'::jsonb)
|
|
84
|
-
from ${O} c join ${M} s on s.id = c.secret_id where c.organization_id = touched.organization_id
|
|
85
|
-
and (c.owner is null or c.owner = touched.requested_by)) end as credentials,
|
|
86
|
-
case when ${f} then ${Ot(ee)} end as config,
|
|
87
|
-
case when ${d} then ${kt(ee)} end as workspace,
|
|
88
|
-
case when ${d} then ${At(_`touched`)} end as runner,
|
|
89
|
-
case when ${f} then jsonb_build_object('rows', coalesce((select jsonb_agg(s.value) from ${le} ts join ${M} s on s.id = ts.secret_id
|
|
90
|
-
where ts.task_id = touched.id and starts_with(ts.key, 'connection-secrets:' || touched.public_id || ':') and ts.expires_at > ${o}::timestamptz), '[]'::jsonb)) end as secrets,
|
|
91
|
-
case when ${d} then (select jsonb_build_object('key', ts.key, 'value', jsonb_build_object('resolvedConnections', s.value, 'expiresAt', (extract(epoch from ts.expires_at) * 1000)::bigint))
|
|
92
|
-
from ${le} ts join ${M} s on s.id = ts.secret_id where ts.task_id = touched.id
|
|
93
|
-
and starts_with(ts.key, 'connections:' || touched.public_id || ':' || touched.generation || ':' || touched.attempts || ':') and ts.expires_at > ${o}::timestamptz limit 1) end as resolved,
|
|
94
|
-
case when ${d} then (select coalesce(jsonb_object_agg(${m.key}, ${m.value}), '{}'::jsonb) from ${m} where ${v} and (
|
|
95
|
-
${m.key} like any (select ${te(g(_`'token:' || key || ':'`))} || '%' from target)
|
|
96
|
-
or ${m.key} in (select ${g(_`'token-drop:' || key`)} from target union all select ${g(_`'token-drop:' || app`)} from target))) end as tokens
|
|
97
|
-
from touched`);if(!y)return;let b=G(P,y.status),x=(e,t)=>e?t(e):void 0;return{organizationId:b.organizationId,status:Le(b),...f?{loaded:{installation:x(y.installation,e=>lt(e).installation),credential:x(y.credential,e=>st(e).value),...y.credentials?{credentials:y.credentials.map(st)}:{},secrets:y.secrets??void 0,config:y.config??void 0,...d?{app:x(y.app,e=>$(G(oe,e.row),e.credentials)),workspace:y.workspace??void 0,runner:x(y.runner,e=>ct(e).value),resolved:x(y.resolved,e=>({id:e.key,value:e.value})),tokens:dt(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:P.context}).from(P).where(this.where(e,t)).for(`update`):[];return l.update(P).set({...Object.fromEntries(Object.entries(p).map(([e,t])=>[e,t??null])),...o?{context:_`jsonb_set(coalesce(${P.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 ${P.handle} is distinct from ${n.handle??null}::text then null else ${P.logsComplete} end`}:{},...a===void 0?{}:{answer:_`coalesce(${P.answer}, '[]'::jsonb) || ${JSON.stringify([a])}::jsonb`},...f?{engineSettings:_`coalesce(${P.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:P.id})});return!!m}async setRequestedBy(e,t,n,r){let[i]=await this.db.update(P).set({requestedBy:n,audience:_`case when ${P.audience} = 'dm:' then ${`dm:${n}`} else ${P.audience} end`,updatedAt:new Date(r)}).where(h(this.where(e,t),C(P.requestedBy))).returning({id:P.id});return!!i}async archiveStopped(e,t,i){await this.db.update(P).set({archivedAt:new Date(t),updatedAt:new Date(t)}).where(h(e===void 0?void 0:y(P.organizationId,e),i?p(P.publicId,i):void 0,C(P.archivedAt),p(P.status,[...n]),ne(_`coalesce(${P.finishedAt}, ${P.updatedAt})`,_`${new Date(t-r).toISOString()}::timestamptz`)))}async requeue(e,t,n,r={}){let[i]=await this.db.update(P).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:P.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)],_`
|
|
98
|
-
with gone as (
|
|
99
|
-
delete from ${P} where ${this.fence(e,t,n)}
|
|
100
|
-
returning id, organization_id, public_id, audience, requested_by
|
|
101
|
-
), marked as (
|
|
102
|
-
insert into ${ue} (organization_id, public_id, audience, requested_by, deleted_at)
|
|
103
|
-
select organization_id, public_id, audience, requested_by, clock_timestamp() from gone
|
|
104
|
-
), ${Mt(_`select id from gone`)}
|
|
105
|
-
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(P).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:P.id}),[s]=await z(this.db,[this.connectionLock(e,t)],_`
|
|
106
|
-
with finished as (${o.getSQL()}), ${Mt(_`select id from finished`)}
|
|
107
|
-
select id from finished`);return!!s}async continueTask(e,t,n,r,i){let[a]=await this.db.transaction(async a=>{let[o]=await a.select({context:P.context}).from(P).where(this.where(e,t)).for(`update`),c=n.context&&{...n.context,approvals:s(n.context.approvals??[],o?.context?.approvals??[])};return a.update(P).set({prompt:n.prompt??null,context:c??null,...n.event?{event:n.event}:{},...n.definition?{definition:n.definition}:{},...n.usage?{engineSettings:n.usage}:{},...n.tools?{tools:n.tools}:{},...`files`in n?{files:n.files??null}:{},...`access`in n?{access:n.access??null}:{},...n.models?{models:n.models}:{},...n.runner?{runnerKind:n.runner}:{},...`runnerId`in n?{runnerId:n.runnerId??null}:{},...`failureReply`in n?{failureReply:n.failureReply??null}:{},...`notice`in n?{notice:n.notice??null}:{},status:`queued`,attempts:0,generation:_`${P.generation} + 1`,inboxAck:-1,typingEnded:null,result:null,error:null,tokens:null,handle:null,tokenHash:null,lastSeenAt:null,logCursor:null,logsComplete:null,startedAt:null,finishedAt:null,cancelRequestedAt:null,approval:null,answer:null,archivedAt:null,updatedAt:new Date(r)}).where(this.fence(e,t,{...i,statuses:[`completed`,`failed`,`cancelled`]})).returning({id:P.id})});return!!a}async completeTask(e,t,n,r){let{outcome:i,usage:a}=n,o=new Date(r).toISOString(),s=n.logsComplete?_`, logs_complete = true`:_``,c=n.known?.length?_`, posts as (insert into ${D} (key, value, expires_at)
|
|
108
|
-
select key, ${JSON.stringify({at:r})}::jsonb, expires_at from (values ${_.join(n.known.map(t=>_`(${X(e,`delivery`,t.id)}, ${new Date(r+t.ttlMs).toISOString()}::timestamptz)`),_`, `)}) as row(key, expires_at) where exists (select 1 from finished)
|
|
109
|
-
on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at)`:_``,[l]=await z(this.db,[this.connectionLock(e,t)],_`
|
|
110
|
-
with finished as (
|
|
111
|
-
update ${P} set status = ${i.status}, result = ${JSON.stringify(i.result??null)}::jsonb,
|
|
112
|
-
error = ${i.error??null}, tokens = ${JSON.stringify(i.tokens??null)}::jsonb,
|
|
113
|
-
engine = ${a.engine??null}, model = ${a.model??null}, credential = ${a.credential??null}, runner_ms = coalesce(runner_ms, 0) + ${a.runnerElapsedMs},
|
|
114
|
-
token_count = coalesce(token_count, 0) + ${be(a.tokens)}, usage_tokens = ${Nt(_`usage_tokens`,a.tokens)},
|
|
115
|
-
last_seen_at = ${o}::timestamptz, finished_at = ${o}::timestamptz, updated_at = ${o}::timestamptz${s}
|
|
116
|
-
where ${this.fence(e,t,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]})}
|
|
117
|
-
returning id, generation
|
|
118
|
-
), ${Mt(_`select id from finished`)}, inbox as (delete from ${F} where (task_id, generation) in (select id, generation from finished))${c}
|
|
119
|
-
select exists (select 1 from finished) as completed`);return!!l?.completed}async cancel(e,n,r,i={}){let a=new Date(r).toISOString(),[o]=await z(this.db,[this.connectionLock(e,n)],_`
|
|
120
|
-
with cancelled as (
|
|
121
|
-
update ${P} set status = case when status = 'queued' then 'cancelled' else status end,
|
|
122
|
-
finished_at = case when status = 'queued' then ${a}::timestamptz else finished_at end,
|
|
123
|
-
error = case when status = 'queued' then ${t} else error end,
|
|
124
|
-
inbox_seq = case when status = 'queued' then inbox_seq else inbox_seq + 1 end,
|
|
125
|
-
cancel_requested_at = ${a}::timestamptz, updated_at = ${a}::timestamptz
|
|
126
|
-
where ${this.fence(e,n,{...i,statuses:xe})} returning id, generation, inbox_seq, status
|
|
127
|
-
), ${Mt(_`select id from cancelled where status = 'cancelled'`)}, message as (
|
|
128
|
-
insert into ${F} (task_id, seq, generation, kind, value, at)
|
|
129
|
-
select id, inbox_seq, generation, 'cancel', 'null'::jsonb, ${a}::timestamptz from cancelled where status in ('running', 'waiting')
|
|
130
|
-
) 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:P.cancelRequestedAt}).from(P).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(P.organizationId,e),n?p(P.status,n):void 0,t.status===`waiting`?Lt:void 0,t.agent?y(P.agent,t.agent):void 0,t.source?y(P.source,t.source):void 0,t.parent?y(P.parent,t.parent):void 0,t.runnerId?y(P.runnerId,t.runnerId):void 0,t.archived===void 0?void 0:t.archived?x(P.archivedAt):C(P.archivedAt),t.viewer===void 0?void 0:S(y(P.audience,``),y(P.requestedBy,t.viewer.id),t.viewer.spaces?t.viewer.spaces.length?p(P.audience,t.viewer.spaces):void 0:_`${P.audience} = any(${zt(e,t.viewer.id)})`),i?S(g(_`${P.event}->>'text'`,i),g(P.prompt,i),g(P.agent,i),g(P.publicId,i)):void 0)}pageQuery(e,t){let{before:n}=t,r=t.summary?{publicId:P.publicId,source:P.source,agent:P.agent,flow:P.flow,prompt:P.prompt,access:P.access,requestedBy:P.requestedBy,event:_`case when ${P.event} is not null then jsonb_strip_nulls(jsonb_build_object('integration', ${P.event}->>'integration', 'type', ${P.event}->>'type', 'text', ${P.event}->>'text', 'actor', ${P.event}->'actor')) end`.as(`event`),context:_`jsonb_strip_nulls(jsonb_build_object('user', ${P.context}->'user', 'approvals', ${P.context}->'approvals', 'turns', case when ${P.context}->'turns'->0 is not null then jsonb_build_array(jsonb_build_object('prompt', ${P.context}->'turns'->0->'prompt')) end))`.as(`context`),usage:_`jsonb_strip_nulls(case when coalesce(${P.engineSettings}->>'engine', ${P.engineSettings}->>'model') is not null then jsonb_build_object('engine', ${P.engineSettings}->>'engine', 'model', ${P.engineSettings}->>'model', 'effort', ${P.engineSettings}->>'effort') else jsonb_build_object('model', ${P.definition}->>'model') end || jsonb_build_object('resolvedModel', ${P.engineSettings}->>'resolvedModel'))`.as(`usage`),status:P.status,attempts:P.attempts,approval:P.approval,archivedAt:P.archivedAt,createdAt:P.createdAt,startedAt:P.startedAt,finishedAt:P.finishedAt,lastSeenAt:P.lastSeenAt,updatedAt:P.updatedAt}:d(P),i=this.db.select(r).from(P).where(h(this.filter(e,t),t.since===void 0?void 0:S(v(P.updatedAt,new Date(t.since)),t.sinceId?h(y(P.updatedAt,new Date(t.since)),v(It(P.publicId),t.sinceId)):void 0),n?this.after(n):void 0)).orderBy(...t.since===void 0?Bt(P):Vt(P));return t.limit===void 0?i:i.limit(t.limit)}after(e){if(`updatedAt`in e)return S(v(P.updatedAt,new Date(e.updatedAt)),h(y(P.updatedAt,new Date(e.updatedAt)),v(It(P.publicId),e.id)));let t=_`(${Ft(P.createdAt)}, ${It(P.publicId)}) < (${new Date(e.createdAt).toISOString()}::timestamptz, ${e.id})`;return S(v(Pt(P.status),e.rank),h(y(Pt(P.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)}):Le(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:Rt}).from(A).innerJoin(N,y(N.spaceId,A.id)).innerJoin(k,h(y(k.platform,A.integration),y(k.platformUserId,N.member))).where(h(y(A.organizationId,e),y(k.userId,t),p(Rt,n))))).map(e=>e.audience):[]}async listedSpaces(e,t){return(await R(this.db,()=>this.db.select({integration:A.integration,appId:A.app,installationId:A.installation,account:A.account,kind:A.kind,id:A.space}).from(A).where(h(y(A.organizationId,e),y(A.integration,t.integration),y(A.account,t.account??t.installationId),_`exists (select 1 from ${P} where ${P.organizationId} = ${A.organizationId} and ${P.audience} = ${Rt})`)))).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:k.platformUserId,login:k.login}).from(k).where(h(y(k.platform,t),_`${k.organizations} @> ${JSON.stringify([e])}::jsonb`)))).map(e=>K(e))}async spaceSynced(e,t){let[n]=await R(this.db,()=>this.db.select({syncedAt:A.syncedAt}).from(A).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 ${A} (organization_id, integration, app, installation, account, kind, space, claimed_at)
|
|
131
|
-
values (${e}, ${t.integration}, ${t.appId}, ${t.installationId}, ${t.account??t.installationId}, ${t.space?.kind??`channel`}, ${t.space?.id??``}, ${i}::timestamptz)
|
|
132
|
-
on conflict (organization_id, integration, account, space) do update set claimed_at = excluded.claimed_at
|
|
133
|
-
where ${r} or ${A.claimedAt} is null or ${A.claimedAt} < ${new Date(n-Te).toISOString()}::timestamptz
|
|
134
|
-
returning id`);return!!a}async saveSpaceMembers(e,t,n,r){let i=h(this.space(e,t),y(A.claimedAt,new Date(r)));if(!n){await this.db.update(A).set({claimedAt:null}).where(i);return}await z(this.db,[],_`
|
|
135
|
-
with saved as (
|
|
136
|
-
update ${A} set synced_at = ${new Date(r).toISOString()}::timestamptz, claimed_at = null
|
|
137
|
-
where ${i} returning id
|
|
138
|
-
), gone as (
|
|
139
|
-
delete from ${N} where space_id = (select id from saved) and member <> all(${_.param(n)}::text[])
|
|
140
|
-
)
|
|
141
|
-
insert into ${N} (space_id, member)
|
|
142
|
-
select saved.id, member from saved, unnest(${_.param(n)}::text[]) as member
|
|
143
|
-
on conflict do nothing`)}async spaceChanged(e,t,n,r){let i=_`select id from ${A} where ${this.space(e,t)}`;if((n.joined||n.left)&&await this.db.update(A).set({claimedAt:null}).where(this.space(e,t)),n.joined&&await this.db.execute(_`insert into ${N} (space_id, member) select id, ${n.joined} from (${i}) as saved on conflict do nothing`),n.left&&await this.db.execute(_`delete from ${N} 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(P).set({audience:n.private?Ee(t):``,event:_`case when ${P.event}->'space' is not null then jsonb_set(${P.event}, '{space,private}', ${a}) else ${P.event} end`,updatedAt:new Date(r)}).where(h(y(P.organizationId,e),y(P.space,ve(t)),_`${P.audience} not like 'dm:%'`)),await this.db.delete(A).where(this.space(e,t))}space(e,t){return h(y(A.organizationId,e),y(A.integration,t.integration),y(A.account,t.account??t.installationId),y(A.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?_`(${P.organizationId}, ${P.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:P.organizationId,publicId:P.publicId,source:P.source,agent:P.agent,flow:P.flow,requestedBy:P.requestedBy,audience:P.audience,parent:P.parent,status:P.status,approval:P.approval,approvals:_`case when ${i} then ${P.context}->'approvals' end`,answer:_`case when ${i} then ${P.answer} end`,result:_`case when ${i} then ${P.result} end`,error:_`case when ${i} then ${P.error} end`,attempts:P.attempts,archivedAt:P.archivedAt,createdAt:P.createdAt,startedAt:P.startedAt,finishedAt:P.finishedAt,updatedAt:P.updatedAt}).from(P).where(S(h(p(P.organizationId,n),v(P.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, ${P.status} as status, ${P.approval} as approval,
|
|
144
|
-
${P.audience} as audience, ${P.requestedBy} as requested_by,
|
|
145
|
-
(select coalesce(jsonb_agg(line order by ${n}), '[]'::jsonb) from (
|
|
146
|
-
select line from ${I} cross join jsonb_array_elements(${I.lines}) line
|
|
147
|
-
where ${I.taskId} = ${P.id} and ${I.seqTo} > tail.after and ${n} > tail.after
|
|
148
|
-
order by ${n} limit ${t}) page) as lines
|
|
149
|
-
from unnest(${_.param(e.map(e=>e.organizationId))}::text[], ${_.param(e.map(e=>e.id))}::text[], ${_.param(e.map(e=>e.after))}::int[])
|
|
150
|
-
with ordinality as tail(organization_id, public_id, after, n)
|
|
151
|
-
join ${P} on ${P.organizationId} = tail.organization_id and ${P.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(P.status,xe)}))::int`.as(`active`),waiting:_`(count(*) filter (where ${Lt}))::int`.as(`waiting`)}).from(P).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:P.audience,requestedBy:P.requestedBy,active:_`count(*)::int`}).from(P).where(h(y(P.organizationId,e),p(P.status,xe),C(P.archivedAt))).groupBy(P.audience,P.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?Bt({status:i.status,createdAt:i.createdAt,publicId:i.publicId}):Vt({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(P).where(p(P.status,[`running`,`waiting`])));return e?.value??0}async running(){return(await R(this.db,()=>this.db.select({organizationId:P.organizationId,publicId:P.publicId,runner:P.runnerKind,runnerId:P.runnerId,status:P.status,attempts:P.attempts,generation:P.generation,handle:P.handle,tokenHash:P.tokenHash,lastSeenAt:P.lastSeenAt,logsComplete:P.logsComplete,startedAt:P.startedAt,cancelRequestedAt:P.cancelRequestedAt,updatedAt:P.updatedAt}).from(P).where(p(P.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 (
|
|
152
|
-
insert into ${I} (task_id, seq_from, seq_to, lines)
|
|
153
|
-
select accepted.id, ${n[0].seq}, ${n[n.length-1].seq}, ${JSON.stringify(n)}::jsonb from accepted
|
|
154
|
-
on conflict (task_id, seq_from) do update set seq_to = excluded.seq_to, lines = excluded.lines
|
|
155
|
-
)`:_``,[c]=await q(this.db,_`
|
|
156
|
-
with accepted as (
|
|
157
|
-
update ${P} set log_cursor = ${i.cursor}, log_seq = ${i.seq}, log_bytes = ${i.bytes}
|
|
158
|
-
where ${this.fence(e,t,o)} and coalesce(log_seq, 0) = ${r.seq} and coalesce(log_cursor, -1) = ${r.cursor}
|
|
159
|
-
returning id
|
|
160
|
-
) ${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:F.seq,generation:F.generation,at:F.at,kind:F.kind,value:F.value}).from(F).innerJoin(P,y(P.id,F.taskId)).where(h(this.where(e,t),y(P.generation,n),p(P.status,xe),y(F.generation,n),_`${F.seq} > ${r}`)).orderBy(b(F.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:P.context}).from(P).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 ${D}
|
|
161
|
-
where key = ${X(t,`delivery`,s.key)}
|
|
162
|
-
and value->'sending'->>'owner' = ${s.owner}
|
|
163
|
-
and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&ge(s),d=u?_`, context = coalesce(${P.context}, '{}'::jsonb) || jsonb_build_object('admissions',
|
|
164
|
-
coalesce(${P.context}->'admissions', '{}'::jsonb) || ${JSON.stringify(u)}::jsonb)`:c?_`, context = jsonb_set(coalesce(${P.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(c)}::jsonb)`:_``,f=_`(${D.value}->'sending'->>'count')::int`,p=_`coalesce((select n from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n)
|
|
165
|
-
where n <= ${f} and item->>'admission' = ${s?.through??null}::text limit 1), 0)`,[m]=await q(e,_`
|
|
166
|
-
with held as materialized (${l}), next as (
|
|
167
|
-
update ${P} set inbox_seq = inbox_seq + 1, updated_at = ${new Date(a).toISOString()}::timestamptz${d}
|
|
168
|
-
where ${this.fence(t,n,{generation:o,statuses:xe})}
|
|
169
|
-
and exists(select 1 from held) returning id, inbox_seq, generation
|
|
170
|
-
), admitted as (
|
|
171
|
-
insert into ${F} (task_id, seq, generation, kind, value, at)
|
|
172
|
-
select id, inbox_seq, generation, ${r}, ${JSON.stringify(u?{...i,admissions:u}:i??null)}::jsonb, ${new Date(a).toISOString()}::timestamptz from next returning seq
|
|
173
|
-
) ${s?_`, acknowledged as (
|
|
174
|
-
update ${D} set value = (${D.value} - 'sending') || jsonb_build_object(
|
|
175
|
-
'items', coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n) where n > ${p}), '[]'::jsonb)) ||
|
|
176
|
-
case when ${f} > ${p} then jsonb_build_object('sending',
|
|
177
|
-
(${D.value}->'sending') || jsonb_build_object('count', ${f} - ${p}, 'until', ${a+Ne}::bigint)) else '{}'::jsonb end
|
|
178
|
-
where key in (select key from held) and exists(select 1 from admitted)
|
|
179
|
-
)`:_``}
|
|
180
|
-
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,_`
|
|
181
|
-
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
|
|
182
|
-
from ${P} left join ${F} i on i.task_id = ${P.id} and i.generation = ${P.generation} and i.seq > ${i}
|
|
183
|
-
where ${this.fence(e,t,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})} group by ${P.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)],_`
|
|
184
|
-
with current as (
|
|
185
|
-
select id from ${P} where ${this.fence(e,n,{...i,generation:r.generation,statuses:void 0})}
|
|
186
|
-
and inbox_seq >= ${r.seq} and (status in ('running', 'waiting') or (status in ('completed', 'failed', 'cancelled') and inbox_ack >= ${r.seq})) for update
|
|
187
|
-
), applied as (
|
|
188
|
-
delete from ${F} where task_id in (select id from current) and generation = ${r.generation} and seq <= ${r.seq} returning seq, kind, value
|
|
189
|
-
), answers as (
|
|
190
|
-
select jsonb_agg(a.value order by a.seq) as value from jsonb_to_recordset(${JSON.stringify(r.answers??[])}::jsonb) a(seq int, value jsonb)
|
|
191
|
-
where exists (select 1 from applied where applied.seq = a.seq and applied.kind = 'ask')
|
|
192
|
-
), updated as (
|
|
193
|
-
update ${P} set inbox_ack = greatest(inbox_ack, ${r.seq}), answer = coalesce(answer, '[]'::jsonb) || coalesce(answers.value, '[]'::jsonb),
|
|
194
|
-
status = case when exists(select 1 from applied where kind = 'cancel') then 'cancelled'
|
|
195
|
-
when exists(select 1 from applied where kind = 'approve' and value->>'approvalId' = ${P.approval}->>'id') then 'running' else status end,
|
|
196
|
-
approval = case when exists(select 1 from applied where kind = 'approve' and value->>'approvalId' = ${P.approval}->>'id') then null else approval end,
|
|
197
|
-
finished_at = case when exists(select 1 from applied where kind = 'cancel') then now() else finished_at end,
|
|
198
|
-
error = case when exists(select 1 from applied where kind = 'cancel') then ${t} else error end,
|
|
199
|
-
updated_at = now()
|
|
200
|
-
from answers where id in (select id from current) returning id, status
|
|
201
|
-
), ${Mt(_`select id from updated where status = 'cancelled'`)}
|
|
202
|
-
select exists (select 1 from current) as accepted, (select status from updated) as status`);return a?.accepted?a.status??void 0:void 0}async pendingInbox(e){return(await R(this.db,()=>this.db.select().from(P).where(h(e===void 0?void 0:y(P.organizationId,e),p(P.status,[`running`,`waiting`]),_`exists (select 1 from ${F} where ${F.taskId} = ${P.id} and ${F.generation} = ${P.generation})`)))).map(e=>({organizationId:e.organizationId,status:Le(e)}))}};function Ut(e,t,n,r){return e.db.transaction(async i=>{let[a]=await i.insert(w).values({organizationId:e.organizationId,slug:t.id,name:t.name,description:t.description??null,source:t.source,repo:t.repo??null,path:t.path??null,currentVersion:0,createdAt:V(t.createdAt),updatedAt:V(t.updatedAt)}).onConflictDoUpdate({target:[w.organizationId,w.slug],set:{slug:t.id}}).returning(),o=He(a);if(r&&o.currentVersion!==r.currentVersion)return;let[s]=o.currentVersion?await i.select().from(T).where(h(y(T.agentId,a.id),y(T.version,o.currentVersion))):[],c=s&&Ue(s,t.id),l=!!(c&&Ye(c.definition,n.definition)&&c.systemPrompt===n.systemPrompt&&Ye(c.files,n.files)),u=l?c:{...n,version:o.currentVersion+1},d={...t,currentVersion:u.version,createdAt:o.createdAt,...o.settings?{settings:o.settings}:{},updatedAt:o.updatedAt};if(l&&Ye(d,o))return{record:o,version:u,unchanged:l};d={...d,updatedAt:t.updatedAt};let f=l?_``:_`with published as (
|
|
203
|
-
insert into ${T} (agent_id, version, definition, system_prompt, files, commit, imported_from, created_at)
|
|
204
|
-
values (${a.id}, ${u.version}, ${JSON.stringify(u.definition)}::jsonb, ${u.systemPrompt},
|
|
205
|
-
${u.files?JSON.stringify(u.files):null}::jsonb, ${u.commit??null}, ${u.importedFrom}, ${V(u.createdAt).toISOString()}::timestamptz)
|
|
206
|
-
returning version
|
|
207
|
-
)`;return await i.execute(_`${f} update ${w} set
|
|
208
|
-
name = ${d.name}, description = ${d.description??null}, problems = null, source = ${d.source},
|
|
209
|
-
repo = ${d.repo??null}, path = ${d.path??null},
|
|
210
|
-
current_version = ${l?_`${u.version}`:_`(select version from published)`}, updated_at = ${V(d.updatedAt).toISOString()}::timestamptz
|
|
211
|
-
where id = ${a.id}`),{record:d,version:u,unchanged:l}})}function Wt(e){let t=w;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:He(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 Gt(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(T).values({agentId:_`(select id from ${w} 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:T.id})).length>0}function Kt(e){let t=T,n=_`${w.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>h(y(w.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:w.slug,key:n}).from(t).innerJoin(w,y(w.id,t.agentId)).where(h(e.mine(w.organizationId),r)).orderBy(b(w.slug),b(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:Ue(e,t)}))},put:async(t,n)=>{await Gt(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=_`(select id from ${w} 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 qt=(e,t)=>_`(select ${P.id} from ${P} where ${P.organizationId} = ${e.organizationId} and ${P.publicId} = ${t})`;function Jt(e){let t=P;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:Le(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,{audience:s,space:c}=ye(o),l={source:o.source,status:r.status,agent:o.agent,flow:o.flow,reviewKey:fe(o)??null,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 Yt(e,t){return(await e.db.select({engine:ce.engine,conversation:ce.conversation,savedAt:ce.savedAt}).from(ce).innerJoin(P,y(P.id,ce.taskId)).where(h(e.mine(P.organizationId),y(P.publicId,t))).orderBy(b(ce.savedAt))).map(e=>({...e,savedAt:U(e.savedAt)}))}function Xt(e){let t=ce,n=_`${P.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(P.organizationId),y(P.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(P,y(P.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:qt(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,qt(e,i)),y(t.conversation,a)))}}}function Zt(e){let t=I,n=_`(line->>'seq')::int`,r=_`${P.publicId} || ':' || lpad(${n}::text, 6, '0')`;return{key:r,split:(r,i,a)=>h(e.mine(P.organizationId),y(P.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(P,y(P.id,t.taskId)).innerJoin(_`jsonb_array_elements(${t.lines}) line`,_`true`).where(i).orderBy(b(P.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 Qt(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,qt(e,r)),te(t.seqTo,i),f(t.seqFrom,i)))}}}async function Qt(e,t,n){n.length&&await e.db.insert(I).values({taskId:qt(e,t),seqFrom:n[0].seq,seqTo:n[n.length-1].seq,lines:n}).onConflictDoUpdate({target:[I.taskId,I.seqFrom],set:{seqTo:_`excluded.seq_to`,lines:_`excluded.lines`}})}function $t(e){let t=F,n=_`${P.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>h(e.mine(P.organizationId),y(P.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(P,y(P.id,t.taskId)).where(r).orderBy(b(P.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:qt(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,qt(e,r)),y(t.seq,i)))}}}function en(e){let t=P;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),x(t.runnerMs),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).flatMap(({row:e,installationKey:t})=>{let n=We(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:be(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 tn=e({DrizzleStore:()=>nn,taskSecretRows:()=>rn}),nn=class e{db;organizationId;now;encryption;locks;notifications;recordChannel(e,t){return`record_${Ke(`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)=>Ut(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:Wt(this),agentversion:Kt(this),app:Xe(this),installation:$e(this),credential:at(this),task:Jt(this),history:Xt(this),tasklog:Zt(this),inbox:$t(this),usage:en(this),delivery:pt(this,`delivery`),login:pt(this,`login`),config:ht(this),runner:bt(this),snapshot:pt(this,`snapshot`),connection:vt(this)},this.posts=mt(this),this.secrets=wt(this)}posts;secrets;kind(e,t){return e===`delivery`&&t?.startsWith(`approval:`)?this.posts:e===`snapshot`&&t&&St(t)?this.secrets:this.kinds[e]}static async webhookTarget(e,t,n){let[r]=await R(e,()=>e.select({app:W,credentials:M.value,installation:Y,token:Q.value}).from(W).innerJoin(M,y(M.id,W.credentialsSecretId)).leftJoin(Y,h(y(Y.appId,W.id),y(Y.key,n??``),C(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:M.value,installation:Y,token:Q.value}).from(Y).innerJoin(W,y(W.id,Y.appId)).innerJoin(M,y(M.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)),C(Y.deletedAt))).limit(1));if(i)return{organizationId:i.app.organizationId,app:$(i.app,i.credentials),bound:{organizationId:i.installation.organizationId,installation:Ze(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:Ze(r.installation,r.app,r.token)}}:{}}}static async appRecord(e,t){let[n]=await R(e,()=>e.select({row:W,credentials:M.value}).from(W).innerJoin(M,y(M.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:M.value}).from(W).innerJoin(M,y(M.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)}:%`}`,C(Y.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await R(e,()=>e.select({organizationId:P.organizationId}).from(P).where(h(y(P.publicId,t),y(P.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await R(this.db,()=>this.db.select({row:W,credentials:M.value,sharedKey:Z.key}).from(W).innerJoin(M,y(M.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=O,n=this.db.select({row:t,sealed:M.value}).from(t).innerJoin(M,y(M.id,t.secretId)).where(h(this.mine(t.organizationId),e.owner?S(C(t.owner),y(t.owner,e.owner)):C(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:pe(e.owner??void 0,e.label),value:tt(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 Qe(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:j,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`?j.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 Ht(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=>Ae(e,`runner`,t,n));if(e===`installation`)return this.transaction(`installation:${t}`,async e=>{let r=await et(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}=_e(t);return this.transaction(nt(this,r),async e=>{let i=await rt(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 it(e,i.find(e=>e.id===t.id),t.id,t.value);return!!o?.length})}at(){return V(this.now())}live(e){return S(C(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(D).set({value:_`jsonb_strip_nulls(${D.value} || ${JSON.stringify(t)}::jsonb)`}).where(h(y(D.key,X(this.organizationId,`login`,e)),this.live(D.expiresAt),_`(${D.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?p(_`${D.value}->>${e}`,t):_`${D.value}->>${e} = ${t}`))).returning({value:_`${D.value}`,...this.notification(`login`,e)});return r?.value}completeLogin(e,t,n){return me(this,e,t,n)}async listAgentsWithVersions(e){return(await R(this.db,()=>this.db.select({record:w,version:T}).from(w).leftJoin(T,h(y(T.agentId,w.id),y(T.version,w.currentVersion))).where(h(this.mine(w.organizationId),e===void 0?void 0:Array.isArray(e)?e.length?p(w.slug,e):_`false`:y(w.slug,e))).orderBy(b(w.slug)))).map(({record:e,version:t})=>({record:He(e),...t?{version:Ue(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${H(e.q)}%`:void 0,n=_`${w.source} <> 'builtin'`,r=this.db.select({record:w,version:Fe}).from(w).leftJoin(T,h(y(T.agentId,w.id),y(T.version,w.currentVersion))).where(h(this.mine(w.organizationId),e.slug===void 0?void 0:y(w.slug,e.slug),e.after?_`(${n}, ${w.slug}) > (${e.after[0]===`1`}, ${e.after.slice(2)})`:void 0,e.source?y(w.source,e.source):void 0,t?S(g(w.slug,t),g(w.name,t),g(w.description,t),g(w.repo,t)):void 0,e.platform?_`${T.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(n,b(w.slug));return(await R(this.db,()=>e.limit===void 0?r:r.limit(e.limit))).map(({record:e,version:t})=>({record:He(e),...t?{version:Pe(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:Fe}).from(T).innerJoin(w,y(w.id,T.agentId)).where(h(this.mine(w.organizationId),y(w.slug,e),n===void 0?t===void 0?void 0:f(T.version,w.currentVersion):ne(T.version,n),t===void 0?void 0:te(T.version,n===void 0?_`${w.currentVersion} + 1 - ${t}`:n-t))).orderBy(b(T.version));return(await R(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:Pe(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(D).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:D.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 Qt(this,r,i)}async approvalPostsDue(e,t){let n=E;return R(this.db,()=>this.db.select({organizationId:n.organizationId,id:n.key,value:n.value}).from(n).where(h(this.live(n.expiresAt),S(f(n.retryAt,V(e)),h(C(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`?S(y(j.publicId,t.runner),y(j.name,t.runner)):_`false`),t.defaults&&r.push(e===`runner`?y(j.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(w.slug,t.agent):_`false`),t.active&&r.push(e===`installation`?S(C(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`?j.owner:e===`credential`?O.owner:ae.owner;r.push(S(C(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(D).where(y(D.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 Gt(this,t,n);if(e===`connection`)return this.transaction(_t(this,t),async e=>{let{secret:r,...i}=n,a=r?await Ve(e.db,r):null,o=await e.db.insert(ae).values({organizationId:e.organizationId,key:t,owner:i.owner,record:i,secretId:a}).onConflictDoNothing().returning({id:ae.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(E).values({organizationId:this.organizationId,key:t,...r}).onConflictDoUpdate({target:[E.organizationId,E.key],set:r,setWhere:f(E.expiresAt,this.at())}).returning({id:E.id})).length>0}return(await this.db.insert(D).values({key:X(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:D.key,set:{value:n,expiresAt:i},setWhere:f(D.expiresAt,this.at())}).returning({key:D.key})).length>0}async claimDeliveryLease(e,t,n){let r=_`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(D).values({key:X(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:D.key,set:{value:_`${D.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:_`${D.expiresAt} <= clock_timestamp()`}).returning({value:D.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=h(y(D.key,X(this.organizationId,`delivery`,e)),_`${D.value}->>'owner' = ${t} and ${D.expiresAt} > clock_timestamp()`),a=_`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(D).where(i).returning({key:D.key}):await this.db.update(D).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:D.key})).length>0}async updateDelivery(e,t,n,r={}){let i=h(y(D.key,X(this.organizationId,`delivery`,e)),_`${D.value}->>'owner' = ${t}`,this.live(D.expiresAt));return(n===void 0?await this.db.delete(D).where(i).returning({key:D.key}):await this.db.update(D).set({value:n,expiresAt:r.ttlMs===void 0?null:V(this.now()+r.ttlMs)}).where(i).returning({key:D.key})).length>0}listHistory(e){return Yt(this,e)}async installationApp(e){let[t]=await R(this.db,()=>this.db.select({installation:Y,app:W,credentials:M.value,token:Q.value,sharedKey:Z.key}).from(Y).innerJoin(W,h(y(W.id,Y.appId),p(W.organizationId,[this.organizationId,``]))).innerJoin(M,y(M.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),C(Y.deletedAt))));return t&&{installation:Ze(t.installation,t.app,t.token),app:$(t.app,t.credentials,t.sharedKey)}}async conversationState(e){let t=re(D,`unseen`),n=re(D,`batch`),[r]=await R(this.db,()=>this.db.select({record:D.value,unseen:t.value,batch:n.value,task:P}).from(_`(select 1) as anchor`).leftJoin(D,h(y(D.key,X(this.organizationId,`delivery`,e)),this.live(D.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(P,h(this.mine(P.organizationId),y(P.publicId,_`${D.value}->>'taskId'`),y(P.flow,`default`))));return{...r?.record?{record:r.record}:{},...r?.unseen?{unseen:r.unseen}:{},...r?.batch?{batch:r.batch}:{},...r?.task?{status:Le(r.task)}:{}}}async heldTokens(e,t){let[n]=await R(this.db,()=>q(this.db,_`select ${ut(this.organizationId,e,t)} as tokens`));return dt(this.organizationId,n?.tokens??{})}async holdToken(e){let t=D,n=e=>X(this.organizationId,`snapshot`,e);await this.db.execute(_`insert into ${t} (key, value, expires_at)
|
|
212
|
-
select ${n(e.key)}, ${JSON.stringify(e.value)}::jsonb, ${V(this.now()+e.ttlMs).toISOString()}::timestamptz
|
|
213
|
-
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 `)}
|
|
214
|
-
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 ${P} where ${this.mine(P.organizationId)} and ${P.publicId} = ${e} and ${P.status} in ('queued', 'running', 'waiting')),
|
|
215
|
-
${rn(t,_`select id from active`)}
|
|
216
|
-
select exists (select 1 from active) as active`);return!!n?.active}async dispatchState(e){let t=D,n=e=>X(this.organizationId,`delivery`,e),r=e.conversation??``,i=e=>_`(select ${t.value} from ${t} where ${t.key} = ${n(e)} and ${this.live(t.expiresAt)})`,a=e=>_`(${e} is null or ${e} = (select requester from member))`,o=e=>_`${e} = ${this.organizationId}`,s=(e,t)=>_`(select coalesce(jsonb_agg(${Ie(_`to_jsonb(r)`,_`s.value`)}), '[]'::jsonb)
|
|
217
|
-
from ${e} r join ${M} s on s.id = r.secret_id where ${t})`,c=Ge(this.organizationId,`snapshot`),l=e.files.map(e=>`${H(c+e)}%`),[u]=await q(this.db,_`
|
|
218
|
-
with claim as (
|
|
219
|
-
insert into ${t} (key, value, expires_at)
|
|
220
|
-
values (${n(e.delivery.key)}, ${JSON.stringify({at:e.delivery.at,owner:e.delivery.owner,pending:!0})}::jsonb, ${V(e.delivery.at+e.delivery.ttlMs).toISOString()}::timestamptz)
|
|
221
|
-
on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at
|
|
222
|
-
where ${t.expiresAt} <= ${this.at().toISOString()}::timestamptz
|
|
223
|
-
returning key
|
|
224
|
-
), conversation as (select ${i(r)} as value),
|
|
225
|
-
member as (select ${k.userId} as requester, ${k.name} as name, ${k.email} as email from ${k}
|
|
226
|
-
where ${k.platform} = ${e.actor?.platform??null}::text and ${k.platformUserId} = ${e.actor?.id??null}::text
|
|
227
|
-
and ${k.organizations} ? ${this.organizationId} limit 1)
|
|
228
|
-
select exists (select 1 from claim) as claimed,
|
|
229
|
-
(select to_jsonb(a) from ${w} a where ${o(_`a.organization_id`)} and a.slug = ${e.agent}) as record,
|
|
230
|
-
(select to_jsonb(v) from ${T} v join ${w} a on a.id = v.agent_id and v.version = a.current_version
|
|
231
|
-
where ${o(_`a.organization_id`)} and a.slug = ${e.agent}) as version,
|
|
232
|
-
(select value from conversation) as conversation,
|
|
233
|
-
${i(`since:${r}`)} as unseen,
|
|
234
|
-
${i(`batch:${r}`)} as batch,
|
|
235
|
-
(select to_jsonb(t) from ${P} t, conversation c where ${o(_`t.organization_id`)} and t.public_id = c.value->>'taskId' and t.flow = 'default') as task,
|
|
236
|
-
(select jsonb_build_object('id', requester, 'name', name, 'email', email) from member) as member,
|
|
237
|
-
${s(_`${O}`,_`${o(_`r.organization_id`)} and ${a(_`r.owner`)}`)} as credentials,
|
|
238
|
-
${s(_`${j}`,_`${o(_`r.organization_id`)} and r.is_default and ${a(_`r.owner`)}`)} as runners,
|
|
239
|
-
(select coalesce(jsonb_agg(${Ie(_`c.record`,_`s.value`)} order by c.key), '[]'::jsonb) from ${ae} c left join ${M} s on s.id = c.secret_id
|
|
240
|
-
where ${o(_`c.organization_id`)} and ${a(_`c.owner`)}) as connections,
|
|
241
|
-
coalesce((select jsonb_strip_nulls(jsonb_build_object('slug', ${L.slug}, 'name', ${L.name}))
|
|
242
|
-
from ${L} where ${o(L.organizationId)}), '{}'::jsonb) as workspace,
|
|
243
|
-
(select coalesce(jsonb_object_agg(${t.key}, ${t.value}), '{}'::jsonb) from ${t}
|
|
244
|
-
where ${this.live(t.expiresAt)} and ${t.key} like any(${_.param(l)}::text[])) as files,
|
|
245
|
-
${ut(this.organizationId,[e.installation.id],[e.installation.app])} as tokens`);if(!u?.claimed)return{claimed:!1};let d=u.record?He(G(w,u.record)):void 0,f=u.version&&d?Ue(G(T,u.version),d.id):void 0;return{claimed:!0,loaded:{...d?{record:d}:{},...f?{version:f}:{},conversation:{...u.conversation?{record:u.conversation}:{},...u.unseen?{unseen:u.unseen}:{},...u.batch?{batch:u.batch}:{},...u.task?{status:Le(G(P,u.task))}:{}},...u.member?{member:u.member}:{},credentials:u.credentials.map(st),runners:u.runners.map(ct),connections:u.connections,...u.workspace?{workspace:u.workspace}:{},files:Object.fromEntries(Object.entries(u.files).map(([e,t])=>[e.slice(c.length),t])),tokens:dt(this.organizationId,u.tokens)}}}async markConversation(e,t,n,r,i){await this.db.update(D).set({value:_`${D.value} || ${JSON.stringify({at:r,seen:n})}::jsonb`,expiresAt:V(this.now()+i)}).where(h(y(D.key,X(this.organizationId,`delivery`,e)),_`${D.value}->>'taskId' = ${t}`,this.live(D.expiresAt)))}async appendUnseen(e,t,n){let r=_`coalesce((${D.value}->>'version')::bigint, jsonb_array_length(${D.value}->'messages') + (${D.value}->>'more')::bigint)`,i={messages:[{...t,sequence:1}],more:0,version:1,epoch:Je()};await this.db.execute(_`
|
|
246
|
-
insert into ${D} (key, value, expires_at)
|
|
247
|
-
select ${X(this.organizationId,`delivery`,`since:${e}`)}, ${JSON.stringify(i)}::jsonb, ${V(this.now()+n).toISOString()}::timestamptz
|
|
248
|
-
where exists (select 1 from ${D} where key = ${X(this.organizationId,`delivery`,e)} and ${this.live(D.expiresAt)})
|
|
249
|
-
on conflict (key) do update set value = case when ${D.expiresAt} <= ${this.at().toISOString()}::timestamptz then excluded.value else
|
|
250
|
-
${D.value} || jsonb_build_object('version', ${r} + 1,
|
|
251
|
-
'messages', case when jsonb_array_length(${D.value}->'messages') < ${50} then
|
|
252
|
-
(${D.value}->'messages') || jsonb_build_array(${JSON.stringify(t)}::jsonb || jsonb_build_object('sequence', ${r} + 1)) else ${D.value}->'messages' end,
|
|
253
|
-
'more', (${D.value}->>'more')::int + case when jsonb_array_length(${D.value}->'messages') < ${50} then 0 else 1 end) end,
|
|
254
|
-
expires_at = excluded.expires_at
|
|
255
|
-
`)}async acknowledgeUnseen(e,t,n){await this.db.update(D).set({value:ft(t)}).where(h(y(D.key,X(this.organizationId,`delivery`,`since:${e}`)),_`${D.value}->>'epoch' is not distinct from ${n??null}::text`,this.live(D.expiresAt)))}async appendBatch(e,t,n,r,i){let a=je(void 0,t,n,r),o=V(this.now()+i);await this.db.insert(D).values({key:X(this.organizationId,`delivery`,e),value:a,expiresAt:o}).onConflictDoUpdate({target:D.key,set:{value:_`case when ${D.expiresAt} <= ${this.at().toISOString()}::timestamptz then excluded.value else
|
|
256
|
-
(select ${D.value} || excluded.value || jsonb_build_object(
|
|
257
|
-
'items', prefix || coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(pending) with ordinality e(item,n) where n > greatest(jsonb_array_length(pending) - 50, 0)), '[]'::jsonb),
|
|
258
|
-
'more', coalesce((${D.value}->>'more')::int, 0) + coalesce((excluded.value->>'more')::int, 0) + greatest(jsonb_array_length(pending) - 50, 0),
|
|
259
|
-
'mustReply', coalesce((${D.value}->>'mustReply')::boolean, false) or coalesce((excluded.value->>'mustReply')::boolean, false) or exists(select 1 from jsonb_array_elements(pending) with ordinality e(item,n) where n <= greatest(jsonb_array_length(pending) - 50, 0) and item->'event'->>'mustReply' = 'true'))
|
|
260
|
-
from (select coalesce(jsonb_agg(item order by n) filter (where n <= coalesce((${D.value}->'sending'->>'count')::int, 0)), '[]'::jsonb) as prefix,
|
|
261
|
-
coalesce(jsonb_agg(item order by n) filter (where n > coalesce((${D.value}->'sending'->>'count')::int, 0)), '[]'::jsonb) || (excluded.value->'items') as pending
|
|
262
|
-
from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n)) queued) end`,expiresAt:o}})}async claimBatch(e,t){let n=X(this.organizationId,`delivery`,e),r=(await q(this.db,_`
|
|
263
|
-
with held as materialized (
|
|
264
|
-
select key as batch_key, value as previous from ${D}
|
|
265
|
-
where key = ${n} and value->>'owner' = ${t} and ${this.live(D.expiresAt)} for update
|
|
266
|
-
), claimed as (
|
|
267
|
-
update ${D} set value = (
|
|
268
|
-
select ready || jsonb_build_object('more', 0, 'mustReply', false, 'sending', jsonb_build_object(
|
|
269
|
-
'owner', ${t}::text, 'until', ${this.now()+Ne}::bigint,
|
|
270
|
-
'count', jsonb_array_length(ready->'items'), 'more', ready->'more', 'mustReply', ready->'mustReply'))
|
|
271
|
-
from (select (value - 'sending') || jsonb_build_object(
|
|
272
|
-
'items', coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(value->'items') with ordinality e(item,n)
|
|
273
|
-
where n > greatest(jsonb_array_length(value->'items') - 50, 0)), '[]'::jsonb),
|
|
274
|
-
'more', coalesce((value->>'more')::int, 0) + coalesce((value->'sending'->>'more')::int, 0) + greatest(jsonb_array_length(value->'items') - 50, 0),
|
|
275
|
-
'mustReply', coalesce((value->>'mustReply')::boolean, false) or coalesce((value->'sending'->>'mustReply')::boolean, false) or exists(
|
|
276
|
-
select 1 from jsonb_array_elements(value->'items') with ordinality e(item,n)
|
|
277
|
-
where n <= greatest(jsonb_array_length(value->'items') - 50, 0) and item->'event'->>'mustReply' = 'true')) as ready) as available)
|
|
278
|
-
from held where key = held.batch_key and coalesce((value->'sending'->>'until')::bigint, 0) <= ${this.now()}
|
|
279
|
-
and jsonb_array_length(value->'items') > 0
|
|
280
|
-
returning value
|
|
281
|
-
) select value, true as claimed from claimed
|
|
282
|
-
union all select previous, false from held where not exists (select 1 from claimed)
|
|
283
|
-
`))[0];return r?.claimed?{...r.value,more:r.value.sending?.more,mustReply:r.value.sending?.mustReply}:r?.value.sending?null:void 0}async finishBatch(e,t,n,r){let i=_`(${D.value}->'sending'->>'count')::int`,a=r===void 0?i:_`coalesce((select n from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n)
|
|
284
|
-
where n <= ${i} and item->>'admission' = ${r} limit 1), 0)`;return(await this.db.update(D).set({value:_`case when ${n} and ${i} > ${a} then
|
|
285
|
-
${D.value} || jsonb_build_object('items',
|
|
286
|
-
coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n)
|
|
287
|
-
where n > ${a}), '[]'::jsonb),
|
|
288
|
-
'sending', (${D.value}->'sending') || jsonb_build_object(
|
|
289
|
-
'count', ${i} - ${a},
|
|
290
|
-
'until', ${this.now()+Ne}::bigint))
|
|
291
|
-
else (${D.value} - 'sending') || jsonb_build_object('items',
|
|
292
|
-
case when ${n} then coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${D.value}->'items') with ordinality as entries(item, n)
|
|
293
|
-
where n > ${i}), '[]'::jsonb) else
|
|
294
|
-
coalesce((select jsonb_agg(item order by n) from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n)
|
|
295
|
-
where n > greatest(jsonb_array_length(${D.value}->'items') - 50, 0)), '[]'::jsonb) end,
|
|
296
|
-
'more', coalesce((${D.value}->>'more')::int, 0) + case when ${n} then 0 else coalesce((${D.value}->'sending'->>'more')::int, 0) + greatest(jsonb_array_length(${D.value}->'items') - 50, 0) end,
|
|
297
|
-
'mustReply', coalesce((${D.value}->>'mustReply')::boolean, false) or (not ${n} and (coalesce((${D.value}->'sending'->>'mustReply')::boolean, false) or exists(select 1 from jsonb_array_elements(${D.value}->'items') with ordinality e(item,n)
|
|
298
|
-
where n <= greatest(jsonb_array_length(${D.value}->'items') - 50, 0) and item->'event'->>'mustReply' = 'true')))) end`}).where(h(y(D.key,X(this.organizationId,`delivery`,e)),_`${D.value}->'sending'->>'owner' = ${t}`,this.live(D.expiresAt))).returning({key:D.key})).length>0}async take(e,t,n){if(e===`delivery`||e===`snapshot`){let[r]=await this.db.delete(D).where(h(y(D.key,X(this.organizationId,e,t)),this.live(D.expiresAt),n?_`${D.value} @> ${JSON.stringify(n)}::jsonb`:void 0)).returning({value:D.value});return r?.value}let r=await this.get(e,t);if(!(r===void 0||Object.entries(n??{}).some(([e,t])=>r[e]!==t)))return await this.delete(e,t),r}async usageSummary(e,t){let n=P,r=_`case groups.kind when 'agent' then ${n.agent} when 'engine' then coalesce(${n.engine}, 'unknown') else coalesce(${Y.key}, 'none') end`,i=t?r:_`groups.kind || ':' || (${r})`,a=(await R(this.db,()=>q(this.db,_`
|
|
299
|
-
select ${i} as key, count(*)::int as tasks, sum(${n.runnerMs})::float8 as runner_ms,
|
|
300
|
-
jsonb_agg(${n.usageTokens} order by ${n.publicId}) filter (where ${n.usageTokens} is not null) as tokens
|
|
301
|
-
from ${n} left join ${Y} on ${Y.id} = ${n.installationId}
|
|
302
|
-
cross join unnest(${_.param(t?[t]:[`agent`,`installation`,`engine`])}::text[]) groups(kind)
|
|
303
|
-
where ${this.mine(n.organizationId)} and ${n.runnerMs} is not null and ${n.finishedAt} >= ${new Date(e).toISOString()}::timestamptz
|
|
304
|
-
group by 1 order by 1
|
|
305
|
-
`))).map(e=>{let t=e.tokens?.reduce(we,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=P,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 ${De(e.tz)}, 'YYYY-MM-DD')`,r=h(this.mine(t.organizationId),x(t.runnerMs),te(t.finishedAt,V(e.since)),e.until===void 0?void 0:ne(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 (
|
|
306
|
-
select ${t.agent} from ${t} where ${r} group by ${t.agent}
|
|
307
|
-
order by ${i[e.top.by]} desc, ${t.agent} limit ${e.top.count}
|
|
308
|
-
) 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
|
-
select ${n} as key, ${a} as part, ${i.tasks}::int as tasks,
|
|
310
|
-
${i.runnerMs}::float8 as runner_ms,
|
|
311
|
-
${i.tokenCount}::float8 as token_count
|
|
312
|
-
from ${t} ${o}
|
|
313
|
-
where ${r}
|
|
314
|
-
group by 1, 2
|
|
315
|
-
`)),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};Ce(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(_`
|
|
316
|
-
with tombstones as (
|
|
317
|
-
delete from ${ue} where (organization_id, public_id) in (
|
|
318
|
-
select organization_id, public_id from ${ue}
|
|
319
|
-
where deleted_at < ${new Date(this.now()-6e5).toISOString()}::timestamptz
|
|
320
|
-
order by deleted_at limit ${e}
|
|
321
|
-
)
|
|
322
|
-
), expired_state as (
|
|
323
|
-
delete from ${D} where expires_at <= clock_timestamp() and key in (
|
|
324
|
-
select key from ${D} where expires_at <= clock_timestamp() order by expires_at limit ${e}
|
|
325
|
-
)
|
|
326
|
-
), expired_posts as (
|
|
327
|
-
delete from ${E} where id in (
|
|
328
|
-
select id from ${E} where expires_at <= clock_timestamp() order by expires_at limit ${e}
|
|
329
|
-
)
|
|
330
|
-
), expired_task_secrets as (
|
|
331
|
-
delete from ${le} where id in (
|
|
332
|
-
select id from ${le} where expires_at <= clock_timestamp() order by expires_at limit ${e}
|
|
333
|
-
) returning secret_id
|
|
334
|
-
), expired_secrets as (
|
|
335
|
-
delete from ${M} where id in (select secret_id from expired_task_secrets)
|
|
336
|
-
), lists as (
|
|
337
|
-
select expired.key from ${ie} as expired
|
|
338
|
-
where expired.key like 'k:%' and expired.expires_at <= ${t}::timestamptz
|
|
339
|
-
and not exists (select 1 from ${ie} as newer where newer.key = expired.key and newer.seq > expired.seq)
|
|
340
|
-
order by expired.expires_at limit ${e}
|
|
341
|
-
), expired_items as (
|
|
342
|
-
select key, seq from ${ie} where key in (select key from lists) order by seq limit ${e}
|
|
343
|
-
), expired_queue as (
|
|
344
|
-
select key, seq from ${ie} where key like 'q:%' and expires_at <= ${t}::timestamptz order by expires_at limit ${e}
|
|
345
|
-
)
|
|
346
|
-
delete from ${ie} where (key, seq) in (
|
|
347
|
-
select key, seq from expired_items union all select key, seq from expired_queue
|
|
348
|
-
)`)}};function rn(e,t){let n=_.join(e.map(e=>_`(${e.id}, ${e.value}, ${V(e.expiresAt).toISOString()}::timestamptz)`),_`, `);return _`task_secret_rows as (select * from (values ${n}) as row(key, value, expires_at)
|
|
349
|
-
where not exists (select 1 from ${le} where task_id in (${t}) and key = row.key)),
|
|
350
|
-
sealed as (insert into ${M} (value) select value from task_secret_rows where exists (${t}) returning id, value),
|
|
351
|
-
kept as (insert into ${le} (task_id, key, secret_id, expires_at)
|
|
352
|
-
select (${t}), r.key, s.id, r.expires_at from task_secret_rows r join sealed s on s.value = r.value)`}export{tn as n,Tt as r,nn as t};
|
package/dist/task-N0qhnKpK.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{$ as t,N as n,T as r,V as i,b as a,bt as o,et as s,f as c,gt as l,m as u,mt as d,o as f,u as p,vt as m,w as h,y as g,yt as _}from"./state-Br-Fuaxg.js";import{R as ee,l as v,u as y,w as b}from"./config-D_RuO6gX.js";import{a as x,f as S}from"./connections-Cswv7r8Z.js";import{v as C}from"./app-server-BTpa5GBV.js";import{t as w}from"./integrations-BVmsk64f.js";import{a as te}from"./definition-4on4SG5J.js";import{B as T,C as E,D as ne,L as re,R as D,S as ie,_ as ae,d as oe,s as se,u as O,w as k}from"./dispatch-BaW2X6Sc.js";import{t as A}from"./sessions-DIz9fyRN.js";import{_ as ce}from"./approvals-CRwkc9vB.js";import{i as le,r as ue}from"./view-D-rbQ1Kz.js";import{g as de,l as j,n as M,s as N,v as fe}from"./actions-CkMAM1Km.js";import{i as P,o as F}from"./mcp-BGx48pyR.js";import{a as pe,d as me,r as he,s as ge,u as _e}from"./exec-CAaYFJD1.js";import{s as ve}from"./http-DRk8cDjf.js";import{t as ye}from"./tools-oQvFAnh5.js";import{i as be,n as xe,r as Se}from"./async-CNhQ4wyZ.js";import I from"node:path";import L from"node:process";import{execFile as R}from"node:child_process";import z from"node:net";import B from"node:os";import{createHash as Ce}from"node:crypto";import V from"node:http";import H from"node:fs/promises";import{promisify as U}from"node:util";import{gunzipSync as W,gzipSync as G}from"node:zlib";const K=e=>Ce(`sha256`).update(e).digest(`hex`);function q(e,t,n){if(e===`claude`)return I.join(E(),process.env.CLAUDE_CODE_PROJECT_DIR_NAME||`coder`,`${t}.jsonl`);let r=new Date(JSON.parse(n.slice(0,n.indexOf(`
|
|
2
|
-
`))).timestamp).toISOString().slice(0,19).replaceAll(`:`,`-`);return I.join(A(),`sessions`,...r.slice(0,10).split(`-`),`rollout-${r}-${t}.jsonl`)}function we(e,t){return t.flatMap(e=>[e,...e.startsWith(`Bearer `)?[e.slice(7)]:[]]).filter(e=>e.length>=8).flatMap(e=>[e,JSON.stringify(e).slice(1,-1)]).sort((e,t)=>t.length-e.length).reduce((e,t)=>e.replaceAll(t,`[REDACTED]`),e)}function Te(e,t){let n=new Map;return{async restore(){let t=await e(`/history`).catch(e=>(console.error(`coder runner: saved history could not be listed`,e),[])),r=t.at(-1),i;return await Promise.all(t.map(async({engine:t,conversation:a})=>{if(ie.test(a))try{let{data:o,state:s}=await e(`/history/${a}`);a===r.conversation&&(i=s);let c=W(Buffer.from(o,`base64`)).toString(`utf8`);for(let e of c.split(`
|
|
3
|
-
`))e.trim()&&JSON.parse(e);let[l]=await ne({engine:t},a);l||(l=q(t,a,c),await H.mkdir(I.dirname(l),{recursive:!0,mode:448}),await H.writeFile(l,c,{mode:384})),n.set(a,{engine:t,hash:K(c),file:l})}catch(e){console.error(`coder runner: history ${a} could not be restored`,e)}})),{...r?{resume:{...i,engine:r.engine,threadId:r.conversation}}:{},restored:!!(r&&n.has(r.conversation))}},async save(r){let i=new Map([...n].map(([e,{engine:t}])=>[e,t]));if(r?.engine===`claude`||r?.engine===`codex`)for(let e of k(r))i.delete(e),i.set(e,r.engine);let a=await t();for(let[t,o]of i){let i=n.get(t)?.file,s=i&&await H.stat(i).then(e=>e.isFile(),()=>!1)?i:(await ne({engine:o},t))[0],c=s?await H.readFile(s,`utf8`).catch(()=>``):``,l=t===r?.threadId;if(!c||!l&&K(c)===n.get(t)?.hash)continue;let u=G(we(c,a)).toString(`base64`);if(u.length>3145728){console.error(`coder runner: history ${t} is too large to save`);continue}let d=l?{previousThreadIds:r.previousThreadIds}:void 0;await e(`/history`,{method:`POST`,body:JSON.stringify({engine:o,conversation:t,data:u,...d?{state:d}:{}})}).then(()=>n.set(t,{engine:o,hash:K(c),file:s}),e=>console.error(`coder runner: history ${t} was not saved`,e))}}}}var J=e({INBOX_COMMAND:()=>Xe,INBOX_SOCKET:()=>qe,applyTaskMessage:()=>Ue,checkout:()=>Q,checkoutCache:()=>De,inboxSocket:()=>Je,liveConnections:()=>Ve,prepareRepo:()=>Le,receiveInbox:()=>Ze,releaseCheckout:()=>Oe,requestInboxControl:()=>ze,runTask:()=>Ge,sendInbox:()=>Ye,serveTaskServer:()=>$e,serverConnections:()=>Be,startInboxControl:()=>Re,taskServer:()=>X,withCheckoutLock:()=>$});const Y=U(R);function X(){let e=L.env.CODER_SERVER?.replace(/\/+$/,``),t=L.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function Z(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function Ee(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function Q(e,t,n,r,i){let a=e.event?.repo,o=I.join(t,`work`);if(!a)return await H.mkdir(o,{recursive:!0}),o;let s=e=>H.stat(e).then(Boolean,()=>!1);if(await s(I.join(o,`.git`))&&(r||await s(I.join(t,`.runner-task.json`))))return o;if(!Ee(a.defaultBranch))throw Error(`Invalid repository ref`);let c=new URL(a.cloneUrl),l=w[e.event.integration]?.repos?.cloneHosts??[];if(c.protocol!==`https:`||!l.includes(c.hostname))throw Error(`Repository clone host does not match the integration`);await H.mkdir(t,{recursive:!0});let u=await H.mkdtemp(I.join(t,`.git-credential-`)),d=I.join(u,`token`),f=I.join(u,`askpass.sh`);n&&(await H.writeFile(d,n,{mode:384}),await H.writeFile(f,`#!/bin/sh
|
|
4
|
-
case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
|
|
5
|
-
`,{mode:448}));let p=n?{env:{...L.env,GIT_ASKPASS:f,CODER_GIT_TOKEN_FILE:d,GIT_TERMINAL_PROMPT:`0`}}:void 0;try{let e={...p,signal:i,maxBuffer:67108864};if(r)return await $(r,async()=>{if(!await H.stat(I.join(r,`.git`)).catch(()=>void 0)){let t=await H.mkdtemp(`${r}-clone-`);try{await Y(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,t],e),await H.rename(t,r)}finally{await H.rm(t,{recursive:!0,force:!0})}}await Y(`git`,[`-C`,r,`worktree`,`prune`,`--expire`,`now`],e),await Y(`git`,[`-C`,r,`remote`,`set-url`,`origin`,a.cloneUrl],e),await Y(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await Y(`git`,[`-C`,r,`worktree`,`add`,`--detach`,o,`FETCH_HEAD`],e)}),o;await s(I.join(o,`.git`))||await Y(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,o],e),await Y(`git`,[`-C`,o,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await Y(`git`,[`-C`,o,`checkout`,`--detach`,`FETCH_HEAD`],e)}finally{await H.rm(u,{recursive:!0,force:!0})}return o}function De(e){let t=e.event?.repo;if(t){if(![t.owner,t.name].every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e)))throw Error(`Invalid repository name`);return c(`checkouts`,new URL(t.cloneUrl).hostname,t.owner,t.name)}}async function $(e,t){return _(`${e}.lock`,t,1/0,3e5)}async function Oe(e){if(!(await H.stat(I.join(e,`.git`)).catch(()=>void 0))?.isFile())return;let t=await Y(`git`,[`-C`,e,`rev-parse`,`--git-common-dir`]).catch(async t=>{if(await H.stat(I.join(e,`.git`)).catch(()=>void 0))throw t});if(!t)return;let{stdout:n}=t,r=I.resolve(e,n.trim());await $(I.dirname(r),async()=>{await H.stat(I.join(e,`.git`)).catch(()=>void 0)&&await Y(`git`,[`--git-dir`,r,`worktree`,`remove`,`--force`,e])})}const ke=1048576;async function Ae(e){let t={maxBuffer:67108864};await Y(`git`,[`-C`,e,`add`,`--intent-to-add`,`--all`],t);let{stdout:n}=await Y(`git`,[`-C`,e,`diff`,`HEAD`],t);return Buffer.byteLength(n)>ke?`${Buffer.from(n).subarray(0,ke).toString()}\n[diff truncated]`:n}async function je(e,t,n){L.env.CODER_SERVER=`unix:${n}`,e.dashboard&&(L.env.CODER_DASHBOARD=e.dashboard),delete L.env.CODER_TASK_TOKEN,delete L.env.APP_TOKEN;for(let t of Object.keys(e.tokens))delete L.env[F(t)];for(let t of e.engineCredentials??[])for(let e of Object.keys(t.credential.env))delete L.env[e];let{CODEX_AUTH_JSON:r,[v]:i,...a}=e.credential.env;if(Object.assign(L.env,a),L.env[y]=JSON.stringify(e.config??{}),L.env.CODER_MCP_MODE=`cloud`,L.env.CODER_MCP_CONNECTION_ENV=JSON.stringify(S(e.connections??{})),!r)return;let o=await H.mkdtemp(I.join(t,`.codex-`));return await H.writeFile(I.join(o,`auth.json`),r,{mode:384}),L.env.CODEX_HOME=o,o}async function Me(e,t){let{ANTHROPIC_API_KEY:n,CLAUDE_CODE_OAUTH_TOKEN:r}=e.credential.env;if(e.credential.engine!==`claude`||!n&&!r)return;let i=await H.mkdtemp(I.join(t,`.claude-`));return L.env.CLAUDE_CONFIG_DIR=i,L.env.CLAUDE_CODE_PROJECT_DIR_NAME=`coder`,i}async function Ne(e,t,n){let r=n?await H.readFile(I.join(n,`auth.json`),`utf8`).catch(()=>``):``,i=(e=``)=>{let t=[];try{JSON.parse(e,(e,n)=>(typeof n==`string`&&/token|key/i.test(e)&&t.push(n),n))}catch{e&&console.error(`coder runner: history credentials could not be parsed`)}return t};return[t,...Object.values(e.tokens),...e.postToken?[e.postToken]:[],...Object.values(e.connectionEnv??{}),...Object.entries(e.credential.env).filter(([e])=>/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|AUTH/i.test(e)).map(([,e])=>e),...i(e.credential.env.CODEX_AUTH_JSON),...e.engineCredentials?.flatMap(e=>[...Object.values(e.credential.env),...i(e.credential.env.CODEX_AUTH_JSON)])??[],...i(r)]}async function Pe(e,t,n,r){if(!r)return;let i=await H.readFile(I.join(r,`auth.json`),`utf8`).catch(()=>``);i&&n.id&&i!==n.authJson&&await Z(e.server,e.token,t,`/credential`,{method:`POST`,body:JSON.stringify({authJson:i,credentialId:n.id})}).catch(()=>{}),await H.rm(r,{recursive:!0,force:!0})}function Fe(e,t,n,r){let i=new Map;return{credentials:async a=>{let o=e.engineCredentials??[],s=a.engine===`custom`?b(t).models?.[a.model??``]?.envKey??`OPENAI_API_KEY`:void 0,c=o.filter(e=>s?e.credential.env[s]!==void 0:e.credential.engine===a.engine),l=e.task.runner===`http`||e.task.models?.some(e=>!e.credential);if(!c.length)return l?[{}]:[];let u=Object.fromEntries(o.flatMap(e=>Object.keys(e.credential.env)).map(e=>[e,void 0]));return Promise.all(c.map(async e=>{let{CODEX_AUTH_JSON:a,...o}=e.credential.env,s=e.id===r(),c=a&&s?L.env.CODEX_HOME:n.CODEX_HOME;if(a&&!s){if(!i.has(e.id)){let n=await H.mkdtemp(I.join(t,`.codex-`));await H.writeFile(I.join(n,`auth.json`),a,{mode:384}),i.set(e.id,{home:n,authJson:a})}c=i.get(e.id).home}return{...u,...o,CODEX_HOME:c,CLAUDE_CONFIG_DIR:s?L.env.CLAUDE_CONFIG_DIR:n.CLAUDE_CONFIG_DIR}}))},release:async(e,t)=>{await Promise.all([...i].map(([n,{home:r,authJson:i}])=>Pe(e,t,{id:n,authJson:i},r))),i.clear()}}}const Ie=[[`bun.lock`,`bun`,[`install`,`--frozen-lockfile`]],[`bun.lockb`,`bun`,[`install`,`--frozen-lockfile`]],[`pnpm-lock.yaml`,`npx`,[`-y`,`pnpm`,`install`,`--frozen-lockfile`]],[`yarn.lock`,`npx`,[`-y`,`yarn`,`install`,`--frozen-lockfile`]],[`package-lock.json`,`npm`,[`ci`]]];async function Le(e,t){let n=X(),r=await Z(n.server,n.token,e),i=r.task.event;if(!i?.repo)throw Error(`The task has no repository`);let a=await Q(r.task,t,r.tokens[i.integration]);for(let[e,t,n]of Ie)if(await H.stat(I.join(a,e)).catch(()=>void 0)){await Y(t,n,{cwd:a,maxBuffer:67108864}).catch(()=>{});break}let o=(await Y(`git`,[`-C`,a,`rev-parse`,`HEAD`])).stdout.trim();return console.log(`coder-snapshot ${o}`),{sha:o}}function Re(e,t,n){let r=new Set,i=T(I.join(e,`inbox-control`),{apply(e){let i=e.entry;if(e.task!==t||!Number.isInteger(i?.seq)||i.seq<0||!Number.isInteger(i.generation)||i.generation<0||![`steer`,`ask`,`approve`].includes(i.kind))throw Error(`Invalid engine inbox command`);let a=n(i);return r.add(a),a.finally(()=>r.delete(a)).catch(()=>{}),a}});return{close:async()=>{i(),await Promise.allSettled([...r])}}}function ze(e,t,n){let r=D({task:t,generation:n.generation,seq:n.seq});return re(`apply`,{task:t,entry:n},{dir:I.join(e,`inbox-control`),id:r,keepReply:!0,timeoutMs:3e4})}function Be(e){return async()=>{let t=await fetch(e.url,{headers:{authorization:`Bearer ${e.token}`},signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`Coder server answered ${t.status}`);let n=await t.json(),r=x(n.connections??{},n.connectionEnv),i=P(n.task,n.tokens,{...e,...n.dashboard?{dashboard:n.dashboard}:{}});return{mcp:r.mcp,env:{...r.env,...i.env},warnings:[]}}}function Ve(e){return async t=>{let n=O(e.mcp,L.env).find(e=>e.name===`conversation`)?.env;return(n?.CODER_REPLY_URL&&n.CODER_REPLY_TOKEN?Be({url:n.CODER_REPLY_URL,token:n.CODER_REPLY_TOKEN}):j(e.mcp))(t)}}function He(e){return{...typeof e?.model==`string`&&e.model?{model:e.model}:{},...e?.access===`read-only`||e?.access===`auto`?{access:e.access}:{}}}async function Ue(e,t,n,a=Ve(t)){let o={task:t.name?.slice(6)??t.id,generation:n.generation,seq:n.seq},c=I.join(i(e,t.id),`inbox-control`,`${D(o)}.transcript.jsonl`);return _(`${c}.lock`,async()=>{let i=await H.readFile(c,`utf8`).catch(e=>{if(e.code===`ENOENT`)return``;throw e});for(let e of i.split(`
|
|
6
|
-
`)){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}if(D(t.command)===D(o)&&Object.hasOwn(t,`result`))return t.result}let l=n.value;if(n.kind===`steer`){let i=String(l?.text??n.value??``),c=!1;t.threadId||(c=await s(e,t.id,()=>{let n=r(e,t.id)??t;if(n.threadId)return!1;if(n.steerClosed||![`running`,`queued`].includes(n.status))throw Error(`Task stopped before it opened a conversation`);return u(e,t.id,i),!0})),c||await de(e,r(e,t.id)??t,i,{command:o,resolveConnections:a,...He(l)})}else if(n.kind===`ask`){let r=await N(e,t,String(l?.question??n.value??``),{command:o,...typeof l?.model==`string`&&l.model?{model:l.model}:{}});return r.finalMessage??r.error?.message??``}else if(n.kind===`approve`){let n=String(l?.approvalId??l?.id??``);try{await M(e,t,n,l?.decision===`deny`||l?.decision===`decline`?`decline`:`accept`,{...typeof l?.reason==`string`?{reason:l.reason}:{},command:o,resolveConnections:a})}catch(r){if(!(r instanceof Error&&r.message.includes(`already approved`)))throw r;f(e,t.id,{kind:`status`,message:`Ignored an answer to approval ${n}: ${r.message}`})}}await H.mkdir(I.dirname(c),{recursive:!0}),await H.appendFile(c,JSON.stringify({command:o,result:null})+`
|
|
7
|
-
`)})}async function We(e){for(let t=1;;t++)try{return await e()}catch(e){let n=e.status;if(n!==void 0&&n<500||t>=6)throw e;console.error(`coder runner: Coder server did not take the request, trying again: ${e instanceof Error?e.message:e}`),await new Promise(e=>setTimeout(e,1e3*2**(t-1)))}}async function Ge(e,t){let n=X();C(`runner.credentials.start`);let i=await We(()=>Z(n.server,n.token,e)).catch(async t=>{throw await Z(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`failed`,error:t instanceof Error?t.message:String(t)})}).catch(()=>{}),t});C(`runner.credentials.done`);let a=i.task.event,o=a&&i.tokens[a.integration],s=L.env.CODER_INBOX_MODE===`poll`;delete L.env.CODER_INBOX_MODE;let c=L.env.CODER_CHECKOUT_CACHE;delete L.env.CODER_CHECKOUT_CACHE;let u,d,f={CODEX_HOME:L.env.CODEX_HOME,CLAUDE_CONFIG_DIR:L.env.CLAUDE_CONFIG_DIR},p,m,h=new AbortController,g=setTimeout(()=>h.abort(Error(`timeout`)),i.timeoutMs??18e5),_=setInterval(()=>{Z(n.server,n.token,e,`/heartbeat`,{method:`POST`,signal:AbortSignal.timeout(1e4)}).catch(()=>{})},3e4),v,b=async()=>{let a=l(I.join(t,`.runner-task.json`)),o=v&&a?.generation===i.generation?r(v,a.id):void 0;await p?.save(o??void 0).catch(e=>console.error(`coder runner: history upload failed`,e)),d&&await H.rm(d,{recursive:!0,force:!0}),await Pe(n,e,{id:x,authJson:i.credential.env.CODEX_AUTH_JSON},u)},x=i.task.models?.[0]?.credential,S=Fe(i,t,f,()=>x),te=!1,T=async t=>{te=!0,await b(),await S.release(n,e),await We(()=>Z(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify(t)}))};try{let r=(async()=>{m=await $e(n),[u,d]=await Promise.all([je(i,t,m.socketPath),Me(i,t)]),p=i.task.flow==="default"?Te((t,r)=>Z(n.server,n.token,e,t,r),()=>Ne(i,n.token,u)):void 0,C(`runner.environment.done`);let r=await p?.restore();return C(`runner.history.done`),r})();C(`runner.checkout.start`);let a=Promise.race([Q(i.task,t,o,c,h.signal),new Promise((e,t)=>h.signal.addEventListener(`abort`,()=>t(h.signal.reason),{once:!0}))]).then(e=>(v=e,C(`runner.checkout.done`),e)),[l,g]=await Promise.allSettled([a,r]);if(l.status===`rejected`)throw l.reason;if(g.status===`rejected`)throw g.reason;return h.signal.throwIfAborted(),await Ke(e,t,n,i,l.value,o,s,h.signal,b,T,g.value,async e=>{if(e.credential===x)return!0;let n=i.engineCredentials?.find(t=>t.id===e.credential);if(e.credential&&!n)return!1;await b();for(let[e,t]of Object.entries(f))t===void 0?delete L.env[e]:L.env[e]=t;return i.credential=n?.credential??{engine:ee(e.model).engine,env:{}},x=e.credential,[u,d]=await Promise.all([je(i,t,m.socketPath),Me(i,t)]),!0},S.credentials)}catch(e){throw te||await T({status:`failed`,error:e instanceof Error?e.message:String(e),...i.task.event&&w[i.task.event.integration]?.isUninstalled?.(e)?{installationRevoked:!0}:{}}).catch(e=>console.error(`coder runner: result delivery failed`,e)),e}finally{clearTimeout(g),clearInterval(_),await m?.close(),delete L.env[y],delete L.env.CODER_MCP_MODE,delete L.env.CODER_MCP_CONNECTION_ENV,delete L.env.CODER_SERVER,delete L.env.CODER_DASHBOARD}}async function Ke(e,s,c,_,v,y,x,S,C,T,E,ne,re){let D=_.task.event,ie=_.task.flow==="default"?_.postToken:y,O=new AbortController,k,A,j=!1,M=await Ze({root:s,generation:_.generation,apply:async t=>{let n=k&&r(v,k);if(!n)throw Error(`The task is not ready`);if(t.kind===`cancel`){await fe(v,n),j=!0,await G(),await C();return}return ze(i(v,n.id),e,t)}}),N=M.ack().seq>=0?M.ack():void 0,P,F=()=>{if(P)return P;if(!N)return Promise.resolve();let t=N;return P=Z(c.server,c.token,e,`/ack`,{method:`POST`,body:JSON.stringify(t),signal:O.signal}).then(()=>{N&&N.seq<=t.seq&&(N=void 0)}).catch(e=>{throw(e.status===401||e.status===403)&&(N=void 0),e}).finally(()=>{P=void 0}),P},ve=async()=>{let t=await Z(c.server,c.token,e,`/messages?after=${M.ack().seq}`,{signal:O.signal});try{t.length&&await M.apply(t)}finally{t.length&&M.ack().seq>=0&&(N=M.ack()),await F().catch(()=>{})}},L=setInterval(()=>{F().catch(()=>{})},1e3),R=l(I.join(s,`.runner-task.json`)),z=new Map,B=new Map,Ce=(_.logCursor??-1)+1,V=0,H=[],U,W=()=>{for(let e of B.values())for(let t of e()){if(V>=2097152)continue;let e=Buffer.byteLength(t)>65536?`A task log entry exceeded 64 KB`:t;H.push({seq:Ce++,at:Date.now(),level:`out`,line:e}),V+=Buffer.byteLength(e)}return U||(U=(async()=>{for(;H.length;){let t=0,n=H.slice(0,100).filter(e=>(t+=Buffer.byteLength(JSON.stringify(e)))<524288);if(!n.length)throw Error(`Task log batch is too large`);let r=!1;for(let t=0;t<3;t++)try{await Z(c.server,c.token,e,`/logs`,{method:`POST`,signal:AbortSignal.timeout(5e3),body:JSON.stringify({entries:n})}),r=!0;break}catch(e){if(t===2)throw e;await new Promise(e=>setTimeout(e,1e3))}r&&H.splice(0,n.length)}})().finally(()=>{U=void 0}),U)},G=()=>W().catch(e=>{console.error(`coder runner: log delivery failed`,e)}),K,q,we=!1,Te=R?.generation===_.generation?R.usageStart:0,J=R?.generation===_.generation?R.turn:0,Y=J+1,X=e=>pe(w[D.integration],D,e,ie,_.task.author),Ee=()=>k?ce(i(v,k)):[],Q=async t=>{await Z(c.server,c.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`waiting`,approval:t,approvals:Ee()})})},De=0,$=async t=>{let n=k&&r(v,k)?.fallbacks||[];n.length<=De||(De=n.length,await Z(c.server,c.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`running`,fallbacks:n,model:t.model,...t.credential?{credential:t.credential}:{}})}).catch(e=>console.error(`coder runner: fallback report failed`,e)))},Oe=new Set,ke=e=>xe(i(v,e)).then(t=>{for(let n of t){let t=ye.find(e=>e.name===n.tool);if(!t)continue;let r=Se(t,n.runId,v,e,n.timeout,{integrationToken:t.platform?_.tokens[t.platform]:void 0,onModel:re,stop:S}).catch(e=>console.error(`coder runner: ${n.tool} ${n.runId} failed`,e)).finally(()=>Oe.delete(r));Oe.add(r)}}).catch(e=>console.error(`coder runner: async calls could not be read`,e));try{let l=_.task.models?.[0]?.model,h=E?.restored&&E.resume?.engine===(l?ee(l).engine:oe(te(_.task),b(v)).engine),y,C=he({cwd:v,...R?.generation===_.generation?{resumeTaskId:R.id,resumeTurn:J}:{},...E?.resume?{resume:E.resume}:{},agent:_.task.agent,flow:_.task.flow,task:h?{..._.task,context:{..._.task.context,messages:void 0}}:_.task,toolEnvironment:{tokens:_.tokens},replyEndpoint:{url:`${c.server}/tasks/${encodeURIComponent(e)}`,token:c.token,..._.dashboard?{dashboard:_.dashboard}:{}},connections:_.connections,connectionEnv:_.connectionEnv,post:_.task.source===D?.integration,...ie?{postToken:ie}:{},onStart(e){A=e},onWorker(e,t){y=t,t.once(`error`,()=>{y=void 0})},async onTask(e,t){if(k=e,S.aborted){let t=r(v,e);throw t&&await fe(v,t),S.reason}B.has(e)||B.set(e,d(I.join(i(v,e),`log.jsonl`))),z.has(e)||z.set(e,m(i(v,e),t=>{(!t||t===`log.jsonl`)&&W().catch(()=>{}),(!t||t===`async.json`)&&ke(e)})),W().catch(()=>{}),ke(e),o(I.join(s,`.runner-task.json`),{generation:_.generation,id:e,turn:t??J,usageStart:Te}),await F().catch(()=>{}),await ve().catch(()=>{}),clearInterval(K),x&&(K=setInterval(()=>{q||=ve().catch(()=>{}).finally(()=>{q=void 0})},4e3))},onApproval:Q,async onModel(e){return await $(e),ne(e)},onFlowModel:re}),w=new Promise((e,t)=>{let n=()=>t(S.reason);S.addEventListener(`abort`,n,{once:!0}),S.aborted&&n()}),O=await Promise.race([C,w]);if(Y=(O.turn??J)+1,k&&_.task.flow==="default"){let o=[...O.postedMessages??[]],s=t(v,k,y);try{for(;;){let t=n(v,k);for(let[e,n]of t.slice(Y).entries()){let t=_e(_.task,n,j,n);t.skipped&&f(v,k,{kind:`status`,message:ue}),_.task.source===D?.integration&&t.text&&!t.duplicate&&o.push(...await ge(v,k,Y+e,()=>X(t.text))),O.reply=t.text,O.ok=n.status===0,O.error=n.error?.message}Y=Math.max(Y,t.length);let l=r(v,k);if(l?.status===`running`||l?.status===`queued`){await Promise.race([me(v,k,Q,(e,t,n)=>ae(e,t,{...n,turn:Y,worker:y,signal:S})),w]);continue}if(l&&!a(l.pid)&&g(v,k)){if(l.status!==`completed`){let e=p(v,k).length;f(v,k,{kind:`status`,message:`Discarded ${e} queued follow-up${e===1?``:`s`}: the task is ${l.status}.`});continue}let[t,...n]=p(v,k);for(let e of n)u(v,k,e);if(t){await de(v,l,t,{resolveConnections:Be({url:`${c.server}/tasks/${encodeURIComponent(e)}`,token:c.token}),onWorker:e=>{y=e}});continue}}if(y?.exitCode===null&&!y.signalCode||g(v,k)||be(i(v,k))){await Promise.race([s.wait(3e4),w]);continue}if(!we){clearInterval(K),await q,await M.close(),we=!0;continue}if(n(v,k).length<=Y)break}}finally{s.close()}let l=(r(v,k)?.turnUsage??[]).slice(Te).flatMap(e=>e.tokens?[e.tokens]:[]);O.tokens=l.length?l.reduce((e,t)=>le(e,t)):se(v,k)?.tokens??O.tokens,o.length&&(O.postedMessages=o)}for(await G();N;)S.throwIfAborted(),await F().catch(()=>{}),N&&await new Promise(e=>setTimeout(e,1e3));return await T({status:j?`cancelled`:O.ok?`completed`:`failed`,result:O.reply??O.result,...!O.ok&&O.error?{error:O.error}:{},tokens:O.tokens,...Ee().length?{approvals:Ee()}:{},...O.postedMessages?.length?{postedMessages:O.postedMessages}:{},...D?.repo?{diff:await Ae(v).catch(()=>void 0)}:{}}),O}catch(t){if(S.aborted){A?.requestStop();let t=new Set([...k?[k]:[],...A?.runningIds()??[],...h(v).filter(t=>t.name===`agent:${e}`||A&&t.flowRunId===A.runId).map(e=>e.id)]);for(let e of t){B.has(e)||B.set(e,d(I.join(i(v,e),`log.jsonl`)));let t=r(v,e);t&&await fe(v,t)}}throw await G(),t}finally{for(let e of z.values())e.close();await U?.catch(()=>{}),clearInterval(L),clearInterval(K),O.abort(),await Promise.allSettled([q,P]),we||await M.close()}}const qe=`/tmp/coder-inbox.sock`,Je=e=>I.join(B.tmpdir(),`coder-${Ce(`sha256`).update(e).digest(`hex`).slice(0,24)}.sock`);function Ye(e,t){return new Promise((n,r)=>{let i=V.request({socketPath:e,path:`/messages`,method:`POST`,headers:{"content-type":`application/json`}},e=>{let t=``;e.on(`data`,e=>{t+=e}),e.on(`end`,()=>{if(e.statusCode!==200)return r(Error(`Task inbox answered ${e.statusCode}`));try{n(JSON.parse(t))}catch(e){r(e)}}),e.on(`error`,r)});i.setTimeout(1e4,()=>i.destroy(Error(`Task inbox timed out`))),i.on(`error`,r),i.end(JSON.stringify({entries:t}))})}const Xe=`const http=require('node:http');const req=http.request({socketPath:process.env.CODER_INBOX_SOCKET||'/tmp/coder-inbox.sock',path:'/messages',method:'POST',headers:{'content-type':'application/json'}},res=>{res.pipe(process.stdout);res.on('end',()=>{if(res.statusCode!==200)process.exitCode=1})});req.on('error',()=>{process.exitCode=1});req.setTimeout(10000,()=>req.destroy());req.end(JSON.stringify({entries:JSON.parse(process.env.CODER_INBOX_MESSAGES)}));`;async function Ze(e){let t=I.join(e.root,`.runner-inbox.json`),n=l(t),r=n?.generation===e.generation?n:{generation:e.generation,seq:-1,answers:[]},i=Promise.resolve(),a=n=>{let a=async()=>{if(!Array.isArray(n)||n.some(t=>!Number.isInteger(t.seq)||t.seq<0||t.generation!==e.generation||![`steer`,`ask`,`approve`,`cancel`].includes(t.kind)))throw Error(`Invalid task messages`);for(let i of[...n].sort((e,t)=>e.seq-t.seq)){if(i.seq<=r.seq)continue;let n=await e.apply(i),a={generation:e.generation,seq:i.seq,answers:[...r.answers??[],...i.kind===`ask`?[{seq:i.seq,value:n}]:[]]};o(t,a),r=a}return r},s=i.then(a,a);return i=s.then(()=>{},()=>{}),s},s=e.socketPath??L.env.CODER_INBOX_SOCKET??Je(e.root);if(await H.lstat(s).then(()=>!0,()=>!1)){if(!await new Promise((e,t)=>{let n=z.connect(s);n.once(`connect`,()=>{n.destroy(),e(!1)}),n.once(`error`,n=>n.code===`ECONNREFUSED`?e(!0):t(n))}))throw Error(`The task inbox is already running`);await H.unlink(s)}let c=V.createServer(async(e,t)=>{if(e.method!==`POST`||e.url!==`/messages`){t.writeHead(404).end();return}let n=``;try{for await(let t of e)if(n+=t,Buffer.byteLength(n)>1048576)throw Error(`Messages too large`);let r=await a(JSON.parse(n).entries);t.writeHead(200,{"content-type":`application/json`}).end(JSON.stringify(r))}catch{t.writeHead(409).end()}});return await H.mkdir(e.root,{recursive:!0}),await new Promise((e,t)=>{c.once(`error`,t),c.listen(s,e)}),await H.chmod(s,384),{apply:a,ack:()=>r,close:async()=>{await i,await new Promise(e=>c.close(()=>e()))}}}const Qe=new Set([`authorization`,`proxy-authorization`,`cookie`,`host`,`connection`,`keep-alive`,`upgrade`,`transfer-encoding`,`content-length`,`content-encoding`]);async function $e(e){let t=await H.realpath(await H.mkdtemp(`/tmp/coder-`)),n=I.join(t,`server.sock`),r=V.createServer(ve(async t=>{let n=new URL(t.url);if(!n.pathname.startsWith(`/admin/`))return Response.json({error:`Not found`},{status:404});let r=new URL(`${e.server}${n.pathname}${n.search}`),i=new Headers(t.headers);for(let e of Qe)i.delete(e);i.set(`authorization`,`Bearer ${e.token}`);let a=await fetch(r,{method:t.method,headers:i,body:t.body,duplex:`half`,redirect:`manual`,signal:t.signal}),o=new Headers(a.headers);for(let e of Qe)o.delete(e);return new Response(a.body,{status:a.status,headers:o})}));return await new Promise((e,t)=>{r.once(`error`,t),r.listen(n,e)}),await H.chmod(n,384),{socketPath:n,close:async()=>{r.closeAllConnections(),await new Promise(e=>r.close(()=>e())),await H.rm(t,{recursive:!0,force:!0})}}}export{Je as a,X as c,De as i,J as l,qe as n,Oe as o,Ue as r,Ye as s,Xe as t,$ as u};
|