@wular/coder 0.5.1 → 0.5.2
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-DO8MvHwc.js → actions-C35tq9KH.js} +2 -2
- package/dist/{agent-Cgala63h.js → agent-BZR4Eqdc.js} +1 -1
- package/dist/{apps-BORri-28.js → apps-CCqOsEZH.js} +4 -4
- package/dist/{async-BS9tyhva.js → async-BP5q3Une.js} +1 -1
- package/dist/{auth-C16ylySv.js → auth-CJOm9_Vh.js} +1 -1
- package/dist/{chat-czruXAt3.js → chat-BD2Fu3jU.js} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{cmd-C1gHyVG7.js → cmd-BH1bmZGs.js} +29 -29
- package/dist/{connection-CgA5_NJ7.js → connection-DNzNYpha.js} +1 -1
- package/dist/{context-C1XBbfEL.js → context-DVGPu7f_.js} +1 -1
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1231 -1231
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.91e126d7a389d4bd.js → index.a036e2c6ae93ec75.js} +3 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.858c062c7891a2c1.js → load.3e1c235ecb89201a.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.9375ab741dc9791e.js → page.ff03c26886d248d2.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.c36570a56d279ce2.js → notify.5b9c5a4ab975b01e.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.13fdd9cc55ad3a52.js → page.6e80433ca86c927d.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.38a7f39cddc670f7.js → sign-out.e419e0eae59a1394.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.2385ffa8fdad08d6.js → agents-grid.53dc6597be8d6049.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.5ca6921e50484f8c.js → page.82a238c790c19a6c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.afc4a8a5a8360975.js → layout.4a5c6f90ebaccf6f.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.ba65063a1aa99a62.js → page.ed696703c6fb5796.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.03c5e72b0fe50ba9.js → page.12dbb62edaa16b4f.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.7c8c75bd0c05df4a.js → platform-actions.1e7bb5f00112eeac.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.d6a980d1181dc940.js → platform-step.45adc3fb28e7d33b.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.b5299f5130a4e8af.js → agent-settings-form.1693e7dc34f5b94a.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.fad77cea17947d47.js → page.fbbcdf8fde222f1e.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.4120e6979eaed441.js → loading.099f0e549e964a5c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.474b3524d5ea53b7.js → page.577e64210260faf2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.7868a07efcaa26f4.js → page.2d10853615403293.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.ba93a53773cab8a8.js → versions-list.e6088baf4de7f41e.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.6e53829bd1f3021d.js → loading.f0dfaf4552b8cde1.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.5798ede8ba8ace97.js → page.9f09979ad3435fe3.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.55778a4b3177846d.js → app-cards.adaebe98ec9d32e8.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.ce391cad0d78795f.js → page.e2dc60bbcac65b1f.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.0cec822c6099f058.js → agent-toggle.d795b7112534872c.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.7151c467e7ecf6a5.js → hero.b74c6eb40c45b498.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.4e121d31ed0cfe02.js → connect-repositories.e27bcba279f82d7b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.f314d92af0bb33b0.js → editor.288736c2a52c7df4.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.11028d5329ad537b.js → import-picker.58bad50dd8e60d63.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.1476d31e4554e88b.js → page.83a490948f585e69.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.150d950d191db477.js → layout.61ad05aceb425910.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.3e72de86b86a7338.js → operator-apps.6f71999915848a2c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.6a4be3b1a473ff8c.js → page.4758811b7fc86d84.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.262ed73437c17872.js → page.7de674df6cd0e824.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{advanced-list.7180570379e2625c.js → advanced-list.851275e04f8e7305.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.632b1847c16ecd42.js → connection-add.45a224c5e612b15f.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.4378ae707b2092ed.js → connections-list.6cacd41c18de261d.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.e47897acb6867df8.js → credentials-list.79a1355d894b8642.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.6bd06f96afbe7329.js → credentials.30db114aef2c6ff6.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.38e70272eeb98cd0.js → list.fa3b9eff6657bc57.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.a08cd37d0f7ff86c.js → models-list.2a8f6a5679fc5c4d.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.f096b5a9ac419326.js → page.7681780b48e2aa3e.js} +13 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.0df1f9329df1b67d.js → runners-list.e9834546550a3c2c.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.6d2f56fa7d6fcab0.js → secrets-list.ff9f3b3d88f2b8df.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.0fd865c865e5bab4.js → layout.3f8a61434ceaa186.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.c57b81c2197cce0f.js → page.e439da4bae9d6d6c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.60aadbe43ea1e39c.js → create-link.371225925a83e900.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.e2b9ef0344b1a1a2.js → outcome-toast.c7d02e38464dec0b.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.c456ad99c8a9f875.js → page.885e5ae7913d8f5b.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.2ec05d78d609b7b2.js → activity.f8d48c80747830ee.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.578be2f6c89fcba0.js → page.70ce5ef3bcf56310.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.d131453dd2a423c3.js → task-actions.783070d7dbd198e4.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.3d72a4ecd2b3826e.js → task-view.db256c7f111b8f23.js} +20 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.97be3e67214889c1.js → composer.6a331de70f3baff4.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.9175908da02960e1.js → pending-approvals.7ff2eadf13a3ee90.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.028798c79227a366.js → tasks-list.57c90c66384141a0.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.9a9d13057b326f25.js → tasks-section.22e4f86847e1a3e2.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.045c6db0c56975b2.js → page.c6b9db3ca88aaa1f.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.938d29ff7edb678d.js → page.743fe359f09f5648.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.2cdb8eabd8f6df70.js → stream.c7ffa724145ce870.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.8733901ca0e4c246.js → task-toasts.b0ba5a1b4976ae27.js} +47 -20
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.56cea462eb725c39.js → action.44115286faf6c0f8.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.685154f230716834.js → client.b9225923da59febe.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{advanced-list-b75a9c2bd11026de.js → advanced-list-4a393f37c461986f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-pills-54564413a57d7fa7.js → agent-pills-f07bea43753a9342.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-55d294dad2ce5a0d.js → agent-settings-form-6c1b6776328cd046.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-toggle-b5dcc4ea6292fb3d.js → agent-toggle-dabbca2fe4006852.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-69461c53abbba433.js → agents-grid-a9440caa1768bfd8.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{back-ba5e4340a9f8bbd2.js → back-8ca96656264a0d1c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{chain-hint-491eb09a20a15702.js → chain-hint-c7994aad798ef430.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-6df61e8a1cc31037.js → combo-7b125f3927083749.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{composer-198b844da57b82a3.js → composer-3efd63e2e0192937.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-a6cf207b9c69b43f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{confirm-14d018653fbe50fc.js → confirm-6e26ab941d655b9f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-5118edc019fc7890.js → connect-repositories-90f1aedea6de7a99.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connections-list-5412dad7e0def52f.js → connections-list-90935e956e8f4626.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{copy-04781f9af4e10f06.js → copy-38fa78628f39ec10.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-a3c963721aa06a72.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-e64c973aee5602d3.js → credentials-list-ae950b9891d30c29.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{custom-range-b6919bab9846ebf7.js → custom-range-e9185a23187b3fe6.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-68e9ccd1764fc512.js → editor-e0cc472111713852.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{field-adcb6e6a5f9b7131.js → field-444bab2e16b91c26.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-7d9131eb37c4619e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{instructions-7b274685ceb26457.js → instructions-9f173d4229d9b77e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{list-662f042656857c82.js → list-84356c9286747b10.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{models-list-ae1e2eff30d21824.js → models-list-eca9705ab89a2ce5.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-3006ae63624b3940.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-fd86ded4c44c2de7.js → outcome-dialog-c4d61a288688f53a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{outcome-toast-c00becdb638cd9a8.js → outcome-toast-ba59a3c06c25f0fd.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-0c61a03082f9d169.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-f3979ab69a6ceb53.js → platform-actions-267a43c805e3c3a6.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{platform-step-5454b6c0a19caefd.js → platform-step-adfc87c1fa86e7e1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-fd1616528b2f6f12.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runners-list-20d42f19fb4bec8a.js → runners-list-c858c5546c6fd513.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{secrets-list-89f89ee70edb3856.js → secrets-list-06cd41b5a2627452.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-66a8c77c6294fec3.js → segmented-15503e745dd97f56.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-02666a6f76606589.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-7a7f1e623f0f5861.js +9 -0
- package/dist/dash/standalone/static/assets/chunks/{shared-init-96225b8c7758de9d.js → shared-init-a69029db2d72fb52.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-800f7bacd6de5aa8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-40f16e09eade7eee.js → tail-3024b828bce41f94.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-396d849e58e50d59.js → task-1e6f9ba22fb5e29f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-actions-0b3054dc0f8d17c0.js → task-actions-c8fe1201a56901d9.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-view-9e026dc5da58af5b.js → task-view-531e243f8222f802.js} +3 -3
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-04c6568d7f7237b7.js → tasks-list-5373f9a2772a386a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-ceb756236e69b761.js → versions-list-6642a24e9cef352b.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-02b9bb5ae78a37d6.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-063d14b5b5c893a3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1710a65c5b8280af.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2936b44e963219bc.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2f14cc4bf71bf456.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-27207e4f43f9a21b.js → pnext-client-2f81535a69d0c8a3.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-368d90341055d7ff.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-58e0efbceb6c595f.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-435db60553fa3a67.js → pnext-client-5fc693a6184e48a4.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-6ee756a74310a9fe.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-713f7a6bc55d23fb.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7c91f8543cd360fa.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-827b030f2c8e738e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-8b165b7e5c14a1f3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-95a81597ac1bdea0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a4c2fb8a94ccce04.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a7faaaf8c4cc8145.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-bab8ffb68e7dd229.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d9fab2611c2e7246.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-b1af82c6f0db0033.js → pnext-client-f3804c9ffb299fe0.js} +1 -1
- package/dist/{drive-B7SBFfcb.js → drive-MggMiKA0.js} +1 -1
- package/dist/{exec-D9jF2F-H.js → exec-CNygM6yF.js} +1 -1
- package/dist/{executor-DBW7R7Tf.js → executor-Ds4wDCzV.js} +1 -1
- package/dist/flow/builtin/review/index.js +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/{hook-DN__zYOG.js → hook-CVJU-ZD0.js} +1 -1
- package/dist/{local-BzMvgiwL.js → local-CqOUpEtl.js} +1 -1
- package/dist/{local-GIxwz_Or.js → local-DFrTuJFN.js} +1 -1
- package/dist/{login-LlZrIlxb.js → login-93jO9qjx.js} +1 -1
- package/dist/{maintenance-DyiyHI8S.js → maintenance-BuDKnfc7.js} +1 -1
- package/dist/{mcp-CrtKQoVi.js → mcp-CTVOR7r6.js} +1 -1
- package/dist/{mcp-Caq72REF.js → mcp-EwT2mCaa.js} +1 -1
- package/dist/{models-BVxs3I8o.js → models-mKyePWrV.js} +1 -1
- package/dist/{permission-RSZM3DUk.js → permission-F6F25GJU.js} +1 -1
- package/dist/remote-Cl-j8r3W.js +1 -0
- package/dist/{runner-CKMOh5Q3.js → runner-DK0jnzPr.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 +34 -0
- package/dist/sdk.js +1 -1
- package/dist/serve-Cqlkgdfd.js +8 -0
- package/dist/{serve-YlU04KO7.js → serve-DHe6dZM6.js} +1 -1
- package/dist/{session-D7eeJIaH.js → session-BMbMzzPu.js} +1 -1
- package/dist/{shared-BzNReirj.js → shared-D-KqAi7b.js} +1 -1
- package/dist/{sign-in-Dr6sU7vz.js → sign-in-Dv-rdYD4.js} +1 -1
- package/dist/{store-BrnWdtRw.js → store-BpDipcKB.js} +18 -18
- package/dist/{task-CyqtCXo3.js → task-BRHXn5y1.js} +1 -1
- package/dist/{task-DN4assR8.js → task-CzXNLREX.js} +1 -1
- package/dist/{tools-DVtBtED6.js → tools-BCm26CeV.js} +1 -1
- package/dist/{tools-Ck-ZWtmB.js → tools-C69W1B6S.js} +1 -1
- package/dist/{tools-search-BNDea9vZ.js → tools-search-BDaeCoWe.js} +1 -1
- package/dist/{worker-DeuC38Vp.js → worker-DGhRPDDt.js} +2 -2
- package/dist/{worker-DJANNSCT.js → worker-DHNBRRl-.js} +1 -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/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +0 -9
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +0 -1
- package/dist/remote-CY-qYX2C.js +0 -1
- package/dist/serve-D23JqDip.js +0 -12
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}from"./state-CxAUec80.js";import{n as a,x as o,y as s}from"./approvals-C8XV7CK2.js";import{c,l}from"./view-D-rbQ1Kz.js";import"./turn-eI4iRPsq.js";import{C as u,K as d,S as f,_ as p,b as m,d as ee,f as h,g,h as te,ht as _,m as v,p as y,u as b,v as ne,w as x,x as re,y as S}from"./drizzle-orm-CYU7WOQS.js";import{agent as C,agentVersion as w,approvalPost as T,c as ie,chatItem as ae,chatState as E,connection as oe,engineCredential as D,integrationApp as se,integrationAppInstallation as ce,platformLink as O,privateSpace as k,runner as A,secret as j,spaceMember as M,task as N,taskHistory as le,taskInbox as P,taskLog as F,taskSecret as I,taskTombstone as ue,workspace as L}from"./schema.js";import{
|
|
1
|
+
import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}from"./state-CxAUec80.js";import{n as a,x as o,y as s}from"./approvals-C8XV7CK2.js";import{c,l}from"./view-D-rbQ1Kz.js";import"./turn-eI4iRPsq.js";import{C as u,K as d,S as f,_ as p,b as m,d as ee,f as h,g,h as te,ht as _,m as v,p as y,u as b,v as ne,w as x,x as re,y as S}from"./drizzle-orm-CYU7WOQS.js";import{agent as C,agentVersion as w,approvalPost as T,c as ie,chatItem as ae,chatState as E,connection as oe,engineCredential as D,integrationApp as se,integrationAppInstallation as ce,platformLink as O,privateSpace as k,runner as A,secret as j,spaceMember as M,task as N,taskHistory as le,taskInbox as P,taskLog as F,taskSecret as I,taskTombstone as ue,workspace as L}from"./schema.js";import{Ft as de,Kt as fe,Mt as pe,Ot as me,Wt as he,Xt as ge,_t as _e,cr as ve,ft as ye,ir as be,kt as xe,lr as Se,mt as Ce,or as we,pt as Te,sr as Ee}from"./apps-CCqOsEZH.js";import{S as De,T as Oe,l as ke,s as Ae,w as je,x as Me}from"./local-CqOUpEtl.js";import{i as R,r as z}from"./client-nBo9Mhsr.js";import{C as Ne,S as Pe,T as Fe,_ as B,a as V,b as Ie,c as H,d as U,f as Le,h as Re,i as W,l as G,m as ze,n as Be,o as K,p as q,r as Ve,s as J,u as Y,v as X,w as He,x as Ue,y as We}from"./shared-D-KqAi7b.js";import{createHash as Ge,randomBytes as Ke,randomUUID as qe}from"node:crypto";import{isDeepStrictEqual as Je}from"node:util";const Z=ie(W,`shared_app`),Q=ie(j,`installation_secret`),$=(e,t,n)=>K({id:e.key,integration:e.integration,agent:e.agent,name:e.name,agentsRepo:e.agentsRepo,branch:e.branch,builtin:e.organizationId===``||void 0,shared:n,credentials:t,createdAt:U(e.createdAt)});function Ye(e){let t=W;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,credentials:j.value,sharedKey:Z.key}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).leftJoin(Z,y(Z.id,t.sharedAppId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,credentials:t,sharedKey:n})=>({id:e.key,value:$(e,t,n)}))},put:(n,r)=>e.transaction(`app:${n}`,async e=>{let[i]=await e.db.select({secretId:t.credentialsSecretId,sharedAppId:t.sharedAppId,credentials:j.value}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).where(h(e.mine(t.organizationId),y(t.key,n))),[a]=r.shared?await e.db.select({id:t.id,secretId:t.credentialsSecretId}).from(t).where(h(y(t.organizationId,``),y(t.key,r.shared))):[];if(r.shared&&!a)throw Error(`No shared app ${r.shared}`);let o=i&&!i.sharedAppId?i.secretId:void 0,s=a?.secretId??o??await Be(e.db,r.credentials);o!==void 0&&i?.credentials!==r.credentials&&await Re(e.db,o,r.credentials);let c={integration:r.integration,agent:r.agent,name:r.name,agentsRepo:r.agentsRepo??null,branch:r.branch??null,credentialsSecretId:s,sharedAppId:a?.id??null,createdAt:V(r.createdAt),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:[t.organizationId,t.key],set:c}),i&&i.secretId!==s&&await J(e.db,[i.secretId])}),delete:n=>e.transaction(`app:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.credentialsSecretId});await J(e.db,r.map(e=>e.secretId))})}}function Xe(e,t,n){return K({id:e.key,app:t.key,integration:t.integration,account:e.account,token:n,installer:e.installer,self:e.self,covers:e.covers,repos:e.repos,createdAt:U(e.createdAt),deletedAt:e.deletedAt?U(e.deletedAt):void 0,uninstalled:e.uninstalled||void 0})}function Ze(e,t,n){let r=n.app.split(`/`)[0],i=[t.slice(n.app.length+1),...n.covers??[]],a=_`array[${_.join(i.map(e=>_`${e}`),_`, `)}]::text[]`;return e.transaction(`binding:${r}`,async e=>{let[n]=await e.db.select({id:Y.id}).from(Y).innerJoin(W,y(W.id,Y.appId)).where(h(x(p(Y.platformInstallId,i),_`${Y.covers} ?| ${a}`),S(Y.deletedAt),u(Y.key,t),x(y(W.key,r),_`left(${W.key}, ${r.length+1}) = ${`${r}/`}`))).limit(1);if(n)throw new De(`Installation "${t}" is bound through another app.`)})}function Qe(e){let t=Y;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,app:{key:W.key,integration:W.integration},token:j.value}).from(t).innerJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,app:t,token:n})=>({id:e.key,value:Xe(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({row:t,token:j.value,appKey:W.key,parent:_`(select id from ${W} where organization_id in (${e.organizationId}, ${``}) and key = ${r.app} order by organization_id desc limit 1)`}).from(_`(select 1) as anchor`).leftJoin(t,y(t.key,n)).leftJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)),a=i?.row,o=()=>Error(`Installation "${n}" belongs to another workspace.`);if(a&&a.organizationId!==e.organizationId)throw o();if(!i?.parent)throw Error(`Unknown app "${r.app}".`);r.deletedAt===void 0&&(!a||i.appKey!==r.app||a.deletedAt!==null||JSON.stringify(a.covers??[])!==JSON.stringify(r.covers??[]))&&await Ze(e,n,r);let s=a?.tokenSecretId??null;r.token&&(s?i.token!==r.token&&await Re(e.db,s,r.token):s=await Be(e.db,r.token));let c={appId:i.parent,platformInstallId:n.slice(r.app.length+1),account:r.account,tokenSecretId:r.token?s:null,installer:r.installer??null,self:r.self??null,covers:r.covers??null,repos:r.repos??null,createdAt:V(r.createdAt),updatedAt:e.at(),deletedAt:r.deletedAt===void 0?null:V(r.deletedAt),uninstalled:r.uninstalled??null},[l]=await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:t.key,set:c,setWhere:e.mine(t.organizationId)}).returning({id:t.id});if(!l)throw o();r.token||await J(e.db,[a?.tokenSecretId])}),delete:n=>e.transaction(`installation:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.tokenSecretId});await J(e.db,r.map(e=>e.secretId))})}}async function $e(e,t){let n=ie(Y,`locked`),[r]=await e.db.select({row:n,app:{key:W.key,integration:W.integration},token:j.value}).from(n).innerJoin(W,y(W.id,n.appId)).leftJoin(j,y(j.id,n.tokenSecretId)).where(h(e.mine(n.organizationId),y(n.key,t))).for(`update`,{of:n});return r&&Xe(r.row,r.app,r.token)}const et=(e,t)=>K({...ze(t),owner:e.owner,account:e.account,createdAt:U(e.createdAt)}),tt=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function nt(e,t){let n=D;return(await e.db.select({row:n,sealed:j.value}).from(n).innerJoin(j,y(j.id,n.secretId)).where(h(e.mine(n.organizationId),t?y(n.owner,t):S(n.owner))).orderBy(b(n.label)).for(`update`)).map(({row:e,sealed:t})=>({id:fe(e.owner??void 0,e.label),value:et(e,t),row:e}))}async function rt(e,t,n,r){let i=D;if(!r){t&&(await e.db.delete(i).where(y(i.id,t.row.id)),await J(e.db,[t.row.secretId]));return}let a=Le(r),o={account:r.account??null,createdAt:r.createdAt===void 0?t?.row.createdAt??e.at():V(r.createdAt),updatedAt:e.at()};if(t){Le(t.value)!==a&&await Re(e.db,t.row.secretId,a),await e.db.update(i).set(o).where(y(i.id,t.row.id));return}let{owner:s,name:c}=ge(n);await e.db.insert(i).values({organizationId:e.organizationId,owner:s??null,label:c,secretId:await Be(e.db,a),...o})}function it(e){let t=D,n=(t,n)=>{let{owner:r}=ge(t);return e.transaction(tt(e,r),async e=>rt(e,(await nt(e,r)).find(e=>e.id===t),t,n))};return{key:_`coalesce(${t.owner} || '/', '') || ${t.label}`,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(_`coalesce(${t.owner} || '/', '') || ${t.label}`));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:fe(e.owner??void 0,e.label),value:et(e,t)}))},put:(e,t)=>n(e,t),delete:e=>n(e,null)}}const at=e=>e.secret,ot=e=>{let t=G(D,e);return{id:fe(t.owner??void 0,t.label),value:et(t,at(e))}},st=e=>{let t=G(A,e);return{id:t.publicId,value:vt(t,at(e))}},ct=e=>{let t=G(W,e.app);return{installation:Xe(G(Y,e.row),t,e.token),app:$(t,e.credentials)}};function lt(e,t,n,r){let i=E,a=t.map(t=>`${H(X(e,`snapshot`,Oe(t)))}%`),o=[...t,...n].map(t=>X(e,`snapshot`,je(t)));return _`(select coalesce(jsonb_object_agg(${i.key}, ${i.value}), '{}'::jsonb) from ${i}
|
|
2
2
|
where (${i.expiresAt} is null or ${i.expiresAt} > clock_timestamp()) and (${i.key} like any(${_.param(a)}::text[])
|
|
3
3
|
or ${i.key} in (select unnest(${_.param(o)}::text[])${r?_` union all ${r}`:_``})))`}function ut(e,t){let n=We(e,`snapshot`),r={held:new Map,drops:new Map};for(let[e,i]of Object.entries(t)){let t=e.slice(n.length);t.startsWith(`token-drop:`)?r.drops.set(t,i.drop):r.held.set(t,i)}return r}function dt(e){let t=_`coalesce((${E.value}->>'version')::bigint, jsonb_array_length(${E.value}->'messages') + (${E.value}->>'more')::bigint)`,n=_`greatest(coalesce((${E.value}->>'acknowledged')::bigint, 0), least(${e}, ${t}))`;return _`(select ${E.value} || jsonb_build_object('version', ${t}, 'acknowledged', ${n},
|
|
4
4
|
'messages', remaining, 'more', ${t} - ${n} - jsonb_array_length(remaining))
|
|
@@ -8,7 +8,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
8
8
|
from ${L} where ${L.organizationId} = ${e}), '{}'::jsonb)`,kt=e=>_`(select ${Fe(_`to_jsonb(r)`,_`s.value`)} from ${A} r join ${j} s on s.id = r.secret_id
|
|
9
9
|
where r.organization_id = ${e}.organization_id and r.public_id = ${e}.runner_id)`,At=e=>_`(select jsonb_build_object('row', to_jsonb(a), 'credentials', s.value)
|
|
10
10
|
from ${se} a join ${j} s on s.id = a.credentials_secret_id where ${e})`,jt=e=>_`task_secrets as (delete from ${I} where task_id in (${e}) returning secret_id),
|
|
11
|
-
dropped_secrets as (delete from ${j} where id in (select secret_id from task_secrets))`;function Mt(e,t){if(typeof t==`number`)return _`to_jsonb(coalesce(case when jsonb_typeof(${e}) = 'number' then (${e} #>> '{}')::numeric end, 0) + ${t}::numeric)`;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=Object.entries(t).map(([t,n])=>_`${t}::text, ${Mt(_`(${e} -> ${t}::text)`,n)}`);return _`(case when jsonb_typeof(${e}) = 'object' then ${e} else '{}'::jsonb end || jsonb_build_object(${_.join(n,_`, `)}))`}const Nt=e=>_`(case ${e} ${_.join([...
|
|
11
|
+
dropped_secrets as (delete from ${j} where id in (select secret_id from task_secrets))`;function Mt(e,t){if(typeof t==`number`)return _`to_jsonb(coalesce(case when jsonb_typeof(${e}) = 'number' then (${e} #>> '{}')::numeric end, 0) + ${t}::numeric)`;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=Object.entries(t).map(([t,n])=>_`${t}::text, ${Mt(_`(${e} -> ${t}::text)`,n)}`);return _`(case when jsonb_typeof(${e}) = 'object' then ${e} else '{}'::jsonb end || jsonb_build_object(${_.join(n,_`, `)}))`}const Nt=e=>_`(case ${e} ${_.join([...me,...n].map(e=>_`when ${e} then ${_.raw(String(c(e)))}`),_` `)} end)`,Pt=e=>_`date_trunc('milliseconds', ${e})`,Ft=e=>_`${e} collate "C"`,It=x(y(N.status,`waiting`),_`jsonb_path_exists(${N.context}, '$.approvals[*] ? (!(exists(@.response)) || @.response == null)')`),Lt=_`'space:' || ${k.integration} || ':' || ${k.account} || ':' || ${k.space}`,Rt=(e,t)=>_`array(select ${Lt} from ${k} join ${M} on ${M.spaceId} = ${k.id} join ${O} on ${O.platform} = ${k.integration} and ${O.platformUserId} = ${M.member} where ${O.userId} = ${t} and ${k.organizationId} = ${e})`,zt=e=>[b(Nt(e.status)),ee(Pt(e.createdAt)),ee(Ft(e.publicId))],Bt=e=>[b(e.updatedAt),b(Ft(e.publicId))];var Vt=class{db;constructor(e){this.db=e}async metrics(e,t){let n=await this.db.select({status:N.status,total:_`count(*)::int`,recent:_`count(*) filter (where ${N.createdAt} >= ${new Date(t).toISOString()}::timestamptz)::int`}).from(N).where(y(N.organizationId,e)).groupBy(N.status),r={tasks:{queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},queueDepth:0};for(let e of n)r.tasks[e.status]=e.recent,e.status===`queued`&&(r.queueDepth=e.total);return r}where(e,t){return h(y(N.organizationId,e),y(N.publicId,t))}fence(e,t,n={}){return h(this.where(e,t),n.generation===void 0?void 0:y(N.generation,n.generation),n.attempts===void 0?void 0:y(N.attempts,n.attempts),n.tokenHash===void 0?void 0:n.tokenHash===null?S(N.tokenHash):y(N.tokenHash,n.tokenHash),n.handle===void 0?void 0:n.handle===null?S(N.handle):y(N.handle,n.handle),n.lastSeenAt===void 0?void 0:n.lastSeenAt===null?S(N.lastSeenAt):y(N.lastSeenAt,new Date(n.lastSeenAt)),n.updatedAt===void 0?void 0:y(N.updatedAt,new Date(n.updatedAt)),n.statuses?p(N.status,n.statuses):void 0,n.unanswered===void 0?void 0:_`not exists (select 1 from jsonb_array_elements(coalesce(${N.context} -> 'approvals', '[]'::jsonb)) as entry where entry ->> 'id' = ${n.unanswered} and jsonb_typeof(entry -> 'response') = 'object')`)}async enqueue(e,t,n,r,i,a){let o=this.insertion(e,t,n,r,i,void 0,a),[s]=await z(this.db,i===void 0?[]:[_`select pg_advisory_xact_lock(1, hashtext(${e}))`],o);if(!s?.allowed)throw Error(`Organization task queue is full`);return!!s.inserted}insertion(e,t,n,r,i,a,o){let s=t.event,{audience:c,space:l}=Se(t),u=new Date(n).toISOString(),d=e=>_`${e===void 0?null:JSON.stringify(e)}::jsonb`,f=t=>X(e,`delivery`,t),p=r?_`
|
|
12
12
|
receipt as (
|
|
13
13
|
insert into ${E} (key, value, expires_at)
|
|
14
14
|
select ${f(r.key)}, ${d({at:n})}, ${new Date(n+r.ttlMs).toISOString()}::timestamptz
|
|
@@ -49,7 +49,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
49
49
|
and event->>'appId' is not distinct from ${c?.appId??null}
|
|
50
50
|
and event->>'installationId' is not distinct from ${c?.installationId??null}
|
|
51
51
|
and event->'chat'->'thread'->>'id' = ${c?.chat?.thread.id||null}
|
|
52
|
-
order by created_at desc, public_id desc limit 1 for update`,u=this.insertion(e,t,n,r,a,{target:l,create:o,steer:i},s),d=[_`select pg_advisory_xact_lock(3, hashtext(${JSON.stringify([e,
|
|
52
|
+
order by created_at desc, public_id desc limit 1 for update`,u=this.insertion(e,t,n,r,a,{target:l,create:o,steer:i},s),d=[_`select pg_advisory_xact_lock(3, hashtext(${JSON.stringify([e,de(t)])}))`];a!==void 0&&o&&d.push(_`select pg_advisory_xact_lock(1, hashtext(${e}))`);let[f]=await z(this.db,d,u);if(!f?.allowed)throw Error(`Organization task queue is full`);return f.inserted?{taskId:t.id}:f.steered?{steered:!0}:{}}async claim(e,t,n=!1,r){let i=r===void 0?_`true`:_`(select count(*) from ${N} active where active.organization_id = ${N.organizationId} and active.status in ('running', 'waiting')) < ${r}`;if(!n){let[e]=await R(this.db,()=>q(this.db,_`select exists (select 1 from ${N} where status = 'queued' and ${i})
|
|
53
53
|
and ${t===void 0?_`true`:_`(select count(*) from ${N} where status in ('running', 'waiting')) < ${t}`} as ready`));if(!e?.ready)return}let a=Ke(32).toString(`base64url`),o=_`translate(rtrim(replace(encode(convert_to(format('{"task":%s,"organization":%s,"attempt":%s}',
|
|
54
54
|
to_json(public_id), to_json(organization_id), attempts + 1), 'UTF8'), 'base64'), E'\\n', ''), '='), '+/', '-_') || '.' || ${a}`,s=_`with stamp as materialized (select date_trunc('milliseconds', clock_timestamp()) as at), picked as materialized (
|
|
55
55
|
select id, ${o} as bearer from ${N} where status = 'queued'
|
|
@@ -94,10 +94,10 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
94
94
|
from touched`);if(!y)return;let b=G(N,y.status),ne=(e,t)=>e?t(e):void 0;return{organizationId:b.organizationId,status:Ie(b),...f?{loaded:{installation:ne(y.installation,e=>ct(e).installation),credential:ne(y.credential,e=>ot(e).value),...y.credentials?{credentials:y.credentials.map(ot)}:{},secrets:y.secrets??void 0,config:y.config??void 0,...d?{app:ne(y.app,e=>$(G(se,e.row),e.credentials)),workspace:y.workspace??void 0,runner:ne(y.runner,e=>st(e).value),resolved:ne(y.resolved,e=>({id:e.key,value:e.value})),tokens:ut(b.organizationId,y.tokens??{})}:{}}}:{}}}async touch(e,t,n,r,i,a=!1){return(await this.authorize(t,n,r,e,i,{allowCompleted:a}))?.status}async patchTask(e,t,n,r,i={}){let{answer:a,approvals:o,archivedAt:c,autoArchived:l,lastSeenAt:u,logsComplete:d,resolvedModel:f,...p}=n,[m]=await this.db.transaction(async l=>{let[m]=o?await l.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`):[];return l.update(N).set({...Object.fromEntries(Object.entries(p).map(([e,t])=>[e,t??null])),...o?{context:_`jsonb_set(coalesce(${N.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(s(m?.context?.approvals??[],o))}::jsonb)`}:{},...Object.hasOwn(n,`logsComplete`)?{logsComplete:d??null}:Object.hasOwn(n,`handle`)?{logsComplete:_`case when ${N.handle} is distinct from ${n.handle??null}::text then null else ${N.logsComplete} end`}:{},...a===void 0?{}:{answer:_`coalesce(${N.answer}, '[]'::jsonb) || ${JSON.stringify([a])}::jsonb`},...f?{engineSettings:_`coalesce(${N.engineSettings}, '{}'::jsonb) || ${JSON.stringify({resolvedModel:f})}::jsonb`}:{},...Object.hasOwn(n,`archivedAt`)?{archivedAt:c===void 0?null:new Date(c)}:{},...Object.hasOwn(n,`lastSeenAt`)?{lastSeenAt:u===void 0?null:new Date(u)}:{},updatedAt:new Date(r)}).where(this.fence(e,t,i)).returning({id:N.id})});return!!m}async setRequestedBy(e,t,n,r){let[i]=await this.db.update(N).set({requestedBy:n,audience:_`case when ${N.audience} = 'dm:' then ${`dm:${n}`} else ${N.audience} end`,updatedAt:new Date(r)}).where(h(this.where(e,t),S(N.requestedBy))).returning({id:N.id});return!!i}async archiveStopped(e,t,i){await this.db.update(N).set({archivedAt:new Date(t),updatedAt:new Date(t)}).where(h(e===void 0?void 0:y(N.organizationId,e),i?p(N.publicId,i):void 0,S(N.archivedAt),p(N.status,[...n]),re(_`coalesce(${N.finishedAt}, ${N.updatedAt})`,_`${new Date(t-r).toISOString()}::timestamptz`)))}async requeue(e,t,n,r={}){let[i]=await this.db.update(N).set({status:`queued`,handle:null,tokenHash:null,lastSeenAt:null,logsComplete:null,updatedAt:new Date(n)}).where(this.fence(e,t,{...r,statuses:[`running`,`waiting`]})).returning({id:N.id});return!!i}connectionLock(e,t){return _`select pg_advisory_xact_lock(3, hashtext(${`app:${e}:connections:${t}`}))`}async deleteTask(e,t,n){let[r]=await z(this.db,[this.connectionLock(e,t)],_`
|
|
95
95
|
with gone as (
|
|
96
96
|
delete from ${N} where ${this.fence(e,t,n)}
|
|
97
|
-
returning id, organization_id, public_id, audience, requested_by
|
|
97
|
+
returning id, organization_id, public_id, audience, requested_by, parent
|
|
98
98
|
), marked as (
|
|
99
|
-
insert into ${ue} (organization_id, public_id, audience, requested_by, deleted_at)
|
|
100
|
-
select organization_id, public_id, audience, requested_by, clock_timestamp() from gone
|
|
99
|
+
insert into ${ue} (organization_id, public_id, audience, requested_by, parent, deleted_at)
|
|
100
|
+
select organization_id, public_id, audience, requested_by, parent, clock_timestamp() from gone
|
|
101
101
|
), ${jt(_`select id from gone`)}
|
|
102
102
|
select count(*)::int as deleted from gone`);return!!r?.deleted}async finish(e,t,n,r,i={}){let a=new Date(r),o=this.db.update(N).set({status:n.status,result:n.result??null,error:n.error??null,tokens:n.tokens??null,lastSeenAt:a,finishedAt:a,updatedAt:a}).where(this.fence(e,t,{...i,statuses:[`queued`,`running`,`waiting`]})).returning({id:N.id}),[s]=await z(this.db,[this.connectionLock(e,t)],_`
|
|
103
103
|
with finished as (${o.getSQL()}), ${jt(_`select id from finished`)}
|
|
@@ -108,7 +108,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
108
108
|
update ${N} set status = ${i.status}, result = ${JSON.stringify(i.result??null)}::jsonb,
|
|
109
109
|
error = ${i.error??null}, tokens = ${JSON.stringify(i.tokens??null)}::jsonb,
|
|
110
110
|
engine = ${a.engine??null}, model = ${a.model??null}, credential = ${a.credential??null}, runner_ms = coalesce(runner_ms, 0) + ${a.runnerElapsedMs},
|
|
111
|
-
token_count = coalesce(token_count, 0) + ${
|
|
111
|
+
token_count = coalesce(token_count, 0) + ${Ce(a.tokens)}, usage_tokens = ${Mt(_`usage_tokens`,a.tokens)},
|
|
112
112
|
last_seen_at = ${o}::timestamptz, finished_at = ${o}::timestamptz, updated_at = ${o}::timestamptz${s}
|
|
113
113
|
where ${this.fence(e,t,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]})}
|
|
114
114
|
returning id, generation
|
|
@@ -120,14 +120,14 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
120
120
|
error = case when status = 'queued' then ${t} else error end,
|
|
121
121
|
inbox_seq = case when status = 'queued' then inbox_seq else inbox_seq + 1 end,
|
|
122
122
|
cancel_requested_at = ${a}::timestamptz, updated_at = ${a}::timestamptz
|
|
123
|
-
where ${this.fence(e,n,{...i,statuses:
|
|
123
|
+
where ${this.fence(e,n,{...i,statuses:me})} returning id, generation, inbox_seq, status
|
|
124
124
|
), ${jt(_`select id from cancelled where status = 'cancelled'`)}, message as (
|
|
125
125
|
insert into ${P} (task_id, seq, generation, kind, value, at)
|
|
126
126
|
select id, inbox_seq, generation, 'cancel', 'null'::jsonb, ${a}::timestamptz from cancelled where status in ('running', 'waiting')
|
|
127
127
|
) select exists(select 1 from cancelled) as accepted`);return!!o?.accepted}async cancelRequested(e,t){let[n]=await R(this.db,()=>this.db.select({at:N.cancelRequestedAt}).from(N).where(this.where(e,t)));return!!n?.at}filter(e,t){let n=t.status&&t.status!==`waiting`?[t.status]:t.statuses,r=t.q?.trim(),i=r&&`%${r.replace(/[\\%_]/g,`\\$&`)}%`;return h(y(N.organizationId,e),n?p(N.status,n):void 0,t.status===`waiting`?It:void 0,t.agent?y(N.agent,t.agent):void 0,t.source?y(N.source,t.source):void 0,t.parent?y(N.parent,t.parent):void 0,t.runnerId?y(N.runnerId,t.runnerId):void 0,t.archived===void 0?void 0:t.archived?ne(N.archivedAt):S(N.archivedAt),t.viewer===void 0?void 0:x(y(N.audience,``),y(N.requestedBy,t.viewer.id),t.viewer.spaces?t.viewer.spaces.length?p(N.audience,t.viewer.spaces):void 0:_`${N.audience} = any(${Rt(e,t.viewer.id)})`),i?x(g(_`${N.event}->>'text'`,i),g(N.prompt,i),g(N.agent,i),g(N.publicId,i)):void 0)}pageQuery(e,t){let{before:n}=t,r=t.summary?{publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,prompt:N.prompt,access:N.access,requestedBy:N.requestedBy,event:_`case when ${N.event} is not null then jsonb_strip_nulls(jsonb_build_object('integration', ${N.event}->>'integration', 'type', ${N.event}->>'type', 'text', ${N.event}->>'text', 'actor', ${N.event}->'actor')) end`.as(`event`),context:_`jsonb_strip_nulls(jsonb_build_object('user', ${N.context}->'user', 'approvals', ${N.context}->'approvals', 'turns', case when ${N.context}->'turns'->0 is not null then jsonb_build_array(jsonb_build_object('prompt', ${N.context}->'turns'->0->'prompt')) end))`.as(`context`),usage:_`jsonb_strip_nulls(case when coalesce(${N.engineSettings}->>'engine', ${N.engineSettings}->>'model') is not null then jsonb_build_object('engine', ${N.engineSettings}->>'engine', 'model', ${N.engineSettings}->>'model', 'effort', ${N.engineSettings}->>'effort') else jsonb_build_object('model', ${N.definition}->>'model') end || jsonb_build_object('resolvedModel', ${N.engineSettings}->>'resolvedModel'))`.as(`usage`),status:N.status,attempts:N.attempts,approval:N.approval,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,lastSeenAt:N.lastSeenAt,updatedAt:N.updatedAt}:d(N),i=this.db.select(r).from(N).where(h(this.filter(e,t),t.since===void 0?void 0:x(v(N.updatedAt,new Date(t.since)),t.sinceId?h(y(N.updatedAt,new Date(t.since)),v(Ft(N.publicId),t.sinceId)):void 0),n?this.after(n):void 0)).orderBy(...t.since===void 0?zt(N):Bt(N));return t.limit===void 0?i:i.limit(t.limit)}after(e){if(`updatedAt`in e)return x(v(N.updatedAt,new Date(e.updatedAt)),h(y(N.updatedAt,new Date(e.updatedAt)),v(Ft(N.publicId),e.id)));let t=_`(${Pt(N.createdAt)}, ${Ft(N.publicId)}) < (${new Date(e.createdAt).toISOString()}::timestamptz, ${e.id})`;return x(v(Nt(N.status),e.rank),h(y(Nt(N.status),e.rank),t))}record(e,t){return t?K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,prompt:e.prompt,access:e.access,requestedBy:e.requestedBy,event:e.event,context:Object.keys(e.context??{}).length?e.context:void 0,usage:Object.keys(e.usage??{}).length?e.usage:void 0}),status:e.status,attempts:e.attempts,approval:e.approval,archivedAt:e.archivedAt?U(e.archivedAt):void 0,createdAt:U(e.createdAt),startedAt:e.startedAt?U(e.startedAt):void 0,finishedAt:e.finishedAt?U(e.finishedAt):void 0,lastSeenAt:e.lastSeenAt?U(e.lastSeenAt):void 0,updatedAt:U(e.updatedAt)}):Ie(e)}async list(e,t={}){return(await R(this.db,()=>this.pageQuery(e,t))).map(e=>this.record(e,t.summary))}async memberSpaces(e,t,n){return n.length?(await R(this.db,()=>this.db.selectDistinct({audience:Lt}).from(k).innerJoin(M,y(M.spaceId,k.id)).innerJoin(O,h(y(O.platform,k.integration),y(O.platformUserId,M.member))).where(h(y(k.organizationId,e),y(O.userId,t),p(Lt,n))))).map(e=>e.audience):[]}async listedSpaces(e,t){return(await R(this.db,()=>this.db.select({integration:k.integration,appId:k.app,installationId:k.installation,account:k.account,kind:k.kind,id:k.space}).from(k).where(h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),_`exists (select 1 from ${N} where ${N.organizationId} = ${k.organizationId} and ${N.audience} = ${Lt})`)))).map(({account:e,kind:t,id:n,...r})=>({...r,...e===r.installationId?{}:{account:e},space:{kind:t,id:n}}))}async linkedMembers(e,t){return(await R(this.db,()=>this.db.select({id:O.platformUserId,login:O.login}).from(O).where(h(y(O.platform,t),_`${O.organizations} @> ${JSON.stringify([e])}::jsonb`)))).map(e=>K(e))}async spaceSynced(e,t){let[n]=await R(this.db,()=>this.db.select({syncedAt:k.syncedAt}).from(k).where(this.space(e,t)));return n?.syncedAt?U(n.syncedAt):void 0}async claimSpace(e,t,n,r=!1){let i=new Date(n).toISOString(),[a]=await q(this.db,_`insert into ${k} (organization_id, integration, app, installation, account, kind, space, claimed_at)
|
|
128
128
|
values (${e}, ${t.integration}, ${t.appId}, ${t.installationId}, ${t.account??t.installationId}, ${t.space?.kind??`channel`}, ${t.space?.id??``}, ${i}::timestamptz)
|
|
129
129
|
on conflict (organization_id, integration, account, space) do update set claimed_at = excluded.claimed_at
|
|
130
|
-
where ${r} or ${k.claimedAt} is null or ${k.claimedAt} < ${new Date(n-
|
|
130
|
+
where ${r} or ${k.claimedAt} is null or ${k.claimedAt} < ${new Date(n-be).toISOString()}::timestamptz
|
|
131
131
|
returning id`);return!!a}async saveSpaceMembers(e,t,n,r){let i=h(this.space(e,t),y(k.claimedAt,new Date(r)));if(!n){await this.db.update(k).set({claimedAt:null}).where(i);return}await z(this.db,[],_`
|
|
132
132
|
with saved as (
|
|
133
133
|
update ${k} set synced_at = ${new Date(r).toISOString()}::timestamptz, claimed_at = null
|
|
@@ -137,7 +137,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
137
137
|
)
|
|
138
138
|
insert into ${M} (space_id, member)
|
|
139
139
|
select saved.id, member from saved, unnest(${_.param(n)}::text[]) as member
|
|
140
|
-
on conflict do nothing`)}async spaceChanged(e,t,n,r){let i=_`select id from ${k} where ${this.space(e,t)}`;if((n.joined||n.left)&&await this.db.update(k).set({claimedAt:null}).where(this.space(e,t)),n.joined&&await this.db.execute(_`insert into ${M} (space_id, member) select id, ${n.joined} from (${i}) as saved on conflict do nothing`),n.left&&await this.db.execute(_`delete from ${M} where space_id in (${i}) and member = ${n.left}`),n.private===void 0)return;let a=_`to_jsonb(${n.private}::boolean)`;await this.db.update(N).set({audience:n.private?
|
|
140
|
+
on conflict do nothing`)}async spaceChanged(e,t,n,r){let i=_`select id from ${k} where ${this.space(e,t)}`;if((n.joined||n.left)&&await this.db.update(k).set({claimedAt:null}).where(this.space(e,t)),n.joined&&await this.db.execute(_`insert into ${M} (space_id, member) select id, ${n.joined} from (${i}) as saved on conflict do nothing`),n.left&&await this.db.execute(_`delete from ${M} where space_id in (${i}) and member = ${n.left}`),n.private===void 0)return;let a=_`to_jsonb(${n.private}::boolean)`;await this.db.update(N).set({audience:n.private?Ee(t):``,event:_`case when ${N.event}->'space' is not null then jsonb_set(${N.event}, '{space,private}', ${a}) else ${N.event} end`,updatedAt:new Date(r)}).where(h(y(N.organizationId,e),y(N.space,ve(t)),_`${N.audience} not like 'dm:%'`)),await this.db.delete(k).where(this.space(e,t))}space(e,t){return h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),y(k.space,t.space?.id??``))}async changes(e,t){if(!e.length)return{rows:[],deleted:[]};let n=e.map(e=>e.organizationId),r=t=>{let n=e.flatMap(e=>e[t].map(()=>e.organizationId)),r=e.flatMap(e=>e[t]);return r.length?_`(${N.organizationId}, ${N.publicId}) in (select * from unnest(${_.param(n)}::text[], ${_.param(r)}::text[]))`:void 0},i=r(`ids`)??_`false`,a=r(`fresh`),[o,s]=await Promise.all([R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,requestedBy:N.requestedBy,audience:N.audience,parent:N.parent,status:N.status,approval:N.approval,approvals:_`case when ${i} then ${N.context}->'approvals' end`,answer:_`case when ${i} then ${N.answer} end`,result:_`case when ${i} then ${N.result} end`,error:_`case when ${i} then ${N.error} end`,attempts:N.attempts,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,updatedAt:N.updatedAt}).from(N).where(x(h(p(N.organizationId,n),v(N.updatedAt,new Date(t))),a))),R(this.db,()=>this.db.select().from(ue).where(h(p(ue.organizationId,n),v(ue.deletedAt,new Date(t)))))]);return{rows:o.map(e=>({organizationId:e.organizationId,status:K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,requestedBy:e.requestedBy,audience:e.audience,parent:e.parent}),status:e.status,approval:e.approval,approvals:Array.isArray(e.approvals)?e.approvals:void 0,answer:Array.isArray(e.answer)?e.answer:void 0,result:e.result,error:e.error,attempts:e.attempts,archivedAt:e.archivedAt&&U(e.archivedAt),createdAt:U(e.createdAt),startedAt:e.startedAt&&U(e.startedAt),finishedAt:e.finishedAt&&U(e.finishedAt),updatedAt:U(e.updatedAt)})})),deleted:s.map(e=>({organizationId:e.organizationId,id:e.publicId,at:U(e.deletedAt),...e.audience===null?{}:{audience:e.audience},...e.requestedBy===null?{}:{requestedBy:e.requestedBy},...e.parent===null?{}:{parent:e.parent}}))}}async logTails(e,t){if(!e.length)return[];let n=_`(line->>'seq')::int`,r=await R(this.db,()=>q(this.db,_`select tail.n::int as n, ${N.status} as status, ${N.approval} as approval,
|
|
141
141
|
${N.audience} as audience, ${N.requestedBy} as requested_by,
|
|
142
142
|
(select coalesce(jsonb_agg(line order by ${n}), '[]'::jsonb) from (
|
|
143
143
|
select line from ${F} cross join jsonb_array_elements(${F.lines}) line
|
|
@@ -145,7 +145,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
145
145
|
order by ${n} limit ${t}) page) as lines
|
|
146
146
|
from unnest(${_.param(e.map(e=>e.organizationId))}::text[], ${_.param(e.map(e=>e.id))}::text[], ${_.param(e.map(e=>e.after))}::int[])
|
|
147
147
|
with ordinality as tail(organization_id, public_id, after, n)
|
|
148
|
-
join ${N} on ${N.organizationId} = tail.organization_id and ${N.publicId} = tail.public_id`)),i=new Map(r.map(e=>[e.n-1,e]));return e.map((e,t)=>{let n=i.get(t);return n&&{status:K({status:n.status,approval:n.approval,task:K({id:e.id,audience:n.audience,requestedBy:n.requested_by})}),lines:n.lines.map(e=>{let t=l(e.line);return t?{...e,entry:t}:e})}})}countQuery(e,t){return this.db.select({all:_`count(*)::int`.as(`all`),active:_`(count(*) filter (where ${p(N.status,
|
|
148
|
+
join ${N} on ${N.organizationId} = tail.organization_id and ${N.publicId} = tail.public_id`)),i=new Map(r.map(e=>[e.n-1,e]));return e.map((e,t)=>{let n=i.get(t);return n&&{status:K({status:n.status,approval:n.approval,task:K({id:e.id,audience:n.audience,requestedBy:n.requested_by})}),lines:n.lines.map(e=>{let t=l(e.line);return t?{...e,entry:t}:e})}})}countQuery(e,t){return this.db.select({all:_`count(*)::int`.as(`all`),active:_`(count(*) filter (where ${p(N.status,me)}))::int`.as(`active`),waiting:_`(count(*) filter (where ${It}))::int`.as(`waiting`)}).from(N).where(this.filter(e,t))}async counts(e,t={}){let[n]=await R(this.db,()=>this.countQuery(e,t));return n??{all:0,active:0,waiting:0}}async activeCounts(e){return(await R(this.db,()=>this.db.select({audience:N.audience,requestedBy:N.requestedBy,active:_`count(*)::int`}).from(N).where(h(y(N.organizationId,e),p(N.status,me),S(N.archivedAt))).groupBy(N.audience,N.requestedBy))).map(e=>K(e))}async listWithCounts(e,t){let n=this.db.$with(`totals`).as(this.countQuery(e,t)),r=this.db.$with(`page`).as(this.pageQuery(e,{...t,limit:t.limit??20})),i=Object.fromEntries(Object.keys(r._.selectedFields).map(e=>[e,r[e]])),a=await R(this.db,()=>this.db.with(n,r).select({...i,all:n.all,active:n.active,waiting:n.waiting}).from(n).leftJoin(r,_`true`).orderBy(...t.since===void 0?zt({status:i.status,createdAt:i.createdAt,publicId:i.publicId}):Bt({updatedAt:i.updatedAt,publicId:i.publicId}))),{all:o=0,active:s=0,waiting:c=0}=a[0]??{};return{items:a.filter(e=>e.publicId!==null&&e.publicId!==void 0).map(e=>this.record(e,t.summary)),counts:{all:o,active:s,waiting:c}}}async runningCount(){let[e]=await R(this.db,()=>this.db.select({value:_`count(*)::int`}).from(N).where(p(N.status,[`running`,`waiting`])));return e?.value??0}async running(){return(await R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,runner:N.runnerKind,runnerId:N.runnerId,status:N.status,attempts:N.attempts,generation:N.generation,handle:N.handle,tokenHash:N.tokenHash,lastSeenAt:N.lastSeenAt,logsComplete:N.logsComplete,startedAt:N.startedAt,cancelRequestedAt:N.cancelRequestedAt,updatedAt:N.updatedAt}).from(N).where(p(N.status,[`running`,`waiting`])))).map(({organizationId:e,publicId:t,runner:n,runnerId:r,...i})=>({organizationId:e,status:K({...i,task:K({id:t,runner:n,runnerId:r}),lastSeenAt:i.lastSeenAt&&U(i.lastSeenAt),startedAt:i.startedAt&&U(i.startedAt),cancelRequestedAt:i.cancelRequestedAt&&U(i.cancelRequestedAt),updatedAt:U(i.updatedAt)})}))}async appendLogs(e,t,n,r,i,a,o){let s=n.length?_`, inserted as (
|
|
149
149
|
insert into ${F} (task_id, seq_from, seq_to, lines)
|
|
150
150
|
select accepted.id, ${n[0].seq}, ${n[n.length-1].seq}, ${JSON.stringify(n)}::jsonb from accepted
|
|
151
151
|
on conflict (task_id, seq_from) do update set seq_to = excluded.seq_to, lines = excluded.lines
|
|
@@ -154,15 +154,15 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
154
154
|
update ${N} set log_cursor = ${i.cursor}, log_seq = ${i.seq}, log_bytes = ${i.bytes}
|
|
155
155
|
where ${this.fence(e,t,o)} and coalesce(log_seq, 0) = ${r.seq} and coalesce(log_cursor, -1) = ${r.cursor}
|
|
156
156
|
returning id
|
|
157
|
-
) ${s} select exists (select 1 from accepted) as accepted`);return!!c?.accepted}async readInbox(e,t,n,r){return(await R(this.db,()=>this.db.select({seq:P.seq,generation:P.generation,at:P.at,kind:P.kind,value:P.value}).from(P).innerJoin(N,y(N.id,P.taskId)).where(h(this.where(e,t),y(N.generation,n),p(N.status,
|
|
157
|
+
) ${s} select exists (select 1 from accepted) as accepted`);return!!c?.accepted}async readInbox(e,t,n,r){return(await R(this.db,()=>this.db.select({seq:P.seq,generation:P.generation,at:P.at,kind:P.kind,value:P.value}).from(P).innerJoin(N,y(N.id,P.taskId)).where(h(this.where(e,t),y(N.generation,n),p(N.status,me),y(P.generation,n),_`${P.seq} > ${r}`)).orderBy(b(P.seq)).limit(100))).map(e=>({...e,at:U(e.at)}))}async appendInbox(e,t,n,r,i,c,l,u){return u?this.db.transaction(async d=>{let[f]=await d.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`);for(let e of u){let t=o(f?.context?.approvals?.find(t=>t.id===e.id),e);if(t)throw new a(t)}let p=s(f?.context?.approvals??[],u);return this.insertInbox(d,e,t,n,r,i,c,l,p)}):this.insertInbox(this.db,e,t,n,r,i,c,l)}async insertInbox(e,t,n,r,i,a,o,s,c){let l=s?_`select key, value from ${E}
|
|
158
158
|
where key = ${X(t,`delivery`,s.key)}
|
|
159
159
|
and value->'sending'->>'owner' = ${s.owner}
|
|
160
|
-
and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&
|
|
160
|
+
and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&pe(s),d=u?_`, context = coalesce(${N.context}, '{}'::jsonb) || jsonb_build_object('admissions',
|
|
161
161
|
coalesce(${N.context}->'admissions', '{}'::jsonb) || ${JSON.stringify(u)}::jsonb)`:c?_`, context = jsonb_set(coalesce(${N.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(c)}::jsonb)`:_``,f=_`(${E.value}->'sending'->>'count')::int`,p=_`coalesce((select n from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
|
|
162
162
|
where n <= ${f} and item->>'admission' = ${s?.through??null}::text limit 1), 0)`,[m]=await q(e,_`
|
|
163
163
|
with held as materialized (${l}), next as (
|
|
164
164
|
update ${N} set inbox_seq = inbox_seq + 1, updated_at = ${new Date(a).toISOString()}::timestamptz${d}
|
|
165
|
-
where ${this.fence(t,n,{generation:o,statuses:
|
|
165
|
+
where ${this.fence(t,n,{generation:o,statuses:me})}
|
|
166
166
|
and exists(select 1 from held) returning id, inbox_seq, generation
|
|
167
167
|
), admitted as (
|
|
168
168
|
insert into ${P} (task_id, seq, generation, kind, value, at)
|
|
@@ -174,7 +174,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
174
174
|
(${E.value}->'sending') || jsonb_build_object('count', ${f} - ${p}, 'until', ${a+Me}::bigint)) else '{}'::jsonb end
|
|
175
175
|
where key in (select key from held) and exists(select 1 from admitted)
|
|
176
176
|
)`:_``}
|
|
177
|
-
select (select seq from admitted) as seq, exists(select 1 from held) as held`);if(s&&!m?.held)throw new
|
|
177
|
+
select (select seq from admitted) as seq, exists(select 1 from held) as held`);if(s&&!m?.held)throw new xe;return m?.seq==null?void 0:{seq:m.seq,generation:o,at:a,kind:r,value:i}}async fetchInbox(e,t,n,r,i){let[a]=await R(this.db,()=>q(this.db,_`
|
|
178
178
|
select coalesce(jsonb_agg(jsonb_build_object('seq', i.seq, 'generation', i.generation, 'at', extract(epoch from i.at) * 1000, 'kind', i.kind, 'value', i.value) order by i.seq) filter (where i.seq is not null), '[]'::jsonb) as entries
|
|
179
179
|
from ${N} left join ${P} i on i.task_id = ${N.id} and i.generation = ${N.generation} and i.seq > ${i}
|
|
180
180
|
where ${this.fence(e,t,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})} group by ${N.id}`));return a?.entries}async ackInbox(e,n,r,i){if(i.generation!==void 0&&i.generation!==r.generation)return;let[a]=await z(this.db,[this.connectionLock(e,n)],_`
|
|
@@ -205,7 +205,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
205
205
|
name = ${d.name}, description = ${d.description??null}, problems = null, source = ${d.source},
|
|
206
206
|
repo = ${d.repo??null}, path = ${d.path??null},
|
|
207
207
|
current_version = ${l?_`${u.version}`:_`(select version from published)`}, updated_at = ${V(d.updatedAt).toISOString()}::timestamptz
|
|
208
|
-
where id = ${a.id}`),{record:d,version:u,unchanged:l}})}function Ut(e){let t=C;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:Ve(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,problems:r.problems??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,engineSettings:r.settings??null,createdAt:V(r.createdAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.slug,n)))}}}async function Wt(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(w).values({agentId:_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${t.slice(0,r)})`,version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:V(n.createdAt)}).onConflictDoNothing().returning({id:w.id})).length>0}function Gt(e){let t=w,n=_`${C.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>h(y(C.slug,e),n===void 0?void 0:r?y(t.version,n):v(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:C.slug,key:n}).from(t).innerJoin(C,y(C.id,t.agentId)).where(h(e.mine(C.organizationId),r)).orderBy(b(C.slug),b(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:He(e,t)}))},put:async(t,n)=>{await Wt(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${n.slice(0,r)})`;await e.db.delete(t).where(h(y(t.agentId,i),y(t.version,Number(n.slice(r+1)))))}}}const Kt=(e,t)=>_`(select ${N.id} from ${N} where ${N.organizationId} = ${e.organizationId} and ${N.publicId} = ${t})`;function qt(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:Ie(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,{audience:s,space:c}=Te(o),l={source:o.source,status:r.status,agent:o.agent,flow:o.flow,runnerKind:o.runner,access:o.access??null,installationId:o.event?_`(select id from ${Y} where organization_id = ${e.organizationId} and key = ${`${o.event.appId}:${o.event.installationId}`})`:null,event:o.event??null,audience:s,space:c??null,parent:o.parent??null,connections:o.connections??null,models:o.models??null,name:o.name??null,cwd:o.cwd??null,prompt:o.prompt??null,args:o.args??null,mcp:o.mcp??null,appendSystem:o.appendSystem??null,addDirs:o.addDirs??null,author:o.author??null,definition:o.definition,requestedBy:o.requestedBy??null,runnerId:o.runnerId??null,engineSettings:o.usage??null,tools:o.tools,context:o.context??null,files:o.files??null,failureReply:o.failureReply??null,notice:o.notice??null,taskUrl:o.taskUrl??null,settingsUrl:o.settingsUrl??null,result:r.result??null,error:r.error??null,fallbacks:r.fallbacks??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:V(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,logsComplete:r.logsComplete??null,archivedAt:r.archivedAt===void 0?null:V(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:V(r.createdAt),startedAt:r.startedAt===void 0?null:V(r.startedAt),finishedAt:r.finishedAt===void 0?null:V(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:V(r.cancelRequestedAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...l}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...l,archivedAt:a.unarchive?l.archivedAt:_`coalesce(${t.archivedAt}, ${l.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}async function Jt(e,t){return(await e.db.select({engine:le.engine,conversation:le.conversation,savedAt:le.savedAt}).from(le).innerJoin(N,y(N.id,le.taskId)).where(h(e.mine(N.organizationId),y(N.publicId,t))).orderBy(b(le.savedAt))).map(e=>({...e,savedAt:U(e.savedAt)}))}function Yt(e){let t=le,n=_`${N.publicId} || ':' || ${t.conversation}`,r=e=>[e.slice(0,e.indexOf(`:`)),e.slice(e.indexOf(`:`)+1)];return{key:n,where:({id:n,prefix:i})=>{let[a,o]=r(n??i??``);return h(e.mine(N.organizationId),y(N.publicId,a),n===void 0?void 0:y(t.conversation,o))},rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(t.savedAt));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:K({engine:e.engine,conversation:e.conversation,data:e.data,state:e.state,savedAt:U(e.savedAt)})}))},put:async(n,i)=>{let a={engine:i.engine,data:i.data,state:i.state??null,savedAt:V(i.savedAt)};await e.db.insert(t).values({taskId:Kt(e,r(n)[0]),conversation:i.conversation,...a}).onConflictDoUpdate({target:[t.taskId,t.conversation],set:a})},delete:async n=>{let[i,a]=r(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,i)),y(t.conversation,a)))}}}function Xt(e){let t=F,n=_`(line->>'seq')::int`,r=_`${N.publicId} || ':' || lpad(${n}::text, 6, '0')`;return{key:r,split:(r,i,a)=>h(e.mine(N.organizationId),y(N.publicId,r),i===void 0?void 0:a?te(t.seqTo,i):v(t.seqTo,i),i===void 0?void 0:a?y(n,i):v(n,i)),rows:async(i,a)=>{let o=e.db.select({key:r,line:_`line`}).from(t).innerJoin(N,y(N.id,t.taskId)).innerJoin(_`jsonb_array_elements(${t.lines}) line`,_`true`).where(i).orderBy(b(N.publicId),b(n));return(await(a===void 0?o:o.limit(a))).map(({key:e,line:t})=>({id:e,value:{at:t.at,level:t.level,line:t.line}}))},put:async(t,n)=>{let[r,i]=B(t);await Zt(e,r,[{seq:i,...n}])},delete:async n=>{let[r,i]=B(n);await e.db.update(t).set({lines:_`(select coalesce(jsonb_agg(line), '[]'::jsonb) from jsonb_array_elements(${t.lines}) line where ${i} <> ${i})`}).where(h(y(t.taskId,Kt(e,r)),te(t.seqTo,i),f(t.seqFrom,i)))}}}async function Zt(e,t,n){n.length&&await e.db.insert(F).values({taskId:Kt(e,t),seqFrom:n[0].seq,seqTo:n[n.length-1].seq,lines:n}).onConflictDoUpdate({target:[F.taskId,F.seqFrom],set:{seqTo:_`excluded.seq_to`,lines:_`excluded.lines`}})}function Qt(e){let t=P,n=_`${N.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>h(e.mine(N.organizationId),y(N.publicId,n),r===void 0?void 0:i?y(t.seq,r):v(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(N.publicId),b(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:U(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{await e.db.insert(t).values({taskId:Kt(e,n.slice(0,n.lastIndexOf(`:`))),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:V(r.at)})},delete:async n=>{let[r,i]=B(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,r)),y(t.seq,i)))}}}function $t(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,installationKey:Y.key}).from(t).leftJoin(Y,y(Y.id,t.installationId)).where(h(e.mine(t.organizationId),ne(t.runnerMs),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).flatMap(({row:e,installationKey:t})=>{let n=Ue(e,t);return n?[{id:e.publicId,value:n}]:[]})},put:async(n,r)=>{let i=B(n)?.[0]??n;await e.db.update(t).set({engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokenCount:ve(r.tokens),usageTokens:r.tokens??null,finishedAt:V(r.at)}).where(h(e.mine(t.organizationId),y(t.publicId,i)))},delete:async n=>{await e.db.update(t).set({engine:null,model:null,runnerMs:null,tokenCount:null,usageTokens:null}).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}var en=e({DrizzleStore:()=>tn,taskSecretRows:()=>nn}),tn=class e{db;organizationId;now;encryption;locks;notifications;recordChannel(e,t){return`record_${Ge(`sha256`).update(JSON.stringify([this.organizationId,e,t])).digest(`hex`).slice(0,48)}`}notification(e,t){return this.notifications?{notified:_`pg_notify(${this.recordChannel(e,t)}, '')`}:void 0}async watch(e,t){let n=i(),r=this.db.$client,a=r?.listen?await r.listen(this.recordChannel(e,t),n.notify,n.notify).catch(()=>void 0):void 0;return{...n,close(){a?.unlisten().catch(()=>{}),n.close()}}}publishAgent=(e,t,n)=>Ht(this,e,t,n);kinds;constructor(e,t,n=Date.now,r={},i,a=!!e.$client?.unsafe){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.locks=i,this.notifications=a,this.kinds={agent:Ut(this),agentversion:Gt(this),app:Ye(this),installation:Qe(this),credential:it(this),task:qt(this),history:Yt(this),tasklog:Xt(this),inbox:Qt(this),usage:$t(this),delivery:ft(this,`delivery`),login:ft(this,`login`),config:mt(this),runner:yt(this),snapshot:ft(this,`snapshot`),connection:_t(this)},this.posts=pt(this),this.secrets=Ct(this)}posts;secrets;kind(e,t){return e===`delivery`&&t?.startsWith(`approval:`)?this.posts:e===`snapshot`&&t&&xt(t)?this.secrets:this.kinds[e]}static async webhookTarget(e,t,n){let[r]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Y,h(y(Y.appId,W.id),y(Y.key,n??``),S(Y.deletedAt))).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(y(W.key,t)));if(r&&!r.installation&&n){let r=`${t}/`,[i]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(Y).innerJoin(W,y(W.id,Y.appId)).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(_`left(${W.key}, ${r.length}) = ${r}`,y(Y.platformInstallId,n.slice(t.length+1)),S(Y.deletedAt))).limit(1));if(i)return{organizationId:i.app.organizationId,app:$(i.app,i.credentials),bound:{organizationId:i.installation.organizationId,installation:Xe(i.installation,i.app,i.token)}}}return r&&{organizationId:r.app.organizationId,app:$(r.app,r.credentials),...r.installation?{bound:{organizationId:r.installation.organizationId,installation:Xe(r.installation,r.app,r.token)}}:{}}}static async appRecord(e,t){let[n]=await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.key,t)));return n&&{organizationId:n.row.organizationId,app:$(n.row,n.credentials)}}static async apps(e,t){return(await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.integration,t)))).map(({row:e,credentials:t})=>({organizationId:e.organizationId,app:$(e,t)}))}static async installationOrganization(e,t){let[n]=await R(e,()=>e.select({organizationId:Y.organizationId}).from(Y).where(y(Y.key,t)));return n?.organizationId}static async installations(e,t){return R(e,()=>e.select({key:Y.key,organizationId:Y.organizationId}).from(Y).where(h(_`${Y.key} like ${`${H(t)}:%`}`,S(Y.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await R(e,()=>e.select({organizationId:N.organizationId}).from(N).where(h(y(N.publicId,t),y(N.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await R(this.db,()=>this.db.select({row:W,credentials:j.value,sharedKey:Z.key}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).where(h(p(W.organizationId,[this.organizationId,``]),p(W.key,e))))).map(e=>({id:e.row.key,value:$(e.row,e.credentials,e.sharedKey)})):[]}async listCredentials(e){let t=D,n=this.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(this.mine(t.organizationId),e.owner?x(S(t.owner),y(t.owner,e.owner)):S(t.owner))).orderBy(b(_`case when ${t.owner} is null then 'workspace' else 'personal' end`),b(t.label));return(await R(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t)}))}async updateMetadata(e,t,n){return e===`installation`&&(`covers`in n||`deletedAt`in n)?this.transaction(`installation:${t}`,async r=>{let i=await r.get(`installation`,t);if(!i)return!1;let a={...i,...n};return a.deletedAt===void 0&&await Ze(r,t,a),r.writeMetadata(e,t,n)}):this.writeMetadata(e,t,n)}async writeMetadata(e,t,n){let r=e===`app`?W:e===`installation`?Y:A,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`self`,`covers`,`repos`,`deletedAt`,`uninstalled`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?V(t):t])),o=e===`runner`?A.publicId:e===`app`?W.key:Y.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?V(n.updatedAt):this.at()}).where(h(this.mine(r.organizationId),y(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){let n=/^connections?[:-]/.test(e)?`${this.organizationId}:${e}`:e;return this.transaction(`app:${n}`,t)}queue(){return new Vt(this.db)}withConfigLock(e){return this.transaction(`config:${this.organizationId}`,e)}async transaction(t,n){let r=_`select pg_advisory_xact_lock(3, hashtext(${t}))`;return this.locks?(this.locks.has(t)||await this.db.execute(r),this.locks.add(t),n(this)):this.db.transaction(async i=>(await i.execute(r),n(new e(i,this.organizationId,this.now,this.encryption,new Set([t]),this.notifications))))}withCredential(e,t,n){if(e===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>ke(e,`runner`,t,n));if(e===`installation`)return this.transaction(`installation:${t}`,async e=>{let r=await $e(e,t),i=await n(r,r?[{id:t,value:r}]:[],e);for(let t of i??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!i?.length});let{owner:r}=he(t);return this.transaction(tt(this,r),async e=>{let i=await nt(e,r),a=i.map(({id:e,value:t})=>({id:e,value:t})),o=await n(a.find(e=>e.id===t)?.value,a,e);for(let t of o??[])await rt(e,i.find(e=>e.id===t.id),t.id,t.value);return!!o?.length})}at(){return V(this.now())}live(e){return x(S(e),v(e,this.at()))}mine(e){return y(e,this.organizationId)}async get(e,t){if(e===`app`)return(await this.getApps([t]))[0]?.value;let n=this.kind(e,t),r=B(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):_`${n.key} = ${t}`;return(await R(this.db,async()=>await n.rows(i,1)))[0]?.value}async patchLogin(e,t,n={}){let[r]=await this.db.update(E).set({value:_`jsonb_strip_nulls(${E.value} || ${JSON.stringify(t)}::jsonb)`}).where(h(y(E.key,X(this.organizationId,`login`,e)),this.live(E.expiresAt),_`(${E.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?p(_`${E.value}->>${e}`,t):_`${E.value}->>${e} = ${t}`))).returning({value:_`${E.value}`,...this.notification(`login`,e)});return r?.value}completeLogin(e,t,n){return fe(this,e,t,n)}async listAgentsWithVersions(e){return(await R(this.db,()=>this.db.select({record:C,version:w}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e===void 0?void 0:Array.isArray(e)?e.length?p(C.slug,e):_`false`:y(C.slug,e))).orderBy(b(C.slug)))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:He(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${H(e.q)}%`:void 0,n=_`${C.source} <> 'builtin'`,r=this.db.select({record:C,version:Pe}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e.slug===void 0?void 0:y(C.slug,e.slug),e.after?_`(${n}, ${C.slug}) > (${e.after[0]===`1`}, ${e.after.slice(2)})`:void 0,e.source?y(C.source,e.source):void 0,t?x(g(C.slug,t),g(C.name,t),g(C.description,t),g(C.repo,t)):void 0,e.platform?_`${w.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(n,b(C.slug));return(await R(this.db,()=>e.limit===void 0?r:r.limit(e.limit))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:Ne(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:Pe}).from(w).innerJoin(C,y(C.id,w.agentId)).where(h(this.mine(C.organizationId),y(C.slug,e),n===void 0?t===void 0?void 0:f(w.version,C.currentVersion):re(w.version,n),t===void 0?void 0:te(w.version,n===void 0?_`${C.currentVersion} + 1 - ${t}`:n-t))).orderBy(b(w.version));return(await R(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:Ne(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);await this.kind(e,t).put(t,n,i,r)}async putMany(e,t,n={}){if(!t.length)return;if(e===`delivery`&&!t.some(e=>e.id.startsWith(`approval:`))){await this.db.insert(E).values(t.map(({id:t,value:r})=>({key:X(this.organizationId,e,t),value:r,expiresAt:n.ttlMs===void 0?null:V(this.now()+n.ttlMs)}))).onConflictDoUpdate({target:E.key,set:{value:_`excluded.value`,expiresAt:_`excluded.expires_at`}});return}if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let[r]=B(t[0].id),i=t.map(e=>{let[t,n]=B(e.id);if(t!==r)throw Error(`A log batch must belong to one task`);return{seq:n,...e.value}});await Zt(this,r,i)}async approvalPostsDue(e,t){let n=T;return R(this.db,()=>this.db.select({organizationId:n.organizationId,id:n.key,value:n.value}).from(n).where(h(this.live(n.expiresAt),x(f(n.retryAt,V(e)),h(S(n.shownAt),f(n.at,V(e-t)))))))}async list(e,t={}){return e===`snapshot`&&!t.ids&&`connections:`.startsWith(t.prefix??``)?[...await this.listRows(e,t,this.kinds.snapshot),...await this.listRows(e,t,this.secrets)].sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)).slice(0,t.limit):this.listRows(e,t,this.kind(e,t.prefix))}async listRows(e,t,n){let r=[];if(t.ids&&r.push(t.ids.length?p(_`${n.key}`,t.ids.map(t=>n.where?X(this.organizationId,e,t):t)):_`false`),t.runner&&r.push(e===`runner`?x(y(A.publicId,t.runner),y(A.name,t.runner)):_`false`),t.defaults&&r.push(e===`runner`?y(A.isDefault,!0):_`false`),t.installation&&r.push(e===`usage`?y(Y.key,t.installation):_`false`),t.agent&&r.push(e===`app`||e===`installation`?y(W.agent,t.agent):e===`agent`?y(C.slug,t.agent):_`false`),t.active&&r.push(e===`installation`?x(S(Y.deletedAt),...t.includeUninstalled?[y(Y.uninstalled,!0)]:[]):void 0),t.apps&&r.push(e===`installation`&&t.apps.length?p(W.key,t.apps):_`false`),Object.hasOwn(t,`visibleTo`)){let n=e===`runner`?A.owner:e===`credential`?D.owner:oe.owner;r.push(x(S(n),t.visibleTo?y(_`${n}`,t.visibleTo):void 0))}if(n.where)return R(this.db,async()=>await n.rows(h(n.where(t),...r),t.limit));let i=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,a=t.after===void 0?void 0:B(t.after);if(n.split&&i&&!i.includes(`:`)&&(t.after===void 0||a?.[0]===i))return R(this.db,async()=>await n.rows(n.split(i,a?.[1]),t.limit));let o=t.prefix?_`${n.key} like ${`${H(t.prefix)}%`}`:void 0,s=t.after?_`${n.key} > ${t.after}`:void 0,c=h(o,s,...r);return R(this.db,async()=>await n.rows(c,t.limit))}async delete(e,t){let n=e===`login`?this.notification(e,t):void 0;if(n){await this.db.delete(E).where(y(E.key,X(this.organizationId,e,t))).returning(n);return}await this.kind(e,t).delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Wt(this,t,n);if(e===`connection`)return this.transaction(gt(this,t),async e=>{let{secret:r,...i}=n,a=r?await Be(e.db,r):null,o=await e.db.insert(oe).values({organizationId:e.organizationId,key:t,owner:i.owner,record:i,secretId:a}).onConflictDoNothing().returning({id:oe.id});return o.length||await J(e.db,[a]),o.length>0});if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);if(t.startsWith(`approval:`)){let e=n,r={value:e,at:V(e.at),shownAt:e.shownAt?V(e.shownAt):null,retryAt:e.retryAt===void 0?null:V(e.retryAt),expiresAt:i};return(await this.db.insert(T).values({organizationId:this.organizationId,key:t,...r}).onConflictDoUpdate({target:[T.organizationId,T.key],set:r,setWhere:f(T.expiresAt,this.at())}).returning({id:T.id})).length>0}return(await this.db.insert(E).values({key:X(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:E.key,set:{value:n,expiresAt:i},setWhere:f(E.expiresAt,this.at())}).returning({key:E.key})).length>0}async claimDeliveryLease(e,t,n){let r=_`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(E).values({key:X(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:E.key,set:{value:_`${E.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:_`${E.expiresAt} <= clock_timestamp()`}).returning({value:E.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t} and ${E.expiresAt} > clock_timestamp()`),a=_`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n.next===void 0?n:_`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:E.key})).length>0}async updateDelivery(e,t,n,r={}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t}`,this.live(E.expiresAt));return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n,expiresAt:r.ttlMs===void 0?null:V(this.now()+r.ttlMs)}).where(i).returning({key:E.key})).length>0}listHistory(e){return Jt(this,e)}async installationApp(e){let[t]=await R(this.db,()=>this.db.select({installation:Y,app:W,credentials:j.value,token:Q.value,sharedKey:Z.key}).from(Y).innerJoin(W,h(y(W.id,Y.appId),p(W.organizationId,[this.organizationId,``]))).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(this.mine(Y.organizationId),y(Y.key,e),S(Y.deletedAt))));return t&&{installation:Xe(t.installation,t.app,t.token),app:$(t.app,t.credentials,t.sharedKey)}}async conversationState(e){let t=ie(E,`unseen`),n=ie(E,`batch`),[r]=await R(this.db,()=>this.db.select({record:E.value,unseen:t.value,batch:n.value,task:N}).from(_`(select 1) as anchor`).leftJoin(E,h(y(E.key,X(this.organizationId,`delivery`,e)),this.live(E.expiresAt))).leftJoin(t,h(y(t.key,X(this.organizationId,`delivery`,`since:${e}`)),this.live(t.expiresAt))).leftJoin(n,h(y(n.key,X(this.organizationId,`delivery`,`batch:${e}`)),this.live(n.expiresAt))).leftJoin(N,h(this.mine(N.organizationId),y(N.publicId,_`${E.value}->>'taskId'`),y(N.flow,`default`))));return{...r?.record?{record:r.record}:{},...r?.unseen?{unseen:r.unseen}:{},...r?.batch?{batch:r.batch}:{},...r?.task?{status:Ie(r.task)}:{}}}async heldTokens(e,t){let[n]=await R(this.db,()=>q(this.db,_`select ${lt(this.organizationId,e,t)} as tokens`));return ut(this.organizationId,n?.tokens??{})}async holdToken(e){let t=E,n=e=>X(this.organizationId,`snapshot`,e);await this.db.execute(_`insert into ${t} (key, value, expires_at)
|
|
208
|
+
where id = ${a.id}`),{record:d,version:u,unchanged:l}})}function Ut(e){let t=C;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:Ve(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,problems:r.problems??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,engineSettings:r.settings??null,createdAt:V(r.createdAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.slug,n)))}}}async function Wt(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(w).values({agentId:_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${t.slice(0,r)})`,version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:V(n.createdAt)}).onConflictDoNothing().returning({id:w.id})).length>0}function Gt(e){let t=w,n=_`${C.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>h(y(C.slug,e),n===void 0?void 0:r?y(t.version,n):v(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:C.slug,key:n}).from(t).innerJoin(C,y(C.id,t.agentId)).where(h(e.mine(C.organizationId),r)).orderBy(b(C.slug),b(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:He(e,t)}))},put:async(t,n)=>{await Wt(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${n.slice(0,r)})`;await e.db.delete(t).where(h(y(t.agentId,i),y(t.version,Number(n.slice(r+1)))))}}}const Kt=(e,t)=>_`(select ${N.id} from ${N} where ${N.organizationId} = ${e.organizationId} and ${N.publicId} = ${t})`;function qt(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:Ie(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,{audience:s,space:c}=Se(o),l={source:o.source,status:r.status,agent:o.agent,flow:o.flow,runnerKind:o.runner,access:o.access??null,installationId:o.event?_`(select id from ${Y} where organization_id = ${e.organizationId} and key = ${`${o.event.appId}:${o.event.installationId}`})`:null,event:o.event??null,audience:s,space:c??null,parent:o.parent??null,connections:o.connections??null,models:o.models??null,name:o.name??null,cwd:o.cwd??null,prompt:o.prompt??null,args:o.args??null,mcp:o.mcp??null,appendSystem:o.appendSystem??null,addDirs:o.addDirs??null,author:o.author??null,definition:o.definition,requestedBy:o.requestedBy??null,runnerId:o.runnerId??null,engineSettings:o.usage??null,tools:o.tools,context:o.context??null,files:o.files??null,failureReply:o.failureReply??null,notice:o.notice??null,taskUrl:o.taskUrl??null,settingsUrl:o.settingsUrl??null,result:r.result??null,error:r.error??null,fallbacks:r.fallbacks??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:V(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,logsComplete:r.logsComplete??null,archivedAt:r.archivedAt===void 0?null:V(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:V(r.createdAt),startedAt:r.startedAt===void 0?null:V(r.startedAt),finishedAt:r.finishedAt===void 0?null:V(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:V(r.cancelRequestedAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...l}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...l,archivedAt:a.unarchive?l.archivedAt:_`coalesce(${t.archivedAt}, ${l.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}async function Jt(e,t){return(await e.db.select({engine:le.engine,conversation:le.conversation,savedAt:le.savedAt}).from(le).innerJoin(N,y(N.id,le.taskId)).where(h(e.mine(N.organizationId),y(N.publicId,t))).orderBy(b(le.savedAt))).map(e=>({...e,savedAt:U(e.savedAt)}))}function Yt(e){let t=le,n=_`${N.publicId} || ':' || ${t.conversation}`,r=e=>[e.slice(0,e.indexOf(`:`)),e.slice(e.indexOf(`:`)+1)];return{key:n,where:({id:n,prefix:i})=>{let[a,o]=r(n??i??``);return h(e.mine(N.organizationId),y(N.publicId,a),n===void 0?void 0:y(t.conversation,o))},rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(t.savedAt));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:K({engine:e.engine,conversation:e.conversation,data:e.data,state:e.state,savedAt:U(e.savedAt)})}))},put:async(n,i)=>{let a={engine:i.engine,data:i.data,state:i.state??null,savedAt:V(i.savedAt)};await e.db.insert(t).values({taskId:Kt(e,r(n)[0]),conversation:i.conversation,...a}).onConflictDoUpdate({target:[t.taskId,t.conversation],set:a})},delete:async n=>{let[i,a]=r(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,i)),y(t.conversation,a)))}}}function Xt(e){let t=F,n=_`(line->>'seq')::int`,r=_`${N.publicId} || ':' || lpad(${n}::text, 6, '0')`;return{key:r,split:(r,i,a)=>h(e.mine(N.organizationId),y(N.publicId,r),i===void 0?void 0:a?te(t.seqTo,i):v(t.seqTo,i),i===void 0?void 0:a?y(n,i):v(n,i)),rows:async(i,a)=>{let o=e.db.select({key:r,line:_`line`}).from(t).innerJoin(N,y(N.id,t.taskId)).innerJoin(_`jsonb_array_elements(${t.lines}) line`,_`true`).where(i).orderBy(b(N.publicId),b(n));return(await(a===void 0?o:o.limit(a))).map(({key:e,line:t})=>({id:e,value:{at:t.at,level:t.level,line:t.line}}))},put:async(t,n)=>{let[r,i]=B(t);await Zt(e,r,[{seq:i,...n}])},delete:async n=>{let[r,i]=B(n);await e.db.update(t).set({lines:_`(select coalesce(jsonb_agg(line), '[]'::jsonb) from jsonb_array_elements(${t.lines}) line where ${i} <> ${i})`}).where(h(y(t.taskId,Kt(e,r)),te(t.seqTo,i),f(t.seqFrom,i)))}}}async function Zt(e,t,n){n.length&&await e.db.insert(F).values({taskId:Kt(e,t),seqFrom:n[0].seq,seqTo:n[n.length-1].seq,lines:n}).onConflictDoUpdate({target:[F.taskId,F.seqFrom],set:{seqTo:_`excluded.seq_to`,lines:_`excluded.lines`}})}function Qt(e){let t=P,n=_`${N.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>h(e.mine(N.organizationId),y(N.publicId,n),r===void 0?void 0:i?y(t.seq,r):v(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(N.publicId),b(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:U(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{await e.db.insert(t).values({taskId:Kt(e,n.slice(0,n.lastIndexOf(`:`))),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:V(r.at)})},delete:async n=>{let[r,i]=B(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,r)),y(t.seq,i)))}}}function $t(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,installationKey:Y.key}).from(t).leftJoin(Y,y(Y.id,t.installationId)).where(h(e.mine(t.organizationId),ne(t.runnerMs),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).flatMap(({row:e,installationKey:t})=>{let n=Ue(e,t);return n?[{id:e.publicId,value:n}]:[]})},put:async(n,r)=>{let i=B(n)?.[0]??n;await e.db.update(t).set({engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokenCount:Ce(r.tokens),usageTokens:r.tokens??null,finishedAt:V(r.at)}).where(h(e.mine(t.organizationId),y(t.publicId,i)))},delete:async n=>{await e.db.update(t).set({engine:null,model:null,runnerMs:null,tokenCount:null,usageTokens:null}).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}var en=e({DrizzleStore:()=>tn,taskSecretRows:()=>nn}),tn=class e{db;organizationId;now;encryption;locks;notifications;recordChannel(e,t){return`record_${Ge(`sha256`).update(JSON.stringify([this.organizationId,e,t])).digest(`hex`).slice(0,48)}`}notification(e,t){return this.notifications?{notified:_`pg_notify(${this.recordChannel(e,t)}, '')`}:void 0}async watch(e,t){let n=i(),r=this.db.$client,a=r?.listen?await r.listen(this.recordChannel(e,t),n.notify,n.notify).catch(()=>void 0):void 0;return{...n,close(){a?.unlisten().catch(()=>{}),n.close()}}}publishAgent=(e,t,n)=>Ht(this,e,t,n);kinds;constructor(e,t,n=Date.now,r={},i,a=!!e.$client?.unsafe){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.locks=i,this.notifications=a,this.kinds={agent:Ut(this),agentversion:Gt(this),app:Ye(this),installation:Qe(this),credential:it(this),task:qt(this),history:Yt(this),tasklog:Xt(this),inbox:Qt(this),usage:$t(this),delivery:ft(this,`delivery`),login:ft(this,`login`),config:mt(this),runner:yt(this),snapshot:ft(this,`snapshot`),connection:_t(this)},this.posts=pt(this),this.secrets=Ct(this)}posts;secrets;kind(e,t){return e===`delivery`&&t?.startsWith(`approval:`)?this.posts:e===`snapshot`&&t&&xt(t)?this.secrets:this.kinds[e]}static async webhookTarget(e,t,n){let[r]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Y,h(y(Y.appId,W.id),y(Y.key,n??``),S(Y.deletedAt))).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(y(W.key,t)));if(r&&!r.installation&&n){let r=`${t}/`,[i]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(Y).innerJoin(W,y(W.id,Y.appId)).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(_`left(${W.key}, ${r.length}) = ${r}`,y(Y.platformInstallId,n.slice(t.length+1)),S(Y.deletedAt))).limit(1));if(i)return{organizationId:i.app.organizationId,app:$(i.app,i.credentials),bound:{organizationId:i.installation.organizationId,installation:Xe(i.installation,i.app,i.token)}}}return r&&{organizationId:r.app.organizationId,app:$(r.app,r.credentials),...r.installation?{bound:{organizationId:r.installation.organizationId,installation:Xe(r.installation,r.app,r.token)}}:{}}}static async appRecord(e,t){let[n]=await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.key,t)));return n&&{organizationId:n.row.organizationId,app:$(n.row,n.credentials)}}static async apps(e,t){return(await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.integration,t)))).map(({row:e,credentials:t})=>({organizationId:e.organizationId,app:$(e,t)}))}static async installationOrganization(e,t){let[n]=await R(e,()=>e.select({organizationId:Y.organizationId}).from(Y).where(y(Y.key,t)));return n?.organizationId}static async installations(e,t){return R(e,()=>e.select({key:Y.key,organizationId:Y.organizationId}).from(Y).where(h(_`${Y.key} like ${`${H(t)}:%`}`,S(Y.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await R(e,()=>e.select({organizationId:N.organizationId}).from(N).where(h(y(N.publicId,t),y(N.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await R(this.db,()=>this.db.select({row:W,credentials:j.value,sharedKey:Z.key}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).where(h(p(W.organizationId,[this.organizationId,``]),p(W.key,e))))).map(e=>({id:e.row.key,value:$(e.row,e.credentials,e.sharedKey)})):[]}async listCredentials(e){let t=D,n=this.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(this.mine(t.organizationId),e.owner?x(S(t.owner),y(t.owner,e.owner)):S(t.owner))).orderBy(b(_`case when ${t.owner} is null then 'workspace' else 'personal' end`),b(t.label));return(await R(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({row:e,sealed:t})=>({id:fe(e.owner??void 0,e.label),value:et(e,t)}))}async updateMetadata(e,t,n){return e===`installation`&&(`covers`in n||`deletedAt`in n)?this.transaction(`installation:${t}`,async r=>{let i=await r.get(`installation`,t);if(!i)return!1;let a={...i,...n};return a.deletedAt===void 0&&await Ze(r,t,a),r.writeMetadata(e,t,n)}):this.writeMetadata(e,t,n)}async writeMetadata(e,t,n){let r=e===`app`?W:e===`installation`?Y:A,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`self`,`covers`,`repos`,`deletedAt`,`uninstalled`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?V(t):t])),o=e===`runner`?A.publicId:e===`app`?W.key:Y.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?V(n.updatedAt):this.at()}).where(h(this.mine(r.organizationId),y(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){let n=/^connections?[:-]/.test(e)?`${this.organizationId}:${e}`:e;return this.transaction(`app:${n}`,t)}queue(){return new Vt(this.db)}withConfigLock(e){return this.transaction(`config:${this.organizationId}`,e)}async transaction(t,n){let r=_`select pg_advisory_xact_lock(3, hashtext(${t}))`;return this.locks?(this.locks.has(t)||await this.db.execute(r),this.locks.add(t),n(this)):this.db.transaction(async i=>(await i.execute(r),n(new e(i,this.organizationId,this.now,this.encryption,new Set([t]),this.notifications))))}withCredential(e,t,n){if(e===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>ke(e,`runner`,t,n));if(e===`installation`)return this.transaction(`installation:${t}`,async e=>{let r=await $e(e,t),i=await n(r,r?[{id:t,value:r}]:[],e);for(let t of i??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!i?.length});let{owner:r}=ge(t);return this.transaction(tt(this,r),async e=>{let i=await nt(e,r),a=i.map(({id:e,value:t})=>({id:e,value:t})),o=await n(a.find(e=>e.id===t)?.value,a,e);for(let t of o??[])await rt(e,i.find(e=>e.id===t.id),t.id,t.value);return!!o?.length})}at(){return V(this.now())}live(e){return x(S(e),v(e,this.at()))}mine(e){return y(e,this.organizationId)}async get(e,t){if(e===`app`)return(await this.getApps([t]))[0]?.value;let n=this.kind(e,t),r=B(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):_`${n.key} = ${t}`;return(await R(this.db,async()=>await n.rows(i,1)))[0]?.value}async patchLogin(e,t,n={}){let[r]=await this.db.update(E).set({value:_`jsonb_strip_nulls(${E.value} || ${JSON.stringify(t)}::jsonb)`}).where(h(y(E.key,X(this.organizationId,`login`,e)),this.live(E.expiresAt),_`(${E.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?p(_`${E.value}->>${e}`,t):_`${E.value}->>${e} = ${t}`))).returning({value:_`${E.value}`,...this.notification(`login`,e)});return r?.value}completeLogin(e,t,n){return he(this,e,t,n)}async listAgentsWithVersions(e){return(await R(this.db,()=>this.db.select({record:C,version:w}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e===void 0?void 0:Array.isArray(e)?e.length?p(C.slug,e):_`false`:y(C.slug,e))).orderBy(b(C.slug)))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:He(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${H(e.q)}%`:void 0,n=_`${C.source} <> 'builtin'`,r=this.db.select({record:C,version:Pe}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e.slug===void 0?void 0:y(C.slug,e.slug),e.after?_`(${n}, ${C.slug}) > (${e.after[0]===`1`}, ${e.after.slice(2)})`:void 0,e.source?y(C.source,e.source):void 0,t?x(g(C.slug,t),g(C.name,t),g(C.description,t),g(C.repo,t)):void 0,e.platform?_`${w.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(n,b(C.slug));return(await R(this.db,()=>e.limit===void 0?r:r.limit(e.limit))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:Ne(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:Pe}).from(w).innerJoin(C,y(C.id,w.agentId)).where(h(this.mine(C.organizationId),y(C.slug,e),n===void 0?t===void 0?void 0:f(w.version,C.currentVersion):re(w.version,n),t===void 0?void 0:te(w.version,n===void 0?_`${C.currentVersion} + 1 - ${t}`:n-t))).orderBy(b(w.version));return(await R(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:Ne(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);await this.kind(e,t).put(t,n,i,r)}async putMany(e,t,n={}){if(!t.length)return;if(e===`delivery`&&!t.some(e=>e.id.startsWith(`approval:`))){await this.db.insert(E).values(t.map(({id:t,value:r})=>({key:X(this.organizationId,e,t),value:r,expiresAt:n.ttlMs===void 0?null:V(this.now()+n.ttlMs)}))).onConflictDoUpdate({target:E.key,set:{value:_`excluded.value`,expiresAt:_`excluded.expires_at`}});return}if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let[r]=B(t[0].id),i=t.map(e=>{let[t,n]=B(e.id);if(t!==r)throw Error(`A log batch must belong to one task`);return{seq:n,...e.value}});await Zt(this,r,i)}async approvalPostsDue(e,t){let n=T;return R(this.db,()=>this.db.select({organizationId:n.organizationId,id:n.key,value:n.value}).from(n).where(h(this.live(n.expiresAt),x(f(n.retryAt,V(e)),h(S(n.shownAt),f(n.at,V(e-t)))))))}async list(e,t={}){return e===`snapshot`&&!t.ids&&`connections:`.startsWith(t.prefix??``)?[...await this.listRows(e,t,this.kinds.snapshot),...await this.listRows(e,t,this.secrets)].sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)).slice(0,t.limit):this.listRows(e,t,this.kind(e,t.prefix))}async listRows(e,t,n){let r=[];if(t.ids&&r.push(t.ids.length?p(_`${n.key}`,t.ids.map(t=>n.where?X(this.organizationId,e,t):t)):_`false`),t.runner&&r.push(e===`runner`?x(y(A.publicId,t.runner),y(A.name,t.runner)):_`false`),t.defaults&&r.push(e===`runner`?y(A.isDefault,!0):_`false`),t.installation&&r.push(e===`usage`?y(Y.key,t.installation):_`false`),t.agent&&r.push(e===`app`||e===`installation`?y(W.agent,t.agent):e===`agent`?y(C.slug,t.agent):_`false`),t.active&&r.push(e===`installation`?x(S(Y.deletedAt),...t.includeUninstalled?[y(Y.uninstalled,!0)]:[]):void 0),t.apps&&r.push(e===`installation`&&t.apps.length?p(W.key,t.apps):_`false`),Object.hasOwn(t,`visibleTo`)){let n=e===`runner`?A.owner:e===`credential`?D.owner:oe.owner;r.push(x(S(n),t.visibleTo?y(_`${n}`,t.visibleTo):void 0))}if(n.where)return R(this.db,async()=>await n.rows(h(n.where(t),...r),t.limit));let i=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,a=t.after===void 0?void 0:B(t.after);if(n.split&&i&&!i.includes(`:`)&&(t.after===void 0||a?.[0]===i))return R(this.db,async()=>await n.rows(n.split(i,a?.[1]),t.limit));let o=t.prefix?_`${n.key} like ${`${H(t.prefix)}%`}`:void 0,s=t.after?_`${n.key} > ${t.after}`:void 0,c=h(o,s,...r);return R(this.db,async()=>await n.rows(c,t.limit))}async delete(e,t){let n=e===`login`?this.notification(e,t):void 0;if(n){await this.db.delete(E).where(y(E.key,X(this.organizationId,e,t))).returning(n);return}await this.kind(e,t).delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Wt(this,t,n);if(e===`connection`)return this.transaction(gt(this,t),async e=>{let{secret:r,...i}=n,a=r?await Be(e.db,r):null,o=await e.db.insert(oe).values({organizationId:e.organizationId,key:t,owner:i.owner,record:i,secretId:a}).onConflictDoNothing().returning({id:oe.id});return o.length||await J(e.db,[a]),o.length>0});if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);if(t.startsWith(`approval:`)){let e=n,r={value:e,at:V(e.at),shownAt:e.shownAt?V(e.shownAt):null,retryAt:e.retryAt===void 0?null:V(e.retryAt),expiresAt:i};return(await this.db.insert(T).values({organizationId:this.organizationId,key:t,...r}).onConflictDoUpdate({target:[T.organizationId,T.key],set:r,setWhere:f(T.expiresAt,this.at())}).returning({id:T.id})).length>0}return(await this.db.insert(E).values({key:X(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:E.key,set:{value:n,expiresAt:i},setWhere:f(E.expiresAt,this.at())}).returning({key:E.key})).length>0}async claimDeliveryLease(e,t,n){let r=_`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(E).values({key:X(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:E.key,set:{value:_`${E.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:_`${E.expiresAt} <= clock_timestamp()`}).returning({value:E.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t} and ${E.expiresAt} > clock_timestamp()`),a=_`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n.next===void 0?n:_`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:E.key})).length>0}async updateDelivery(e,t,n,r={}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t}`,this.live(E.expiresAt));return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n,expiresAt:r.ttlMs===void 0?null:V(this.now()+r.ttlMs)}).where(i).returning({key:E.key})).length>0}listHistory(e){return Jt(this,e)}async installationApp(e){let[t]=await R(this.db,()=>this.db.select({installation:Y,app:W,credentials:j.value,token:Q.value,sharedKey:Z.key}).from(Y).innerJoin(W,h(y(W.id,Y.appId),p(W.organizationId,[this.organizationId,``]))).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(this.mine(Y.organizationId),y(Y.key,e),S(Y.deletedAt))));return t&&{installation:Xe(t.installation,t.app,t.token),app:$(t.app,t.credentials,t.sharedKey)}}async conversationState(e){let t=ie(E,`unseen`),n=ie(E,`batch`),[r]=await R(this.db,()=>this.db.select({record:E.value,unseen:t.value,batch:n.value,task:N}).from(_`(select 1) as anchor`).leftJoin(E,h(y(E.key,X(this.organizationId,`delivery`,e)),this.live(E.expiresAt))).leftJoin(t,h(y(t.key,X(this.organizationId,`delivery`,`since:${e}`)),this.live(t.expiresAt))).leftJoin(n,h(y(n.key,X(this.organizationId,`delivery`,`batch:${e}`)),this.live(n.expiresAt))).leftJoin(N,h(this.mine(N.organizationId),y(N.publicId,_`${E.value}->>'taskId'`),y(N.flow,`default`))));return{...r?.record?{record:r.record}:{},...r?.unseen?{unseen:r.unseen}:{},...r?.batch?{batch:r.batch}:{},...r?.task?{status:Ie(r.task)}:{}}}async heldTokens(e,t){let[n]=await R(this.db,()=>q(this.db,_`select ${lt(this.organizationId,e,t)} as tokens`));return ut(this.organizationId,n?.tokens??{})}async holdToken(e){let t=E,n=e=>X(this.organizationId,`snapshot`,e);await this.db.execute(_`insert into ${t} (key, value, expires_at)
|
|
209
209
|
select ${n(e.key)}, ${JSON.stringify(e.value)}::jsonb, ${V(this.now()+e.ttlMs).toISOString()}::timestamptz
|
|
210
210
|
where ${_.join(e.drops.map(e=>_`coalesce((select ${t.value}->>'drop' from ${t} where ${t.key} = ${n(e.key)} and ${this.live(t.expiresAt)}), '') = ${e.drop??``}`),_` and `)}
|
|
211
211
|
on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at`)}async saveTaskSecrets(e,t){let[n]=await z(this.db,[_`select pg_advisory_xact_lock(3, hashtext(${`app:${this.organizationId}:connections:${e}`}))`],_`with active as (select id from ${N} where ${this.mine(N.organizationId)} and ${N.publicId} = ${e} and ${N.status} in ('queued', 'running', 'waiting')),
|
|
@@ -299,7 +299,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
299
299
|
cross join unnest(${_.param(t?[t]:[`agent`,`installation`,`engine`])}::text[]) groups(kind)
|
|
300
300
|
where ${this.mine(n.organizationId)} and ${n.runnerMs} is not null and ${n.finishedAt} >= ${new Date(e).toISOString()}::timestamptz
|
|
301
301
|
group by 1 order by 1
|
|
302
|
-
`))).map(e=>{let t=e.tokens?.reduce(
|
|
302
|
+
`))).map(e=>{let t=e.tokens?.reduce(ye,void 0);return{key:e.key,tasks:e.tasks,runnerMs:e.runner_ms,...t===void 0?{}:{tokens:t}}});if(t)return a;let o={agent:[],installation:[],engine:[]};for(let e of a){let t=e.key.indexOf(`:`);o[e.key.slice(0,t)].push({...e,key:e.key.slice(t+1)})}return o}async usageTotals(e){let t=N,n=e.by===`agent`?_`${t.agent}`:e.by===`engine`?_`coalesce(${t.engine}, 'unknown')`:e.by===`installation`?_`coalesce(${Y.key}, 'none')`:_`to_char(${t.finishedAt} at time zone ${_e(e.tz)}, 'YYYY-MM-DD')`,r=h(this.mine(t.organizationId),ne(t.runnerMs),te(t.finishedAt,V(e.since)),e.until===void 0?void 0:re(t.finishedAt,V(e.until)),e.agent?y(t.agent,e.agent):void 0),i={tasks:_`count(*)`,runnerMs:_`coalesce(sum(${t.runnerMs}), 0)`,tokenCount:_`coalesce(sum(${t.tokenCount}), 0)`},a=e.top?_`case when ${t.agent} in (
|
|
303
303
|
select ${t.agent} from ${t} where ${r} group by ${t.agent}
|
|
304
304
|
order by ${i[e.top.by]} desc, ${t.agent} limit ${e.top.count}
|
|
305
305
|
) then ${t.agent} end`:e.parts?.length?_`case when ${p(t.agent,e.parts)} then ${t.agent} end`:_`null::text`,o=e.by===`installation`?_`left join ${Y} on ${Y.id} = ${t.installationId}`:_``,s=await R(this.db,()=>q(this.db,_`
|
|
@@ -309,7 +309,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
|
|
|
309
309
|
from ${t} ${o}
|
|
310
310
|
where ${r}
|
|
311
311
|
group by 1, 2
|
|
312
|
-
`)),c=new Map;for(let e of s){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=c.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};
|
|
312
|
+
`)),c=new Map;for(let e of s){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=c.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};Te(n,t),e.part&&((n.parts??={})[e.part]=t),c.set(e.key,n)}return[...c.values()].sort((e,t)=>e.key.localeCompare(t.key))}async sweep(e=1e3){if(!Number.isInteger(e)||e<1)throw Error(`Sweep batch must be positive`);let t=this.at().toISOString();await this.db.execute(_`
|
|
313
313
|
with tombstones as (
|
|
314
314
|
delete from ${ue} where (organization_id, public_id) in (
|
|
315
315
|
select organization_id, public_id from ${ue}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{_ as t,a as n,b as r,f as i,h as a,i as o,m as s,o as c,p as l,r as u,u as d,y as f}from"./actions-
|
|
1
|
+
import{Ea as e}from"./args-CJsHYWbt.js";import{_ as t,a as n,b as r,f as i,h as a,i as o,m as s,o as c,p as l,r as u,u as d,y as f}from"./actions-C35tq9KH.js";var p=e({tasks:()=>m});const m={run:s,result:l,list:d,watch:r,stream:f,steer:a,ask:c,approvals:u,approve:o,stop:t,archive:n,delete:i};export{m as n,p as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{$ as t,N as n,T as r,V as i,b as a,bt as o,et as s,f as c,gt as l,m as u,mt as d,o as f,u as p,vt as m,w as h,y as g,yt as _}from"./state-CxAUec80.js";import{R as ee,l as v,u as y,w as b}from"./config-_32PHl9g.js";import{a as x,f as S}from"./connections-B90TemYf.js";import{v as C}from"./app-server-dnlLhhZb.js";import{t as w}from"./integrations-DSZSa8Rc.js";import{a as te}from"./definition-D0OpQfGX.js";import{B as ne,C as T,D as re,L as ie,R as E,S as D,_ as ae,d as oe,s as se,u as O,w as k}from"./dispatch-BkoIU4GU.js";import{t as A}from"./sessions-BGUfSe8L.js";import{_ as ce}from"./approvals-C8XV7CK2.js";import{i as le,r as ue}from"./view-D-rbQ1Kz.js";import{g as de,l as j,n as M,s as N,v as fe}from"./actions-
|
|
1
|
+
import{Ea as e}from"./args-CJsHYWbt.js";import{$ as t,N as n,T as r,V as i,b as a,bt as o,et as s,f as c,gt as l,m as u,mt as d,o as f,u as p,vt as m,w as h,y as g,yt as _}from"./state-CxAUec80.js";import{R as ee,l as v,u as y,w as b}from"./config-_32PHl9g.js";import{a as x,f as S}from"./connections-B90TemYf.js";import{v as C}from"./app-server-dnlLhhZb.js";import{t as w}from"./integrations-DSZSa8Rc.js";import{a as te}from"./definition-D0OpQfGX.js";import{B as ne,C as T,D as re,L as ie,R as E,S as D,_ as ae,d as oe,s as se,u as O,w as k}from"./dispatch-BkoIU4GU.js";import{t as A}from"./sessions-BGUfSe8L.js";import{_ as ce}from"./approvals-C8XV7CK2.js";import{i as le,r as ue}from"./view-D-rbQ1Kz.js";import{g as de,l as j,n as M,s as N,v as fe}from"./actions-C35tq9KH.js";import{i as P,o as F}from"./mcp-cEIva8Pd.js";import{a as pe,d as me,r as he,s as ge,u as _e}from"./exec-CNygM6yF.js";import{s as ve}from"./http-DRk8cDjf.js";import{t as ye}from"./tools-BCm26CeV.js";import{i as be,n as xe,r as Se}from"./async-BP5q3Une.js";import{r as Ce}from"./post-DLenID75.js";import I from"node:path";import L from"node:process";import{execFile as R}from"node:child_process";import z from"node:net";import B from"node:os";import{createHash as we}from"node:crypto";import V from"node:http";import H from"node:fs/promises";import{promisify as U}from"node:util";import{gunzipSync as W,gzipSync as Te}from"node:zlib";const G=e=>we(`sha256`).update(e).digest(`hex`);function K(e,t,n){if(e===`claude`)return I.join(T(),process.env.CLAUDE_CODE_PROJECT_DIR_NAME||`coder`,`${t}.jsonl`);let r=new Date(JSON.parse(n.slice(0,n.indexOf(`
|
|
2
2
|
`))).timestamp).toISOString().slice(0,19).replaceAll(`:`,`-`);return I.join(A(),`sessions`,...r.slice(0,10).split(`-`),`rollout-${r}-${t}.jsonl`)}function Ee(e,t){return t.flatMap(e=>[e,...e.startsWith(`Bearer `)?[e.slice(7)]:[]]).filter(e=>e.length>=8).flatMap(e=>[e,JSON.stringify(e).slice(1,-1)]).sort((e,t)=>t.length-e.length).reduce((e,t)=>e.replaceAll(t,`[REDACTED]`),e)}function De(e,t){let n=new Map;return{async restore(){let t=await e(`/history`).catch(e=>(console.error(`coder runner: saved history could not be listed`,e),[])),r=t.at(-1),i;return await Promise.all(t.map(async({engine:t,conversation:a})=>{if(D.test(a))try{let{data:o,state:s}=await e(`/history/${a}`);a===r.conversation&&(i=s);let c=W(Buffer.from(o,`base64`)).toString(`utf8`);for(let e of c.split(`
|
|
3
3
|
`))e.trim()&&JSON.parse(e);let[l]=await re({engine:t},a);l||(l=K(t,a,c),await H.mkdir(I.dirname(l),{recursive:!0,mode:448}),await H.writeFile(l,c,{mode:384})),n.set(a,{engine:t,hash:G(c),file:l})}catch(e){console.error(`coder runner: history ${a} could not be restored`,e)}})),{...r?{resume:{...i,engine:r.engine,threadId:r.conversation}}:{},restored:!!(r&&n.has(r.conversation))}},async save(r){let i=new Map([...n].map(([e,{engine:t}])=>[e,t]));if(r?.engine===`claude`||r?.engine===`codex`)for(let e of k(r))i.delete(e),i.set(e,r.engine);let a=await t();for(let[t,o]of i){let i=n.get(t)?.file,s=i&&await H.stat(i).then(e=>e.isFile(),()=>!1)?i:(await re({engine:o},t))[0],c=s?await H.readFile(s,`utf8`).catch(()=>``):``,l=t===r?.threadId;if(!c||!l&&G(c)===n.get(t)?.hash)continue;let u=Te(Ee(c,a)).toString(`base64`);if(u.length>3145728){console.error(`coder runner: history ${t} is too large to save`);continue}let d=l?{previousThreadIds:r.previousThreadIds}:void 0;await e(`/history`,{method:`POST`,body:JSON.stringify({engine:o,conversation:t,data:u,...d?{state:d}:{}})}).then(()=>n.set(t,{engine:o,hash:G(c),file:s}),e=>console.error(`coder runner: history ${t} was not saved`,e))}}}}var q=e({INBOX_COMMAND:()=>Qe,INBOX_SOCKET:()=>Ye,applyTaskMessage:()=>Ge,checkout:()=>Z,checkoutCache:()=>ke,inboxSocket:()=>Xe,liveConnections:()=>Ue,prepareRepo:()=>ze,receiveInbox:()=>$e,releaseCheckout:()=>Ae,requestInboxControl:()=>Ve,runTask:()=>qe,sendInbox:()=>Ze,serveTaskServer:()=>tt,serverConnections:()=>He,startInboxControl:()=>Be,taskServer:()=>Y,withCheckoutLock:()=>Q});const J=U(R);function Y(){let e=L.env.CODER_SERVER?.replace(/\/+$/,``),t=L.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function X(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function Oe(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function Z(e,t,n,r,i){let a=e.event?.repo,o=I.join(t,`work`);if(!a)return await H.mkdir(o,{recursive:!0}),o;let s=e=>H.stat(e).then(Boolean,()=>!1);if(await s(I.join(o,`.git`))&&(r||await s(I.join(t,`.runner-task.json`))))return o;if(!Oe(a.defaultBranch))throw Error(`Invalid repository ref`);let c=new URL(a.cloneUrl),l=w[e.event.integration]?.repos?.cloneHosts??[];if(c.protocol!==`https:`||!l.includes(c.hostname))throw Error(`Repository clone host does not match the integration`);await H.mkdir(t,{recursive:!0});let u=await H.mkdtemp(I.join(t,`.git-credential-`)),d=I.join(u,`token`),f=I.join(u,`askpass.sh`);n&&(await H.writeFile(d,n,{mode:384}),await H.writeFile(f,`#!/bin/sh
|
|
4
4
|
case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e,Ea as t,T as n,ba as r,d as i,h as a,j as o,t as s,u as c,va as l}from"./args-CJsHYWbt.js";import{a as u}from"./state-CxAUec80.js";import{E as d}from"./dispatch-BkoIU4GU.js";import{g as f}from"./approvals-C8XV7CK2.js";import{f as p}from"./view-D-rbQ1Kz.js";import{a as m}from"./async-
|
|
1
|
+
import{C as e,Ea as t,T as n,ba as r,d as i,h as a,j as o,t as s,u as c,va as l}from"./args-CJsHYWbt.js";import{a as u}from"./state-CxAUec80.js";import{E as d}from"./dispatch-BkoIU4GU.js";import{g as f}from"./approvals-C8XV7CK2.js";import{f as p}from"./view-D-rbQ1Kz.js";import{a as m}from"./async-BP5q3Une.js";import h from"node:path";import g from"node:process";import{randomUUID as _}from"node:crypto";import v from"node:fs/promises";async function y(e,t,n=fetch){let r=g.env.CODER_REPLY_URL,i=g.env.CODER_REPLY_TOKEN;if(!r||!i)throw Error(`This task has no conversation to post to`);let a=JSON.stringify({id:_(),...t});for(let t=0;;t++){let o;try{o=await n(`${r}/${e}`,{method:`POST`,headers:{authorization:`Bearer ${i}`,"content-type":`application/json`},body:a,signal:AbortSignal.timeout(6e4)})}catch(e){if(t<2)continue;throw e}let s=await o.json().catch(()=>void 0);if(!o.ok)throw Error(s?.error??`The conversation ${e} failed (${o.status})`);return{ok:!0}}}async function b(){let e=g.env.CODER_HISTORY_TASK;if(!e)throw Error(`CODER_HISTORY_TASK is not set`);return{file:e,task:JSON.parse(await v.readFile(e,`utf8`))}}const x=[r({name:`reply`,description:`Post a reply now, such as before longer work. Never repeat text you already posted or will put in your final message.`,args:{text:s(o(),`Markdown to post.`)},access:`write`,run:async({text:e},t)=>{let{file:n,task:r}=await b();if(!r.conversation)throw Error(`Only conversation tasks can reply`);if(typeof e!=`string`||!e.trim())throw Error(`Reply text is required`);let i=await y(`reply`,{text:e.trim()},t.fetch);return u(h.dirname(n),{kind:`reply`,message:e.trim()}),i}}),r({name:`react`,description:`React to a message in this conversation with an emoji, by default the one that started your turn.`,args:{emoji:s(o(),`An emoji name such as thumbsup, or the emoji itself.`),message:c(`A message id from the conversation.`)},access:`write`,run:async({emoji:e,message:t},n)=>{let{task:r}=await b();if(!r.conversation)throw Error(`Only conversation tasks can react`);if(typeof e!=`string`||!e.trim())throw Error(`Emoji is required`);if(t!==void 0&&(typeof t!=`string`||!t.trim()))throw Error(`Message id must be a non-empty string`);let i=p(r.currentPrompt??r.prompt??``,!0)?.[0],a=t??i?.message?.id??i?.messages?.[0]?.id;if(i&&!a)throw Error(`This turn has no message to react to; give a message id`);return y(`react`,{emoji:e.trim(),...a?{message:a}:{}},n.fetch)}}),r({name:`history`,description:[`Search or read your own earlier turns in this task, including anything compacted out of your context, oldest first.`,"With query, the messages containing that exact text; without, the messages from `from` on.",`An event's message.index counts from 0; when your history starts later, read earlier messages with the platform's tools when they matter.`,`Messages from bots never arrive as turns; the platform's tools read the thread itself, theirs included.`].join(` `),args:{query:c(`Exact text to find, case-insensitive, 1 to 500 characters: a word or phrase from the message, not a question.`),from:s(n(e()),`Message index to start at; default the oldest, or after the last match.`),limit:s(n(e()),`Messages to return, 1 to 20; default 10.`),role:s(n(a([`all`,`conversation`])),`conversation: only platform messages and your replies; all (default): tool calls and results too.`)},access:`read`,run:async e=>d((await b()).task,e)})];var S=t({asyncTools:()=>w,taskApp:()=>D,taskTools:()=>O});const C={name:`review`,flow:`review`,limit:5,platform:`github`,args:(e,t,n)=>({...e.pr===void 0?{base:e.base??`HEAD`}:{pr:e.pr,...n?{post:!0,author:n}:{}},...e.path?.length?{path:e.path}:{},...e.exclude?.length?{exclude:e.exclude}:{},...e.depth?{depth:e.depth}:{},cwd:t}),render:async(e,t)=>{let{renderReviewMarkdown:n}=await import(`./flow/builtin/review/index.js`),r=e,i=n({...r,runId:t});return r.summary.url?`${i}\nThe review is on the pull request, so a reply repeating it adds nothing. Still answer anything else asked.\n`:r.pr?`${i}\nNot posted. To post it on the pull request as the user, escalate \`coder review --post --run ${t}\`.\n`:i}},w=[C],T=[...w.map(e=>e.name),`escalate`];function E(){let e=g.env.CODER_HISTORY_TASK;if(!e)throw Error(`CODER_HISTORY_TASK is not set`);return h.dirname(e)}const D=l({name:`task`,description:`This task's own tools.`,commands:[r({name:`escalate`,description:[`Ask a human to approve actions your environment refused.`,`Actions outside the sandbox are reviewed and may be refused; then take another way.`,`If the task truly needs refused actions, escalate them all in one call with the exact commands, then continue or end your turn.`,`The decision arrives as a message, in this turn while it runs, else in a new one.`,`Approved actions stay approved for the rest of the task; run them outside the sandbox directly.`].join(` `),args:{reason:c(`One short sentence: what the actions are for.`),actions:i(`Each action is exactly the command you will run once approved, nothing added; notes go in reason.`)},access:`read`,run:({reason:e,actions:t})=>{let n=(t??[]).map(e=>e.trim()).filter(Boolean);if(!e?.trim()||!n.length)throw Error(`reason and actions are required`);let r=E();return{approvalId:f(g.cwd(),h.basename(r),r,{reason:e.trim(),actions:n}).id,status:`pending`}}}),r({name:`review`,description:`Review changes with a read-only reviewer. One at a time, ${C.limit} per turn.`,args:{pr:s(n(e()),`A pull request to review. Posts the review (summary + findings) and a check, so do not announce or repeat them.`),base:c(`The ref to compare with; default HEAD, so only uncommitted changes.`),path:i(`Review only these paths, relative to the task directory.`),exclude:i(`Leave these paths out.`),depth:s(n(a([`low`,`medium`,`high`])),`What to report: low only critical and major defects, high nits too; medium by default.`),timeout:s(n(e()),`Stop the review after this many seconds.`)},access:`read`,run:async({timeout:e,...t})=>({runId:await m(E(),C,t,e),status:`started`})}),...x]});function O(e){let t=e.filter(e=>T.includes(e));return{...D,...t.length?{instructions:[`${t.join(` and `)} ${t.length>1?`return`:`returns`} at once;`,`the result arrives later as a message, in a new turn if yours has ended.`].join(` `)}:{},commands:D.commands.filter(t=>e.includes(t.name))}}export{S as i,D as n,O as r,w as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";const n=t({name:`tools`,description:`serve a task's tools over stdio`,access:`write`,args:{tools:e(`the tools to serve: review, reply, react, history`)},globalFlags:{json:!1,cwd:!1},cli:{positional:[`tools`]},mcp:!1,async run({args:e}){let{taskApp:t,taskTools:n}=await import(`./tools-
|
|
1
|
+
import{d as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";const n=t({name:`tools`,description:`serve a task's tools over stdio`,access:`write`,args:{tools:e(`the tools to serve: review, reply, react, history`)},globalFlags:{json:!1,cwd:!1},cli:{positional:[`tools`]},mcp:!1,async run({args:e}){let{taskApp:t,taskTools:n}=await import(`./tools-BCm26CeV.js`).then(e=>e.i),{serve:r}=await import(`./serve-DoYbHm_k.js`),i=e.flat(),a=i.find(e=>!t.commands?.some(t=>t.name===e));if(a)throw Error(`Unknown task tool "${a}"`);await(await r(n(i),`stdio`)).done}});export{n as commandTools};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{command as e}from"./cli.js";const t=e({name:`tools-search`,description:`serve a turn's tool search over stdio`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,async run(){let{serveToolSearch:e}=await import(`./tool-search-C9Ty3hhL.js`).then(e=>e.r),{serverCredential:t}=await import(`./mcp-
|
|
1
|
+
import{command as e}from"./cli.js";const t=e({name:`tools-search`,description:`serve a turn's tool search over stdio`,access:`write`,globalFlags:{json:!1,cwd:!1},mcp:!1,async run(){let{serveToolSearch:e}=await import(`./tool-search-C9Ty3hhL.js`).then(e=>e.r),{serverCredential:t}=await import(`./mcp-EwT2mCaa.js`);await e({credential:e=>t(e),localCredential:async(e,t)=>{let{localConnectionToken:n}=await import(`./connections-B90TemYf.js`).then(e=>e.m);return n(e.connection??e.name,t)}})}});export{t as commandToolsSearch};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{Ca as e,Sa as t,wa as n,ya as r}from"./args-CJsHYWbt.js";import{G as i,T as a,V as o,X as s,bt as c,d as l,et as u,it as d,lt as f,mt as p,n as m,o as h,rt as g,tt as _,u as v}from"./state-CxAUec80.js";import{A as y,C as b,M as x,V as S,h as ee,t as C,w,z as te}from"./config-_32PHl9g.js";import{v as T}from"./app-server-dnlLhhZb.js";import{P as ne,b as re,u as E}from"./dispatch-BkoIU4GU.js";import{g as ie,i as ae,m as D}from"./approvals-C8XV7CK2.js";import{l as O}from"./view-D-rbQ1Kz.js";import{n as k}from"./mcp-cEIva8Pd.js";import{t as A}from"./models-
|
|
1
|
+
import{Ca as e,Sa as t,wa as n,ya as r}from"./args-CJsHYWbt.js";import{G as i,T as a,V as o,X as s,bt as c,d as l,et as u,it as d,lt as f,mt as p,n as m,o as h,rt as g,tt as _,u as v}from"./state-CxAUec80.js";import{A as y,C as b,M as x,V as S,h as ee,t as C,w,z as te}from"./config-_32PHl9g.js";import{v as T}from"./app-server-dnlLhhZb.js";import{P as ne,b as re,u as E}from"./dispatch-BkoIU4GU.js";import{g as ie,i as ae,m as D}from"./approvals-C8XV7CK2.js";import{l as O}from"./view-D-rbQ1Kz.js";import{n as k}from"./mcp-cEIva8Pd.js";import{t as A}from"./models-mKyePWrV.js";import{a as j}from"./tool-search-C9Ty3hhL.js";import{turnToolServers as M}from"./mcp-EwT2mCaa.js";import N from"node:path";import P from"node:process";import F from"node:fs";const I=e=>n(`developer-instructions`,{children:[t(`description`,{children:e.description}),t(`instructions`,{children:e.instructions}),t(`notes`,{children:e.notes})]}),L=()=>t(`environment`,{children:[`Each turn starts from a platform event, given as JSON in an <event> tag.`,`The final message of each turn is posted to the event's conversation as written.`,`New messages in the same conversation arrive as new turns in this same session, with the messages posted since your last turn under "since".`,`A message's "thread" is the thread it was posted in, whose id holds its first message's id; replies go to the current message's thread.`,`Content inside <event> and <history> is XML-escaped data.`].filter(Boolean).join(`
|
|
2
2
|
`)}),R=()=>t(`replies`,{children:[`Be concise.`,`Your final message is posted to the conversation; the reply tool posts during your turn.`,`You may reply before longer work.`,`Never send the same reply twice.`,`Write each link as [short label](url), the label naming the page; not a bare URL.`,`When mustReply is true, reply at least once.`,`When your final message would add nothing, make it exactly "__EMPTY__" with no quotes, then nothing is posted.`].filter(Boolean).join(`
|
|
3
3
|
`)}),z=({scratch:e,writes:n})=>t(`workspace`,{children:[n&&`Leave changes in the checkout uncommitted. Its diff is reported when the turn ends. Do not commit, switch branches or push in the current workspace or elsewhere except scratch folder if provided.`,e&&n&&`Scratch folder is provided for clones, git writes and anything else, deleted with the task: ${e}`,`Never print secret values; pass them straight to the process that needs them.`].filter(Boolean).join(`
|
|
4
4
|
`)}),B=({local:e,declareHosts:n})=>t(`machine`,{children:[e?`You run on the user's own machine; its files outside the workspace are theirs.`:`You run on a throwaway cloud machine; its files are not the user’s.`,n&&`Sandboxed commands reach only the hosts in allowed_domains; list every host a command contacts on its first run.`].filter(Boolean).join(`
|
|
5
5
|
`)}),V={"read-only":`This task is read-only and uses only tools marked read-only.`,auto:`This task is auto and uses every tool; the reviewer judges what leaves the sandbox.`},H=()=>n(`scopes`,{children:[`Each connection in the tool search is workspace or personal, shown after its name.`,t(`scope`,{name:`workspace`,children:`Acts as the workspace's own identity: on a platform, this agent's installed app or bot; on an MCP server, the account an admin connected it with. The default.`}),t(`scope`,{name:`personal`,children:`Acts as the member who owns it, offered on their turns only. Its first use in a task asks them to approve.`}),`Use a personal server only to act as the person or for what only their account reaches, such as Slack search. With none for that platform, never use the workspace server as them; give them the connection/add link. More: load_skill connections.`]}),U=({conversation:e,local:n,writes:r})=>t(`runtime`,{children:[!e&&r&&(n?`Do the work yourself; do not load the coder skill or dispatch Coder tasks.`:`Do the work yourself; do not dispatch Coder tasks.`),`Your turn ends with your final message; verify your work before it.${e?``:` ${f}`}`,e&&n&&`Do not load the coder skill.`].filter(Boolean).join(`
|
|
6
6
|
`)}),oe=r=>n(e,{children:[t(L,{}),t(R,{}),r.platform&&t(`platform`,{name:r.platform.name,children:r.platform.prompt})]}),W=r=>n(e,{children:[t(z,{...r}),!r.structured&&t(`result`,{children:`When finished, give a concise summary of what you did and found, naming the files or folders you changed.`}),t(`task-instructions`,{children:r.appendSystem})]}),G=r=>n(e,{children:[t(I,{...r.developer}),t(U,{...r}),t(B,{...r}),t(`access`,{children:r.access&&V[r.access]}),r.connections&&t(H,{}),r.conversation?t(oe,{...r}):t(W,{...r})]}),K=e=>r(t(G,{...e})),q={claude:{CLAUDE_CODE_DISABLE_AUTO_MEMORY:`1`},codex:{"features.memories":!1}};async function J(e,t,n,r={}){let i=e=>n({kind:`warning`,phase:`starting`,message:e}),a=te(t.access,t.promptParts?.access),s=await M(t,o(e,t.id),E(t.mcp,P.env,void 0,{onWarning:i}),{access:a});s.listed.length&&n({kind:`status`,phase:`starting`,message:`This turn's servers are ${s.listed.map(e=>e.name).join(`, `)}.`});let c=t.promptParts?K({...t.promptParts,...r,access:a,connections:s.listed.some(e=>j(e))}):t.systemPrompt;return{...s,systemPrompt:c}}function Y(e){P.connected&&P.send?.(e,void 0,void 0,e=>{e&&e.code!==`EPIPE`&&P.stderr.write(`coder worker: ${e.message}\n`)})}function X(e){return e.currentPrompt??e.prompt??``}async function se(e,t,n){_(e,t.id,{status:`running`,steerEndpoint:null,turnId:null,turnUsage:t.turnUsage??[]});let r=o(e,t.id),i=N.join(r,`log.jsonl`),s=p(i,F.existsSync(i)?F.statSync(i).size:0),l,u=n=>{let r=s().flatMap(e=>{let t=O(e);return t?[t]:[]}),i=r.flatMap(e=>e.message?.startsWith(`Steer accepted live:
|
|
7
|
-
`)?[e.message.slice(m.length)]:[]),a=r.filter(e=>e.kind===`reply`).at(-1)?.message;return T(`worker.record.start`,{taskId:t.id,finalized:!1}),ue(e,t,n,{steers:i,lastReply:a})},f=await n(t,{onResult:e=>{!l&&e.status===0&&!e.error&&(l=u(e))}}),h=[...t.previousThreadIds??[]];f.status===0&&t.threadId&&f.threadId&&t.threadId!==f.threadId&&!h.includes(t.threadId)&&h.push(t.threadId);let g=new Date().toISOString();return T(`worker.engine.closed`,{taskId:t.id}),l??=u(f),c(N.join(r,`result.json`),JSON.parse(d(f))),T(`worker.record.start`,{taskId:t.id,finalized:!0}),_(e,t.id,{turnUsage:[...a(e,t.id)?.turnUsage??[],{at:l,tokens:f.tokens,model:f.model}],status:f.status===0?`completed`:`failed`,completedAt:g,threadId:f.threadId,resumeThreadId:f.threadId,previousThreadIds:h,steerEndpoint:null,turnId:f.turnId??null}),T(`worker.result.recorded`,{taskId:t.id,finalized:!0}),f}function Z(e,t){let n=0;return()=>{Date.now()-n>=1e4&&(n=Date.now(),s(e,t))}}function Q(e,t,{echo:n}){let r=r=>{let i=JSON.parse(d(typeof r==`string`?{message:r}:r));h(e,t,i),n&&i.message&&P.stderr.write(`[coder] ${i.message}\n`)};for(let e of Object.keys(g()))P.env[e]!==void 0&&r({kind:`warning`,message:`${e} is temporarily unavailable; skipped for this task.`});return r}async function ce(e,t,{echo:n,env:r={},onResult:a}){let o=w(e),s=Q(e,t.id,{echo:n}),c=t.model?o.models?.[t.model]:void 0,l=c&&b(c)?c:void 0;if(l&&!l.wireApi&&t.model){let n=await A(l);n&&(l={...l,...n},o.models[t.model]=l,y(e,t.model,n),h(e,t.id,{kind:`info`,message:`detected wire api for ${t.model}: ${n.wireApi} @ ${l.baseUrl}`}))}let u=C[t.access??`auto`]??C.auto,d=u.approvalMode===`auto`,f=S(t.access??`auto`,o.network),p=ee(t.access??`auto`,f),m={approvalPolicy:u.approvalPolicy,approvalsReviewer:u.approvalsReviewer,...d?{onApprovalRequest:D(e=>s(e))}:{}},g=await J(e,t,s);try{return await ne(e,{availabilityChecked:P.env.CODER_ENGINE_CHECKED===`1`,prompt:X(t),developerInstructions:g.systemPrompt,outputSchema:t.outputSchema,model:x(t.model),...l&&t.model?{customModel:{alias:t.model,entry:l}}:{},configOverrides:{...Object.keys(r).length?{"shell_environment_policy.set":r}:{},...t.agentId?q.codex:{},...p.configOverrides},effort:t.effort,sandbox:u.sandbox,...m,networkAccess:p.networkAccess,mcpServers:g.servers,nativeMcp:t.nativeMcp??!1,writableRoots:u.sandbox===`read-only`?[]:[...t.addDirs??[],i(t.id)],onHeartbeat:Z(e,t.id),onResult:a,resumeThreadId:t.resumeThreadId??null,onControlReady:(n,r,i)=>{_(e,t.id,{status:`running`,steerEndpoint:n,threadId:r,turnId:i})},onProgress:n=>{s(n);let r=typeof n==`object`?n.threadId:null,i=typeof n==`object`?n.turnId:null;(r||i)&&_(e,t.id,{status:`running`,...r?{threadId:r}:{},...i?{turnId:i}:{}})}})}finally{_(e,t.id,{steerEndpoint:null})}}async function le(e,t,{echo:n,env:r={},onResult:a}){let s=o(e,t.id),c=w(e),l=Q(e,t.id,{echo:n}),u=await J(e,t,l,{declareHosts:(C[t.access??`auto`]??C.auto).approvalMode===`auto`});try{return await re(e,{env:{...r,...t.agentId?q.claude:{}},prompt:X(t),systemPrompt:u.systemPrompt,excludeDynamicSections:t.conversation,settingSources:t.agentId&&t.source&&![`cli`,`dashboard`,`schedule`].includes(t.source)?`project,local`:void 0,outputSchema:t.outputSchema,model:t.model,effort:t.effort,access:t.access,approvalTaskId:t.id,allowedNetworkHosts:S(t.access??`auto`,c.network),additionalDirectories:t.addDirs,scratch:i(t.id),local:t.promptParts?.local??!0,mcpServers:u.servers,nativeMcp:t.nativeMcp??!1,promptCacheTtl:t.conversation&&(r.ANTHROPIC_API_KEY||P.env.ANTHROPIC_API_KEY)?`1h`:void 0,taskRoot:s,resumeSessionId:t.resumeThreadId??null,onHeartbeat:Z(e,t.id),onResult:a,onSteerReady:n=>{_(e,t.id,{status:`running`,steerEndpoint:n})},onProgress:n=>{l(n),n.threadId&&_(e,t.id,{status:`running`,threadId:n.threadId})}})}finally{_(e,t.id,{steerEndpoint:null})}}function ue(e,t,n,r={}){let{steers:i=[],lastReply:a}=r,s=t.turnUsage?.at(-1)?.at,l=o(e,t.id);c(N.join(l,`result.json`),JSON.parse(d(n)));let u={at:new Date(Math.max(Date.now(),s?Date.parse(s)+1:0)).toISOString(),prompt:t.currentPrompt??t.prompt??null,...i.length?{steers:i}:{},...a?{lastReply:a}:{},...n};return F.appendFileSync(N.join(l,`results.jsonl`),`${d(u)}\n`,`utf8`),T(`worker.result.recorded`,{taskId:t.id,finalized:!1}),Y(`result`),u.at}function $(e){return async(e,t,n)=>{let r=await k(E(t.mcp,P.env,void 0,{onWarning:()=>{}})),i=t.access!==`read-only`,a={...r.env,...i?de(t):{}};try{let r=t.engine===`claude`?le:ce;return await se(e,t,(t,i)=>r(e,t,{...n,...i,env:a}))}finally{await r.close()}}}function de(e){let t=i(e.id);return{TMPDIR:t,BUN_TMPDIR:t,BUN_INSTALL_CACHE_DIR:N.join(t,`.bun-cache`),npm_config_cache:N.join(t,`.npm-cache`),PIP_CACHE_DIR:N.join(t,`.pip-cache`),UV_CACHE_DIR:N.join(t,`.uv-cache`),CARGO_HOME:N.join(t,`.cargo`),GOPATH:N.join(t,`go`),GOCACHE:N.join(t,`.go-cache`),...e.engine===`claude`?{CLAUDE_CODE_TMPDIR:t}:{}}}async function fe(e){if(P.env.CODER_MCP_MODE!==`cloud`||!e.name?.startsWith(`agent:`))return{};let[{liveConnections:t},{turnServers:n}]=await Promise.all([import(`./task-
|
|
7
|
+
`)?[e.message.slice(m.length)]:[]),a=r.filter(e=>e.kind===`reply`).at(-1)?.message;return T(`worker.record.start`,{taskId:t.id,finalized:!1}),ue(e,t,n,{steers:i,lastReply:a})},f=await n(t,{onResult:e=>{!l&&e.status===0&&!e.error&&(l=u(e))}}),h=[...t.previousThreadIds??[]];f.status===0&&t.threadId&&f.threadId&&t.threadId!==f.threadId&&!h.includes(t.threadId)&&h.push(t.threadId);let g=new Date().toISOString();return T(`worker.engine.closed`,{taskId:t.id}),l??=u(f),c(N.join(r,`result.json`),JSON.parse(d(f))),T(`worker.record.start`,{taskId:t.id,finalized:!0}),_(e,t.id,{turnUsage:[...a(e,t.id)?.turnUsage??[],{at:l,tokens:f.tokens,model:f.model}],status:f.status===0?`completed`:`failed`,completedAt:g,threadId:f.threadId,resumeThreadId:f.threadId,previousThreadIds:h,steerEndpoint:null,turnId:f.turnId??null}),T(`worker.result.recorded`,{taskId:t.id,finalized:!0}),f}function Z(e,t){let n=0;return()=>{Date.now()-n>=1e4&&(n=Date.now(),s(e,t))}}function Q(e,t,{echo:n}){let r=r=>{let i=JSON.parse(d(typeof r==`string`?{message:r}:r));h(e,t,i),n&&i.message&&P.stderr.write(`[coder] ${i.message}\n`)};for(let e of Object.keys(g()))P.env[e]!==void 0&&r({kind:`warning`,message:`${e} is temporarily unavailable; skipped for this task.`});return r}async function ce(e,t,{echo:n,env:r={},onResult:a}){let o=w(e),s=Q(e,t.id,{echo:n}),c=t.model?o.models?.[t.model]:void 0,l=c&&b(c)?c:void 0;if(l&&!l.wireApi&&t.model){let n=await A(l);n&&(l={...l,...n},o.models[t.model]=l,y(e,t.model,n),h(e,t.id,{kind:`info`,message:`detected wire api for ${t.model}: ${n.wireApi} @ ${l.baseUrl}`}))}let u=C[t.access??`auto`]??C.auto,d=u.approvalMode===`auto`,f=S(t.access??`auto`,o.network),p=ee(t.access??`auto`,f),m={approvalPolicy:u.approvalPolicy,approvalsReviewer:u.approvalsReviewer,...d?{onApprovalRequest:D(e=>s(e))}:{}},g=await J(e,t,s);try{return await ne(e,{availabilityChecked:P.env.CODER_ENGINE_CHECKED===`1`,prompt:X(t),developerInstructions:g.systemPrompt,outputSchema:t.outputSchema,model:x(t.model),...l&&t.model?{customModel:{alias:t.model,entry:l}}:{},configOverrides:{...Object.keys(r).length?{"shell_environment_policy.set":r}:{},...t.agentId?q.codex:{},...p.configOverrides},effort:t.effort,sandbox:u.sandbox,...m,networkAccess:p.networkAccess,mcpServers:g.servers,nativeMcp:t.nativeMcp??!1,writableRoots:u.sandbox===`read-only`?[]:[...t.addDirs??[],i(t.id)],onHeartbeat:Z(e,t.id),onResult:a,resumeThreadId:t.resumeThreadId??null,onControlReady:(n,r,i)=>{_(e,t.id,{status:`running`,steerEndpoint:n,threadId:r,turnId:i})},onProgress:n=>{s(n);let r=typeof n==`object`?n.threadId:null,i=typeof n==`object`?n.turnId:null;(r||i)&&_(e,t.id,{status:`running`,...r?{threadId:r}:{},...i?{turnId:i}:{}})}})}finally{_(e,t.id,{steerEndpoint:null})}}async function le(e,t,{echo:n,env:r={},onResult:a}){let s=o(e,t.id),c=w(e),l=Q(e,t.id,{echo:n}),u=await J(e,t,l,{declareHosts:(C[t.access??`auto`]??C.auto).approvalMode===`auto`});try{return await re(e,{env:{...r,...t.agentId?q.claude:{}},prompt:X(t),systemPrompt:u.systemPrompt,excludeDynamicSections:t.conversation,settingSources:t.agentId&&t.source&&![`cli`,`dashboard`,`schedule`].includes(t.source)?`project,local`:void 0,outputSchema:t.outputSchema,model:t.model,effort:t.effort,access:t.access,approvalTaskId:t.id,allowedNetworkHosts:S(t.access??`auto`,c.network),additionalDirectories:t.addDirs,scratch:i(t.id),local:t.promptParts?.local??!0,mcpServers:u.servers,nativeMcp:t.nativeMcp??!1,promptCacheTtl:t.conversation&&(r.ANTHROPIC_API_KEY||P.env.ANTHROPIC_API_KEY)?`1h`:void 0,taskRoot:s,resumeSessionId:t.resumeThreadId??null,onHeartbeat:Z(e,t.id),onResult:a,onSteerReady:n=>{_(e,t.id,{status:`running`,steerEndpoint:n})},onProgress:n=>{l(n),n.threadId&&_(e,t.id,{status:`running`,threadId:n.threadId})}})}finally{_(e,t.id,{steerEndpoint:null})}}function ue(e,t,n,r={}){let{steers:i=[],lastReply:a}=r,s=t.turnUsage?.at(-1)?.at,l=o(e,t.id);c(N.join(l,`result.json`),JSON.parse(d(n)));let u={at:new Date(Math.max(Date.now(),s?Date.parse(s)+1:0)).toISOString(),prompt:t.currentPrompt??t.prompt??null,...i.length?{steers:i}:{},...a?{lastReply:a}:{},...n};return F.appendFileSync(N.join(l,`results.jsonl`),`${d(u)}\n`,`utf8`),T(`worker.result.recorded`,{taskId:t.id,finalized:!1}),Y(`result`),u.at}function $(e){return async(e,t,n)=>{let r=await k(E(t.mcp,P.env,void 0,{onWarning:()=>{}})),i=t.access!==`read-only`,a={...r.env,...i?de(t):{}};try{let r=t.engine===`claude`?le:ce;return await se(e,t,(t,i)=>r(e,t,{...n,...i,env:a}))}finally{await r.close()}}}function de(e){let t=i(e.id);return{TMPDIR:t,BUN_TMPDIR:t,BUN_INSTALL_CACHE_DIR:N.join(t,`.bun-cache`),npm_config_cache:N.join(t,`.npm-cache`),PIP_CACHE_DIR:N.join(t,`.pip-cache`),UV_CACHE_DIR:N.join(t,`.uv-cache`),CARGO_HOME:N.join(t,`.cargo`),GOPATH:N.join(t,`go`),GOCACHE:N.join(t,`.go-cache`),...e.engine===`claude`?{CLAUDE_CODE_TMPDIR:t}:{}}}async function fe(e){if(P.env.CODER_MCP_MODE!==`cloud`||!e.name?.startsWith(`agent:`))return{};let[{liveConnections:t},{turnServers:n}]=await Promise.all([import(`./task-CzXNLREX.js`).then(e=>e.l),import(`./actions-C35tq9KH.js`).then(e=>e.t)]),r=await t(e)(e.connections??[]);for(let e of Object.keys(P.env))e.startsWith(`CODER_CONNECTION_`)&&delete P.env[e];Object.assign(P.env,r.env);let{selected:i,bindings:a}=n(e,r.mcp);return{mcp:i.mcp,mcpBindings:a}}async function pe(e,t){for(;;){let n=await u(e,t,()=>{let n=a(e,t);if(!n)return[];let r=n.status===`failed`||n.status===`cancelled`?[]:v(e,t);return r.length||(l(e,t),_(e,t,{steerClosed:!0,steerEndpoint:null}),Y(`settled`)),r});if(!n.length)return;for(let r of n)try{let n=a(e,t),i=_(e,t,{status:`running`,currentPrompt:r,resumedAt:new Date().toISOString(),error:void 0,resumeThreadId:n?.threadId??null,...n?await fe(n):{}});h(e,t,{message:`Running steered follow-up.`}),await $(i)(e,i,{echo:!1})}catch(n){let r=n instanceof Error?n.message:String(n);_(e,t,{status:`failed`,error:r,completedAt:new Date().toISOString()}),h(e,t,{kind:`error`,message:r});return}}}async function me(e,t){if(t.dispatchId&&!t.resumedAt)try{F.writeFileSync(N.join(o(e,t.id),`start-${t.dispatchId}`),``,{flag:`wx`})}catch(e){if(e.code===`EEXIST`)return;throw e}_(e,t.id,{status:`running`,pid:P.pid,steerClosed:!1});let n;try{if(t.name?.startsWith(`agent:`)){let{startInboxControl:r,applyTaskMessage:i}=await import(`./task-CzXNLREX.js`).then(e=>e.l);n=r(o(e,t.id),t.name.slice(6),n=>i(e,a(e,t.id)??t,n))}P.env.CODER_SIMULATE_APPROVAL===`1`&&!t.resumedAt&&ie(e,t.id,o(e,t.id),{reason:`A dev hook (${ae}) raised this escalation at the start of the task.`,actions:[`echo simulated`]}),await $(t)(e,t,{echo:!1}),await pe(e,t.id)}catch(n){let r=n instanceof Error?n.message:String(n);throw _(e,t.id,{status:`failed`,error:r}),h(e,t.id,{kind:`error`,message:r}),n}finally{await u(e,t.id,()=>{a(e,t.id)?.pid===P.pid&&(_(e,t.id,{steerClosed:!0,steerEndpoint:null}),Y(`settled`))}),await n?.close()}}export{me as runWorker};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as e}from"./args-CJsHYWbt.js";import{i as t}from"./output-BKeyLbvt.js";import{command as n}from"./cli.js";import{T as r}from"./state-CxAUec80.js";const i=n({name:`worker`,description:`run a task's turns, detached`,access:`write`,args:{"task-id":e()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,async run({args:[e],cwd:n}){let{runWorker:i}=await import(`./worker-
|
|
1
|
+
import{u as e}from"./args-CJsHYWbt.js";import{i as t}from"./output-BKeyLbvt.js";import{command as n}from"./cli.js";import{T as r}from"./state-CxAUec80.js";const i=n({name:`worker`,description:`run a task's turns, detached`,access:`write`,args:{"task-id":e()},globalFlags:{json:!1},cli:{positional:[`task-id`]},mcp:!1,async run({args:[e],cwd:n}){let{runWorker:i}=await import(`./worker-DGhRPDDt.js`),a=r(n,e);a||t(`Worker: task ${e} not found.`),await i(n,a),process.exit(0)}});export{i as commandWorker};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coder",
|
|
3
3
|
"displayName": "Coder",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.2",
|
|
5
5
|
"description": "Delegate coding tasks to supervised Coder subagents running on Codex, Claude, or any OpenAI-compatible model. Your main context stays clean.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "muzam1l"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{a,b,c}from"./composer-198b844da57b82a3.js";import"./composer-data-b05f3d93fdc472d7.js";import"./task-396d849e58e50d59.js";import"./connect-repositories-5118edc019fc7890.js";import"./shared-init-96cde32cd50254c0.js";import"./shared-init-96cde32cd50254c0.js";import"./model-options-5e07b3318d69d218.js";import"./types-3eca2c7f47c46054.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./back-ba5e4340a9f8bbd2.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";export{b as NeedsCredential,c as NewTaskButton,a as withEffort};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{a as u,e as g}from"./platform-actions-f3979ab69a6ceb53.js";import"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import"./segmented-66a8c77c6294fec3.js";import"./outcome-dialog-fd86ded4c44c2de7.js";import"./field-adcb6e6a5f9b7131.js";import{$0a as l}from"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import{$1c as c,$1r as f}from"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import{$3Q as e,$3S as m}from"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import{$2h as t,$2j as p}from"./shared-init-3fcac605fffcc273-2.js";function v({integration:r,state:i,info:o}){let[d,C]=t(!1),[b,a]=t(!0),[n,h]=t(),s=()=>c.apps.start(r,i);return p(()=>{u(o?.create,i,s).then(h).catch(y=>{C(!0),l(y)})},[]),d?null:n?b?e(g,{integration:r,step:n,start:s,unreachable:o?.unreachable,onClose:()=>a(!1)}):e(m,{onClick:()=>a(!0),children:n.submit}):e(f,{label:`Opening ${o?.name??r}`})}export{v as CreateLink};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{b as a,c as b}from"./instructions-7b274685ceb26457.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";export{b as Instructions,a as markdown};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{a}from"./outcome-dialog-fd86ded4c44c2de7.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";export{a as OutcomeDialog};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{a,b,c,d,e,f,g,h,i,j}from"./platform-actions-f3979ab69a6ceb53.js";import"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import"./segmented-66a8c77c6294fec3.js";import"./outcome-dialog-fd86ded4c44c2de7.js";import"./field-adcb6e6a5f9b7131.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";export{i as CreateButton,e as CreateDialog,h as DriftQueue,b as InstallButton,j as PlatformActions,d as RemoveButton,c as UninstallButton,g as UpdateButton,f as UpdateDialog,a as createForm};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use client";import{a}from"./platform-step-5454b6c0a19caefd.js";import"./platform-actions-f3979ab69a6ceb53.js";import"./copy-04781f9af4e10f06.js";import"./confirm-14d018653fbe50fc.js";import"./segmented-66a8c77c6294fec3.js";import"./outcome-dialog-fd86ded4c44c2de7.js";import"./field-adcb6e6a5f9b7131.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-96225b8c7758de9d.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./wular-pnext-3fcac605fffcc273-0.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-abd7653140f37a0c.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";import"./shared-init-3fcac605fffcc273-2.js";export{a as PlatformStep};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as W,c as w,f as E,g as S,i as R,j,k as x}from"./model-options-5e07b3318d69d218.js";import{$0D as q,$0k as D,$0l as I,$0m as $,$0r as L,$0s as M}from"./shared-init-abd7653140f37a0c.js";import{$3B as v,$3Q as o,$3R as T,$3h as Q,$3i as F}from"./shared-init-abd7653140f37a0c.js";import{$2c as k,$2n as B}from"./shared-init-3fcac605fffcc273-2.js";function H({groups:l,first:e,model:t,effort:n,base:p=()=>"medium",onPick:i,onAdd:r}){let d=q(),c=B(),m=[...e?[["",[""]]]:[],...W.filter(a=>l[a]?.length).map(a=>[E[a]??a,l[a]])];return t&&!m.some(([,a])=>a.includes(t))&&m.push(["",[t]]),o("div",{role:"group","aria-label":"Model",class:"pop-radios model-choices",children:[m.map(([a,h])=>o(k,{children:[a?o("p",{class:"pop-group",children:a}):null,h.map(s=>{let f=s===t,g=s||e.label,b=`${c}-effort-${s||"default"}`,y=[["",`Default (${s?p(s):"medium"})`],...w],A=f&&n?y.find(([u])=>u===n)?.[1]:void 0;return o(L,{children:[o($,{on:f,onPick:()=>i(s,""),end:!s&&e?.sub?o("small",{children:e.sub}):null,children:g}),s||e?.efforts?o(k,{children:[o("button",{type:"button",class:"pop-chev","data-keep":!0,popovertarget:b,"aria-label":`Effort for ${g}`,children:[o("small",{children:(A??(s?p(s):"default")).toLowerCase()}),o(T,{d:F})]}),o(M,{id:b,class:"pop-flyout",popover:"auto",role:"group","aria-label":`Effort for ${g}`,onBeforeToggle:P,children:y.map(([u,C])=>o($,{on:f&&n===u,onPick:()=>i(s,u),children:C},u))})]}):null]},s)})]},a||h[0])),r?o(D,{class:"add-models",icon:v,title:"Add models",onClick:r}):o(I,{class:"add-models",href:"/dash/[org]/settings/[tab]",params:{org:d,tab:"models"},icon:v,children:"Add models"})]})}function P(l){let e=l.currentTarget,t=document.querySelector(`[popovertarget="${e.id}"]`)?.parentElement?.getBoundingClientRect();if(l.newState!=="open"||!t)return;e.style.cssText="display: block; visibility: hidden";let{offsetWidth:n,offsetHeight:p}=e;e.style.cssText="";let i=innerWidth<560,r=t.right+4+n<=innerWidth-8,d=i?t.left:r?t.right+4:t.left-n-4,c=i?t.bottom+2:t.top;e.style.left=`${Math.round(Math.max(8,d))}px`,e.style.top=`${Math.round(Math.max(8,Math.min(c,innerHeight-p-8)))}px`}function G(l){let e=l.currentTarget,t=document.querySelector(`[popovertarget="${e.id}"]`)?.getBoundingClientRect();if(l.newState!=="open"||!t)return;e.style.cssText="display: block; visibility: hidden; max-height: none";let n=e.offsetHeight,p=e.offsetWidth;e.style.cssText="";let i=innerHeight-t.bottom-12,r=t.top-12,d=n>i&&r>i,c=Math.max(160,Math.round(d?r:i));e.style.left=`${Math.round(Math.max(8,Math.min(t.left,innerWidth-p-8)))}px`,e.style.maxHeight=`${c}px`,d?e.style.bottom=`${Math.round(innerHeight-t.top+4)}px`:e.style.top=`${Math.round(t.bottom+4)}px`}function N({shape:l,value:e,onChange:t,empty:n,name:p,compact:i,onAdd:r}){let d=`${B()}-models`,{model:c,effort:m}=R(e,l),a=()=>document.getElementById(d)?.hidePopover();return o("span",{class:i?"model-pick compact":"model-pick",children:[o("button",{type:"button",class:"model-pick-btn",popovertarget:d,"aria-label":"Model",children:[o("span",{class:"grow",children:c||n?.label||"Pick a model"}),c?o("small",{class:"muted",children:m||x(c,l)}):null,o(T,{d:Q})]}),o(M,{id:d,class:"model-pop",popover:"auto",onBeforeToggle:G,children:o(H,{groups:S(l),first:n,model:c,effort:m,base:h=>x(h,l),onPick:(h,s)=>{a(),t(j(h,s,l))},onAdd:r&&(()=>{a(),r()})})}),p?o("input",{type:"hidden",name:p,value:e}):null]})}import{$3Q as O}from"./shared-init-abd7653140f37a0c.js";function _({tone:l,slim:e,children:t}){return O("div",{class:["notice",e&&"slim",l].filter(Boolean).join(" "),role:"status",children:t})}export{H as $0a,P as $0b,N as $0c,_ as $1a};
|