@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.
Files changed (202) hide show
  1. package/dist/{actions-DO8MvHwc.js → actions-C35tq9KH.js} +2 -2
  2. package/dist/{agent-Cgala63h.js → agent-BZR4Eqdc.js} +1 -1
  3. package/dist/{apps-BORri-28.js → apps-CCqOsEZH.js} +4 -4
  4. package/dist/{async-BS9tyhva.js → async-BP5q3Une.js} +1 -1
  5. package/dist/{auth-C16ylySv.js → auth-CJOm9_Vh.js} +1 -1
  6. package/dist/{chat-czruXAt3.js → chat-BD2Fu3jU.js} +1 -1
  7. package/dist/cli.js +2 -2
  8. package/dist/{cmd-C1gHyVG7.js → cmd-BH1bmZGs.js} +29 -29
  9. package/dist/{connection-CgA5_NJ7.js → connection-DNzNYpha.js} +1 -1
  10. package/dist/{context-C1XBbfEL.js → context-DVGPu7f_.js} +1 -1
  11. package/dist/dash/standalone/server/build-index.json +1 -1
  12. package/dist/dash/standalone/server/manifest.json +1231 -1231
  13. package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.91e126d7a389d4bd.js → index.a036e2c6ae93ec75.js} +3 -2
  14. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.858c062c7891a2c1.js → load.3e1c235ecb89201a.js} +1 -1
  15. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.9375ab741dc9791e.js → page.ff03c26886d248d2.js} +3 -3
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.150d950d191db477.js → layout.61ad05aceb425910.js} +3 -3
  43. 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
  44. 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
  45. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.262ed73437c17872.js → page.7de674df6cd0e824.js} +1 -1
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 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
  71. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.2cdb8eabd8f6df70.js → stream.c7ffa724145ce870.js} +1 -1
  72. 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
  73. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.56cea462eb725c39.js → action.44115286faf6c0f8.js} +1 -1
  74. package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.685154f230716834.js → client.b9225923da59febe.js} +1 -1
  75. package/dist/dash/standalone/static/assets/chunks/{advanced-list-b75a9c2bd11026de.js → advanced-list-4a393f37c461986f.js} +1 -1
  76. package/dist/dash/standalone/static/assets/chunks/{agent-pills-54564413a57d7fa7.js → agent-pills-f07bea43753a9342.js} +1 -1
  77. package/dist/dash/standalone/static/assets/chunks/{agent-settings-form-55d294dad2ce5a0d.js → agent-settings-form-6c1b6776328cd046.js} +1 -1
  78. package/dist/dash/standalone/static/assets/chunks/{agent-toggle-b5dcc4ea6292fb3d.js → agent-toggle-dabbca2fe4006852.js} +1 -1
  79. package/dist/dash/standalone/static/assets/chunks/{agents-grid-69461c53abbba433.js → agents-grid-a9440caa1768bfd8.js} +1 -1
  80. package/dist/dash/standalone/static/assets/chunks/{back-ba5e4340a9f8bbd2.js → back-8ca96656264a0d1c.js} +1 -1
  81. package/dist/dash/standalone/static/assets/chunks/{chain-hint-491eb09a20a15702.js → chain-hint-c7994aad798ef430.js} +1 -1
  82. package/dist/dash/standalone/static/assets/chunks/{combo-6df61e8a1cc31037.js → combo-7b125f3927083749.js} +1 -1
  83. package/dist/dash/standalone/static/assets/chunks/{composer-198b844da57b82a3.js → composer-3efd63e2e0192937.js} +1 -1
  84. package/dist/dash/standalone/static/assets/chunks/composer-a6cf207b9c69b43f.js +1 -0
  85. package/dist/dash/standalone/static/assets/chunks/{confirm-14d018653fbe50fc.js → confirm-6e26ab941d655b9f.js} +1 -1
  86. package/dist/dash/standalone/static/assets/chunks/{connect-repositories-5118edc019fc7890.js → connect-repositories-90f1aedea6de7a99.js} +1 -1
  87. package/dist/dash/standalone/static/assets/chunks/{connections-list-5412dad7e0def52f.js → connections-list-90935e956e8f4626.js} +1 -1
  88. package/dist/dash/standalone/static/assets/chunks/{copy-04781f9af4e10f06.js → copy-38fa78628f39ec10.js} +1 -1
  89. package/dist/dash/standalone/static/assets/chunks/create-link-a3c963721aa06a72.js +1 -0
  90. package/dist/dash/standalone/static/assets/chunks/{credentials-list-e64c973aee5602d3.js → credentials-list-ae950b9891d30c29.js} +1 -1
  91. package/dist/dash/standalone/static/assets/chunks/{custom-range-b6919bab9846ebf7.js → custom-range-e9185a23187b3fe6.js} +1 -1
  92. package/dist/dash/standalone/static/assets/chunks/{editor-68e9ccd1764fc512.js → editor-e0cc472111713852.js} +1 -1
  93. package/dist/dash/standalone/static/assets/chunks/{field-adcb6e6a5f9b7131.js → field-444bab2e16b91c26.js} +1 -1
  94. package/dist/dash/standalone/static/assets/chunks/instructions-7d9131eb37c4619e.js +1 -0
  95. package/dist/dash/standalone/static/assets/chunks/{instructions-7b274685ceb26457.js → instructions-9f173d4229d9b77e.js} +1 -1
  96. package/dist/dash/standalone/static/assets/chunks/{list-662f042656857c82.js → list-84356c9286747b10.js} +1 -1
  97. package/dist/dash/standalone/static/assets/chunks/{models-list-ae1e2eff30d21824.js → models-list-eca9705ab89a2ce5.js} +1 -1
  98. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-3006ae63624b3940.js +1 -0
  99. package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-fd86ded4c44c2de7.js → outcome-dialog-c4d61a288688f53a.js} +1 -1
  100. package/dist/dash/standalone/static/assets/chunks/{outcome-toast-c00becdb638cd9a8.js → outcome-toast-ba59a3c06c25f0fd.js} +1 -1
  101. package/dist/dash/standalone/static/assets/chunks/platform-actions-0c61a03082f9d169.js +1 -0
  102. package/dist/dash/standalone/static/assets/chunks/{platform-actions-f3979ab69a6ceb53.js → platform-actions-267a43c805e3c3a6.js} +1 -1
  103. package/dist/dash/standalone/static/assets/chunks/{platform-step-5454b6c0a19caefd.js → platform-step-adfc87c1fa86e7e1.js} +1 -1
  104. package/dist/dash/standalone/static/assets/chunks/platform-step-fd1616528b2f6f12.js +1 -0
  105. package/dist/dash/standalone/static/assets/chunks/{runners-list-20d42f19fb4bec8a.js → runners-list-c858c5546c6fd513.js} +1 -1
  106. package/dist/dash/standalone/static/assets/chunks/{secrets-list-89f89ee70edb3856.js → secrets-list-06cd41b5a2627452.js} +1 -1
  107. package/dist/dash/standalone/static/assets/chunks/{segmented-66a8c77c6294fec3.js → segmented-15503e745dd97f56.js} +1 -1
  108. package/dist/dash/standalone/static/assets/chunks/shared-init-02666a6f76606589.js +1 -0
  109. package/dist/dash/standalone/static/assets/chunks/shared-init-7a7f1e623f0f5861.js +9 -0
  110. package/dist/dash/standalone/static/assets/chunks/{shared-init-96225b8c7758de9d.js → shared-init-a69029db2d72fb52.js} +1 -1
  111. package/dist/dash/standalone/static/assets/chunks/side-toggle-800f7bacd6de5aa8.js +1 -0
  112. package/dist/dash/standalone/static/assets/chunks/{tail-40f16e09eade7eee.js → tail-3024b828bce41f94.js} +1 -1
  113. package/dist/dash/standalone/static/assets/chunks/{task-396d849e58e50d59.js → task-1e6f9ba22fb5e29f.js} +1 -1
  114. package/dist/dash/standalone/static/assets/chunks/{task-actions-0b3054dc0f8d17c0.js → task-actions-c8fe1201a56901d9.js} +1 -1
  115. package/dist/dash/standalone/static/assets/chunks/{task-view-9e026dc5da58af5b.js → task-view-531e243f8222f802.js} +3 -3
  116. package/dist/dash/standalone/static/assets/chunks/{tasks-list-04c6568d7f7237b7.js → tasks-list-5373f9a2772a386a.js} +1 -1
  117. package/dist/dash/standalone/static/assets/chunks/{versions-list-ceb756236e69b761.js → versions-list-6642a24e9cef352b.js} +1 -1
  118. package/dist/dash/standalone/static/assets/pnext-client-02b9bb5ae78a37d6.js +1 -0
  119. package/dist/dash/standalone/static/assets/pnext-client-063d14b5b5c893a3.js +1 -0
  120. package/dist/dash/standalone/static/assets/pnext-client-1710a65c5b8280af.js +1 -0
  121. package/dist/dash/standalone/static/assets/pnext-client-2936b44e963219bc.js +1 -0
  122. package/dist/dash/standalone/static/assets/pnext-client-2f14cc4bf71bf456.js +1 -0
  123. package/dist/dash/standalone/static/assets/{pnext-client-27207e4f43f9a21b.js → pnext-client-2f81535a69d0c8a3.js} +1 -1
  124. package/dist/dash/standalone/static/assets/pnext-client-368d90341055d7ff.js +1 -0
  125. package/dist/dash/standalone/static/assets/pnext-client-58e0efbceb6c595f.js +1 -0
  126. package/dist/dash/standalone/static/assets/{pnext-client-435db60553fa3a67.js → pnext-client-5fc693a6184e48a4.js} +1 -1
  127. package/dist/dash/standalone/static/assets/pnext-client-6ee756a74310a9fe.js +1 -0
  128. package/dist/dash/standalone/static/assets/pnext-client-713f7a6bc55d23fb.js +1 -0
  129. package/dist/dash/standalone/static/assets/pnext-client-7c91f8543cd360fa.js +1 -0
  130. package/dist/dash/standalone/static/assets/pnext-client-827b030f2c8e738e.js +1 -0
  131. package/dist/dash/standalone/static/assets/pnext-client-8b165b7e5c14a1f3.js +1 -0
  132. package/dist/dash/standalone/static/assets/pnext-client-95a81597ac1bdea0.js +1 -0
  133. package/dist/dash/standalone/static/assets/pnext-client-a4c2fb8a94ccce04.js +1 -0
  134. package/dist/dash/standalone/static/assets/pnext-client-a7faaaf8c4cc8145.js +1 -0
  135. package/dist/dash/standalone/static/assets/pnext-client-bab8ffb68e7dd229.js +1 -0
  136. package/dist/dash/standalone/static/assets/pnext-client-d9fab2611c2e7246.js +1 -0
  137. package/dist/dash/standalone/static/assets/{pnext-client-b1af82c6f0db0033.js → pnext-client-f3804c9ffb299fe0.js} +1 -1
  138. package/dist/{drive-B7SBFfcb.js → drive-MggMiKA0.js} +1 -1
  139. package/dist/{exec-D9jF2F-H.js → exec-CNygM6yF.js} +1 -1
  140. package/dist/{executor-DBW7R7Tf.js → executor-Ds4wDCzV.js} +1 -1
  141. package/dist/flow/builtin/review/index.js +1 -1
  142. package/dist/flow/index.js +1 -1
  143. package/dist/{hook-DN__zYOG.js → hook-CVJU-ZD0.js} +1 -1
  144. package/dist/{local-BzMvgiwL.js → local-CqOUpEtl.js} +1 -1
  145. package/dist/{local-GIxwz_Or.js → local-DFrTuJFN.js} +1 -1
  146. package/dist/{login-LlZrIlxb.js → login-93jO9qjx.js} +1 -1
  147. package/dist/{maintenance-DyiyHI8S.js → maintenance-BuDKnfc7.js} +1 -1
  148. package/dist/{mcp-CrtKQoVi.js → mcp-CTVOR7r6.js} +1 -1
  149. package/dist/{mcp-Caq72REF.js → mcp-EwT2mCaa.js} +1 -1
  150. package/dist/{models-BVxs3I8o.js → models-mKyePWrV.js} +1 -1
  151. package/dist/{permission-RSZM3DUk.js → permission-F6F25GJU.js} +1 -1
  152. package/dist/remote-Cl-j8r3W.js +1 -0
  153. package/dist/{runner-CKMOh5Q3.js → runner-DK0jnzPr.js} +1 -1
  154. package/dist/runner.json +1 -1
  155. package/dist/runner.tgz +0 -0
  156. package/dist/schema.js +1 -1
  157. package/dist/sdk.d.ts +34 -0
  158. package/dist/sdk.js +1 -1
  159. package/dist/serve-Cqlkgdfd.js +8 -0
  160. package/dist/{serve-YlU04KO7.js → serve-DHe6dZM6.js} +1 -1
  161. package/dist/{session-D7eeJIaH.js → session-BMbMzzPu.js} +1 -1
  162. package/dist/{shared-BzNReirj.js → shared-D-KqAi7b.js} +1 -1
  163. package/dist/{sign-in-Dr6sU7vz.js → sign-in-Dv-rdYD4.js} +1 -1
  164. package/dist/{store-BrnWdtRw.js → store-BpDipcKB.js} +18 -18
  165. package/dist/{task-CyqtCXo3.js → task-BRHXn5y1.js} +1 -1
  166. package/dist/{task-DN4assR8.js → task-CzXNLREX.js} +1 -1
  167. package/dist/{tools-DVtBtED6.js → tools-BCm26CeV.js} +1 -1
  168. package/dist/{tools-Ck-ZWtmB.js → tools-C69W1B6S.js} +1 -1
  169. package/dist/{tools-search-BNDea9vZ.js → tools-search-BDaeCoWe.js} +1 -1
  170. package/dist/{worker-DeuC38Vp.js → worker-DGhRPDDt.js} +2 -2
  171. package/dist/{worker-DJANNSCT.js → worker-DHNBRRl-.js} +1 -1
  172. package/package.json +1 -1
  173. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  174. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  175. package/dist/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +0 -1
  176. package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +0 -1
  177. package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +0 -1
  178. package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +0 -1
  179. package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +0 -1
  180. package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +0 -1
  181. package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +0 -1
  182. package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +0 -9
  183. package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +0 -1
  184. package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +0 -1
  185. package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +0 -1
  186. package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +0 -1
  187. package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +0 -1
  188. package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +0 -1
  189. package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +0 -1
  190. package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +0 -1
  191. package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +0 -1
  192. package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +0 -1
  193. package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +0 -1
  194. package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +0 -1
  195. package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +0 -1
  196. package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +0 -1
  197. package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +0 -1
  198. package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +0 -1
  199. package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +0 -1
  200. package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +0 -1
  201. package/dist/remote-CY-qYX2C.js +0 -1
  202. 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{At as de,Gt as fe,It as pe,Nt as me,Zt as he,ar as ge,cr as _e,ht as ve,kt as ye,lr as be,mt as xe,pt as Se,qt as Ce,sr as we,ur as Te,vt as Ee}from"./apps-BORri-28.js";import{S as De,T as Oe,l as ke,s as Ae,w as je,x as Me}from"./local-BzMvgiwL.js";import{i as R,r as z}from"./client-nBo9Mhsr.js";import{C as Ne,S as Pe,T as Fe,_ as B,a as V,b as Ie,c as H,d as U,f as Le,h as Re,i as W,l as G,m as ze,n as Be,o as K,p as q,r as Ve,s as J,u as Y,v as X,w as He,x as Ue,y as We}from"./shared-BzNReirj.js";import{createHash as Ge,randomBytes as Ke,randomUUID as qe}from"node:crypto";import{isDeepStrictEqual as Je}from"node:util";const Z=ie(W,`shared_app`),Q=ie(j,`installation_secret`),$=(e,t,n)=>K({id:e.key,integration:e.integration,agent:e.agent,name:e.name,agentsRepo:e.agentsRepo,branch:e.branch,builtin:e.organizationId===``||void 0,shared:n,credentials:t,createdAt:U(e.createdAt)});function Ye(e){let t=W;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,credentials:j.value,sharedKey:Z.key}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).leftJoin(Z,y(Z.id,t.sharedAppId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,credentials:t,sharedKey:n})=>({id:e.key,value:$(e,t,n)}))},put:(n,r)=>e.transaction(`app:${n}`,async e=>{let[i]=await e.db.select({secretId:t.credentialsSecretId,sharedAppId:t.sharedAppId,credentials:j.value}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).where(h(e.mine(t.organizationId),y(t.key,n))),[a]=r.shared?await e.db.select({id:t.id,secretId:t.credentialsSecretId}).from(t).where(h(y(t.organizationId,``),y(t.key,r.shared))):[];if(r.shared&&!a)throw Error(`No shared app ${r.shared}`);let o=i&&!i.sharedAppId?i.secretId:void 0,s=a?.secretId??o??await Be(e.db,r.credentials);o!==void 0&&i?.credentials!==r.credentials&&await Re(e.db,o,r.credentials);let c={integration:r.integration,agent:r.agent,name:r.name,agentsRepo:r.agentsRepo??null,branch:r.branch??null,credentialsSecretId:s,sharedAppId:a?.id??null,createdAt:V(r.createdAt),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:[t.organizationId,t.key],set:c}),i&&i.secretId!==s&&await J(e.db,[i.secretId])}),delete:n=>e.transaction(`app:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.credentialsSecretId});await J(e.db,r.map(e=>e.secretId))})}}function Xe(e,t,n){return K({id:e.key,app:t.key,integration:t.integration,account:e.account,token:n,installer:e.installer,self:e.self,covers:e.covers,repos:e.repos,createdAt:U(e.createdAt),deletedAt:e.deletedAt?U(e.deletedAt):void 0,uninstalled:e.uninstalled||void 0})}function Ze(e,t,n){let r=n.app.split(`/`)[0],i=[t.slice(n.app.length+1),...n.covers??[]],a=_`array[${_.join(i.map(e=>_`${e}`),_`, `)}]::text[]`;return e.transaction(`binding:${r}`,async e=>{let[n]=await e.db.select({id:Y.id}).from(Y).innerJoin(W,y(W.id,Y.appId)).where(h(x(p(Y.platformInstallId,i),_`${Y.covers} ?| ${a}`),S(Y.deletedAt),u(Y.key,t),x(y(W.key,r),_`left(${W.key}, ${r.length+1}) = ${`${r}/`}`))).limit(1);if(n)throw new De(`Installation "${t}" is bound through another app.`)})}function Qe(e){let t=Y;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,app:{key:W.key,integration:W.integration},token:j.value}).from(t).innerJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,app:t,token:n})=>({id:e.key,value:Xe(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({row:t,token:j.value,appKey:W.key,parent:_`(select id from ${W} where organization_id in (${e.organizationId}, ${``}) and key = ${r.app} order by organization_id desc limit 1)`}).from(_`(select 1) as anchor`).leftJoin(t,y(t.key,n)).leftJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)),a=i?.row,o=()=>Error(`Installation "${n}" belongs to another workspace.`);if(a&&a.organizationId!==e.organizationId)throw o();if(!i?.parent)throw Error(`Unknown app "${r.app}".`);r.deletedAt===void 0&&(!a||i.appKey!==r.app||a.deletedAt!==null||JSON.stringify(a.covers??[])!==JSON.stringify(r.covers??[]))&&await Ze(e,n,r);let s=a?.tokenSecretId??null;r.token&&(s?i.token!==r.token&&await Re(e.db,s,r.token):s=await Be(e.db,r.token));let c={appId:i.parent,platformInstallId:n.slice(r.app.length+1),account:r.account,tokenSecretId:r.token?s:null,installer:r.installer??null,self:r.self??null,covers:r.covers??null,repos:r.repos??null,createdAt:V(r.createdAt),updatedAt:e.at(),deletedAt:r.deletedAt===void 0?null:V(r.deletedAt),uninstalled:r.uninstalled??null},[l]=await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:t.key,set:c,setWhere:e.mine(t.organizationId)}).returning({id:t.id});if(!l)throw o();r.token||await J(e.db,[a?.tokenSecretId])}),delete:n=>e.transaction(`installation:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.tokenSecretId});await J(e.db,r.map(e=>e.secretId))})}}async function $e(e,t){let n=ie(Y,`locked`),[r]=await e.db.select({row:n,app:{key:W.key,integration:W.integration},token:j.value}).from(n).innerJoin(W,y(W.id,n.appId)).leftJoin(j,y(j.id,n.tokenSecretId)).where(h(e.mine(n.organizationId),y(n.key,t))).for(`update`,{of:n});return r&&Xe(r.row,r.app,r.token)}const et=(e,t)=>K({...ze(t),owner:e.owner,account:e.account,createdAt:U(e.createdAt)}),tt=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function nt(e,t){let n=D;return(await e.db.select({row:n,sealed:j.value}).from(n).innerJoin(j,y(j.id,n.secretId)).where(h(e.mine(n.organizationId),t?y(n.owner,t):S(n.owner))).orderBy(b(n.label)).for(`update`)).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t),row:e}))}async function rt(e,t,n,r){let i=D;if(!r){t&&(await e.db.delete(i).where(y(i.id,t.row.id)),await J(e.db,[t.row.secretId]));return}let a=Le(r),o={account:r.account??null,createdAt:r.createdAt===void 0?t?.row.createdAt??e.at():V(r.createdAt),updatedAt:e.at()};if(t){Le(t.value)!==a&&await Re(e.db,t.row.secretId,a),await e.db.update(i).set(o).where(y(i.id,t.row.id));return}let{owner:s,name:c}=he(n);await e.db.insert(i).values({organizationId:e.organizationId,owner:s??null,label:c,secretId:await Be(e.db,a),...o})}function it(e){let t=D,n=(t,n)=>{let{owner:r}=he(t);return e.transaction(tt(e,r),async e=>rt(e,(await nt(e,r)).find(e=>e.id===t),t,n))};return{key:_`coalesce(${t.owner} || '/', '') || ${t.label}`,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(_`coalesce(${t.owner} || '/', '') || ${t.label}`));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t)}))},put:(e,t)=>n(e,t),delete:e=>n(e,null)}}const at=e=>e.secret,ot=e=>{let t=G(D,e);return{id:Ce(t.owner??void 0,t.label),value:et(t,at(e))}},st=e=>{let t=G(A,e);return{id:t.publicId,value:vt(t,at(e))}},ct=e=>{let t=G(W,e.app);return{installation:Xe(G(Y,e.row),t,e.token),app:$(t,e.credentials)}};function lt(e,t,n,r){let i=E,a=t.map(t=>`${H(X(e,`snapshot`,Oe(t)))}%`),o=[...t,...n].map(t=>X(e,`snapshot`,je(t)));return _`(select coalesce(jsonb_object_agg(${i.key}, ${i.value}), '{}'::jsonb) from ${i}
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}from"./state-CxAUec80.js";import{n as a,x as o,y as s}from"./approvals-C8XV7CK2.js";import{c,l}from"./view-D-rbQ1Kz.js";import"./turn-eI4iRPsq.js";import{C as u,K as d,S as f,_ as p,b as m,d as ee,f as h,g,h as te,ht as _,m as v,p as y,u as b,v as ne,w as x,x as re,y as S}from"./drizzle-orm-CYU7WOQS.js";import{agent as C,agentVersion as w,approvalPost as T,c as ie,chatItem as ae,chatState as E,connection as oe,engineCredential as D,integrationApp as se,integrationAppInstallation as ce,platformLink as O,privateSpace as k,runner as A,secret as j,spaceMember as M,task as N,taskHistory as le,taskInbox as P,taskLog as F,taskSecret as I,taskTombstone as ue,workspace as L}from"./schema.js";import{Ft as de,Kt as fe,Mt as pe,Ot as me,Wt as he,Xt as ge,_t as _e,cr as ve,ft as ye,ir as be,kt as xe,lr as Se,mt as Ce,or as we,pt as Te,sr as Ee}from"./apps-CCqOsEZH.js";import{S as De,T as Oe,l as ke,s as Ae,w as je,x as Me}from"./local-CqOUpEtl.js";import{i as R,r as z}from"./client-nBo9Mhsr.js";import{C as Ne,S as Pe,T as Fe,_ as B,a as V,b as Ie,c as H,d as U,f as Le,h as Re,i as W,l as G,m as ze,n as Be,o as K,p as q,r as Ve,s as J,u as Y,v as X,w as He,x as Ue,y as We}from"./shared-D-KqAi7b.js";import{createHash as Ge,randomBytes as Ke,randomUUID as qe}from"node:crypto";import{isDeepStrictEqual as Je}from"node:util";const Z=ie(W,`shared_app`),Q=ie(j,`installation_secret`),$=(e,t,n)=>K({id:e.key,integration:e.integration,agent:e.agent,name:e.name,agentsRepo:e.agentsRepo,branch:e.branch,builtin:e.organizationId===``||void 0,shared:n,credentials:t,createdAt:U(e.createdAt)});function Ye(e){let t=W;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,credentials:j.value,sharedKey:Z.key}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).leftJoin(Z,y(Z.id,t.sharedAppId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,credentials:t,sharedKey:n})=>({id:e.key,value:$(e,t,n)}))},put:(n,r)=>e.transaction(`app:${n}`,async e=>{let[i]=await e.db.select({secretId:t.credentialsSecretId,sharedAppId:t.sharedAppId,credentials:j.value}).from(t).innerJoin(j,y(j.id,t.credentialsSecretId)).where(h(e.mine(t.organizationId),y(t.key,n))),[a]=r.shared?await e.db.select({id:t.id,secretId:t.credentialsSecretId}).from(t).where(h(y(t.organizationId,``),y(t.key,r.shared))):[];if(r.shared&&!a)throw Error(`No shared app ${r.shared}`);let o=i&&!i.sharedAppId?i.secretId:void 0,s=a?.secretId??o??await Be(e.db,r.credentials);o!==void 0&&i?.credentials!==r.credentials&&await Re(e.db,o,r.credentials);let c={integration:r.integration,agent:r.agent,name:r.name,agentsRepo:r.agentsRepo??null,branch:r.branch??null,credentialsSecretId:s,sharedAppId:a?.id??null,createdAt:V(r.createdAt),updatedAt:e.at()};await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:[t.organizationId,t.key],set:c}),i&&i.secretId!==s&&await J(e.db,[i.secretId])}),delete:n=>e.transaction(`app:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.credentialsSecretId});await J(e.db,r.map(e=>e.secretId))})}}function Xe(e,t,n){return K({id:e.key,app:t.key,integration:t.integration,account:e.account,token:n,installer:e.installer,self:e.self,covers:e.covers,repos:e.repos,createdAt:U(e.createdAt),deletedAt:e.deletedAt?U(e.deletedAt):void 0,uninstalled:e.uninstalled||void 0})}function Ze(e,t,n){let r=n.app.split(`/`)[0],i=[t.slice(n.app.length+1),...n.covers??[]],a=_`array[${_.join(i.map(e=>_`${e}`),_`, `)}]::text[]`;return e.transaction(`binding:${r}`,async e=>{let[n]=await e.db.select({id:Y.id}).from(Y).innerJoin(W,y(W.id,Y.appId)).where(h(x(p(Y.platformInstallId,i),_`${Y.covers} ?| ${a}`),S(Y.deletedAt),u(Y.key,t),x(y(W.key,r),_`left(${W.key}, ${r.length+1}) = ${`${r}/`}`))).limit(1);if(n)throw new De(`Installation "${t}" is bound through another app.`)})}function Qe(e){let t=Y;return{key:t.key,rows:async(n,r)=>{let i=e.db.select({row:t,app:{key:W.key,integration:W.integration},token:j.value}).from(t).innerJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(t.key));return(await(r===void 0?i:i.limit(r))).map(({row:e,app:t,token:n})=>({id:e.key,value:Xe(e,t,n)}))},put:(n,r)=>e.transaction(`installation:${n}`,async e=>{let[i]=await e.db.select({row:t,token:j.value,appKey:W.key,parent:_`(select id from ${W} where organization_id in (${e.organizationId}, ${``}) and key = ${r.app} order by organization_id desc limit 1)`}).from(_`(select 1) as anchor`).leftJoin(t,y(t.key,n)).leftJoin(W,y(W.id,t.appId)).leftJoin(j,y(j.id,t.tokenSecretId)),a=i?.row,o=()=>Error(`Installation "${n}" belongs to another workspace.`);if(a&&a.organizationId!==e.organizationId)throw o();if(!i?.parent)throw Error(`Unknown app "${r.app}".`);r.deletedAt===void 0&&(!a||i.appKey!==r.app||a.deletedAt!==null||JSON.stringify(a.covers??[])!==JSON.stringify(r.covers??[]))&&await Ze(e,n,r);let s=a?.tokenSecretId??null;r.token&&(s?i.token!==r.token&&await Re(e.db,s,r.token):s=await Be(e.db,r.token));let c={appId:i.parent,platformInstallId:n.slice(r.app.length+1),account:r.account,tokenSecretId:r.token?s:null,installer:r.installer??null,self:r.self??null,covers:r.covers??null,repos:r.repos??null,createdAt:V(r.createdAt),updatedAt:e.at(),deletedAt:r.deletedAt===void 0?null:V(r.deletedAt),uninstalled:r.uninstalled??null},[l]=await e.db.insert(t).values({organizationId:e.organizationId,key:n,...c}).onConflictDoUpdate({target:t.key,set:c,setWhere:e.mine(t.organizationId)}).returning({id:t.id});if(!l)throw o();r.token||await J(e.db,[a?.tokenSecretId])}),delete:n=>e.transaction(`installation:${n}`,async e=>{let r=await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.key,n))).returning({secretId:t.tokenSecretId});await J(e.db,r.map(e=>e.secretId))})}}async function $e(e,t){let n=ie(Y,`locked`),[r]=await e.db.select({row:n,app:{key:W.key,integration:W.integration},token:j.value}).from(n).innerJoin(W,y(W.id,n.appId)).leftJoin(j,y(j.id,n.tokenSecretId)).where(h(e.mine(n.organizationId),y(n.key,t))).for(`update`,{of:n});return r&&Xe(r.row,r.app,r.token)}const et=(e,t)=>K({...ze(t),owner:e.owner,account:e.account,createdAt:U(e.createdAt)}),tt=(e,t)=>`credential:${JSON.stringify([e.organizationId,t??null])}`;async function nt(e,t){let n=D;return(await e.db.select({row:n,sealed:j.value}).from(n).innerJoin(j,y(j.id,n.secretId)).where(h(e.mine(n.organizationId),t?y(n.owner,t):S(n.owner))).orderBy(b(n.label)).for(`update`)).map(({row:e,sealed:t})=>({id:fe(e.owner??void 0,e.label),value:et(e,t),row:e}))}async function rt(e,t,n,r){let i=D;if(!r){t&&(await e.db.delete(i).where(y(i.id,t.row.id)),await J(e.db,[t.row.secretId]));return}let a=Le(r),o={account:r.account??null,createdAt:r.createdAt===void 0?t?.row.createdAt??e.at():V(r.createdAt),updatedAt:e.at()};if(t){Le(t.value)!==a&&await Re(e.db,t.row.secretId,a),await e.db.update(i).set(o).where(y(i.id,t.row.id));return}let{owner:s,name:c}=ge(n);await e.db.insert(i).values({organizationId:e.organizationId,owner:s??null,label:c,secretId:await Be(e.db,a),...o})}function it(e){let t=D,n=(t,n)=>{let{owner:r}=ge(t);return e.transaction(tt(e,r),async e=>rt(e,(await nt(e,r)).find(e=>e.id===t),t,n))};return{key:_`coalesce(${t.owner} || '/', '') || ${t.label}`,rows:async(n,r)=>{let i=e.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(e.mine(t.organizationId),n)).orderBy(b(_`coalesce(${t.owner} || '/', '') || ${t.label}`));return(await(r===void 0?i:i.limit(r))).map(({row:e,sealed:t})=>({id:fe(e.owner??void 0,e.label),value:et(e,t)}))},put:(e,t)=>n(e,t),delete:e=>n(e,null)}}const at=e=>e.secret,ot=e=>{let t=G(D,e);return{id:fe(t.owner??void 0,t.label),value:et(t,at(e))}},st=e=>{let t=G(A,e);return{id:t.publicId,value:vt(t,at(e))}},ct=e=>{let t=G(W,e.app);return{installation:Xe(G(Y,e.row),t,e.token),app:$(t,e.credentials)}};function lt(e,t,n,r){let i=E,a=t.map(t=>`${H(X(e,`snapshot`,Oe(t)))}%`),o=[...t,...n].map(t=>X(e,`snapshot`,je(t)));return _`(select coalesce(jsonb_object_agg(${i.key}, ${i.value}), '{}'::jsonb) from ${i}
2
2
  where (${i.expiresAt} is null or ${i.expiresAt} > clock_timestamp()) and (${i.key} like any(${_.param(a)}::text[])
3
3
  or ${i.key} in (select unnest(${_.param(o)}::text[])${r?_` union all ${r}`:_``})))`}function ut(e,t){let n=We(e,`snapshot`),r={held:new Map,drops:new Map};for(let[e,i]of Object.entries(t)){let t=e.slice(n.length);t.startsWith(`token-drop:`)?r.drops.set(t,i.drop):r.held.set(t,i)}return r}function dt(e){let t=_`coalesce((${E.value}->>'version')::bigint, jsonb_array_length(${E.value}->'messages') + (${E.value}->>'more')::bigint)`,n=_`greatest(coalesce((${E.value}->>'acknowledged')::bigint, 0), least(${e}, ${t}))`;return _`(select ${E.value} || jsonb_build_object('version', ${t}, 'acknowledged', ${n},
4
4
  'messages', remaining, 'more', ${t} - ${n} - jsonb_array_length(remaining))
@@ -8,7 +8,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
8
8
  from ${L} where ${L.organizationId} = ${e}), '{}'::jsonb)`,kt=e=>_`(select ${Fe(_`to_jsonb(r)`,_`s.value`)} from ${A} r join ${j} s on s.id = r.secret_id
9
9
  where r.organization_id = ${e}.organization_id and r.public_id = ${e}.runner_id)`,At=e=>_`(select jsonb_build_object('row', to_jsonb(a), 'credentials', s.value)
10
10
  from ${se} a join ${j} s on s.id = a.credentials_secret_id where ${e})`,jt=e=>_`task_secrets as (delete from ${I} where task_id in (${e}) returning secret_id),
11
- dropped_secrets as (delete from ${j} where id in (select secret_id from task_secrets))`;function Mt(e,t){if(typeof t==`number`)return _`to_jsonb(coalesce(case when jsonb_typeof(${e}) = 'number' then (${e} #>> '{}')::numeric end, 0) + ${t}::numeric)`;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=Object.entries(t).map(([t,n])=>_`${t}::text, ${Mt(_`(${e} -> ${t}::text)`,n)}`);return _`(case when jsonb_typeof(${e}) = 'object' then ${e} else '{}'::jsonb end || jsonb_build_object(${_.join(n,_`, `)}))`}const Nt=e=>_`(case ${e} ${_.join([...ye,...n].map(e=>_`when ${e} then ${_.raw(String(c(e)))}`),_` `)} end)`,Pt=e=>_`date_trunc('milliseconds', ${e})`,Ft=e=>_`${e} collate "C"`,It=x(y(N.status,`waiting`),_`jsonb_path_exists(${N.context}, '$.approvals[*] ? (!(exists(@.response)) || @.response == null)')`),Lt=_`'space:' || ${k.integration} || ':' || ${k.account} || ':' || ${k.space}`,Rt=(e,t)=>_`array(select ${Lt} from ${k} join ${M} on ${M.spaceId} = ${k.id} join ${O} on ${O.platform} = ${k.integration} and ${O.platformUserId} = ${M.member} where ${O.userId} = ${t} and ${k.organizationId} = ${e})`,zt=e=>[b(Nt(e.status)),ee(Pt(e.createdAt)),ee(Ft(e.publicId))],Bt=e=>[b(e.updatedAt),b(Ft(e.publicId))];var Vt=class{db;constructor(e){this.db=e}async metrics(e,t){let n=await this.db.select({status:N.status,total:_`count(*)::int`,recent:_`count(*) filter (where ${N.createdAt} >= ${new Date(t).toISOString()}::timestamptz)::int`}).from(N).where(y(N.organizationId,e)).groupBy(N.status),r={tasks:{queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},queueDepth:0};for(let e of n)r.tasks[e.status]=e.recent,e.status===`queued`&&(r.queueDepth=e.total);return r}where(e,t){return h(y(N.organizationId,e),y(N.publicId,t))}fence(e,t,n={}){return h(this.where(e,t),n.generation===void 0?void 0:y(N.generation,n.generation),n.attempts===void 0?void 0:y(N.attempts,n.attempts),n.tokenHash===void 0?void 0:n.tokenHash===null?S(N.tokenHash):y(N.tokenHash,n.tokenHash),n.handle===void 0?void 0:n.handle===null?S(N.handle):y(N.handle,n.handle),n.lastSeenAt===void 0?void 0:n.lastSeenAt===null?S(N.lastSeenAt):y(N.lastSeenAt,new Date(n.lastSeenAt)),n.updatedAt===void 0?void 0:y(N.updatedAt,new Date(n.updatedAt)),n.statuses?p(N.status,n.statuses):void 0,n.unanswered===void 0?void 0:_`not exists (select 1 from jsonb_array_elements(coalesce(${N.context} -> 'approvals', '[]'::jsonb)) as entry where entry ->> 'id' = ${n.unanswered} and jsonb_typeof(entry -> 'response') = 'object')`)}async enqueue(e,t,n,r,i,a){let o=this.insertion(e,t,n,r,i,void 0,a),[s]=await z(this.db,i===void 0?[]:[_`select pg_advisory_xact_lock(1, hashtext(${e}))`],o);if(!s?.allowed)throw Error(`Organization task queue is full`);return!!s.inserted}insertion(e,t,n,r,i,a,o){let s=t.event,{audience:c,space:l}=Te(t),u=new Date(n).toISOString(),d=e=>_`${e===void 0?null:JSON.stringify(e)}::jsonb`,f=t=>X(e,`delivery`,t),p=r?_`
11
+ dropped_secrets as (delete from ${j} where id in (select secret_id from task_secrets))`;function Mt(e,t){if(typeof t==`number`)return _`to_jsonb(coalesce(case when jsonb_typeof(${e}) = 'number' then (${e} #>> '{}')::numeric end, 0) + ${t}::numeric)`;if(!t||typeof t!=`object`||Array.isArray(t))return e;let n=Object.entries(t).map(([t,n])=>_`${t}::text, ${Mt(_`(${e} -> ${t}::text)`,n)}`);return _`(case when jsonb_typeof(${e}) = 'object' then ${e} else '{}'::jsonb end || jsonb_build_object(${_.join(n,_`, `)}))`}const Nt=e=>_`(case ${e} ${_.join([...me,...n].map(e=>_`when ${e} then ${_.raw(String(c(e)))}`),_` `)} end)`,Pt=e=>_`date_trunc('milliseconds', ${e})`,Ft=e=>_`${e} collate "C"`,It=x(y(N.status,`waiting`),_`jsonb_path_exists(${N.context}, '$.approvals[*] ? (!(exists(@.response)) || @.response == null)')`),Lt=_`'space:' || ${k.integration} || ':' || ${k.account} || ':' || ${k.space}`,Rt=(e,t)=>_`array(select ${Lt} from ${k} join ${M} on ${M.spaceId} = ${k.id} join ${O} on ${O.platform} = ${k.integration} and ${O.platformUserId} = ${M.member} where ${O.userId} = ${t} and ${k.organizationId} = ${e})`,zt=e=>[b(Nt(e.status)),ee(Pt(e.createdAt)),ee(Ft(e.publicId))],Bt=e=>[b(e.updatedAt),b(Ft(e.publicId))];var Vt=class{db;constructor(e){this.db=e}async metrics(e,t){let n=await this.db.select({status:N.status,total:_`count(*)::int`,recent:_`count(*) filter (where ${N.createdAt} >= ${new Date(t).toISOString()}::timestamptz)::int`}).from(N).where(y(N.organizationId,e)).groupBy(N.status),r={tasks:{queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},queueDepth:0};for(let e of n)r.tasks[e.status]=e.recent,e.status===`queued`&&(r.queueDepth=e.total);return r}where(e,t){return h(y(N.organizationId,e),y(N.publicId,t))}fence(e,t,n={}){return h(this.where(e,t),n.generation===void 0?void 0:y(N.generation,n.generation),n.attempts===void 0?void 0:y(N.attempts,n.attempts),n.tokenHash===void 0?void 0:n.tokenHash===null?S(N.tokenHash):y(N.tokenHash,n.tokenHash),n.handle===void 0?void 0:n.handle===null?S(N.handle):y(N.handle,n.handle),n.lastSeenAt===void 0?void 0:n.lastSeenAt===null?S(N.lastSeenAt):y(N.lastSeenAt,new Date(n.lastSeenAt)),n.updatedAt===void 0?void 0:y(N.updatedAt,new Date(n.updatedAt)),n.statuses?p(N.status,n.statuses):void 0,n.unanswered===void 0?void 0:_`not exists (select 1 from jsonb_array_elements(coalesce(${N.context} -> 'approvals', '[]'::jsonb)) as entry where entry ->> 'id' = ${n.unanswered} and jsonb_typeof(entry -> 'response') = 'object')`)}async enqueue(e,t,n,r,i,a){let o=this.insertion(e,t,n,r,i,void 0,a),[s]=await z(this.db,i===void 0?[]:[_`select pg_advisory_xact_lock(1, hashtext(${e}))`],o);if(!s?.allowed)throw Error(`Organization task queue is full`);return!!s.inserted}insertion(e,t,n,r,i,a,o){let s=t.event,{audience:c,space:l}=Se(t),u=new Date(n).toISOString(),d=e=>_`${e===void 0?null:JSON.stringify(e)}::jsonb`,f=t=>X(e,`delivery`,t),p=r?_`
12
12
  receipt as (
13
13
  insert into ${E} (key, value, expires_at)
14
14
  select ${f(r.key)}, ${d({at:n})}, ${new Date(n+r.ttlMs).toISOString()}::timestamptz
@@ -49,7 +49,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
49
49
  and event->>'appId' is not distinct from ${c?.appId??null}
50
50
  and event->>'installationId' is not distinct from ${c?.installationId??null}
51
51
  and event->'chat'->'thread'->>'id' = ${c?.chat?.thread.id||null}
52
- order by created_at desc, public_id desc limit 1 for update`,u=this.insertion(e,t,n,r,a,{target:l,create:o,steer:i},s),d=[_`select pg_advisory_xact_lock(3, hashtext(${JSON.stringify([e,pe(t)])}))`];a!==void 0&&o&&d.push(_`select pg_advisory_xact_lock(1, hashtext(${e}))`);let[f]=await z(this.db,d,u);if(!f?.allowed)throw Error(`Organization task queue is full`);return f.inserted?{taskId:t.id}:f.steered?{steered:!0}:{}}async claim(e,t,n=!1,r){let i=r===void 0?_`true`:_`(select count(*) from ${N} active where active.organization_id = ${N.organizationId} and active.status in ('running', 'waiting')) < ${r}`;if(!n){let[e]=await R(this.db,()=>q(this.db,_`select exists (select 1 from ${N} where status = 'queued' and ${i})
52
+ order by created_at desc, public_id desc limit 1 for update`,u=this.insertion(e,t,n,r,a,{target:l,create:o,steer:i},s),d=[_`select pg_advisory_xact_lock(3, hashtext(${JSON.stringify([e,de(t)])}))`];a!==void 0&&o&&d.push(_`select pg_advisory_xact_lock(1, hashtext(${e}))`);let[f]=await z(this.db,d,u);if(!f?.allowed)throw Error(`Organization task queue is full`);return f.inserted?{taskId:t.id}:f.steered?{steered:!0}:{}}async claim(e,t,n=!1,r){let i=r===void 0?_`true`:_`(select count(*) from ${N} active where active.organization_id = ${N.organizationId} and active.status in ('running', 'waiting')) < ${r}`;if(!n){let[e]=await R(this.db,()=>q(this.db,_`select exists (select 1 from ${N} where status = 'queued' and ${i})
53
53
  and ${t===void 0?_`true`:_`(select count(*) from ${N} where status in ('running', 'waiting')) < ${t}`} as ready`));if(!e?.ready)return}let a=Ke(32).toString(`base64url`),o=_`translate(rtrim(replace(encode(convert_to(format('{"task":%s,"organization":%s,"attempt":%s}',
54
54
  to_json(public_id), to_json(organization_id), attempts + 1), 'UTF8'), 'base64'), E'\\n', ''), '='), '+/', '-_') || '.' || ${a}`,s=_`with stamp as materialized (select date_trunc('milliseconds', clock_timestamp()) as at), picked as materialized (
55
55
  select id, ${o} as bearer from ${N} where status = 'queued'
@@ -94,10 +94,10 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
94
94
  from touched`);if(!y)return;let b=G(N,y.status),ne=(e,t)=>e?t(e):void 0;return{organizationId:b.organizationId,status:Ie(b),...f?{loaded:{installation:ne(y.installation,e=>ct(e).installation),credential:ne(y.credential,e=>ot(e).value),...y.credentials?{credentials:y.credentials.map(ot)}:{},secrets:y.secrets??void 0,config:y.config??void 0,...d?{app:ne(y.app,e=>$(G(se,e.row),e.credentials)),workspace:y.workspace??void 0,runner:ne(y.runner,e=>st(e).value),resolved:ne(y.resolved,e=>({id:e.key,value:e.value})),tokens:ut(b.organizationId,y.tokens??{})}:{}}}:{}}}async touch(e,t,n,r,i,a=!1){return(await this.authorize(t,n,r,e,i,{allowCompleted:a}))?.status}async patchTask(e,t,n,r,i={}){let{answer:a,approvals:o,archivedAt:c,autoArchived:l,lastSeenAt:u,logsComplete:d,resolvedModel:f,...p}=n,[m]=await this.db.transaction(async l=>{let[m]=o?await l.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`):[];return l.update(N).set({...Object.fromEntries(Object.entries(p).map(([e,t])=>[e,t??null])),...o?{context:_`jsonb_set(coalesce(${N.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(s(m?.context?.approvals??[],o))}::jsonb)`}:{},...Object.hasOwn(n,`logsComplete`)?{logsComplete:d??null}:Object.hasOwn(n,`handle`)?{logsComplete:_`case when ${N.handle} is distinct from ${n.handle??null}::text then null else ${N.logsComplete} end`}:{},...a===void 0?{}:{answer:_`coalesce(${N.answer}, '[]'::jsonb) || ${JSON.stringify([a])}::jsonb`},...f?{engineSettings:_`coalesce(${N.engineSettings}, '{}'::jsonb) || ${JSON.stringify({resolvedModel:f})}::jsonb`}:{},...Object.hasOwn(n,`archivedAt`)?{archivedAt:c===void 0?null:new Date(c)}:{},...Object.hasOwn(n,`lastSeenAt`)?{lastSeenAt:u===void 0?null:new Date(u)}:{},updatedAt:new Date(r)}).where(this.fence(e,t,i)).returning({id:N.id})});return!!m}async setRequestedBy(e,t,n,r){let[i]=await this.db.update(N).set({requestedBy:n,audience:_`case when ${N.audience} = 'dm:' then ${`dm:${n}`} else ${N.audience} end`,updatedAt:new Date(r)}).where(h(this.where(e,t),S(N.requestedBy))).returning({id:N.id});return!!i}async archiveStopped(e,t,i){await this.db.update(N).set({archivedAt:new Date(t),updatedAt:new Date(t)}).where(h(e===void 0?void 0:y(N.organizationId,e),i?p(N.publicId,i):void 0,S(N.archivedAt),p(N.status,[...n]),re(_`coalesce(${N.finishedAt}, ${N.updatedAt})`,_`${new Date(t-r).toISOString()}::timestamptz`)))}async requeue(e,t,n,r={}){let[i]=await this.db.update(N).set({status:`queued`,handle:null,tokenHash:null,lastSeenAt:null,logsComplete:null,updatedAt:new Date(n)}).where(this.fence(e,t,{...r,statuses:[`running`,`waiting`]})).returning({id:N.id});return!!i}connectionLock(e,t){return _`select pg_advisory_xact_lock(3, hashtext(${`app:${e}:connections:${t}`}))`}async deleteTask(e,t,n){let[r]=await z(this.db,[this.connectionLock(e,t)],_`
95
95
  with gone as (
96
96
  delete from ${N} where ${this.fence(e,t,n)}
97
- returning id, organization_id, public_id, audience, requested_by
97
+ returning id, organization_id, public_id, audience, requested_by, parent
98
98
  ), marked as (
99
- insert into ${ue} (organization_id, public_id, audience, requested_by, deleted_at)
100
- select organization_id, public_id, audience, requested_by, clock_timestamp() from gone
99
+ insert into ${ue} (organization_id, public_id, audience, requested_by, parent, deleted_at)
100
+ select organization_id, public_id, audience, requested_by, parent, clock_timestamp() from gone
101
101
  ), ${jt(_`select id from gone`)}
102
102
  select count(*)::int as deleted from gone`);return!!r?.deleted}async finish(e,t,n,r,i={}){let a=new Date(r),o=this.db.update(N).set({status:n.status,result:n.result??null,error:n.error??null,tokens:n.tokens??null,lastSeenAt:a,finishedAt:a,updatedAt:a}).where(this.fence(e,t,{...i,statuses:[`queued`,`running`,`waiting`]})).returning({id:N.id}),[s]=await z(this.db,[this.connectionLock(e,t)],_`
103
103
  with finished as (${o.getSQL()}), ${jt(_`select id from finished`)}
@@ -108,7 +108,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
108
108
  update ${N} set status = ${i.status}, result = ${JSON.stringify(i.result??null)}::jsonb,
109
109
  error = ${i.error??null}, tokens = ${JSON.stringify(i.tokens??null)}::jsonb,
110
110
  engine = ${a.engine??null}, model = ${a.model??null}, credential = ${a.credential??null}, runner_ms = coalesce(runner_ms, 0) + ${a.runnerElapsedMs},
111
- token_count = coalesce(token_count, 0) + ${ve(a.tokens)}, usage_tokens = ${Mt(_`usage_tokens`,a.tokens)},
111
+ token_count = coalesce(token_count, 0) + ${Ce(a.tokens)}, usage_tokens = ${Mt(_`usage_tokens`,a.tokens)},
112
112
  last_seen_at = ${o}::timestamptz, finished_at = ${o}::timestamptz, updated_at = ${o}::timestamptz${s}
113
113
  where ${this.fence(e,t,{attempts:n.attempts,tokenHash:n.tokenHash,statuses:[`running`,`waiting`]})}
114
114
  returning id, generation
@@ -120,14 +120,14 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
120
120
  error = case when status = 'queued' then ${t} else error end,
121
121
  inbox_seq = case when status = 'queued' then inbox_seq else inbox_seq + 1 end,
122
122
  cancel_requested_at = ${a}::timestamptz, updated_at = ${a}::timestamptz
123
- where ${this.fence(e,n,{...i,statuses:ye})} returning id, generation, inbox_seq, status
123
+ where ${this.fence(e,n,{...i,statuses:me})} returning id, generation, inbox_seq, status
124
124
  ), ${jt(_`select id from cancelled where status = 'cancelled'`)}, message as (
125
125
  insert into ${P} (task_id, seq, generation, kind, value, at)
126
126
  select id, inbox_seq, generation, 'cancel', 'null'::jsonb, ${a}::timestamptz from cancelled where status in ('running', 'waiting')
127
127
  ) select exists(select 1 from cancelled) as accepted`);return!!o?.accepted}async cancelRequested(e,t){let[n]=await R(this.db,()=>this.db.select({at:N.cancelRequestedAt}).from(N).where(this.where(e,t)));return!!n?.at}filter(e,t){let n=t.status&&t.status!==`waiting`?[t.status]:t.statuses,r=t.q?.trim(),i=r&&`%${r.replace(/[\\%_]/g,`\\$&`)}%`;return h(y(N.organizationId,e),n?p(N.status,n):void 0,t.status===`waiting`?It:void 0,t.agent?y(N.agent,t.agent):void 0,t.source?y(N.source,t.source):void 0,t.parent?y(N.parent,t.parent):void 0,t.runnerId?y(N.runnerId,t.runnerId):void 0,t.archived===void 0?void 0:t.archived?ne(N.archivedAt):S(N.archivedAt),t.viewer===void 0?void 0:x(y(N.audience,``),y(N.requestedBy,t.viewer.id),t.viewer.spaces?t.viewer.spaces.length?p(N.audience,t.viewer.spaces):void 0:_`${N.audience} = any(${Rt(e,t.viewer.id)})`),i?x(g(_`${N.event}->>'text'`,i),g(N.prompt,i),g(N.agent,i),g(N.publicId,i)):void 0)}pageQuery(e,t){let{before:n}=t,r=t.summary?{publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,prompt:N.prompt,access:N.access,requestedBy:N.requestedBy,event:_`case when ${N.event} is not null then jsonb_strip_nulls(jsonb_build_object('integration', ${N.event}->>'integration', 'type', ${N.event}->>'type', 'text', ${N.event}->>'text', 'actor', ${N.event}->'actor')) end`.as(`event`),context:_`jsonb_strip_nulls(jsonb_build_object('user', ${N.context}->'user', 'approvals', ${N.context}->'approvals', 'turns', case when ${N.context}->'turns'->0 is not null then jsonb_build_array(jsonb_build_object('prompt', ${N.context}->'turns'->0->'prompt')) end))`.as(`context`),usage:_`jsonb_strip_nulls(case when coalesce(${N.engineSettings}->>'engine', ${N.engineSettings}->>'model') is not null then jsonb_build_object('engine', ${N.engineSettings}->>'engine', 'model', ${N.engineSettings}->>'model', 'effort', ${N.engineSettings}->>'effort') else jsonb_build_object('model', ${N.definition}->>'model') end || jsonb_build_object('resolvedModel', ${N.engineSettings}->>'resolvedModel'))`.as(`usage`),status:N.status,attempts:N.attempts,approval:N.approval,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,lastSeenAt:N.lastSeenAt,updatedAt:N.updatedAt}:d(N),i=this.db.select(r).from(N).where(h(this.filter(e,t),t.since===void 0?void 0:x(v(N.updatedAt,new Date(t.since)),t.sinceId?h(y(N.updatedAt,new Date(t.since)),v(Ft(N.publicId),t.sinceId)):void 0),n?this.after(n):void 0)).orderBy(...t.since===void 0?zt(N):Bt(N));return t.limit===void 0?i:i.limit(t.limit)}after(e){if(`updatedAt`in e)return x(v(N.updatedAt,new Date(e.updatedAt)),h(y(N.updatedAt,new Date(e.updatedAt)),v(Ft(N.publicId),e.id)));let t=_`(${Pt(N.createdAt)}, ${Ft(N.publicId)}) < (${new Date(e.createdAt).toISOString()}::timestamptz, ${e.id})`;return x(v(Nt(N.status),e.rank),h(y(Nt(N.status),e.rank),t))}record(e,t){return t?K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,prompt:e.prompt,access:e.access,requestedBy:e.requestedBy,event:e.event,context:Object.keys(e.context??{}).length?e.context:void 0,usage:Object.keys(e.usage??{}).length?e.usage:void 0}),status:e.status,attempts:e.attempts,approval:e.approval,archivedAt:e.archivedAt?U(e.archivedAt):void 0,createdAt:U(e.createdAt),startedAt:e.startedAt?U(e.startedAt):void 0,finishedAt:e.finishedAt?U(e.finishedAt):void 0,lastSeenAt:e.lastSeenAt?U(e.lastSeenAt):void 0,updatedAt:U(e.updatedAt)}):Ie(e)}async list(e,t={}){return(await R(this.db,()=>this.pageQuery(e,t))).map(e=>this.record(e,t.summary))}async memberSpaces(e,t,n){return n.length?(await R(this.db,()=>this.db.selectDistinct({audience:Lt}).from(k).innerJoin(M,y(M.spaceId,k.id)).innerJoin(O,h(y(O.platform,k.integration),y(O.platformUserId,M.member))).where(h(y(k.organizationId,e),y(O.userId,t),p(Lt,n))))).map(e=>e.audience):[]}async listedSpaces(e,t){return(await R(this.db,()=>this.db.select({integration:k.integration,appId:k.app,installationId:k.installation,account:k.account,kind:k.kind,id:k.space}).from(k).where(h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),_`exists (select 1 from ${N} where ${N.organizationId} = ${k.organizationId} and ${N.audience} = ${Lt})`)))).map(({account:e,kind:t,id:n,...r})=>({...r,...e===r.installationId?{}:{account:e},space:{kind:t,id:n}}))}async linkedMembers(e,t){return(await R(this.db,()=>this.db.select({id:O.platformUserId,login:O.login}).from(O).where(h(y(O.platform,t),_`${O.organizations} @> ${JSON.stringify([e])}::jsonb`)))).map(e=>K(e))}async spaceSynced(e,t){let[n]=await R(this.db,()=>this.db.select({syncedAt:k.syncedAt}).from(k).where(this.space(e,t)));return n?.syncedAt?U(n.syncedAt):void 0}async claimSpace(e,t,n,r=!1){let i=new Date(n).toISOString(),[a]=await q(this.db,_`insert into ${k} (organization_id, integration, app, installation, account, kind, space, claimed_at)
128
128
  values (${e}, ${t.integration}, ${t.appId}, ${t.installationId}, ${t.account??t.installationId}, ${t.space?.kind??`channel`}, ${t.space?.id??``}, ${i}::timestamptz)
129
129
  on conflict (organization_id, integration, account, space) do update set claimed_at = excluded.claimed_at
130
- where ${r} or ${k.claimedAt} is null or ${k.claimedAt} < ${new Date(n-ge).toISOString()}::timestamptz
130
+ where ${r} or ${k.claimedAt} is null or ${k.claimedAt} < ${new Date(n-be).toISOString()}::timestamptz
131
131
  returning id`);return!!a}async saveSpaceMembers(e,t,n,r){let i=h(this.space(e,t),y(k.claimedAt,new Date(r)));if(!n){await this.db.update(k).set({claimedAt:null}).where(i);return}await z(this.db,[],_`
132
132
  with saved as (
133
133
  update ${k} set synced_at = ${new Date(r).toISOString()}::timestamptz, claimed_at = null
@@ -137,7 +137,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
137
137
  )
138
138
  insert into ${M} (space_id, member)
139
139
  select saved.id, member from saved, unnest(${_.param(n)}::text[]) as member
140
- on conflict do nothing`)}async spaceChanged(e,t,n,r){let i=_`select id from ${k} where ${this.space(e,t)}`;if((n.joined||n.left)&&await this.db.update(k).set({claimedAt:null}).where(this.space(e,t)),n.joined&&await this.db.execute(_`insert into ${M} (space_id, member) select id, ${n.joined} from (${i}) as saved on conflict do nothing`),n.left&&await this.db.execute(_`delete from ${M} where space_id in (${i}) and member = ${n.left}`),n.private===void 0)return;let a=_`to_jsonb(${n.private}::boolean)`;await this.db.update(N).set({audience:n.private?_e(t):``,event:_`case when ${N.event}->'space' is not null then jsonb_set(${N.event}, '{space,private}', ${a}) else ${N.event} end`,updatedAt:new Date(r)}).where(h(y(N.organizationId,e),y(N.space,be(t)),_`${N.audience} not like 'dm:%'`)),await this.db.delete(k).where(this.space(e,t))}space(e,t){return h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),y(k.space,t.space?.id??``))}async changes(e,t){if(!e.length)return{rows:[],deleted:[]};let n=e.map(e=>e.organizationId),r=t=>{let n=e.flatMap(e=>e[t].map(()=>e.organizationId)),r=e.flatMap(e=>e[t]);return r.length?_`(${N.organizationId}, ${N.publicId}) in (select * from unnest(${_.param(n)}::text[], ${_.param(r)}::text[]))`:void 0},i=r(`ids`)??_`false`,a=r(`fresh`),[o,s]=await Promise.all([R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,requestedBy:N.requestedBy,audience:N.audience,parent:N.parent,status:N.status,approval:N.approval,approvals:_`case when ${i} then ${N.context}->'approvals' end`,answer:_`case when ${i} then ${N.answer} end`,result:_`case when ${i} then ${N.result} end`,error:_`case when ${i} then ${N.error} end`,attempts:N.attempts,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,updatedAt:N.updatedAt}).from(N).where(x(h(p(N.organizationId,n),v(N.updatedAt,new Date(t))),a))),R(this.db,()=>this.db.select().from(ue).where(h(p(ue.organizationId,n),v(ue.deletedAt,new Date(t)))))]);return{rows:o.map(e=>({organizationId:e.organizationId,status:K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,requestedBy:e.requestedBy,audience:e.audience,parent:e.parent}),status:e.status,approval:e.approval,approvals:Array.isArray(e.approvals)?e.approvals:void 0,answer:Array.isArray(e.answer)?e.answer:void 0,result:e.result,error:e.error,attempts:e.attempts,archivedAt:e.archivedAt&&U(e.archivedAt),createdAt:U(e.createdAt),startedAt:e.startedAt&&U(e.startedAt),finishedAt:e.finishedAt&&U(e.finishedAt),updatedAt:U(e.updatedAt)})})),deleted:s.map(e=>({organizationId:e.organizationId,id:e.publicId,at:U(e.deletedAt),...e.audience===null?{}:{audience:e.audience},...e.requestedBy===null?{}:{requestedBy:e.requestedBy}}))}}async logTails(e,t){if(!e.length)return[];let n=_`(line->>'seq')::int`,r=await R(this.db,()=>q(this.db,_`select tail.n::int as n, ${N.status} as status, ${N.approval} as approval,
140
+ on conflict do nothing`)}async spaceChanged(e,t,n,r){let i=_`select id from ${k} where ${this.space(e,t)}`;if((n.joined||n.left)&&await this.db.update(k).set({claimedAt:null}).where(this.space(e,t)),n.joined&&await this.db.execute(_`insert into ${M} (space_id, member) select id, ${n.joined} from (${i}) as saved on conflict do nothing`),n.left&&await this.db.execute(_`delete from ${M} where space_id in (${i}) and member = ${n.left}`),n.private===void 0)return;let a=_`to_jsonb(${n.private}::boolean)`;await this.db.update(N).set({audience:n.private?Ee(t):``,event:_`case when ${N.event}->'space' is not null then jsonb_set(${N.event}, '{space,private}', ${a}) else ${N.event} end`,updatedAt:new Date(r)}).where(h(y(N.organizationId,e),y(N.space,ve(t)),_`${N.audience} not like 'dm:%'`)),await this.db.delete(k).where(this.space(e,t))}space(e,t){return h(y(k.organizationId,e),y(k.integration,t.integration),y(k.account,t.account??t.installationId),y(k.space,t.space?.id??``))}async changes(e,t){if(!e.length)return{rows:[],deleted:[]};let n=e.map(e=>e.organizationId),r=t=>{let n=e.flatMap(e=>e[t].map(()=>e.organizationId)),r=e.flatMap(e=>e[t]);return r.length?_`(${N.organizationId}, ${N.publicId}) in (select * from unnest(${_.param(n)}::text[], ${_.param(r)}::text[]))`:void 0},i=r(`ids`)??_`false`,a=r(`fresh`),[o,s]=await Promise.all([R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,source:N.source,agent:N.agent,flow:N.flow,requestedBy:N.requestedBy,audience:N.audience,parent:N.parent,status:N.status,approval:N.approval,approvals:_`case when ${i} then ${N.context}->'approvals' end`,answer:_`case when ${i} then ${N.answer} end`,result:_`case when ${i} then ${N.result} end`,error:_`case when ${i} then ${N.error} end`,attempts:N.attempts,archivedAt:N.archivedAt,createdAt:N.createdAt,startedAt:N.startedAt,finishedAt:N.finishedAt,updatedAt:N.updatedAt}).from(N).where(x(h(p(N.organizationId,n),v(N.updatedAt,new Date(t))),a))),R(this.db,()=>this.db.select().from(ue).where(h(p(ue.organizationId,n),v(ue.deletedAt,new Date(t)))))]);return{rows:o.map(e=>({organizationId:e.organizationId,status:K({task:K({id:e.publicId,source:e.source,agent:e.agent,flow:e.flow,requestedBy:e.requestedBy,audience:e.audience,parent:e.parent}),status:e.status,approval:e.approval,approvals:Array.isArray(e.approvals)?e.approvals:void 0,answer:Array.isArray(e.answer)?e.answer:void 0,result:e.result,error:e.error,attempts:e.attempts,archivedAt:e.archivedAt&&U(e.archivedAt),createdAt:U(e.createdAt),startedAt:e.startedAt&&U(e.startedAt),finishedAt:e.finishedAt&&U(e.finishedAt),updatedAt:U(e.updatedAt)})})),deleted:s.map(e=>({organizationId:e.organizationId,id:e.publicId,at:U(e.deletedAt),...e.audience===null?{}:{audience:e.audience},...e.requestedBy===null?{}:{requestedBy:e.requestedBy},...e.parent===null?{}:{parent:e.parent}}))}}async logTails(e,t){if(!e.length)return[];let n=_`(line->>'seq')::int`,r=await R(this.db,()=>q(this.db,_`select tail.n::int as n, ${N.status} as status, ${N.approval} as approval,
141
141
  ${N.audience} as audience, ${N.requestedBy} as requested_by,
142
142
  (select coalesce(jsonb_agg(line order by ${n}), '[]'::jsonb) from (
143
143
  select line from ${F} cross join jsonb_array_elements(${F.lines}) line
@@ -145,7 +145,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
145
145
  order by ${n} limit ${t}) page) as lines
146
146
  from unnest(${_.param(e.map(e=>e.organizationId))}::text[], ${_.param(e.map(e=>e.id))}::text[], ${_.param(e.map(e=>e.after))}::int[])
147
147
  with ordinality as tail(organization_id, public_id, after, n)
148
- join ${N} on ${N.organizationId} = tail.organization_id and ${N.publicId} = tail.public_id`)),i=new Map(r.map(e=>[e.n-1,e]));return e.map((e,t)=>{let n=i.get(t);return n&&{status:K({status:n.status,approval:n.approval,task:K({id:e.id,audience:n.audience,requestedBy:n.requested_by})}),lines:n.lines.map(e=>{let t=l(e.line);return t?{...e,entry:t}:e})}})}countQuery(e,t){return this.db.select({all:_`count(*)::int`.as(`all`),active:_`(count(*) filter (where ${p(N.status,ye)}))::int`.as(`active`),waiting:_`(count(*) filter (where ${It}))::int`.as(`waiting`)}).from(N).where(this.filter(e,t))}async counts(e,t={}){let[n]=await R(this.db,()=>this.countQuery(e,t));return n??{all:0,active:0,waiting:0}}async activeCounts(e){return(await R(this.db,()=>this.db.select({audience:N.audience,requestedBy:N.requestedBy,active:_`count(*)::int`}).from(N).where(h(y(N.organizationId,e),p(N.status,ye),S(N.archivedAt))).groupBy(N.audience,N.requestedBy))).map(e=>K(e))}async listWithCounts(e,t){let n=this.db.$with(`totals`).as(this.countQuery(e,t)),r=this.db.$with(`page`).as(this.pageQuery(e,{...t,limit:t.limit??20})),i=Object.fromEntries(Object.keys(r._.selectedFields).map(e=>[e,r[e]])),a=await R(this.db,()=>this.db.with(n,r).select({...i,all:n.all,active:n.active,waiting:n.waiting}).from(n).leftJoin(r,_`true`).orderBy(...t.since===void 0?zt({status:i.status,createdAt:i.createdAt,publicId:i.publicId}):Bt({updatedAt:i.updatedAt,publicId:i.publicId}))),{all:o=0,active:s=0,waiting:c=0}=a[0]??{};return{items:a.filter(e=>e.publicId!==null&&e.publicId!==void 0).map(e=>this.record(e,t.summary)),counts:{all:o,active:s,waiting:c}}}async runningCount(){let[e]=await R(this.db,()=>this.db.select({value:_`count(*)::int`}).from(N).where(p(N.status,[`running`,`waiting`])));return e?.value??0}async running(){return(await R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,runner:N.runnerKind,runnerId:N.runnerId,status:N.status,attempts:N.attempts,generation:N.generation,handle:N.handle,tokenHash:N.tokenHash,lastSeenAt:N.lastSeenAt,logsComplete:N.logsComplete,startedAt:N.startedAt,cancelRequestedAt:N.cancelRequestedAt,updatedAt:N.updatedAt}).from(N).where(p(N.status,[`running`,`waiting`])))).map(({organizationId:e,publicId:t,runner:n,runnerId:r,...i})=>({organizationId:e,status:K({...i,task:K({id:t,runner:n,runnerId:r}),lastSeenAt:i.lastSeenAt&&U(i.lastSeenAt),startedAt:i.startedAt&&U(i.startedAt),cancelRequestedAt:i.cancelRequestedAt&&U(i.cancelRequestedAt),updatedAt:U(i.updatedAt)})}))}async appendLogs(e,t,n,r,i,a,o){let s=n.length?_`, inserted as (
148
+ join ${N} on ${N.organizationId} = tail.organization_id and ${N.publicId} = tail.public_id`)),i=new Map(r.map(e=>[e.n-1,e]));return e.map((e,t)=>{let n=i.get(t);return n&&{status:K({status:n.status,approval:n.approval,task:K({id:e.id,audience:n.audience,requestedBy:n.requested_by})}),lines:n.lines.map(e=>{let t=l(e.line);return t?{...e,entry:t}:e})}})}countQuery(e,t){return this.db.select({all:_`count(*)::int`.as(`all`),active:_`(count(*) filter (where ${p(N.status,me)}))::int`.as(`active`),waiting:_`(count(*) filter (where ${It}))::int`.as(`waiting`)}).from(N).where(this.filter(e,t))}async counts(e,t={}){let[n]=await R(this.db,()=>this.countQuery(e,t));return n??{all:0,active:0,waiting:0}}async activeCounts(e){return(await R(this.db,()=>this.db.select({audience:N.audience,requestedBy:N.requestedBy,active:_`count(*)::int`}).from(N).where(h(y(N.organizationId,e),p(N.status,me),S(N.archivedAt))).groupBy(N.audience,N.requestedBy))).map(e=>K(e))}async listWithCounts(e,t){let n=this.db.$with(`totals`).as(this.countQuery(e,t)),r=this.db.$with(`page`).as(this.pageQuery(e,{...t,limit:t.limit??20})),i=Object.fromEntries(Object.keys(r._.selectedFields).map(e=>[e,r[e]])),a=await R(this.db,()=>this.db.with(n,r).select({...i,all:n.all,active:n.active,waiting:n.waiting}).from(n).leftJoin(r,_`true`).orderBy(...t.since===void 0?zt({status:i.status,createdAt:i.createdAt,publicId:i.publicId}):Bt({updatedAt:i.updatedAt,publicId:i.publicId}))),{all:o=0,active:s=0,waiting:c=0}=a[0]??{};return{items:a.filter(e=>e.publicId!==null&&e.publicId!==void 0).map(e=>this.record(e,t.summary)),counts:{all:o,active:s,waiting:c}}}async runningCount(){let[e]=await R(this.db,()=>this.db.select({value:_`count(*)::int`}).from(N).where(p(N.status,[`running`,`waiting`])));return e?.value??0}async running(){return(await R(this.db,()=>this.db.select({organizationId:N.organizationId,publicId:N.publicId,runner:N.runnerKind,runnerId:N.runnerId,status:N.status,attempts:N.attempts,generation:N.generation,handle:N.handle,tokenHash:N.tokenHash,lastSeenAt:N.lastSeenAt,logsComplete:N.logsComplete,startedAt:N.startedAt,cancelRequestedAt:N.cancelRequestedAt,updatedAt:N.updatedAt}).from(N).where(p(N.status,[`running`,`waiting`])))).map(({organizationId:e,publicId:t,runner:n,runnerId:r,...i})=>({organizationId:e,status:K({...i,task:K({id:t,runner:n,runnerId:r}),lastSeenAt:i.lastSeenAt&&U(i.lastSeenAt),startedAt:i.startedAt&&U(i.startedAt),cancelRequestedAt:i.cancelRequestedAt&&U(i.cancelRequestedAt),updatedAt:U(i.updatedAt)})}))}async appendLogs(e,t,n,r,i,a,o){let s=n.length?_`, inserted as (
149
149
  insert into ${F} (task_id, seq_from, seq_to, lines)
150
150
  select accepted.id, ${n[0].seq}, ${n[n.length-1].seq}, ${JSON.stringify(n)}::jsonb from accepted
151
151
  on conflict (task_id, seq_from) do update set seq_to = excluded.seq_to, lines = excluded.lines
@@ -154,15 +154,15 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
154
154
  update ${N} set log_cursor = ${i.cursor}, log_seq = ${i.seq}, log_bytes = ${i.bytes}
155
155
  where ${this.fence(e,t,o)} and coalesce(log_seq, 0) = ${r.seq} and coalesce(log_cursor, -1) = ${r.cursor}
156
156
  returning id
157
- ) ${s} select exists (select 1 from accepted) as accepted`);return!!c?.accepted}async readInbox(e,t,n,r){return(await R(this.db,()=>this.db.select({seq:P.seq,generation:P.generation,at:P.at,kind:P.kind,value:P.value}).from(P).innerJoin(N,y(N.id,P.taskId)).where(h(this.where(e,t),y(N.generation,n),p(N.status,ye),y(P.generation,n),_`${P.seq} > ${r}`)).orderBy(b(P.seq)).limit(100))).map(e=>({...e,at:U(e.at)}))}async appendInbox(e,t,n,r,i,c,l,u){return u?this.db.transaction(async d=>{let[f]=await d.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`);for(let e of u){let t=o(f?.context?.approvals?.find(t=>t.id===e.id),e);if(t)throw new a(t)}let p=s(f?.context?.approvals??[],u);return this.insertInbox(d,e,t,n,r,i,c,l,p)}):this.insertInbox(this.db,e,t,n,r,i,c,l)}async insertInbox(e,t,n,r,i,a,o,s,c){let l=s?_`select key, value from ${E}
157
+ ) ${s} select exists (select 1 from accepted) as accepted`);return!!c?.accepted}async readInbox(e,t,n,r){return(await R(this.db,()=>this.db.select({seq:P.seq,generation:P.generation,at:P.at,kind:P.kind,value:P.value}).from(P).innerJoin(N,y(N.id,P.taskId)).where(h(this.where(e,t),y(N.generation,n),p(N.status,me),y(P.generation,n),_`${P.seq} > ${r}`)).orderBy(b(P.seq)).limit(100))).map(e=>({...e,at:U(e.at)}))}async appendInbox(e,t,n,r,i,c,l,u){return u?this.db.transaction(async d=>{let[f]=await d.select({context:N.context}).from(N).where(this.where(e,t)).for(`update`);for(let e of u){let t=o(f?.context?.approvals?.find(t=>t.id===e.id),e);if(t)throw new a(t)}let p=s(f?.context?.approvals??[],u);return this.insertInbox(d,e,t,n,r,i,c,l,p)}):this.insertInbox(this.db,e,t,n,r,i,c,l)}async insertInbox(e,t,n,r,i,a,o,s,c){let l=s?_`select key, value from ${E}
158
158
  where key = ${X(t,`delivery`,s.key)}
159
159
  and value->'sending'->>'owner' = ${s.owner}
160
- and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&me(s),d=u?_`, context = coalesce(${N.context}, '{}'::jsonb) || jsonb_build_object('admissions',
160
+ and (expires_at is null or expires_at > ${new Date(a).toISOString()}::timestamptz) for update`:_`select null`,u=s&&pe(s),d=u?_`, context = coalesce(${N.context}, '{}'::jsonb) || jsonb_build_object('admissions',
161
161
  coalesce(${N.context}->'admissions', '{}'::jsonb) || ${JSON.stringify(u)}::jsonb)`:c?_`, context = jsonb_set(coalesce(${N.context}, '{}'::jsonb), '{approvals}', ${JSON.stringify(c)}::jsonb)`:_``,f=_`(${E.value}->'sending'->>'count')::int`,p=_`coalesce((select n from jsonb_array_elements(${E.value}->'items') with ordinality e(item,n)
162
162
  where n <= ${f} and item->>'admission' = ${s?.through??null}::text limit 1), 0)`,[m]=await q(e,_`
163
163
  with held as materialized (${l}), next as (
164
164
  update ${N} set inbox_seq = inbox_seq + 1, updated_at = ${new Date(a).toISOString()}::timestamptz${d}
165
- where ${this.fence(t,n,{generation:o,statuses:ye})}
165
+ where ${this.fence(t,n,{generation:o,statuses:me})}
166
166
  and exists(select 1 from held) returning id, inbox_seq, generation
167
167
  ), admitted as (
168
168
  insert into ${P} (task_id, seq, generation, kind, value, at)
@@ -174,7 +174,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
174
174
  (${E.value}->'sending') || jsonb_build_object('count', ${f} - ${p}, 'until', ${a+Me}::bigint)) else '{}'::jsonb end
175
175
  where key in (select key from held) and exists(select 1 from admitted)
176
176
  )`:_``}
177
- select (select seq from admitted) as seq, exists(select 1 from held) as held`);if(s&&!m?.held)throw new de;return m?.seq==null?void 0:{seq:m.seq,generation:o,at:a,kind:r,value:i}}async fetchInbox(e,t,n,r,i){let[a]=await R(this.db,()=>q(this.db,_`
177
+ select (select seq from admitted) as seq, exists(select 1 from held) as held`);if(s&&!m?.held)throw new xe;return m?.seq==null?void 0:{seq:m.seq,generation:o,at:a,kind:r,value:i}}async fetchInbox(e,t,n,r,i){let[a]=await R(this.db,()=>q(this.db,_`
178
178
  select coalesce(jsonb_agg(jsonb_build_object('seq', i.seq, 'generation', i.generation, 'at', extract(epoch from i.at) * 1000, 'kind', i.kind, 'value', i.value) order by i.seq) filter (where i.seq is not null), '[]'::jsonb) as entries
179
179
  from ${N} left join ${P} i on i.task_id = ${N.id} and i.generation = ${N.generation} and i.seq > ${i}
180
180
  where ${this.fence(e,t,{tokenHash:n,attempts:r,statuses:[`running`,`waiting`]})} group by ${N.id}`));return a?.entries}async ackInbox(e,n,r,i){if(i.generation!==void 0&&i.generation!==r.generation)return;let[a]=await z(this.db,[this.connectionLock(e,n)],_`
@@ -205,7 +205,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
205
205
  name = ${d.name}, description = ${d.description??null}, problems = null, source = ${d.source},
206
206
  repo = ${d.repo??null}, path = ${d.path??null},
207
207
  current_version = ${l?_`${u.version}`:_`(select version from published)`}, updated_at = ${V(d.updatedAt).toISOString()}::timestamptz
208
- where id = ${a.id}`),{record:d,version:u,unchanged:l}})}function Ut(e){let t=C;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:Ve(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,problems:r.problems??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,engineSettings:r.settings??null,createdAt:V(r.createdAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.slug,n)))}}}async function Wt(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(w).values({agentId:_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${t.slice(0,r)})`,version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:V(n.createdAt)}).onConflictDoNothing().returning({id:w.id})).length>0}function Gt(e){let t=w,n=_`${C.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>h(y(C.slug,e),n===void 0?void 0:r?y(t.version,n):v(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:C.slug,key:n}).from(t).innerJoin(C,y(C.id,t.agentId)).where(h(e.mine(C.organizationId),r)).orderBy(b(C.slug),b(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:He(e,t)}))},put:async(t,n)=>{await Wt(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${n.slice(0,r)})`;await e.db.delete(t).where(h(y(t.agentId,i),y(t.version,Number(n.slice(r+1)))))}}}const Kt=(e,t)=>_`(select ${N.id} from ${N} where ${N.organizationId} = ${e.organizationId} and ${N.publicId} = ${t})`;function qt(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:Ie(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,{audience:s,space:c}=Te(o),l={source:o.source,status:r.status,agent:o.agent,flow:o.flow,runnerKind:o.runner,access:o.access??null,installationId:o.event?_`(select id from ${Y} where organization_id = ${e.organizationId} and key = ${`${o.event.appId}:${o.event.installationId}`})`:null,event:o.event??null,audience:s,space:c??null,parent:o.parent??null,connections:o.connections??null,models:o.models??null,name:o.name??null,cwd:o.cwd??null,prompt:o.prompt??null,args:o.args??null,mcp:o.mcp??null,appendSystem:o.appendSystem??null,addDirs:o.addDirs??null,author:o.author??null,definition:o.definition,requestedBy:o.requestedBy??null,runnerId:o.runnerId??null,engineSettings:o.usage??null,tools:o.tools,context:o.context??null,files:o.files??null,failureReply:o.failureReply??null,notice:o.notice??null,taskUrl:o.taskUrl??null,settingsUrl:o.settingsUrl??null,result:r.result??null,error:r.error??null,fallbacks:r.fallbacks??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:V(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,logsComplete:r.logsComplete??null,archivedAt:r.archivedAt===void 0?null:V(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:V(r.createdAt),startedAt:r.startedAt===void 0?null:V(r.startedAt),finishedAt:r.finishedAt===void 0?null:V(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:V(r.cancelRequestedAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...l}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...l,archivedAt:a.unarchive?l.archivedAt:_`coalesce(${t.archivedAt}, ${l.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}async function Jt(e,t){return(await e.db.select({engine:le.engine,conversation:le.conversation,savedAt:le.savedAt}).from(le).innerJoin(N,y(N.id,le.taskId)).where(h(e.mine(N.organizationId),y(N.publicId,t))).orderBy(b(le.savedAt))).map(e=>({...e,savedAt:U(e.savedAt)}))}function Yt(e){let t=le,n=_`${N.publicId} || ':' || ${t.conversation}`,r=e=>[e.slice(0,e.indexOf(`:`)),e.slice(e.indexOf(`:`)+1)];return{key:n,where:({id:n,prefix:i})=>{let[a,o]=r(n??i??``);return h(e.mine(N.organizationId),y(N.publicId,a),n===void 0?void 0:y(t.conversation,o))},rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(t.savedAt));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:K({engine:e.engine,conversation:e.conversation,data:e.data,state:e.state,savedAt:U(e.savedAt)})}))},put:async(n,i)=>{let a={engine:i.engine,data:i.data,state:i.state??null,savedAt:V(i.savedAt)};await e.db.insert(t).values({taskId:Kt(e,r(n)[0]),conversation:i.conversation,...a}).onConflictDoUpdate({target:[t.taskId,t.conversation],set:a})},delete:async n=>{let[i,a]=r(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,i)),y(t.conversation,a)))}}}function Xt(e){let t=F,n=_`(line->>'seq')::int`,r=_`${N.publicId} || ':' || lpad(${n}::text, 6, '0')`;return{key:r,split:(r,i,a)=>h(e.mine(N.organizationId),y(N.publicId,r),i===void 0?void 0:a?te(t.seqTo,i):v(t.seqTo,i),i===void 0?void 0:a?y(n,i):v(n,i)),rows:async(i,a)=>{let o=e.db.select({key:r,line:_`line`}).from(t).innerJoin(N,y(N.id,t.taskId)).innerJoin(_`jsonb_array_elements(${t.lines}) line`,_`true`).where(i).orderBy(b(N.publicId),b(n));return(await(a===void 0?o:o.limit(a))).map(({key:e,line:t})=>({id:e,value:{at:t.at,level:t.level,line:t.line}}))},put:async(t,n)=>{let[r,i]=B(t);await Zt(e,r,[{seq:i,...n}])},delete:async n=>{let[r,i]=B(n);await e.db.update(t).set({lines:_`(select coalesce(jsonb_agg(line), '[]'::jsonb) from jsonb_array_elements(${t.lines}) line where ${i} <> ${i})`}).where(h(y(t.taskId,Kt(e,r)),te(t.seqTo,i),f(t.seqFrom,i)))}}}async function Zt(e,t,n){n.length&&await e.db.insert(F).values({taskId:Kt(e,t),seqFrom:n[0].seq,seqTo:n[n.length-1].seq,lines:n}).onConflictDoUpdate({target:[F.taskId,F.seqFrom],set:{seqTo:_`excluded.seq_to`,lines:_`excluded.lines`}})}function Qt(e){let t=P,n=_`${N.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>h(e.mine(N.organizationId),y(N.publicId,n),r===void 0?void 0:i?y(t.seq,r):v(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(N.publicId),b(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:U(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{await e.db.insert(t).values({taskId:Kt(e,n.slice(0,n.lastIndexOf(`:`))),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:V(r.at)})},delete:async n=>{let[r,i]=B(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,r)),y(t.seq,i)))}}}function $t(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,installationKey:Y.key}).from(t).leftJoin(Y,y(Y.id,t.installationId)).where(h(e.mine(t.organizationId),ne(t.runnerMs),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).flatMap(({row:e,installationKey:t})=>{let n=Ue(e,t);return n?[{id:e.publicId,value:n}]:[]})},put:async(n,r)=>{let i=B(n)?.[0]??n;await e.db.update(t).set({engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokenCount:ve(r.tokens),usageTokens:r.tokens??null,finishedAt:V(r.at)}).where(h(e.mine(t.organizationId),y(t.publicId,i)))},delete:async n=>{await e.db.update(t).set({engine:null,model:null,runnerMs:null,tokenCount:null,usageTokens:null}).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}var en=e({DrizzleStore:()=>tn,taskSecretRows:()=>nn}),tn=class e{db;organizationId;now;encryption;locks;notifications;recordChannel(e,t){return`record_${Ge(`sha256`).update(JSON.stringify([this.organizationId,e,t])).digest(`hex`).slice(0,48)}`}notification(e,t){return this.notifications?{notified:_`pg_notify(${this.recordChannel(e,t)}, '')`}:void 0}async watch(e,t){let n=i(),r=this.db.$client,a=r?.listen?await r.listen(this.recordChannel(e,t),n.notify,n.notify).catch(()=>void 0):void 0;return{...n,close(){a?.unlisten().catch(()=>{}),n.close()}}}publishAgent=(e,t,n)=>Ht(this,e,t,n);kinds;constructor(e,t,n=Date.now,r={},i,a=!!e.$client?.unsafe){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.locks=i,this.notifications=a,this.kinds={agent:Ut(this),agentversion:Gt(this),app:Ye(this),installation:Qe(this),credential:it(this),task:qt(this),history:Yt(this),tasklog:Xt(this),inbox:Qt(this),usage:$t(this),delivery:ft(this,`delivery`),login:ft(this,`login`),config:mt(this),runner:yt(this),snapshot:ft(this,`snapshot`),connection:_t(this)},this.posts=pt(this),this.secrets=Ct(this)}posts;secrets;kind(e,t){return e===`delivery`&&t?.startsWith(`approval:`)?this.posts:e===`snapshot`&&t&&xt(t)?this.secrets:this.kinds[e]}static async webhookTarget(e,t,n){let[r]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Y,h(y(Y.appId,W.id),y(Y.key,n??``),S(Y.deletedAt))).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(y(W.key,t)));if(r&&!r.installation&&n){let r=`${t}/`,[i]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(Y).innerJoin(W,y(W.id,Y.appId)).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(_`left(${W.key}, ${r.length}) = ${r}`,y(Y.platformInstallId,n.slice(t.length+1)),S(Y.deletedAt))).limit(1));if(i)return{organizationId:i.app.organizationId,app:$(i.app,i.credentials),bound:{organizationId:i.installation.organizationId,installation:Xe(i.installation,i.app,i.token)}}}return r&&{organizationId:r.app.organizationId,app:$(r.app,r.credentials),...r.installation?{bound:{organizationId:r.installation.organizationId,installation:Xe(r.installation,r.app,r.token)}}:{}}}static async appRecord(e,t){let[n]=await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.key,t)));return n&&{organizationId:n.row.organizationId,app:$(n.row,n.credentials)}}static async apps(e,t){return(await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.integration,t)))).map(({row:e,credentials:t})=>({organizationId:e.organizationId,app:$(e,t)}))}static async installationOrganization(e,t){let[n]=await R(e,()=>e.select({organizationId:Y.organizationId}).from(Y).where(y(Y.key,t)));return n?.organizationId}static async installations(e,t){return R(e,()=>e.select({key:Y.key,organizationId:Y.organizationId}).from(Y).where(h(_`${Y.key} like ${`${H(t)}:%`}`,S(Y.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await R(e,()=>e.select({organizationId:N.organizationId}).from(N).where(h(y(N.publicId,t),y(N.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await R(this.db,()=>this.db.select({row:W,credentials:j.value,sharedKey:Z.key}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).where(h(p(W.organizationId,[this.organizationId,``]),p(W.key,e))))).map(e=>({id:e.row.key,value:$(e.row,e.credentials,e.sharedKey)})):[]}async listCredentials(e){let t=D,n=this.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(this.mine(t.organizationId),e.owner?x(S(t.owner),y(t.owner,e.owner)):S(t.owner))).orderBy(b(_`case when ${t.owner} is null then 'workspace' else 'personal' end`),b(t.label));return(await R(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({row:e,sealed:t})=>({id:Ce(e.owner??void 0,e.label),value:et(e,t)}))}async updateMetadata(e,t,n){return e===`installation`&&(`covers`in n||`deletedAt`in n)?this.transaction(`installation:${t}`,async r=>{let i=await r.get(`installation`,t);if(!i)return!1;let a={...i,...n};return a.deletedAt===void 0&&await Ze(r,t,a),r.writeMetadata(e,t,n)}):this.writeMetadata(e,t,n)}async writeMetadata(e,t,n){let r=e===`app`?W:e===`installation`?Y:A,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`self`,`covers`,`repos`,`deletedAt`,`uninstalled`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?V(t):t])),o=e===`runner`?A.publicId:e===`app`?W.key:Y.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?V(n.updatedAt):this.at()}).where(h(this.mine(r.organizationId),y(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){let n=/^connections?[:-]/.test(e)?`${this.organizationId}:${e}`:e;return this.transaction(`app:${n}`,t)}queue(){return new Vt(this.db)}withConfigLock(e){return this.transaction(`config:${this.organizationId}`,e)}async transaction(t,n){let r=_`select pg_advisory_xact_lock(3, hashtext(${t}))`;return this.locks?(this.locks.has(t)||await this.db.execute(r),this.locks.add(t),n(this)):this.db.transaction(async i=>(await i.execute(r),n(new e(i,this.organizationId,this.now,this.encryption,new Set([t]),this.notifications))))}withCredential(e,t,n){if(e===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>ke(e,`runner`,t,n));if(e===`installation`)return this.transaction(`installation:${t}`,async e=>{let r=await $e(e,t),i=await n(r,r?[{id:t,value:r}]:[],e);for(let t of i??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!i?.length});let{owner:r}=he(t);return this.transaction(tt(this,r),async e=>{let i=await nt(e,r),a=i.map(({id:e,value:t})=>({id:e,value:t})),o=await n(a.find(e=>e.id===t)?.value,a,e);for(let t of o??[])await rt(e,i.find(e=>e.id===t.id),t.id,t.value);return!!o?.length})}at(){return V(this.now())}live(e){return x(S(e),v(e,this.at()))}mine(e){return y(e,this.organizationId)}async get(e,t){if(e===`app`)return(await this.getApps([t]))[0]?.value;let n=this.kind(e,t),r=B(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):_`${n.key} = ${t}`;return(await R(this.db,async()=>await n.rows(i,1)))[0]?.value}async patchLogin(e,t,n={}){let[r]=await this.db.update(E).set({value:_`jsonb_strip_nulls(${E.value} || ${JSON.stringify(t)}::jsonb)`}).where(h(y(E.key,X(this.organizationId,`login`,e)),this.live(E.expiresAt),_`(${E.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?p(_`${E.value}->>${e}`,t):_`${E.value}->>${e} = ${t}`))).returning({value:_`${E.value}`,...this.notification(`login`,e)});return r?.value}completeLogin(e,t,n){return fe(this,e,t,n)}async listAgentsWithVersions(e){return(await R(this.db,()=>this.db.select({record:C,version:w}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e===void 0?void 0:Array.isArray(e)?e.length?p(C.slug,e):_`false`:y(C.slug,e))).orderBy(b(C.slug)))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:He(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${H(e.q)}%`:void 0,n=_`${C.source} <> 'builtin'`,r=this.db.select({record:C,version:Pe}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e.slug===void 0?void 0:y(C.slug,e.slug),e.after?_`(${n}, ${C.slug}) > (${e.after[0]===`1`}, ${e.after.slice(2)})`:void 0,e.source?y(C.source,e.source):void 0,t?x(g(C.slug,t),g(C.name,t),g(C.description,t),g(C.repo,t)):void 0,e.platform?_`${w.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(n,b(C.slug));return(await R(this.db,()=>e.limit===void 0?r:r.limit(e.limit))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:Ne(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:Pe}).from(w).innerJoin(C,y(C.id,w.agentId)).where(h(this.mine(C.organizationId),y(C.slug,e),n===void 0?t===void 0?void 0:f(w.version,C.currentVersion):re(w.version,n),t===void 0?void 0:te(w.version,n===void 0?_`${C.currentVersion} + 1 - ${t}`:n-t))).orderBy(b(w.version));return(await R(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:Ne(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);await this.kind(e,t).put(t,n,i,r)}async putMany(e,t,n={}){if(!t.length)return;if(e===`delivery`&&!t.some(e=>e.id.startsWith(`approval:`))){await this.db.insert(E).values(t.map(({id:t,value:r})=>({key:X(this.organizationId,e,t),value:r,expiresAt:n.ttlMs===void 0?null:V(this.now()+n.ttlMs)}))).onConflictDoUpdate({target:E.key,set:{value:_`excluded.value`,expiresAt:_`excluded.expires_at`}});return}if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let[r]=B(t[0].id),i=t.map(e=>{let[t,n]=B(e.id);if(t!==r)throw Error(`A log batch must belong to one task`);return{seq:n,...e.value}});await Zt(this,r,i)}async approvalPostsDue(e,t){let n=T;return R(this.db,()=>this.db.select({organizationId:n.organizationId,id:n.key,value:n.value}).from(n).where(h(this.live(n.expiresAt),x(f(n.retryAt,V(e)),h(S(n.shownAt),f(n.at,V(e-t)))))))}async list(e,t={}){return e===`snapshot`&&!t.ids&&`connections:`.startsWith(t.prefix??``)?[...await this.listRows(e,t,this.kinds.snapshot),...await this.listRows(e,t,this.secrets)].sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)).slice(0,t.limit):this.listRows(e,t,this.kind(e,t.prefix))}async listRows(e,t,n){let r=[];if(t.ids&&r.push(t.ids.length?p(_`${n.key}`,t.ids.map(t=>n.where?X(this.organizationId,e,t):t)):_`false`),t.runner&&r.push(e===`runner`?x(y(A.publicId,t.runner),y(A.name,t.runner)):_`false`),t.defaults&&r.push(e===`runner`?y(A.isDefault,!0):_`false`),t.installation&&r.push(e===`usage`?y(Y.key,t.installation):_`false`),t.agent&&r.push(e===`app`||e===`installation`?y(W.agent,t.agent):e===`agent`?y(C.slug,t.agent):_`false`),t.active&&r.push(e===`installation`?x(S(Y.deletedAt),...t.includeUninstalled?[y(Y.uninstalled,!0)]:[]):void 0),t.apps&&r.push(e===`installation`&&t.apps.length?p(W.key,t.apps):_`false`),Object.hasOwn(t,`visibleTo`)){let n=e===`runner`?A.owner:e===`credential`?D.owner:oe.owner;r.push(x(S(n),t.visibleTo?y(_`${n}`,t.visibleTo):void 0))}if(n.where)return R(this.db,async()=>await n.rows(h(n.where(t),...r),t.limit));let i=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,a=t.after===void 0?void 0:B(t.after);if(n.split&&i&&!i.includes(`:`)&&(t.after===void 0||a?.[0]===i))return R(this.db,async()=>await n.rows(n.split(i,a?.[1]),t.limit));let o=t.prefix?_`${n.key} like ${`${H(t.prefix)}%`}`:void 0,s=t.after?_`${n.key} > ${t.after}`:void 0,c=h(o,s,...r);return R(this.db,async()=>await n.rows(c,t.limit))}async delete(e,t){let n=e===`login`?this.notification(e,t):void 0;if(n){await this.db.delete(E).where(y(E.key,X(this.organizationId,e,t))).returning(n);return}await this.kind(e,t).delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Wt(this,t,n);if(e===`connection`)return this.transaction(gt(this,t),async e=>{let{secret:r,...i}=n,a=r?await Be(e.db,r):null,o=await e.db.insert(oe).values({organizationId:e.organizationId,key:t,owner:i.owner,record:i,secretId:a}).onConflictDoNothing().returning({id:oe.id});return o.length||await J(e.db,[a]),o.length>0});if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);if(t.startsWith(`approval:`)){let e=n,r={value:e,at:V(e.at),shownAt:e.shownAt?V(e.shownAt):null,retryAt:e.retryAt===void 0?null:V(e.retryAt),expiresAt:i};return(await this.db.insert(T).values({organizationId:this.organizationId,key:t,...r}).onConflictDoUpdate({target:[T.organizationId,T.key],set:r,setWhere:f(T.expiresAt,this.at())}).returning({id:T.id})).length>0}return(await this.db.insert(E).values({key:X(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:E.key,set:{value:n,expiresAt:i},setWhere:f(E.expiresAt,this.at())}).returning({key:E.key})).length>0}async claimDeliveryLease(e,t,n){let r=_`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(E).values({key:X(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:E.key,set:{value:_`${E.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:_`${E.expiresAt} <= clock_timestamp()`}).returning({value:E.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t} and ${E.expiresAt} > clock_timestamp()`),a=_`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n.next===void 0?n:_`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:E.key})).length>0}async updateDelivery(e,t,n,r={}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t}`,this.live(E.expiresAt));return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n,expiresAt:r.ttlMs===void 0?null:V(this.now()+r.ttlMs)}).where(i).returning({key:E.key})).length>0}listHistory(e){return Jt(this,e)}async installationApp(e){let[t]=await R(this.db,()=>this.db.select({installation:Y,app:W,credentials:j.value,token:Q.value,sharedKey:Z.key}).from(Y).innerJoin(W,h(y(W.id,Y.appId),p(W.organizationId,[this.organizationId,``]))).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(this.mine(Y.organizationId),y(Y.key,e),S(Y.deletedAt))));return t&&{installation:Xe(t.installation,t.app,t.token),app:$(t.app,t.credentials,t.sharedKey)}}async conversationState(e){let t=ie(E,`unseen`),n=ie(E,`batch`),[r]=await R(this.db,()=>this.db.select({record:E.value,unseen:t.value,batch:n.value,task:N}).from(_`(select 1) as anchor`).leftJoin(E,h(y(E.key,X(this.organizationId,`delivery`,e)),this.live(E.expiresAt))).leftJoin(t,h(y(t.key,X(this.organizationId,`delivery`,`since:${e}`)),this.live(t.expiresAt))).leftJoin(n,h(y(n.key,X(this.organizationId,`delivery`,`batch:${e}`)),this.live(n.expiresAt))).leftJoin(N,h(this.mine(N.organizationId),y(N.publicId,_`${E.value}->>'taskId'`),y(N.flow,`default`))));return{...r?.record?{record:r.record}:{},...r?.unseen?{unseen:r.unseen}:{},...r?.batch?{batch:r.batch}:{},...r?.task?{status:Ie(r.task)}:{}}}async heldTokens(e,t){let[n]=await R(this.db,()=>q(this.db,_`select ${lt(this.organizationId,e,t)} as tokens`));return ut(this.organizationId,n?.tokens??{})}async holdToken(e){let t=E,n=e=>X(this.organizationId,`snapshot`,e);await this.db.execute(_`insert into ${t} (key, value, expires_at)
208
+ where id = ${a.id}`),{record:d,version:u,unchanged:l}})}function Ut(e){let t=C;return{key:t.slug,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.slug));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.slug,value:Ve(e)}))},put:async(n,r)=>{let i={name:r.name,description:r.description??null,problems:r.problems??null,source:r.source,repo:r.repo??null,path:r.path??null,currentVersion:r.currentVersion,engineSettings:r.settings??null,createdAt:V(r.createdAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,slug:n,...i}).onConflictDoUpdate({target:[t.organizationId,t.slug],set:i})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.slug,n)))}}}async function Wt(e,t,n){let r=t.lastIndexOf(`:`);return(await e.db.insert(w).values({agentId:_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${t.slice(0,r)})`,version:Number(t.slice(r+1)),definition:n.definition,systemPrompt:n.systemPrompt,files:n.files??null,commit:n.commit??null,importedFrom:n.importedFrom,createdAt:V(n.createdAt)}).onConflictDoNothing().returning({id:w.id})).length>0}function Gt(e){let t=w,n=_`${C.slug} || ':' || lpad(${t.version}::text, 6, '0')`;return{key:n,split:(e,n,r)=>h(y(C.slug,e),n===void 0?void 0:r?y(t.version,n):v(t.version,n)),rows:async(r,i)=>{let a=e.db.select({row:t,slug:C.slug,key:n}).from(t).innerJoin(C,y(C.id,t.agentId)).where(h(e.mine(C.organizationId),r)).orderBy(b(C.slug),b(t.version));return(await(i===void 0?a:a.limit(i))).map(({row:e,slug:t,key:n})=>({id:n,value:He(e,t)}))},put:async(t,n)=>{await Wt(e,t,n)},delete:async n=>{let r=n.lastIndexOf(`:`),i=_`(select id from ${C} where organization_id = ${e.organizationId} and slug = ${n.slice(0,r)})`;await e.db.delete(t).where(h(y(t.agentId,i),y(t.version,Number(n.slice(r+1)))))}}}const Kt=(e,t)=>_`(select ${N.id} from ${N} where ${N.organizationId} = ${e.organizationId} and ${N.publicId} = ${t})`;function qt(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select().from(t).where(h(e.mine(t.organizationId),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).map(e=>({id:e.publicId,value:Ie(e)}))},put:async(n,r,i,a={})=>{let{task:o}=r,{audience:s,space:c}=Se(o),l={source:o.source,status:r.status,agent:o.agent,flow:o.flow,runnerKind:o.runner,access:o.access??null,installationId:o.event?_`(select id from ${Y} where organization_id = ${e.organizationId} and key = ${`${o.event.appId}:${o.event.installationId}`})`:null,event:o.event??null,audience:s,space:c??null,parent:o.parent??null,connections:o.connections??null,models:o.models??null,name:o.name??null,cwd:o.cwd??null,prompt:o.prompt??null,args:o.args??null,mcp:o.mcp??null,appendSystem:o.appendSystem??null,addDirs:o.addDirs??null,author:o.author??null,definition:o.definition,requestedBy:o.requestedBy??null,runnerId:o.runnerId??null,engineSettings:o.usage??null,tools:o.tools,context:o.context??null,files:o.files??null,failureReply:o.failureReply??null,notice:o.notice??null,taskUrl:o.taskUrl??null,settingsUrl:o.settingsUrl??null,result:r.result??null,error:r.error??null,fallbacks:r.fallbacks??null,tokens:r.tokens??null,handle:r.handle??null,tokenHash:r.tokenHash??null,lastSeenAt:r.lastSeenAt===void 0?null:V(r.lastSeenAt),logCursor:r.logCursor??null,logSeq:r.logSeq??null,logBytes:r.logBytes??null,logsComplete:r.logsComplete??null,archivedAt:r.archivedAt===void 0?null:V(r.archivedAt),approval:r.approval??null,answer:r.answer??null,attempts:r.attempts,generation:r.generation??0,inboxSeq:r.inboxSeq??-1,inboxAck:r.inboxAck?.generation===(r.generation??0)?r.inboxAck.seq:-1,createdAt:V(r.createdAt),startedAt:r.startedAt===void 0?null:V(r.startedAt),finishedAt:r.finishedAt===void 0?null:V(r.finishedAt),cancelRequestedAt:r.cancelRequestedAt===void 0?null:V(r.cancelRequestedAt),updatedAt:V(r.updatedAt)};await e.db.insert(t).values({organizationId:e.organizationId,publicId:n,...l}).onConflictDoUpdate({target:[t.organizationId,t.publicId],set:{...l,archivedAt:a.unarchive?l.archivedAt:_`coalesce(${t.archivedAt}, ${l.archivedAt})`}})},delete:async n=>{await e.db.delete(t).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}async function Jt(e,t){return(await e.db.select({engine:le.engine,conversation:le.conversation,savedAt:le.savedAt}).from(le).innerJoin(N,y(N.id,le.taskId)).where(h(e.mine(N.organizationId),y(N.publicId,t))).orderBy(b(le.savedAt))).map(e=>({...e,savedAt:U(e.savedAt)}))}function Yt(e){let t=le,n=_`${N.publicId} || ':' || ${t.conversation}`,r=e=>[e.slice(0,e.indexOf(`:`)),e.slice(e.indexOf(`:`)+1)];return{key:n,where:({id:n,prefix:i})=>{let[a,o]=r(n??i??``);return h(e.mine(N.organizationId),y(N.publicId,a),n===void 0?void 0:y(t.conversation,o))},rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(t.savedAt));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:K({engine:e.engine,conversation:e.conversation,data:e.data,state:e.state,savedAt:U(e.savedAt)})}))},put:async(n,i)=>{let a={engine:i.engine,data:i.data,state:i.state??null,savedAt:V(i.savedAt)};await e.db.insert(t).values({taskId:Kt(e,r(n)[0]),conversation:i.conversation,...a}).onConflictDoUpdate({target:[t.taskId,t.conversation],set:a})},delete:async n=>{let[i,a]=r(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,i)),y(t.conversation,a)))}}}function Xt(e){let t=F,n=_`(line->>'seq')::int`,r=_`${N.publicId} || ':' || lpad(${n}::text, 6, '0')`;return{key:r,split:(r,i,a)=>h(e.mine(N.organizationId),y(N.publicId,r),i===void 0?void 0:a?te(t.seqTo,i):v(t.seqTo,i),i===void 0?void 0:a?y(n,i):v(n,i)),rows:async(i,a)=>{let o=e.db.select({key:r,line:_`line`}).from(t).innerJoin(N,y(N.id,t.taskId)).innerJoin(_`jsonb_array_elements(${t.lines}) line`,_`true`).where(i).orderBy(b(N.publicId),b(n));return(await(a===void 0?o:o.limit(a))).map(({key:e,line:t})=>({id:e,value:{at:t.at,level:t.level,line:t.line}}))},put:async(t,n)=>{let[r,i]=B(t);await Zt(e,r,[{seq:i,...n}])},delete:async n=>{let[r,i]=B(n);await e.db.update(t).set({lines:_`(select coalesce(jsonb_agg(line), '[]'::jsonb) from jsonb_array_elements(${t.lines}) line where ${i} <> ${i})`}).where(h(y(t.taskId,Kt(e,r)),te(t.seqTo,i),f(t.seqFrom,i)))}}}async function Zt(e,t,n){n.length&&await e.db.insert(F).values({taskId:Kt(e,t),seqFrom:n[0].seq,seqTo:n[n.length-1].seq,lines:n}).onConflictDoUpdate({target:[F.taskId,F.seqFrom],set:{seqTo:_`excluded.seq_to`,lines:_`excluded.lines`}})}function Qt(e){let t=P,n=_`${N.publicId} || ':' || lpad(${t.seq}::text, 8, '0')`;return{key:n,split:(n,r,i)=>h(e.mine(N.organizationId),y(N.publicId,n),r===void 0?void 0:i?y(t.seq,r):v(t.seq,r)),rows:async(r,i)=>{let a=e.db.select({row:t,key:n}).from(t).innerJoin(N,y(N.id,t.taskId)).where(r).orderBy(b(N.publicId),b(t.seq));return(await(i===void 0?a:a.limit(i))).map(({row:e,key:t})=>({id:t,value:{seq:e.seq,generation:e.generation,at:U(e.at),kind:e.kind,value:e.value}}))},put:async(n,r)=>{await e.db.insert(t).values({taskId:Kt(e,n.slice(0,n.lastIndexOf(`:`))),seq:r.seq,generation:r.generation,kind:r.kind,value:r.value,at:V(r.at)})},delete:async n=>{let[r,i]=B(n);await e.db.delete(t).where(h(y(t.taskId,Kt(e,r)),y(t.seq,i)))}}}function $t(e){let t=N;return{key:t.publicId,rows:async(n,r)=>{let i=e.db.select({row:t,installationKey:Y.key}).from(t).leftJoin(Y,y(Y.id,t.installationId)).where(h(e.mine(t.organizationId),ne(t.runnerMs),n)).orderBy(b(t.publicId));return(await(r===void 0?i:i.limit(r))).flatMap(({row:e,installationKey:t})=>{let n=Ue(e,t);return n?[{id:e.publicId,value:n}]:[]})},put:async(n,r)=>{let i=B(n)?.[0]??n;await e.db.update(t).set({engine:r.engine??null,model:r.model??null,credential:r.credential,runnerMs:r.runnerElapsedMs,tokenCount:Ce(r.tokens),usageTokens:r.tokens??null,finishedAt:V(r.at)}).where(h(e.mine(t.organizationId),y(t.publicId,i)))},delete:async n=>{await e.db.update(t).set({engine:null,model:null,runnerMs:null,tokenCount:null,usageTokens:null}).where(h(e.mine(t.organizationId),y(t.publicId,n)))}}}var en=e({DrizzleStore:()=>tn,taskSecretRows:()=>nn}),tn=class e{db;organizationId;now;encryption;locks;notifications;recordChannel(e,t){return`record_${Ge(`sha256`).update(JSON.stringify([this.organizationId,e,t])).digest(`hex`).slice(0,48)}`}notification(e,t){return this.notifications?{notified:_`pg_notify(${this.recordChannel(e,t)}, '')`}:void 0}async watch(e,t){let n=i(),r=this.db.$client,a=r?.listen?await r.listen(this.recordChannel(e,t),n.notify,n.notify).catch(()=>void 0):void 0;return{...n,close(){a?.unlisten().catch(()=>{}),n.close()}}}publishAgent=(e,t,n)=>Ht(this,e,t,n);kinds;constructor(e,t,n=Date.now,r={},i,a=!!e.$client?.unsafe){this.db=e,this.organizationId=t,this.now=n,this.encryption=r,this.locks=i,this.notifications=a,this.kinds={agent:Ut(this),agentversion:Gt(this),app:Ye(this),installation:Qe(this),credential:it(this),task:qt(this),history:Yt(this),tasklog:Xt(this),inbox:Qt(this),usage:$t(this),delivery:ft(this,`delivery`),login:ft(this,`login`),config:mt(this),runner:yt(this),snapshot:ft(this,`snapshot`),connection:_t(this)},this.posts=pt(this),this.secrets=Ct(this)}posts;secrets;kind(e,t){return e===`delivery`&&t?.startsWith(`approval:`)?this.posts:e===`snapshot`&&t&&xt(t)?this.secrets:this.kinds[e]}static async webhookTarget(e,t,n){let[r]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Y,h(y(Y.appId,W.id),y(Y.key,n??``),S(Y.deletedAt))).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(y(W.key,t)));if(r&&!r.installation&&n){let r=`${t}/`,[i]=await R(e,()=>e.select({app:W,credentials:j.value,installation:Y,token:Q.value}).from(Y).innerJoin(W,y(W.id,Y.appId)).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(_`left(${W.key}, ${r.length}) = ${r}`,y(Y.platformInstallId,n.slice(t.length+1)),S(Y.deletedAt))).limit(1));if(i)return{organizationId:i.app.organizationId,app:$(i.app,i.credentials),bound:{organizationId:i.installation.organizationId,installation:Xe(i.installation,i.app,i.token)}}}return r&&{organizationId:r.app.organizationId,app:$(r.app,r.credentials),...r.installation?{bound:{organizationId:r.installation.organizationId,installation:Xe(r.installation,r.app,r.token)}}:{}}}static async appRecord(e,t){let[n]=await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.key,t)));return n&&{organizationId:n.row.organizationId,app:$(n.row,n.credentials)}}static async apps(e,t){return(await R(e,()=>e.select({row:W,credentials:j.value}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).where(y(W.integration,t)))).map(({row:e,credentials:t})=>({organizationId:e.organizationId,app:$(e,t)}))}static async installationOrganization(e,t){let[n]=await R(e,()=>e.select({organizationId:Y.organizationId}).from(Y).where(y(Y.key,t)));return n?.organizationId}static async installations(e,t){return R(e,()=>e.select({key:Y.key,organizationId:Y.organizationId}).from(Y).where(h(_`${Y.key} like ${`${H(t)}:%`}`,S(Y.deletedAt))))}static async taskOrganization(e,t,n){let[r]=await R(e,()=>e.select({organizationId:N.organizationId}).from(N).where(h(y(N.publicId,t),y(N.tokenHash,n))));return r?.organizationId}async getApps(e){return e.length?(await R(this.db,()=>this.db.select({row:W,credentials:j.value,sharedKey:Z.key}).from(W).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).where(h(p(W.organizationId,[this.organizationId,``]),p(W.key,e))))).map(e=>({id:e.row.key,value:$(e.row,e.credentials,e.sharedKey)})):[]}async listCredentials(e){let t=D,n=this.db.select({row:t,sealed:j.value}).from(t).innerJoin(j,y(j.id,t.secretId)).where(h(this.mine(t.organizationId),e.owner?x(S(t.owner),y(t.owner,e.owner)):S(t.owner))).orderBy(b(_`case when ${t.owner} is null then 'workspace' else 'personal' end`),b(t.label));return(await R(this.db,()=>e.limit===void 0?n:n.limit(e.limit))).map(({row:e,sealed:t})=>({id:fe(e.owner??void 0,e.label),value:et(e,t)}))}async updateMetadata(e,t,n){return e===`installation`&&(`covers`in n||`deletedAt`in n)?this.transaction(`installation:${t}`,async r=>{let i=await r.get(`installation`,t);if(!i)return!1;let a={...i,...n};return a.deletedAt===void 0&&await Ze(r,t,a),r.writeMetadata(e,t,n)}):this.writeMetadata(e,t,n)}async writeMetadata(e,t,n){let r=e===`app`?W:e===`installation`?Y:A,i=e===`app`?[`name`,`agentsRepo`,`branch`]:e===`installation`?[`account`,`self`,`covers`,`repos`,`deletedAt`,`uninstalled`]:[`name`,`config`,`lastSeen`,`updatedAt`];if(Object.keys(n).some(e=>!i.includes(e)))throw Error(`Invalid metadata fields`);let a=Object.fromEntries(Object.entries(n).map(([e,t])=>[e,t===void 0?null:[`deletedAt`,`updatedAt`,`lastSeen`].includes(e)?V(t):t])),o=e===`runner`?A.publicId:e===`app`?W.key:Y.key,[s]=await this.db.update(r).set({...a,updatedAt:typeof n.updatedAt==`number`?V(n.updatedAt):this.at()}).where(h(this.mine(r.organizationId),y(o,t))).returning({id:r.id});return!!s}withAppLock(e,t){let n=/^connections?[:-]/.test(e)?`${this.organizationId}:${e}`:e;return this.transaction(`app:${n}`,t)}queue(){return new Vt(this.db)}withConfigLock(e){return this.transaction(`config:${this.organizationId}`,e)}async transaction(t,n){let r=_`select pg_advisory_xact_lock(3, hashtext(${t}))`;return this.locks?(this.locks.has(t)||await this.db.execute(r),this.locks.add(t),n(this)):this.db.transaction(async i=>(await i.execute(r),n(new e(i,this.organizationId,this.now,this.encryption,new Set([t]),this.notifications))))}withCredential(e,t,n){if(e===`runner`)return this.withAppLock(`runners:${this.organizationId}`,e=>ke(e,`runner`,t,n));if(e===`installation`)return this.transaction(`installation:${t}`,async e=>{let r=await $e(e,t),i=await n(r,r?[{id:t,value:r}]:[],e);for(let t of i??[])t.value===null?await e.delete(`installation`,t.id):await e.put(`installation`,t.id,t.value);return!!i?.length});let{owner:r}=ge(t);return this.transaction(tt(this,r),async e=>{let i=await nt(e,r),a=i.map(({id:e,value:t})=>({id:e,value:t})),o=await n(a.find(e=>e.id===t)?.value,a,e);for(let t of o??[])await rt(e,i.find(e=>e.id===t.id),t.id,t.value);return!!o?.length})}at(){return V(this.now())}live(e){return x(S(e),v(e,this.at()))}mine(e){return y(e,this.organizationId)}async get(e,t){if(e===`app`)return(await this.getApps([t]))[0]?.value;let n=this.kind(e,t),r=B(t),i=n.where?n.where({id:t}):n.split&&r?n.split(r[0],r[1],!0):_`${n.key} = ${t}`;return(await R(this.db,async()=>await n.rows(i,1)))[0]?.value}async patchLogin(e,t,n={}){let[r]=await this.db.update(E).set({value:_`jsonb_strip_nulls(${E.value} || ${JSON.stringify(t)}::jsonb)`}).where(h(y(E.key,X(this.organizationId,`login`,e)),this.live(E.expiresAt),_`(${E.value}->>'expiresAt')::bigint > ${this.now()}`,...Object.entries(n).map(([e,t])=>Array.isArray(t)?p(_`${E.value}->>${e}`,t):_`${E.value}->>${e} = ${t}`))).returning({value:_`${E.value}`,...this.notification(`login`,e)});return r?.value}completeLogin(e,t,n){return he(this,e,t,n)}async listAgentsWithVersions(e){return(await R(this.db,()=>this.db.select({record:C,version:w}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e===void 0?void 0:Array.isArray(e)?e.length?p(C.slug,e):_`false`:y(C.slug,e))).orderBy(b(C.slug)))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:He(t,e.slug)}:{}}))}async listAgentSummaries(e={}){let t=e.q?`%${H(e.q)}%`:void 0,n=_`${C.source} <> 'builtin'`,r=this.db.select({record:C,version:Pe}).from(C).leftJoin(w,h(y(w.agentId,C.id),y(w.version,C.currentVersion))).where(h(this.mine(C.organizationId),e.slug===void 0?void 0:y(C.slug,e.slug),e.after?_`(${n}, ${C.slug}) > (${e.after[0]===`1`}, ${e.after.slice(2)})`:void 0,e.source?y(C.source,e.source):void 0,t?x(g(C.slug,t),g(C.name,t),g(C.description,t),g(C.repo,t)):void 0,e.platform?_`${w.definition}->'integrations' ? ${e.platform}`:void 0)).orderBy(n,b(C.slug));return(await R(this.db,()=>e.limit===void 0?r:r.limit(e.limit))).map(({record:e,version:t})=>({record:Ve(e),...t?{version:Ne(t,e.slug)}:{}}))}async listVersions(e,t,n){let r=this.db.select({version:Pe}).from(w).innerJoin(C,y(C.id,w.agentId)).where(h(this.mine(C.organizationId),y(C.slug,e),n===void 0?t===void 0?void 0:f(w.version,C.currentVersion):re(w.version,n),t===void 0?void 0:te(w.version,n===void 0?_`${C.currentVersion} + 1 - ${t}`:n-t))).orderBy(b(w.version));return(await R(this.db,()=>r)).map(({version:t})=>({id:`${e}:${String(t.version).padStart(6,`0`)}`,value:Ne(t,e)}))}async put(e,t,n,r={}){let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);await this.kind(e,t).put(t,n,i,r)}async putMany(e,t,n={}){if(!t.length)return;if(e===`delivery`&&!t.some(e=>e.id.startsWith(`approval:`))){await this.db.insert(E).values(t.map(({id:t,value:r})=>({key:X(this.organizationId,e,t),value:r,expiresAt:n.ttlMs===void 0?null:V(this.now()+n.ttlMs)}))).onConflictDoUpdate({target:E.key,set:{value:_`excluded.value`,expiresAt:_`excluded.expires_at`}});return}if(e!==`tasklog`){await Promise.all(t.map(t=>this.put(e,t.id,t.value,n)));return}let[r]=B(t[0].id),i=t.map(e=>{let[t,n]=B(e.id);if(t!==r)throw Error(`A log batch must belong to one task`);return{seq:n,...e.value}});await Zt(this,r,i)}async approvalPostsDue(e,t){let n=T;return R(this.db,()=>this.db.select({organizationId:n.organizationId,id:n.key,value:n.value}).from(n).where(h(this.live(n.expiresAt),x(f(n.retryAt,V(e)),h(S(n.shownAt),f(n.at,V(e-t)))))))}async list(e,t={}){return e===`snapshot`&&!t.ids&&`connections:`.startsWith(t.prefix??``)?[...await this.listRows(e,t,this.kinds.snapshot),...await this.listRows(e,t,this.secrets)].sort((e,t)=>e.id<t.id?-1:+(e.id>t.id)).slice(0,t.limit):this.listRows(e,t,this.kind(e,t.prefix))}async listRows(e,t,n){let r=[];if(t.ids&&r.push(t.ids.length?p(_`${n.key}`,t.ids.map(t=>n.where?X(this.organizationId,e,t):t)):_`false`),t.runner&&r.push(e===`runner`?x(y(A.publicId,t.runner),y(A.name,t.runner)):_`false`),t.defaults&&r.push(e===`runner`?y(A.isDefault,!0):_`false`),t.installation&&r.push(e===`usage`?y(Y.key,t.installation):_`false`),t.agent&&r.push(e===`app`||e===`installation`?y(W.agent,t.agent):e===`agent`?y(C.slug,t.agent):_`false`),t.active&&r.push(e===`installation`?x(S(Y.deletedAt),...t.includeUninstalled?[y(Y.uninstalled,!0)]:[]):void 0),t.apps&&r.push(e===`installation`&&t.apps.length?p(W.key,t.apps):_`false`),Object.hasOwn(t,`visibleTo`)){let n=e===`runner`?A.owner:e===`credential`?D.owner:oe.owner;r.push(x(S(n),t.visibleTo?y(_`${n}`,t.visibleTo):void 0))}if(n.where)return R(this.db,async()=>await n.rows(h(n.where(t),...r),t.limit));let i=t.prefix?.endsWith(`:`)?t.prefix.slice(0,-1):void 0,a=t.after===void 0?void 0:B(t.after);if(n.split&&i&&!i.includes(`:`)&&(t.after===void 0||a?.[0]===i))return R(this.db,async()=>await n.rows(n.split(i,a?.[1]),t.limit));let o=t.prefix?_`${n.key} like ${`${H(t.prefix)}%`}`:void 0,s=t.after?_`${n.key} > ${t.after}`:void 0,c=h(o,s,...r);return R(this.db,async()=>await n.rows(c,t.limit))}async delete(e,t){let n=e===`login`?this.notification(e,t):void 0;if(n){await this.db.delete(E).where(y(E.key,X(this.organizationId,e,t))).returning(n);return}await this.kind(e,t).delete(t)}async create(e,t,n,r={}){if(e===`agentversion`)return Wt(this,t,n);if(e===`connection`)return this.transaction(gt(this,t),async e=>{let{secret:r,...i}=n,a=r?await Be(e.db,r):null,o=await e.db.insert(oe).values({organizationId:e.organizationId,key:t,owner:i.owner,record:i,secretId:a}).onConflictDoNothing().returning({id:oe.id});return o.length||await J(e.db,[a]),o.length>0});if(e!==`delivery`)throw Error(`Atomic create is not supported for ${e}`);let i=r.ttlMs===void 0?null:V(this.now()+r.ttlMs);if(t.startsWith(`approval:`)){let e=n,r={value:e,at:V(e.at),shownAt:e.shownAt?V(e.shownAt):null,retryAt:e.retryAt===void 0?null:V(e.retryAt),expiresAt:i};return(await this.db.insert(T).values({organizationId:this.organizationId,key:t,...r}).onConflictDoUpdate({target:[T.organizationId,T.key],set:r,setWhere:f(T.expiresAt,this.at())}).returning({id:T.id})).length>0}return(await this.db.insert(E).values({key:X(this.organizationId,e,t),value:n,expiresAt:i}).onConflictDoUpdate({target:E.key,set:{value:n,expiresAt:i},setWhere:f(E.expiresAt,this.at())}).returning({key:E.key})).length>0}async claimDeliveryLease(e,t,n){let r=_`clock_timestamp() + ${n}::int * interval '1 millisecond'`,[i]=await this.db.insert(E).values({key:X(this.organizationId,`delivery`,e),value:{owner:t,failures:0},expiresAt:r}).onConflictDoUpdate({target:E.key,set:{value:_`${E.value} || ${JSON.stringify({owner:t})}::jsonb`,expiresAt:r},setWhere:_`${E.expiresAt} <= clock_timestamp()`}).returning({value:E.value});return i?i.value.failures:void 0}async updateDeliveryLease(e,t,n,r={ttlMs:3e4}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t} and ${E.expiresAt} > clock_timestamp()`),a=_`clock_timestamp() + ${r.ttlMs}::int * interval '1 millisecond'`;return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n.next===void 0?n:_`${JSON.stringify(n)}::jsonb || jsonb_build_object('next', floor(extract(epoch from (${a})) * 1000))`,expiresAt:a}).where(i).returning({key:E.key})).length>0}async updateDelivery(e,t,n,r={}){let i=h(y(E.key,X(this.organizationId,`delivery`,e)),_`${E.value}->>'owner' = ${t}`,this.live(E.expiresAt));return(n===void 0?await this.db.delete(E).where(i).returning({key:E.key}):await this.db.update(E).set({value:n,expiresAt:r.ttlMs===void 0?null:V(this.now()+r.ttlMs)}).where(i).returning({key:E.key})).length>0}listHistory(e){return Jt(this,e)}async installationApp(e){let[t]=await R(this.db,()=>this.db.select({installation:Y,app:W,credentials:j.value,token:Q.value,sharedKey:Z.key}).from(Y).innerJoin(W,h(y(W.id,Y.appId),p(W.organizationId,[this.organizationId,``]))).innerJoin(j,y(j.id,W.credentialsSecretId)).leftJoin(Z,y(Z.id,W.sharedAppId)).leftJoin(Q,y(Q.id,Y.tokenSecretId)).where(h(this.mine(Y.organizationId),y(Y.key,e),S(Y.deletedAt))));return t&&{installation:Xe(t.installation,t.app,t.token),app:$(t.app,t.credentials,t.sharedKey)}}async conversationState(e){let t=ie(E,`unseen`),n=ie(E,`batch`),[r]=await R(this.db,()=>this.db.select({record:E.value,unseen:t.value,batch:n.value,task:N}).from(_`(select 1) as anchor`).leftJoin(E,h(y(E.key,X(this.organizationId,`delivery`,e)),this.live(E.expiresAt))).leftJoin(t,h(y(t.key,X(this.organizationId,`delivery`,`since:${e}`)),this.live(t.expiresAt))).leftJoin(n,h(y(n.key,X(this.organizationId,`delivery`,`batch:${e}`)),this.live(n.expiresAt))).leftJoin(N,h(this.mine(N.organizationId),y(N.publicId,_`${E.value}->>'taskId'`),y(N.flow,`default`))));return{...r?.record?{record:r.record}:{},...r?.unseen?{unseen:r.unseen}:{},...r?.batch?{batch:r.batch}:{},...r?.task?{status:Ie(r.task)}:{}}}async heldTokens(e,t){let[n]=await R(this.db,()=>q(this.db,_`select ${lt(this.organizationId,e,t)} as tokens`));return ut(this.organizationId,n?.tokens??{})}async holdToken(e){let t=E,n=e=>X(this.organizationId,`snapshot`,e);await this.db.execute(_`insert into ${t} (key, value, expires_at)
209
209
  select ${n(e.key)}, ${JSON.stringify(e.value)}::jsonb, ${V(this.now()+e.ttlMs).toISOString()}::timestamptz
210
210
  where ${_.join(e.drops.map(e=>_`coalesce((select ${t.value}->>'drop' from ${t} where ${t.key} = ${n(e.key)} and ${this.live(t.expiresAt)}), '') = ${e.drop??``}`),_` and `)}
211
211
  on conflict (key) do update set value = excluded.value, expires_at = excluded.expires_at`)}async saveTaskSecrets(e,t){let[n]=await z(this.db,[_`select pg_advisory_xact_lock(3, hashtext(${`app:${this.organizationId}:connections:${e}`}))`],_`with active as (select id from ${N} where ${this.mine(N.organizationId)} and ${N.publicId} = ${e} and ${N.status} in ('queued', 'running', 'waiting')),
@@ -299,7 +299,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
299
299
  cross join unnest(${_.param(t?[t]:[`agent`,`installation`,`engine`])}::text[]) groups(kind)
300
300
  where ${this.mine(n.organizationId)} and ${n.runnerMs} is not null and ${n.finishedAt} >= ${new Date(e).toISOString()}::timestamptz
301
301
  group by 1 order by 1
302
- `))).map(e=>{let t=e.tokens?.reduce(Se,void 0);return{key:e.key,tasks:e.tasks,runnerMs:e.runner_ms,...t===void 0?{}:{tokens:t}}});if(t)return a;let o={agent:[],installation:[],engine:[]};for(let e of a){let t=e.key.indexOf(`:`);o[e.key.slice(0,t)].push({...e,key:e.key.slice(t+1)})}return o}async usageTotals(e){let t=N,n=e.by===`agent`?_`${t.agent}`:e.by===`engine`?_`coalesce(${t.engine}, 'unknown')`:e.by===`installation`?_`coalesce(${Y.key}, 'none')`:_`to_char(${t.finishedAt} at time zone ${Ee(e.tz)}, 'YYYY-MM-DD')`,r=h(this.mine(t.organizationId),ne(t.runnerMs),te(t.finishedAt,V(e.since)),e.until===void 0?void 0:re(t.finishedAt,V(e.until)),e.agent?y(t.agent,e.agent):void 0),i={tasks:_`count(*)`,runnerMs:_`coalesce(sum(${t.runnerMs}), 0)`,tokenCount:_`coalesce(sum(${t.tokenCount}), 0)`},a=e.top?_`case when ${t.agent} in (
302
+ `))).map(e=>{let t=e.tokens?.reduce(ye,void 0);return{key:e.key,tasks:e.tasks,runnerMs:e.runner_ms,...t===void 0?{}:{tokens:t}}});if(t)return a;let o={agent:[],installation:[],engine:[]};for(let e of a){let t=e.key.indexOf(`:`);o[e.key.slice(0,t)].push({...e,key:e.key.slice(t+1)})}return o}async usageTotals(e){let t=N,n=e.by===`agent`?_`${t.agent}`:e.by===`engine`?_`coalesce(${t.engine}, 'unknown')`:e.by===`installation`?_`coalesce(${Y.key}, 'none')`:_`to_char(${t.finishedAt} at time zone ${_e(e.tz)}, 'YYYY-MM-DD')`,r=h(this.mine(t.organizationId),ne(t.runnerMs),te(t.finishedAt,V(e.since)),e.until===void 0?void 0:re(t.finishedAt,V(e.until)),e.agent?y(t.agent,e.agent):void 0),i={tasks:_`count(*)`,runnerMs:_`coalesce(sum(${t.runnerMs}), 0)`,tokenCount:_`coalesce(sum(${t.tokenCount}), 0)`},a=e.top?_`case when ${t.agent} in (
303
303
  select ${t.agent} from ${t} where ${r} group by ${t.agent}
304
304
  order by ${i[e.top.by]} desc, ${t.agent} limit ${e.top.count}
305
305
  ) then ${t.agent} end`:e.parts?.length?_`case when ${p(t.agent,e.parts)} then ${t.agent} end`:_`null::text`,o=e.by===`installation`?_`left join ${Y} on ${Y.id} = ${t.installationId}`:_``,s=await R(this.db,()=>q(this.db,_`
@@ -309,7 +309,7 @@ import{Ea as e}from"./args-CJsHYWbt.js";import{dt as t,ft as n,t as r,vt as i}fr
309
309
  from ${t} ${o}
310
310
  where ${r}
311
311
  group by 1, 2
312
- `)),c=new Map;for(let e of s){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=c.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};xe(n,t),e.part&&((n.parts??={})[e.part]=t),c.set(e.key,n)}return[...c.values()].sort((e,t)=>e.key.localeCompare(t.key))}async sweep(e=1e3){if(!Number.isInteger(e)||e<1)throw Error(`Sweep batch must be positive`);let t=this.at().toISOString();await this.db.execute(_`
312
+ `)),c=new Map;for(let e of s){let t={tasks:Number(e.tasks),runnerMs:Number(e.runner_ms),tokenCount:Number(e.token_count)},n=c.get(e.key)??{key:e.key,tasks:0,runnerMs:0,tokenCount:0};Te(n,t),e.part&&((n.parts??={})[e.part]=t),c.set(e.key,n)}return[...c.values()].sort((e,t)=>e.key.localeCompare(t.key))}async sweep(e=1e3){if(!Number.isInteger(e)||e<1)throw Error(`Sweep batch must be positive`);let t=this.at().toISOString();await this.db.execute(_`
313
313
  with tombstones as (
314
314
  delete from ${ue} where (organization_id, public_id) in (
315
315
  select organization_id, public_id from ${ue}
@@ -1 +1 @@
1
- import{Ea as e}from"./args-CJsHYWbt.js";import{_ as t,a as n,b as r,f as i,h as a,i as o,m as s,o as c,p as l,r as u,u as d,y as f}from"./actions-DO8MvHwc.js";var p=e({tasks:()=>m});const m={run:s,result:l,list:d,watch:r,stream:f,steer:a,ask:c,approvals:u,approve:o,stop:t,archive:n,delete:i};export{m as n,p as t};
1
+ import{Ea as e}from"./args-CJsHYWbt.js";import{_ as t,a as n,b as r,f as i,h as a,i as o,m as s,o as c,p as l,r as u,u as d,y as f}from"./actions-C35tq9KH.js";var p=e({tasks:()=>m});const m={run:s,result:l,list:d,watch:r,stream:f,steer:a,ask:c,approvals:u,approve:o,stop:t,archive:n,delete:i};export{m as n,p as t};
@@ -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-DO8MvHwc.js";import{i as P,o as F}from"./mcp-cEIva8Pd.js";import{a as pe,d as me,r as he,s as ge,u as _e}from"./exec-D9jF2F-H.js";import{s as ve}from"./http-DRk8cDjf.js";import{t as ye}from"./tools-DVtBtED6.js";import{i as be,n as xe,r as Se}from"./async-BS9tyhva.js";import{r as Ce}from"./post-DLenID75.js";import I from"node:path";import L from"node:process";import{execFile as R}from"node:child_process";import z from"node:net";import B from"node:os";import{createHash as we}from"node:crypto";import V from"node:http";import H from"node:fs/promises";import{promisify as U}from"node:util";import{gunzipSync as W,gzipSync as Te}from"node:zlib";const G=e=>we(`sha256`).update(e).digest(`hex`);function K(e,t,n){if(e===`claude`)return I.join(T(),process.env.CLAUDE_CODE_PROJECT_DIR_NAME||`coder`,`${t}.jsonl`);let r=new Date(JSON.parse(n.slice(0,n.indexOf(`
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-BS9tyhva.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
+ 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-DVtBtED6.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
+ 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-Caq72REF.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
+ 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-BVxs3I8o.js";import{a as j}from"./tool-search-C9Ty3hhL.js";import{turnToolServers as M}from"./mcp-Caq72REF.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(`
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-DN4assR8.js`).then(e=>e.l),import(`./actions-DO8MvHwc.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-DN4assR8.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};
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-DeuC38Vp.js`),a=r(n,e);a||t(`Worker: task ${e} not found.`),await i(n,a),process.exit(0)}});export{i as commandWorker};
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@wular/coder",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "The runtime for agents, your rules, any model, everywhere.",
5
5
  "type": "module",
6
6
  "main": "./dist/sdk.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coder",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Delegate coding tasks to supervised Coder subagents running on Codex, Claude, or any OpenAI-compatible model. Your main context stays clean.",
5
5
  "author": {
6
6
  "name": "muzam1l"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "coder",
3
3
  "displayName": "Coder",
4
- "version": "0.5.1",
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};