@wular/coder 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{actions-CkMAM1Km.js → actions-DO8MvHwc.js} +2 -2
- package/dist/{agent-Bi5nbUhA.js → agent-Cgala63h.js} +1 -1
- package/dist/{app-server-BTpa5GBV.js → app-server-dnlLhhZb.js} +1 -1
- package/dist/{approvals-CRwkc9vB.js → approvals-C8XV7CK2.js} +1 -1
- package/dist/apps-BORri-28.js +18 -0
- package/dist/async-BS9tyhva.js +3 -0
- package/dist/{auth-oCvlHitk.js → auth-C16ylySv.js} +1 -1
- package/dist/builtin/coder/system.md +6 -3
- package/dist/{chat-4AiZEqKh.js → chat-czruXAt3.js} +1 -1
- package/dist/cli.js +3 -3
- package/dist/{cmd-Cu3OquA_.js → cmd-C1gHyVG7.js} +34 -34
- package/dist/{config-D_RuO6gX.js → config-_32PHl9g.js} +1 -1
- package/dist/{connection-BXjn7gCC.js → connection-CgA5_NJ7.js} +1 -1
- package/dist/{connections-Cswv7r8Z.js → connections-B90TemYf.js} +1 -1
- package/dist/{context-CFrDYenS.js → context-C1XBbfEL.js} +1 -1
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1391 -1391
- package/dist/dash/standalone/server/modules-server-server-react-server/src/client/{index.54c45900f2153d34.js → index.91e126d7a389d4bd.js} +0 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/api/{load.252f972b42c690e2.js → load.858c062c7891a2c1.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/{page.11efd0e175db9053.js → page.9375ab741dc9791e.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{notify.59ae138dc182d7c3.js → notify.c36570a56d279ce2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{page.e9386951cedea737.js → page.13fdd9cc55ad3a52.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/account/{sign-out.713d3ec10951fde5.js → sign-out.38a7f39cddc670f7.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{agents-grid.f989d6f2d9ece6e4.js → agents-grid.2385ffa8fdad08d6.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.0f88720e52db99a2.js → page.5ca6921e50484f8c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.8d2f0997462fc958.js → layout.afc4a8a5a8360975.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.bc93891522c8120d.js → page.ba65063a1aa99a62.js} +7 -7
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.cf5cf9afe38ab0e4.js → page.03c5e72b0fe50ba9.js} +11 -11
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-actions.c44c7df7841719f2.js → platform-actions.7c8c75bd0c05df4a.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{platform-step.6e90cbfe308f28a0.js → platform-step.d6a980d1181dc940.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.61de585104c2be10.js → agent-settings-form.b5299f5130a4e8af.js} +16 -17
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.4d06f759984a63b3.js → page.fad77cea17947d47.js} +8 -9
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.ea2925eab1d2e594.js → loading.4120e6979eaed441.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.fb069bf82b727d27.js → page.474b3524d5ea53b7.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/usage/{page.0a472a0e269b8c01.js → page.7868a07efcaa26f4.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{versions-list.7ef7dfd5d8f5de43.js → versions-list.ba93a53773cab8a8.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{loading.007326a04f05d46c.js → loading.6e53829bd1f3021d.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.a26aa7bc6ab655f0.js → page.5798ede8ba8ace97.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{app-cards.361918fe58349aa1.js → app-cards.55778a4b3177846d.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/platforms/[app]/{page.3f60cf67517d0d31.js → page.ce391cad0d78795f.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{agent-toggle.ffbf9a8b8b2fbde7.js → agent-toggle.0cec822c6099f058.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/agent/{hero.0ae015a4fbe6321e.js → hero.7151c467e7ecf6a5.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{connect-repositories.9abe365f0098d358.js → connect-repositories.4e121d31ed0cfe02.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.6548f8f757578f90.js → editor.f314d92af0bb33b0.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{import-picker.577b1d84c7ab84e1.js → import-picker.11028d5329ad537b.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.2b326d00ccef5544.js → page.1476d31e4554e88b.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{layout.45a09107b19f0a7e.js → layout.150d950d191db477.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{operator-apps.f8d679f2d06b0ebc.js → operator-apps.3e72de86b86a7338.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/operator/{page.5aa3ddc669366703.js → page.6a4be3b1a473ff8c.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/{page.5a5188f0fc75dcd2.js → page.262ed73437c17872.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{advanced-list.73cdadb2968a39d2.js → advanced-list.7180570379e2625c.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connection-add.353ec01fbb814f78.js → connection-add.632b1847c16ecd42.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{connections-list.cf4061ae909272c3.js → connections-list.4378ae707b2092ed.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials-list.fc4cff0289267551.js → credentials-list.e47897acb6867df8.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{credentials.db01de2581ac65f3.js → credentials.6bd06f96afbe7329.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{list.e7d6a422f6a869ea.js → list.38e70272eeb98cd0.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{models-list.acb92b39cab1d11c.js → models-list.a08cd37d0f7ff86c.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{page.95fe939e36e5be55.js → page.f096b5a9ac419326.js} +13 -13
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{runners-list.5764eac3307d67cc.js → runners-list.0df1f9329df1b67d.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/{secrets-list.d316bb157f747f6c.js → secrets-list.6d2f56fa7d6fcab0.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{layout.4eb70f2de8674f93.js → layout.0fd865c865e5bab4.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-options.dc630cb6e2cbf83a.js → model-options.0d6077fe68db3af9.js} +2 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{model-pick.a143e77f5ed5f9d3.js → model-pick.695538b2edf9dd15.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/{page.70cad0e981c33fa5.js → page.c57b81c2197cce0f.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{create-link.18bd2b92cd23b73f.js → create-link.60aadbe43ea1e39c.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{outcome-toast.95f7be49430248eb.js → outcome-toast.e2b9ef0344b1a1a2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/{page.e39ee9236664d043.js → page.c456ad99c8a9f875.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{activity.441e82ab00344fb2.js → activity.2ec05d78d609b7b2.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.24e121ea6eb578ba.js → page.578be2f6c89fcba0.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-actions.4a4052a38db4bad3.js → task-actions.d131453dd2a423c3.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.0cd3ec2655f44cc7.js → task-view.3d72a4ecd2b3826e.js} +7 -53
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer-data.73225456d60d63e3.js → composer-data.c16854be11a561e4.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.ee326fbf5e526fb1.js → composer.97be3e67214889c1.js} +24 -82
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{pending-approvals.7607998094780fdd.js → pending-approvals.9175908da02960e1.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.e486cbd16ea3e963.js → tasks-list.028798c79227a366.js} +8 -8
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.01510523d1556d59.js → tasks-section.9a9d13057b326f25.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.ede64f82388f9480.js → page.045c6db0c56975b2.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/usage/{page.0499098badd3f5f8.js → page.938d29ff7edb678d.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{stream.e3800e736f832124.js → stream.2cdb8eabd8f6df70.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/comps/frame/{task-toasts.3b7eeee29fc327de.js → task-toasts.8733901ca0e4c246.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{action.f22057e7dfac40fe.js → action.56cea462eb725c39.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/utils/{client.c8d7efefb6194d7d.js → client.685154f230716834.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{advanced-list-850a950afe4f6996.js → advanced-list-b75a9c2bd11026de.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agent-pills-9f6fa120182db948.js → agent-pills-54564413a57d7fa7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-55d294dad2ce5a0d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{agent-toggle-521136f20a71400d.js → agent-toggle-b5dcc4ea6292fb3d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-bcd13cd7a46224a6.js → agents-grid-69461c53abbba433.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{back-2d67134b122334f4.js → back-ba5e4340a9f8bbd2.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{chain-hint-53675e299a865420.js → chain-hint-491eb09a20a15702.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-cb2c62fe580a8903.js → combo-6df61e8a1cc31037.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-198b844da57b82a3.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/composer-b26a3332a1243461.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{composer-data-890f71bade4f0616.js → composer-data-b05f3d93fdc472d7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{confirm-d6b2c5b1deccd1e8.js → confirm-14d018653fbe50fc.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-226bf70aa81c29d8.js → connect-repositories-5118edc019fc7890.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connections-list-a33d6637e2d52fcf.js → connections-list-5412dad7e0def52f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{copy-294c6052b3b69424.js → copy-04781f9af4e10f06.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-0651addf1461f901.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-90fc1c6d202e1461.js → credentials-list-e64c973aee5602d3.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{custom-range-efa1b6a71ba84597.js → custom-range-b6919bab9846ebf7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-53a3e1a893644fff.js → editor-68e9ccd1764fc512.js} +3 -3
- package/dist/dash/standalone/static/assets/chunks/{field-4d374d5ed3f43d7e.js → field-adcb6e6a5f9b7131.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-0022dd3bdd57c13f.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{instructions-d3dc01b2f90820db.js → instructions-7b274685ceb26457.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{list-16247e39898cd20e.js → list-662f042656857c82.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-5e07b3318d69d218.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{models-list-6d93523660503dfb.js → models-list-ae1e2eff30d21824.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-546fe090efc129c2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-755fc581cbc2836e.js → outcome-dialog-fd86ded4c44c2de7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-c00becdb638cd9a8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-2be223e68e648134.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-08e9b3816dcd62b1.js → platform-actions-f3979ab69a6ceb53.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{platform-step-5881a8be1e761e00.js → platform-step-5454b6c0a19caefd.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-9a52703f4c4f6a31.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{runners-list-dd759d408c643a29.js → runners-list-20d42f19fb4bec8a.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runtime-9b28886f3cbe0ed3-1.js → runtime-3fcac605fffcc273-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{secrets-list-be1f634a1b077baa.js → secrets-list-89f89ee70edb3856.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-f646bfa8aa0aa449.js → segmented-66a8c77c6294fec3.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-3fcac605fffcc273-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{shared-init-953965859f7bf6b9.js → shared-init-96225b8c7758de9d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-96cde32cd50254c0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/shared-init-abd7653140f37a0c.js +9 -0
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8a410cc6d6bd9b1d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-d13c4cc0cf11ffd1.js → tail-40f16e09eade7eee.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-423e6a3f2527f534.js → task-396d849e58e50d59.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-actions-5917357eac6504ca.js → task-actions-0b3054dc0f8d17c0.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-9e026dc5da58af5b.js +3 -0
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-2c5ce592e00fda45.js → tasks-list-04c6568d7f7237b7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-177ae397ad64dcea.js → versions-list-ceb756236e69b761.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-9b28886f3cbe0ed3-0.js → wular-pnext-3fcac605fffcc273-0.js} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-00243b34eb094b95.css → dash-param-org-agents-param-slug-dd4ac319a0d62432.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-settings-9f8faa8f7d714699.css → dash-param-org-agents-param-slug-platforms-9d2e1439f3f7e81b.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-usage-0e037c66e3977f33.css → dash-param-org-agents-param-slug-settings-f21d4fcd3948139b.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-agents-param-slug-tasks-129adcdc293ceac8.css → dash-param-org-agents-param-slug-tasks-c8d6aa06f6e75f4c.css} +1 -1
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-usage-9cc128ba8af6ef62.css +1 -0
- package/dist/dash/standalone/static/assets/{dash-param-org-tasks-8a44e171984d32a1.css → dash-param-org-tasks-be3cb3d64573f3d9.css} +1 -1
- package/dist/dash/standalone/static/assets/{dash-param-org-tasks-param-id-b9d3a7a1bd1dd666.css → dash-param-org-tasks-param-id-c20a0537bc82620d.css} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-07b41bfab64b61c0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-0d388d56250f9f46.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-1443e45181b60bb0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-27207e4f43f9a21b.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-7ecbd7a0cbe4e231.js → pnext-client-435db60553fa3a67.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-523dd4071aa294ba.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-5f6bda3919f68382.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-684fd8ad16563ed3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6b952cdda9a1eb2b.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6fe9e98f7dd8dcbf.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-730c2c507a159f9e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-7c46573e45b67166.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-83a865c3d75705bd.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-907d1db4fb398a1d.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-9baf701f3e641d09.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-a57705e4e1047a9e.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-ed31510d4615a5a5.js → pnext-client-b1af82c6f0db0033.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-cede3bd7b2735942.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-d9a3996f22b6816b.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-f95364a0073ca4ce.js +1 -0
- package/dist/{definition-4on4SG5J.js → definition-D0OpQfGX.js} +1 -1
- package/dist/{discover-DvzAbQvU.js → discover-BfYHHJN_.js} +1 -1
- package/dist/{dispatch-BaW2X6Sc.js → dispatch-BkoIU4GU.js} +2 -2
- package/dist/{docs-CbgaMPvq.js → docs-CxklYa3P.js} +1 -1
- package/dist/{drive-Tk6JvQK5.js → drive-B7SBFfcb.js} +1 -1
- package/dist/env-BwFCHakK.js +1 -0
- package/dist/{exec-CAaYFJD1.js → exec-D9jF2F-H.js} +2 -2
- package/dist/{executor-Chc0zawh.js → executor-DBW7R7Tf.js} +6 -6
- package/dist/flow/builtin/review/index.d.ts +2 -2
- package/dist/flow/builtin/review/index.js +10 -15
- package/dist/flow/index.d.ts +2 -2
- package/dist/flow/index.js +1 -1
- package/dist/{hook-COWDSO4a.js → hook-DN__zYOG.js} +1 -1
- package/dist/{index-ezhbF5wC.d.ts → index-CTAQrCRU.d.ts} +71 -66
- package/dist/integrations-DSZSa8Rc.js +9 -0
- package/dist/lib/broker.js +1 -1
- package/dist/{load-PqaDHiHX.js → load-BtIDghgd.js} +2 -2
- package/dist/{local-BzZuOwgI.js → local-BzMvgiwL.js} +1 -1
- package/dist/{local-BMGcCk8N.js → local-GIxwz_Or.js} +1 -1
- package/dist/{login-BDKTNynK.js → login-LlZrIlxb.js} +1 -1
- package/dist/maintenance-DyiyHI8S.js +1 -0
- package/dist/{mcp-BGam3G_B.js → mcp-Caq72REF.js} +1 -1
- package/dist/{mcp-BNz_l5TV2.js → mcp-CrtKQoVi.js} +1 -1
- package/dist/{mcp-BGx48pyR.js → mcp-cEIva8Pd.js} +6 -4
- package/dist/{models-D1NXi6ni.js → models-BVxs3I8o.js} +1 -1
- package/dist/{permission-BkYxjiFR.js → permission-RSZM3DUk.js} +1 -1
- package/dist/post-DLenID75.js +11 -0
- package/dist/{refresh-yfEi5SQs.js → refresh-CWEpTAkD.js} +1 -1
- package/dist/{remote-rArUa01V.js → remote-BDMuKaON.js} +1 -1
- package/dist/{remote-BbXx6S9P.js → remote-CY-qYX2C.js} +1 -1
- package/dist/{runner-DG9jrX5H.js → runner-CKMOh5Q3.js} +1 -1
- package/dist/runner.json +1 -1
- package/dist/runner.tgz +0 -0
- package/dist/schema.js +1 -1
- package/dist/sdk.d.ts +15 -45
- package/dist/sdk.js +1 -1
- package/dist/serve-D23JqDip.js +12 -0
- package/dist/{serve-B-5rDiZm.js → serve-YlU04KO7.js} +1 -1
- package/dist/{session-Dtje9y-r.js → session-D7eeJIaH.js} +1 -1
- package/dist/{sessions-DIz9fyRN.js → sessions-BGUfSe8L.js} +1 -1
- package/dist/{shared--aE4olIO.js → shared-BzNReirj.js} +1 -1
- package/dist/{sign-in-wWkyaq5X.js → sign-in-Dr6sU7vz.js} +2 -2
- package/dist/{state-Br-Fuaxg.js → state-CxAUec80.js} +1 -1
- package/dist/store-BrnWdtRw.js +349 -0
- package/dist/{task-CFt85vTy.js → task-CyqtCXo3.js} +1 -1
- package/dist/task-DN4assR8.js +7 -0
- package/dist/{tool-search-BkdgVolu.js → tool-search-C9Ty3hhL.js} +1 -1
- package/dist/{tools-DNgEptor.js → tools-Ck-ZWtmB.js} +1 -1
- package/dist/{tools-oQvFAnh5.js → tools-DVtBtED6.js} +1 -1
- package/dist/{tools-search-D1zArRyJ.js → tools-search-BNDea9vZ.js} +1 -1
- package/dist/{turn-Cc-v-eSy.js → turn-eI4iRPsq.js} +1 -1
- package/dist/{update-check-UyRob3yy.js → update-check-Bap3dwaj.js} +1 -1
- package/dist/{views-3TxH367C.js → views-Bxm_5J6T.js} +1 -1
- package/dist/{worker-BMuKKiIa.js → worker-DJANNSCT.js} +1 -1
- package/dist/worker-DeuC38Vp.js +7 -0
- package/docs/agents/coder.md +1 -1
- package/docs/cli/index.md +5 -3
- package/docs/connections.md +1 -1
- package/docs/flows.md +1 -1
- package/docs/review.md +36 -8
- package/docs/self-host.md +2 -1
- package/package.json +1 -1
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/apps-B6mUToTa.js +0 -18
- package/dist/async-CNhQ4wyZ.js +0 -3
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-a8ee12513a02b1c5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-4a46a458495ce3ba.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-92553de43276510b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-b2480a7601967e94.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-734d21dfb8f6393e.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/model-options-d29e934a3de20ab4.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-77e13c848000a3dc.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-toast-9d5e9713c23882f5.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-832904f5694ef902.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-step-29469fd4eaddc42a.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-926144b364908b3c.js +0 -9
- package/dist/dash/standalone/static/assets/chunks/shared-init-9b28886f3cbe0ed3-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-b42d2c06c25d1e2b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-8c21d39a1e284887.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-view-c6ee43d2ddb6db90.js +0 -3
- package/dist/dash/standalone/static/assets/dash-param-org-agents-param-slug-platforms-25ae07e0b3f5b252.css +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-095026242a079175.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-1dfeb8c3ef155f87.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-2358423351524403.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-28a6557216627768.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-31a4ee73945fee19.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-3dfdc76bb8712b82.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-4355ac87961d78c1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-43c7a0046572e0c9.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-53dc7db68d67e0b1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5835cb35488bdf7f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-638b390bc23ab1ae.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-67f832c6c51a66cd.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-6fc99f0abe77c2ea.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-7d99965f28ac7604.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-8250bd3b86d038a3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-bfd06805a43c6dee.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-ce2943f17e9d9ac3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-f0496bf51e161ddd.js +0 -1
- package/dist/env-_AxrvBXP.js +0 -1
- package/dist/integrations-BVmsk64f.js +0 -9
- package/dist/maintenance-d43Ml540.js +0 -1
- package/dist/serve-CvnrGAj7.js +0 -12
- package/dist/store-CzQLgCzt.js +0 -352
- package/dist/task-N0qhnKpK.js +0 -7
- package/dist/worker-CIHY9L42.js +0 -7
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/core/{types.5bf5a41cedb54154.js → types.9d22123d6296f5af.js} +0 -0
- /package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.aae9fa481b9015d1.css.pnext-asset.js → task-view.440367ae07204ee7.css.pnext-asset.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as T}from"./chunks/custom-range-b6919bab9846ebf7.js";import{a as R}from"./chunks/agent-toggle-b5dcc4ea6292fb3d.js";import"./chunks/field-adcb6e6a5f9b7131.js";import"./chunks/shared-init-96225b8c7758de9d.js";import"./chunks/shared-init-96225b8c7758de9d.js";import{a as f,b as c,c as l,d as C,e as u,f as I}from"./chunks/side-toggle-8a410cc6d6bd9b1d.js";import{$2r as s,$2s as p}from"./chunks/shared-init-abd7653140f37a0c.js";import{$0E as d,$0j as r}from"./chunks/shared-init-abd7653140f37a0c.js";import{$1f as m,$1g as a}from"./chunks/shared-init-abd7653140f37a0c.js";import"./chunks/wular-pnext-3fcac605fffcc273-0.js";import"./chunks/shared-init-abd7653140f37a0c.js";import"./chunks/shared-init-abd7653140f37a0c.js";import{$3a as n}from"./chunks/shared-init-3fcac605fffcc273-2.js";import{$4a as t}from"./chunks/shared-init-3fcac605fffcc273-2.js";import{$1c as e}from"./chunks/shared-init-3fcac605fffcc273-2.js";import{$0i as i}from"./chunks/shared-init-3fcac605fffcc273-2.js";import"./chunks/shared-init-3fcac605fffcc273-2.js";var{mountRoute:_,remountRoute:D,unmountRoute:b}=n({islands:[{id:"c-04670c93cb",Component:f},{id:"c-13688e7f8e",Component:c},{id:"c-26e7b5f164",Component:m},{id:"c-322e0a6ac0",Component:l},{id:"c-3347df857a",Component:p},{id:"c-349df33426",options:{},load:()=>import("./chunks/composer-b26a3332a1243461.js").then(o=>o.NewTaskButton)},{id:"c-651470b7df",Component:C},{id:"c-6632c70a92",Component:a},{id:"c-67acd5aafe",options:{load:"visible",ssr:!0},load:()=>import("./chunks/tasks-list-04c6568d7f7237b7.js").then(o=>o.TasksList)},{id:"c-7636147aee",Component:T},{id:"c-990a90f80b",Component:R},{id:"c-9e1aaa9f92",Component:s},{id:"c-d5f6d1c671",Component:r},{id:"c-d88f87ef2a",Component:t},{id:"c-f0db18b936",Component:d},{id:"c-f50d7e7ce9",Component:u},{id:"c-f73dbfe27d",Component:I}]});e();i()||_();window.__PNEXT_REGISTER_ENTRY__&&window.__PNEXT_REGISTER_ENTRY__(import.meta.url,{mountRoute:_,unmountRoute:b});export{_ as mountRoute,D as remountRoute,b as unmountRoute};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,F as t,O as n,P as r,T as i,_ as a,g as o,j as s,k as c,kn as l,m as u,pn as d}from"./args-CJsHYWbt.js";import{D as f,L as p,R as m,T as h,d as g,q as _,z as v}from"./config-
|
|
1
|
+
import{A as e,F as t,O as n,P as r,T as i,_ as a,g as o,j as s,k as c,kn as l,m as u,pn as d}from"./args-CJsHYWbt.js";import{D as f,L as p,R as m,T as h,d as g,q as _,z as v}from"./config-_32PHl9g.js";import{t as y}from"./integrations-DSZSa8Rc.js";const b=s().check(l(/^[a-z0-9][a-z0-9_-]*$/i,`agent or flow name`)),x=e({match:i(s().check(d(1)))}),S=t().check(c(e=>e===!0||x.safeParse(e).success,`events take a list of names, or a map of each name to true or { "match": "<regex>" }`)),C=e({events:i(r([o(s()),n(s(),S)]))}),w=e({$schema:i(s()),name:i(s().check(d(1))),description:i(s()),runner:i(s().check(d(1))),model:i(f),access:i(g),mcp:i(n(b,h)),integrations:u(n(s(),C),{})}),T=e({allowedEvents:i(o(s()))}),E=e({connections:i(o(s())),model:i(f),access:i(g),integrations:i(n(s(),T)),disabled:i(a())}),D=n(b,r([a(),E]));function O(e){let t=e?.mcp;return!t||typeof t!=`object`?e:{...e,mcp:Object.fromEntries(Object.entries(t).map(([e,t])=>{if(!t||typeof t!=`object`)return[e,t];let{repository:n,...r}=t;return[e,r]}))}}const k={permissions:`access`},A=e=>e.flatMap(e=>e.code===`unrecognized_keys`&&!e.path.length?e.keys.map(e=>k[e]?`${e} was replaced by ${k[e]}, remove ${e}`:`${e} is not an agent setting, remove it`):p([e]));function j(e){let t=(e&&typeof e==`object`?Object.keys(e):[]).filter(e=>!(e in w.shape)),n=Object.fromEntries(t.filter(e=>k[e]).map(e=>[e,k[e]])),r=t.filter(e=>!k[e]);return{...Object.keys(n).length?{renamed:n}:{},...r.length?{unknown:r}:{}}}function M(e){let t=w.safeParse(O(e));return t.success?[]:A(t.error.issues)}function N(e,t,n=!0){let r=w.safeParse(O(t));if(!r.success)throw Error(`Invalid agent definition "${e}": ${A(r.error.issues).join(`; `)}`);let{$schema:i,...a}=r.data;return _(a.mcp,n),a}function P(e){if(e===void 0)return{};let t=D.safeParse(e);if(!t.success)throw Error(`Invalid agents usage: ${p(t.error.issues).join(`; `)}`);return Object.fromEntries(Object.entries(t.data).map(([e,t])=>{if(typeof t==`boolean`||!t.model)return[e,t];let{model:n,...r}=t;return[e,{...r,...m(n)}]}))}function F({engine:e,model:t,effort:n,...r}){return e||t?{...r,model:[e,t,n].filter(Boolean).join(`/`)}:r}function I(e){return e?.events?Array.isArray(e.events)?e.events:Object.keys(e.events):[]}function L(e,t){if(!e?.events)return;if(Array.isArray(e.events))return e.events.includes(t)?{}:void 0;if(!Object.prototype.hasOwnProperty.call(e.events,t))return;let n=e.events[t];return n===!0?{}:n}function R(e,t){let n=Object.fromEntries(Object.entries(e.integrations).map(([e,n])=>{let r=n.events??[],i=Array.isArray(r)?Object.fromEntries(r.map(e=>[e,!0])):r;if(!Object.keys(i).some(e=>e in t))return[e,n];let a=Object.entries(i).map(([e,n])=>e in t?[e,!t[e]||{match:t[e]}]:[e,n]);return[e,{...n,events:Object.fromEntries(a)}]}));return{...e,integrations:n}}function z(e,t){let n=[],r=Object.keys(t).sort().join(`, `)||`none`;for(let i of e){for(let[e,a]of Object.entries(i.definition.integrations)){let o=`agents.${i.id}.integrations.${e}`,s=t[e];if(!s){n.push(`${o}: unknown integration; valid: ${r}`);continue}let c=Object.keys(s.events).sort().join(`, `)||`none`;for(let e of I(a)){e in s.events||n.push(`${o}.events.${e}: unknown event; valid: ${c}`);let t=L(a,e)?.match;if(t!==void 0)try{new RegExp(t)}catch{n.push(`${o}.events.${e}.match: invalid regex`)}}}for(let[e,a]of Object.entries(i.usage?.integrations??{})){let o=`agents.${i.id}.integrations.${e}`,s=t[e];if(!s){n.push(`${o}: unknown integration; valid: ${r}`);continue}let c=Object.keys(s.events).sort().join(`, `)||`none`;for(let e of a.allowedEvents??[])e in s.events||n.push(`${o}.allowedEvents: unknown event "${e}"; valid: ${c}`)}}return n}function B(e,t){return v(e.definition.access,e.usage?.access,t)}function V(e,t){let n=I(e.definition.integrations[t]),r=e.usage?.integrations?.[t]?.allowedEvents;return r===void 0?n:n.filter(e=>r.includes(e))}function H(e){let{engine:t,model:n,effort:r}=e.usage??{};return t||n?{engine:t,model:n,effort:r}:e.definition?.model?m(e.definition.model):{}}function U(e,t){let n={};for(let r of Object.keys(e.definition.integrations)){let i=y[r];i&&(n[r]=i.tools.presets[B(e,t)])}return n}function W(e,t,n){if(!y[e.integration]||!V(t,e.integration).includes(e.type))return;let r=L(t.definition.integrations[e.integration],e.type);if(r&&!(r.match!==void 0&&!new RegExp(r.match).test(e.text)))return{tools:U(t,n)}}function G(e,t){return t.flatMap(t=>{let n=W(e,t);return n?[{agent:t,...n}]:[]})}export{H as a,G as c,j as d,F as f,M as i,N as l,R as m,U as n,L as o,z as p,I as r,W as s,B as t,P as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{W as t,p as n}from"./state-
|
|
1
|
+
import{Ea as e}from"./args-CJsHYWbt.js";import{W as t,p as n}from"./state-CxAUec80.js";import r from"node:path";import{fileURLToPath as i}from"node:url";import a from"node:fs";var o=e({builtinFlowsDir:()=>c,discoverFlows:()=>d,flowsIn:()=>l,resolveFlow:()=>p});const s=[`.ts`,`.mjs`,`.js`];function c(){let e=r.dirname(i(import.meta.url)),t=e;for(;r.basename(t)!==`dist`&&r.dirname(t)!==t;)t=r.dirname(t);return r.basename(t)===`dist`?r.join(t,`flow`,`builtin`):r.join(e,`builtin`)}function l(e,t){let n=[];try{n=a.readdirSync(e)}catch{return[]}let i=[];for(let o of n.sort()){let n=r.extname(o);if(s.includes(n)&&!o.endsWith(`.d.ts`)){i.push({name:r.basename(o,n),path:r.join(e,o),scope:t});continue}let c=s.map(t=>r.join(e,o,`index${t}`)).find(e=>a.existsSync(e));c&&i.push({name:o,path:c,scope:t})}return i}function u(e){let i=t(e),a=[],o=r.resolve(e);for(;a.push({dir:r.join(o,`.coder`,`flows`),scope:`workspace`}),o!==i&&r.dirname(o)!==o;)o=r.dirname(o);return a.push({dir:n(`flows`),scope:`global`}),a}function d(e){let t=new Set,n=[];for(let{dir:r,scope:i}of u(e))for(let e of l(r,i))t.has(e.name)||(t.add(e.name),n.push(e));for(let e of l(c(),`builtin`))t.has(e.name)||n.push(e);return n}function f(e){return e.includes(`/`)||s.includes(r.extname(e))}function p(e,t){if(f(e)){let n=r.resolve(t,e);if(a.existsSync(n))return{name:r.basename(n,r.extname(n)),path:n};throw Error(`Flow file not found: ${e}`)}let n=d(t).find(t=>t.name===e);if(!n)throw Error(`No flow named "${e}". Run \`coder flow discover\` to see available flows.`);return{name:n.name,path:n.path,scope:n.scope}}export{p as a,l as i,d as n,o as r,c as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A as e,Ea as t,Wi as n,g as r,ha as i,j as a,k as o,la as s,ma as c,pa as l,pn as u}from"./args-CJsHYWbt.js";import{t as d}from"./errors-DK_trCff.js";import{$ as f,G as p,J as m,M as h,N as g,P as _,T as v,V as y,Z as b,_ as x,_t as S,bt as C,ct as w,ft as T,g as E,gt as D,k as O,mt as k,o as A,ot as j,st as M,tt as N,v as ee,vt as te}from"./state-
|
|
1
|
+
import{A as e,Ea as t,Wi as n,g as r,ha as i,j as a,k as o,la as s,ma as c,pa as l,pn as u}from"./args-CJsHYWbt.js";import{t as d}from"./errors-DK_trCff.js";import{$ as f,G as p,J as m,M as h,N as g,P as _,T as v,V as y,Z as b,_ as x,_t as S,bt as C,ct as w,ft as T,g as E,gt as D,k as O,mt as k,o as A,ot as j,st as M,tt as N,v as ee,vt as te}from"./state-CxAUec80.js";import{C as ne,I as re,K as P,M as ie,N as F,P as ae,R as oe,S as se,T as ce,Y as le,Z as ue,a as de,i as fe,k as pe,l as me,m as he,o as ge,p as _e,t as ve,w as ye}from"./config-_32PHl9g.js";import{g as I}from"./connections-B90TemYf.js";import{_ as be,a as xe,c as Se,d as Ce,f as we,l as L,s as Te,u as Ee,v as R}from"./app-server-dnlLhhZb.js";import{a as De}from"./http-615JJgHo.js";import{a as Oe,r as ke,t as Ae}from"./sessions-BGUfSe8L.js";import{i as je,n as Me,r as z,t as Ne}from"./update-check-Bap3dwaj.js";import{S as Pe,b as Fe}from"./approvals-C8XV7CK2.js";import B from"node:path";import V from"node:process";import{fileURLToPath as Ie}from"node:url";import H from"node:fs";import{execFileSync as Le,spawn as Re,spawnSync as U}from"node:child_process";import W from"node:os";import ze from"node:readline";import{createHash as Be,randomUUID as G}from"node:crypto";import{setImmediate as Ve}from"node:timers/promises";function He(e,t){let n=`${e}.${G()}.tmp`;H.writeFileSync(n,JSON.stringify(t),{flag:`wx`}),H.renameSync(n,e)}function Ue(e,t){let n=H.mkdtempSync(B.join(W.tmpdir(),e)),r=new Map,i=!1,a=()=>{try{for(let e of H.readdirSync(n)){if(!e.endsWith(`.request.json`))continue;let a=e.slice(0,-13),o=B.join(n,e),s=B.join(n,`${a}.response.json`);if(H.existsSync(s)){H.rmSync(o,{force:!0});continue}if(r.has(a))continue;let c=`${o}.processing`;H.renameSync(o,c);let l=(async()=>{let e;try{let n=JSON.parse(H.readFileSync(c,`utf8`));if(n.id!==a)throw Error(`Invalid control request id.`);e={id:a,result:await t(n,i)}}catch(t){let n=t;e={id:a,error:{message:n.message,retryable:n.retryable===!0,rpcCode:n.rpcCode}}}He(s,e),H.rmSync(c,{force:!0})})();r.set(a,l),l.finally(()=>r.delete(a)).catch(()=>{})}}catch{}},o=te(n,a),s=setInterval(a,3e4);return s.unref(),{endpoint:`file:${n}`,async close(){if(i)return;i=!0,clearInterval(s);let e=Date.now()+3e3;try{for(;a(),await Promise.allSettled([...r.values()]),await Ve(),!(!H.existsSync(n)||!H.readdirSync(n).some(e=>e.endsWith(`.reader`))||Date.now()>=e);)await o.wait(e-Date.now())}finally{o.close(),H.rmSync(n,{recursive:!0,force:!0})}}}}async function We(e,t,n,r){if(!e)return{ok:!1,retryable:!0,detail:`${r} endpoint is not ready.`};if(!e.startsWith(`file:`)||e.length===5)return{ok:!1,retryable:!1,detail:`Unsupported ${r} endpoint: ${e}`};let i=e.slice(5),a=te(i),o=B.join(i,`${G()}.reader`),s=!1;try{H.writeFileSync(o,``);let e=B.join(i,`${t.id}.response.json`);H.existsSync(e)||He(B.join(i,`${t.id}.request.json`),t),s=!0;let c=Date.now()+n;await Ve();let l=await a.until(()=>{try{let n=JSON.parse(H.readFileSync(e,`utf8`));if((!t.command||n?.error?.retryable)&&H.rmSync(e,{force:!0}),n?.id!==t.id)throw Error(`Malformed ${r} response id.`);if(n.error)return{ok:!1,retryable:n.error.retryable===!0,detail:String(n.error.message)};if(!(`result`in n))throw Error(`Malformed ${r} response.`);return{ok:!0,retryable:!1,result:n.result,detail:`${r} accepted control.`}}catch(e){if(e.code!==`ENOENT`)throw e;if(!H.existsSync(i))throw Error(`${r} endpoint closed after control publication; acceptance is unknown.`)}},Math.max(0,c-Date.now()));if(l)return l;throw Error(`Timed out waiting for ${r} acknowledgement.`)}catch(e){return{ok:!1,retryable:!s&&e.code===`ENOENT`,detail:e instanceof Error?e.message:String(e)}}finally{a.close(),H.rmSync(o,{force:!0})}}const Ge=/^([a-f0-9-]{36})\.(?:req|applying)\.json$/,Ke=2**40;function qe(e,t){let n=Be(`sha256`).update(t).digest();return{task:e,generation:0,seq:Ke+n.readUInt32BE(0)}}function Je(e){if(!e)return G();if(!e.task||!Number.isInteger(e.generation)||e.generation<0||!Number.isInteger(e.seq)||e.seq<0)throw Error(`Invalid command key`);let t=Be(`sha256`).update(JSON.stringify([e.task,e.generation,e.seq])).digest(`hex`).slice(0,32);return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}const Ye=[`hint`,`taskId`,`payload`,`approval`,`result`,`runId`,`status`];function Xe(e,t){let n=`${e}.${G()}.tmp`;H.writeFileSync(n,JSON.stringify(t),{encoding:`utf8`,flag:`wx`}),H.renameSync(n,e)}async function Ze(e,t,n){let{dir:r}=n,i=n.id??G(),a=B.join(r,`${i}.res.json`);H.existsSync(a)||Xe(B.join(r,`${i}.req.json`),{kind:e,payload:t});let o=Date.now();for(;!H.existsSync(a);){if(n.timeoutMs&&Date.now()-o>=n.timeoutMs)throw Error(`Worker control timed out`);await new Promise(e=>setTimeout(e,100))}let{result:s,error:c}=JSON.parse(H.readFileSync(a,`utf8`));if(n.keepReply||H.rmSync(a,{force:!0}),c){let{code:e,message:t,...n}=c;throw new d(e,t,n)}return s}function Qe(e,t){H.mkdirSync(e,{recursive:!0});let n=new Set,r=async(r,i)=>{let a;try{let n=B.join(e,r);if(!H.lstatSync(n).isFile())throw Error(`mailbox request is not a regular file`);let{kind:o,payload:s}=JSON.parse(H.readFileSync(n,`utf8`)),c=B.join(e,`${i}.applying.json`);H.existsSync(c)||Xe(c,{kind:o,payload:s});let l=Object.hasOwn(t,o)?t[o]:void 0;if(!l)throw Error(`unknown mailbox request "${o}"`);a={result:await l(s??{})??null}}catch(e){let t=e instanceof d?e:void 0;a={error:{code:t?.code??`invalid-option`,message:e instanceof Error?e.message:String(e),...Object.fromEntries(Ye.flatMap(e=>t?.[e]===void 0?[]:[[e,t[e]]]))}}}try{Xe(B.join(e,`${i}.res.json`),a),H.rmSync(B.join(e,`${i}.req.json`),{force:!0}),H.rmSync(B.join(e,`${i}.applying.json`),{force:!0}),n.delete(i)}catch{}},i=setInterval(()=>{let t=[];try{t=H.readdirSync(e)}catch{return}for(let i of t){let t=Ge.exec(i)?.[1];if(t){if(H.existsSync(B.join(e,`${t}.res.json`))){H.rmSync(B.join(e,i),{force:!0});continue}n.has(t)||(n.add(t),r(i,t))}}},100);return()=>clearInterval(i)}function $e(e){let t=e instanceof Error?e.message:String(e);return/no active turn|active turn.*(?:ended|completed)|turn.*(?:already )?(?:ended|completed)|turn.*not active/i.test(t)}function K(e,t,n){return Object.assign(Error(e),{retryable:t,...n===void 0?{}:{rpcCode:n}})}function et(e,t,n,r){if(!e||e.id!==t||e.method!==`turn/steer`&&e.method!==`turn/interrupt`)throw K(`Invalid Codex control request.`,!1);let i=e.params;if(!i||typeof i!=`object`||i.threadId!==n)throw K(`Codex control request does not match its owning thread.`,!1);if(e.method===`turn/interrupt`){if(i.turnId!==r)throw K(`Codex turn/interrupt request does not match its owning active turn.`,!1);return{method:e.method,params:i}}if(i.expectedTurnId!==r)throw K(`Codex turn/steer request does not match its owning active turn.`,!1);let a=i.input;if(!Array.isArray(a)||a.length!==1||a[0]?.type!==`text`||typeof a[0]?.text!=`string`||!a[0].text.trim())throw K(`Invalid Codex turn/steer input schema.`,!1);return{method:e.method,params:i}}async function tt(e,{threadId:t,turnId:n}){return Ue(`coder-codex-control-`,async(r,i)=>{if(i)throw K(`Codex owner endpoint is shutting down.`,!0);let a=et(r,r.id,t,n);try{let n=await e.request(a.method,a.params);return a.method===`turn/interrupt`&&await e.request(`thread/backgroundTerminals/clean`,{threadId:t}),n}catch(e){throw K(e instanceof Error?e.message:String(e),$e(e),e.rpcCode)}})}function nt(e){if(e?.startsWith(`file:`)&&e.length>5){let t=B.resolve(e.slice(5)),n=B.resolve(W.tmpdir());B.dirname(t)===n&&B.basename(t).startsWith(`coder-codex-control-`)&&H.rmSync(t,{recursive:!0,force:!0})}}async function rt(e,t,n,r=3e3,i){return We(e,{id:Je(i),method:t,params:n,command:i},r,`Codex control`)}const it=`Coder Task`;function at(e,t=72){let n=String(e??``).trim().replace(/\s+/g,` `);return n?n.length<=t?n:`${n.slice(0,t-3)}...`:``}function ot(e){let t=at(e,56);return t?`${it}: ${t}`:it}function st(e){return e?.params?.threadId??null}function ct(e){return e?.params?.turnId?e.params.turnId:e?.params?.turn?.id?e.params.turn.id:null}function lt(e,t){let n=[];for(let r of e.matchAll(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/gm)){let e=t===`delete`,i=Number(e?r[1]:r[3]),a=Number((e?r[2]:r[4])??1);!Number.isFinite(i)||!Number.isFinite(a)||n.push(a<=1?`L${i}`:`L${i}-L${i+a-1}`)}return n}function ut(e){try{let t=H.readFileSync(e,`utf8`),n=t?t.split(/\r\n|\r|\n/).length-+!!t.endsWith(`
|
|
2
2
|
`):0;return n>0?[n===1?`L1`:`L1-L${n}`]:[]}catch{return[]}}function dt(e,t,n){let r=typeof e.kind==`string`?e.kind:e.kind?.type??`change`,i=e.path||`(unknown path)`,a=lt(e.diff??``,r),o=a.length||r!==`add`||!t?a:ut(i),s=typeof e.kind==`object`&&e.kind?.move_path?` -> ${n?S(n,e.kind.move_path):e.kind.move_path}`:``;return`${r} ${n?S(n,i):i}${s}${o.length?` ${o.join(`, `)}`:``}`}function ft(e,t=!1,n){return(e.changes??[]).map(e=>dt(e,t,n)).join(`; `)}function pt(e){let t=e.trim().split(` `)[0]??``;return t===`/dev/null`?``:t.replace(/^[ab]\//,``)}function mt(e,t){let n=new Map,r=``,i=``;for(let t of e.split(/\r?\n/)){if(t.startsWith(`--- `)){r=pt(t.slice(4));continue}if(t.startsWith(`+++ `)){i=pt(t.slice(4));continue}let e=/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/.exec(t);if(!e)continue;let a=Number(e[1]),o=Number(e[2]??1),s=Number(e[3]),c=Number(e[4]??1),l=c===0,u=(l?r:i)||i||r||`(unknown path)`,d=l?a:s,f=l?o:c,p=f<=1?`L${d}`:`L${d}-L${d+f-1}`,m=n.get(u)??[];m.push(p),n.set(u,m)}return[...n].map(([e,n])=>`${t?S(t,e):e} ${n.join(`, `)}`).join(`; `)}function ht(e){if(!e||typeof e!=`object`)return null;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=t(e.inputTokens),r=t(e.cachedInputTokens),i=t(e.outputTokens);return{input:n,cachedInput:r,output:i,total:t(e.totalTokens)||n+r+i}}function gt(e){if(e.tokenUsageByThread.size===0)return null;let t={input:0,cachedInput:0,output:0,total:0};for(let[n,r]of e.tokenUsageByThread){let i=e.tokenUsageBaselineByThread.get(n);t.input+=Math.max(0,r.input-(i?.input??0)),t.cachedInput+=Math.max(0,r.cachedInput-(i?.cachedInput??0)),t.output+=Math.max(0,r.output-(i?.output??0)),t.total+=Math.max(0,r.total-(i?.total??0))}return t}function _t(e){return String(e??``).replace(/\s+/g,` `).trim()}function q(e){if(!e)return[];if(typeof e==`string`){let t=_t(e);return t?[t]:[]}if(Array.isArray(e))return e.flatMap(e=>q(e));if(typeof e==`object`){let t=e;if(typeof t.text==`string`)return q(t.text);if(`summary`in t)return q(t.summary);if(`content`in t)return q(t.content);if(`parts`in t)return q(t.parts)}return[]}function vt(e,t){let n=[];for(let r of[...e,...t]){let e=_t(r);!e||n.includes(e)||n.push(e)}return n}function J(e,t,n=null,r={}){!e||t==null||e({message:t,phase:n,...r})}function yt(e,t){t&&J(e,t.message,t.phase??null,t.extra??{})}function bt(e){return e.replace(/^\/(?:usr\/)?bin\/\w*sh\s+-l?c\s+/,``)}function xt(e,t){let n=e?.extra?.kind;return!e||n!==`tool`&&n!==`tool-result`||typeof t.id!=`string`?e:{...e,extra:{...e.extra,callId:t.id}}}function Y(e){return e==null?``:typeof e==`string`?e:JSON.stringify(e)}function St(e){let t=String(e.tool||e.name||e.kind||e.type||`tool`),n=Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null&&![`id`,`type`,`kind`,`name`,`tool`,`status`,`result`,`results`,`output`,`error`,`contentItems`,`success`,`durationMs`,`exitCode`].includes(e))),r=Object.keys(n).length?Y(n):``;return{message:r?`${t} ${r}`:t,phase:`investigating`,extra:{kind:`tool`,tool:t}}}function Ct(e,t){switch(e.type){case`commandExecution`:return{message:bt(String(e.command??``).trim())||`command`,phase:`running`,extra:{kind:`tool`,tool:`command`}};case`fileChange`:return{message:ft(e,!1,t)||`edit`,phase:`editing`,extra:{kind:`tool`,tool:`edit`}};case`mcpToolCall`:return{message:[`${e.server}/${e.tool}`,Y(e.arguments)].filter(Boolean).join(` `),phase:`investigating`,extra:{kind:`tool`,tool:String(e.tool??``)}};case`dynamicToolCall`:return{message:[[e.namespace,e.tool||`tool`].filter(Boolean).join(`/`),Y(e.arguments)].filter(Boolean).join(` `),phase:`investigating`,extra:{kind:`tool`,tool:String(e.tool??``)}};case`webSearch`:{let t=e.action,n=Array.isArray(t?.queries)?t.queries.filter(e=>typeof e==`string`&&e.trim()):[],r=n.length?n.join(`; `):String(t?.query||e.query||``).trim()||Y(t);return{message:r?`search: ${r}`:`search`,phase:`investigating`,extra:{kind:`tool`,tool:`search`}}}case`agentMessage`:case`reasoning`:case`userMessage`:return null;default:return St(e)}}function wt(e,t){switch(e.type){case`agentMessage`:{let t=String(e.text??``).trim();return t?{message:t,phase:null,extra:{kind:`assistant`}}:null}case`reasoning`:{let t=q(e.summary).join(`
|
|
3
3
|
`);return t?{message:t,phase:null,extra:{kind:`reasoning`}}:null}case`commandExecution`:{let t=typeof e.exitCode==`number`?e.exitCode:null;return{message:String(e.aggregatedOutput??``).trim(),phase:`running`,extra:{kind:`tool-result`,tool:`command`,command:String(e.command??``).trim(),durationMs:e.durationMs,...t===null?{isError:e.status!==`completed`}:{exitCode:t}}}}case`fileChange`:return{message:ft(e,!0,t)||`(details unavailable)`,phase:`editing`,extra:{kind:`tool-result`,tool:`edit`,isError:e.status!==`completed`}};case`mcpToolCall`:return{message:Y(e.error??e.result)||`${e.server}/${e.tool} ${e.status}`,phase:`investigating`,extra:{kind:`tool-result`,tool:String(e.tool??``),durationMs:e.durationMs,isError:e.status!==`completed`||e.error!=null}};case`dynamicToolCall`:return{message:Y(e.contentItems)||`${e.tool} ${e.status}`,phase:`investigating`,extra:{kind:`tool-result`,tool:String(e.tool??``),durationMs:e.durationMs,isError:e.status!==`completed`||e.success===!1}};case`userMessage`:return null;default:return{message:Y(e.error??e.result??e.results??e.output??e.action??e),phase:`investigating`,extra:{kind:`tool-result`,tool:Ct(e,t)?.extra?.tool,durationMs:e.durationMs,isError:e.status===`failed`||e.status===`declined`||e.success===!1||e.error!=null}}}}function Tt(e,t={}){let n,r,i=new Promise((e,t)=>{n=e,r=t});return{threadId:e,rootThreadId:e,threadIds:new Set([e]),threadTurnIds:new Map,turnId:null,bufferedNotifications:[],completion:i,resolveCompletion:n,rejectCompletion:r,finalTurn:null,completed:!1,finalAnswerSeen:!1,pendingCollaborations:new Set,activeSubagentTurns:new Set,completionTimer:null,lastAgentMessage:``,reasoningSummary:[],reasoningStartedAt:new Map,error:null,fileChanges:[],commandExecutions:[],tokenUsageByThread:new Map,tokenUsageBaselineByThread:new Map,lastDiffSummary:``,loggedTokens:0,reportedChanges:new Set,cwd:t.cwd??``,itemIndex:new Map,onProgress:t.onProgress??null,onHeartbeat:t.onHeartbeat??null}}function Et(e){e.completionTimer&&=(clearTimeout(e.completionTimer),null)}function Dt(e,t=null){e.completed||(Et(e),e.completed=!0,t?(e.finalTurn=t,e.turnId||=t.id??null):e.finalTurn||={id:e.turnId??`inferred-turn`,status:`completed`},e.resolveCompletion(e))}function Ot(e){e.completed||e.finalTurn||!e.finalAnswerSeen||e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||(Et(e),e.completionTimer=setTimeout(()=>{e.completionTimer=null,!(e.completed||e.finalTurn||!e.finalAnswerSeen)&&(e.pendingCollaborations.size>0||e.activeSubagentTurns.size>0||Dt(e,null))},250),e.completionTimer.unref?.())}function kt(e,t){let n=st(t);if(!n||!e.threadIds.has(n))return!1;let r=e.threadTurnIds.get(n)??null,i=ct(t);return r===null||i===null||i===r}function At(e,t,n,r=null){if(t.id&&e.itemIndex.set(t.id,t),t.type===`collabAgentToolCall`){(!r||r===e.threadId)&&(n===`started`||t.status===`inProgress`?e.pendingCollaborations.add(t.id):n===`completed`&&(e.pendingCollaborations.delete(t.id),Ot(e)));for(let n of t.receiverThreadIds??[])e.threadIds.add(n)}if(t.type===`agentMessage`){t.text&&(!r||r===e.threadId)&&(e.lastAgentMessage=t.text.trim(),n===`completed`&&t.phase===`final_answer`&&(e.finalAnswerSeen=!0,Ot(e)));return}if(t.type===`reasoning`&&n===`completed`){e.reasoningSummary=vt(e.reasoningSummary,q(t.summary));return}if(t.type===`fileChange`&&n===`completed`){e.fileChanges.push(t);return}t.type===`commandExecution`&&n===`completed`&&e.commandExecutions.push(t)}function jt(e,t){switch(e.onHeartbeat?.(),t.method){case`thread/started`:e.threadIds.add(t.params.thread.id);break;case`turn/started`:e.threadIds.add(t.params.threadId),e.threadTurnIds.set(t.params.threadId,t.params.turn.id),(t.params.threadId??null)!==e.threadId&&e.activeSubagentTurns.add(t.params.threadId),J(e.onProgress,`Turn started (${t.params.turn.id}).`,`starting`,{kind:`status`,threadId:t.params.threadId??null,turnId:t.params.turn.id??null});break;case`item/started`:t.params.item?.type===`reasoning`&&t.params.item.id&&e.reasoningStartedAt.set(`${t.params.threadId}:${t.params.item.id}`,Date.now()),At(e,t.params.item,`started`,t.params.threadId??null),yt(e.onProgress,xt(Ct(t.params.item,e.cwd),t.params.item));break;case`item/completed`:{let n={...e.itemIndex.get(t.params.item.id),...t.params.item};if(At(e,n,`completed`,t.params.threadId??null),n?.type===`fileChange`)for(let t of n.changes??[])t.path&&e.reportedChanges.add(S(e.cwd,t.path));let r=xt(wt(n,e.cwd),n);if(r?.extra?.kind===`tool-result`){let t=Ct(n,e.cwd);r.extra={...r.extra,callMessage:n.type===`fileChange`?r.message:t?.message}}if(n?.type===`reasoning`){let i=`${t.params.threadId}:${n.id}`,a=e.reasoningStartedAt.get(i);e.reasoningStartedAt.delete(i),r&&(r.extra={...r.extra,durationMs:Math.max(0,Date.now()-(a??Date.now()))})}yt(e.onProgress,r);break}case`thread/tokenUsage/updated`:{let n=ht(t.params?.tokenUsage?.last),r=st(t);r===e.threadId&&t.params?.tokenUsage?.last&&(e.contextTokens=n?.total);let i=ht(t.params?.tokenUsage?.total??t.params?.tokenUsage);if(i&&r){n&&!e.tokenUsageByThread.has(r)&&e.tokenUsageBaselineByThread.set(r,{input:Math.max(0,i.input-n.input),cachedInput:Math.max(0,i.cachedInput-n.cachedInput),output:Math.max(0,i.output-n.output),total:Math.max(0,i.total-n.total)}),e.tokenUsageByThread.set(r,i);let t=gt(e);t&&(!e.loggedTokens||t.total-e.loggedTokens>=1e3)&&(e.loggedTokens=t.total,e.onProgress?.({kind:`usage`,tokens:t,context:e.contextTokens??null}))}break}case`turn/diff/updated`:{let n=mt(String(t.params?.diff??``),e.cwd).split(`; `).filter(t=>!e.reportedChanges.has(t.split(` `)[0]??``)).join(`; `);n&&n!==e.lastDiffSummary&&(e.lastDiffSummary=n,J(e.onProgress,`changed: ${n}`,`editing`,{kind:`status`}));break}case`item/autoApprovalReview/completed`:{let n=t.params?.review??{},r=t.params?.action??{},i=bt(String(r.command??r.type??``).trim());J(e.onProgress,`Auto-review ${n.status}. ${at(i,48)}${n.rationale?`. ${at(n.rationale,320)}`:``}`,null,{kind:`auto-review`,decision:String(n.status??``),...n.riskLevel?{riskLevel:String(n.riskLevel)}:{},...i?{summary:`run command: ${i}`}:{},...n.rationale?{reason:String(n.rationale)}:{}});break}case`error`:e.error=t.params.error,J(e.onProgress,`Codex error: ${t.params.error.message}`,`failed`,{kind:`error`});break;case`turn/completed`:if((t.params.threadId??null)!==e.threadId){e.activeSubagentTurns.delete(t.params.threadId),Ot(e);break}J(e.onProgress,`Turn ${t.params.turn.status}.`,`finalizing`,{kind:`status`}),Dt(e,t.params.turn)}}async function Mt(e,t,n,r={}){let i=Tt(t,r),a=e.notificationHandler;e.setNotificationHandler(e=>{if(!i.turnId){i.bufferedNotifications.push(e);return}if(e.method===`thread/started`){jt(i,e);return}if(!kt(i,e)){a?.(e);return}jt(i,e)});let o=r.onApprovalRequest;o&&e.setServerRequestHandler((e,t)=>o(e,t,i));try{let t=await n();i.turnId=t.turn?.id??null,i.turnId&&(i.threadTurnIds.set(i.threadId,i.turnId),await r.onTurnStarted?.(i.turnId));for(let e of i.bufferedNotifications)kt(i,e)?jt(i,e):a?.(e);i.bufferedNotifications.length=0,t.turn?.status&&t.turn.status!==`inProgress`&&Dt(i,t.turn);let o=e.exitPromise?.then(()=>{throw e.exitError??Error(`codex app-server connection closed before the turn completed.`)});return await(o?Promise.race([i.completion,o]):i.completion)}finally{Et(i),e.setNotificationHandler(a??null),e.setServerRequestHandler(null)}}function Nt(e,t,n=[]){return e===`read-only`?t?{type:`readOnly`,networkAccess:t}:null:e!==`workspace-write`||!n.length?null:{type:`workspaceWrite`,writableRoots:n,networkAccess:t??!1,excludeTmpdirEnvVar:!0,excludeSlashTmp:!0}}function Pt(e=[],t=[],n=!1){let r=Object.fromEntries((n?[]:t).map(e=>[e,{enabled:!1}])),i=new Set([...t,...e.map(e=>e.name)]);for(let n of e){let e=n.name;if(t.includes(e)){for(let t=1;i.has(e);t++)e=`${n.name}_coder_${t}`;i.add(e)}r[e]={...n.url?{url:n.url,...n.headers?{http_headers:n.headers}:{}}:{command:n.command,args:n.args??[],...n.env?{env:n.env}:{}},default_tools_approval_mode:`approve`}}return Object.keys(r).length?{mcp_servers:r}:{}}function Ft({developerInstructions:e,mcpServers:t=[]}){return[e,...t.flatMap(({alwaysLoad:e,instructions:t,name:n})=>e&&t?[`<mcp-instructions server="${n}">\n${t}\n</mcp-instructions>`]:[])].filter(Boolean).join(`
|
|
4
4
|
|
|
@@ -8,5 +8,5 @@ import{A as e,Ea as t,Wi as n,g as r,ha as i,j as a,k as o,la as s,ma as c,pa as
|
|
|
8
8
|
`,`\nmetadata:\n version: ${c()}\n---\n`);return H.writeFileSync(r,i),{marketplace:t,installed:!0,note:`Skill installed to ~/.agents/skills/coder; restart running sessions to load it.`}}catch(e){return{marketplace:t,installed:!1,note:`Skill install failed: ${e instanceof Error?e.message:String(e)}`}}}function Jt(){let e=`codex`;if(U(`codex`,[`mcp`,`get`,`coder`],{encoding:`utf8`}).status===0)return{marketplace:e,installed:!0,note:`Coder MCP server already registered with Codex.`};let t=U(`codex`,[`mcp`,`add`,`coder`,`--`,`coder`,`mcp`],{encoding:`utf8`});return{marketplace:e,installed:t.status===0,note:t.status===0?`Coder MCP server registered with Codex; restart running sessions to load it.`:`MCP registration failed; run: codex mcp add coder -- coder mcp`}}function Yt(){let e=B.join(W.homedir(),`.cursor`,`mcp.json`);try{let t=H.existsSync(e)?JSON.parse(H.readFileSync(e,`utf8`)):{},n=e=>typeof e==`object`&&!!e&&!Array.isArray(e);if(!n(t)||t.mcpServers!==void 0&&!n(t.mcpServers))throw Error(`Invalid MCP configuration`);let r=t.mcpServers??{};return Object.hasOwn(r,`coder`)?{marketplace:e,installed:!0,note:`Coder MCP server already registered with Cursor.`}:(H.mkdirSync(B.dirname(e),{recursive:!0}),H.writeFileSync(e,JSON.stringify({...t,mcpServers:{...r,coder:{type:`stdio`,command:`coder`,args:[`mcp`]}}},null,2)+`
|
|
9
9
|
`,{mode:384}),{marketplace:e,installed:!0,note:`Coder MCP server registered in ~/.cursor/mcp.json; restart running sessions to load it.`})}catch{return{marketplace:e,installed:!1,note:`MCP registration failed; merge a coder entry with command "coder" and args ["mcp"] into ~/.cursor/mcp.json.`}}}function Xt(e){if(e.available)return null;let t=U(`npm`,[`install`,`-g`,`@openai/codex@latest`],{encoding:`utf8`});return t.status===0?{installed:!0,note:`codex CLI installed (runs your custom models; no login needed for them)`}:{installed:!1,note:`custom models run on the codex CLI and it is not installed; auto-install failed: ${(t.stderr||`npm not found`).trim()}. Run: npm install -g @openai/codex`}}const Zt=`0.159.1`,Qt={codex:{"gpt-6-astra":`0.154.0`,"gpt-6-sol":`0.156.1`,"gpt-6-luna":`0.156.1`,"gpt-6.1-sol":`0.159.1`},claude:{sonnet:`2.1.197`,fable:`2.1.257`,opus:`2.1.280`}};function $t(e){let t=/(\d+\.\d+\.\d+)/.exec(String(e??``));return t?t[1]:null}function en(e,t,n){let r=t?Qt[e][t]:void 0,i=$t(n.detail);return!r||!i||z(i,r)>=0?null:`${e} ${i} predates ${t} (needs ${r}), so it may fail or run another model. Run: ${e} update`}function tn(e){if(!e.available)return null;let t=$t(e.detail);if(!t||z(t,Zt)>=0)return null;let n=U(`codex`,[`update`],{encoding:`utf8`});return n.status!==0&&(n=U(`npm`,[`install`,`-g`,`@openai/codex@latest`],{encoding:`utf8`})),n.status===0?{updated:!0,from:t}:{updated:!1,from:t,note:`codex ${t} is too old for the default codex model (needs >= ${Zt}); auto-update failed: ${(n.stderr||`codex/npm not found`).trim()}. Run: codex update`}}async function nn(e,t={},n){let r=t.hosts??[],a=r.find(e=>![`claude`,`agents`,`codex`,`cursor`].includes(e));if(a)throw new d(`invalid-option`,`Unknown host "${a}". Use claude, agents, codex or cursor.`,{hint:`Codex, Pi, OpenCode, and other Agent Skills hosts: coder setup-host agents`});let o=e=>r.includes(e);n?.();let s=X(e),c=tn(s);c?.updated&&(s=X(e));let l=s.available?await zt(e):{loggedIn:!1,detail:s.detail},u=Q(),f=u.available?Mn():{loggedIn:!1,detail:u.detail},p=ae();if(!H.existsSync(p)){let e=!s.available&&u.available?[`claude/opus`,`codex/sol`]:[`codex/sol`,`claude/opus`];P({...M,chain:e})}let m=i(),h=o(`claude`)?Wt(m):null,g=o(`agents`)||o(`codex`)||o(`cursor`)?qt(m):null,_=[];(o(`codex`)||s.available&&(o(`agents`)||!r.length))&&_.push(Jt()),(o(`cursor`)||!r.length&&H.existsSync(B.join(W.homedir(),`.cursor`)))&&_.push(Yt()),h&&_.push({...h,note:h.installed?`Coder MCP server is declared by the Claude Code plugin.`:`Install the Claude Code plugin to register its Coder MCP server.`});let v=ye(e),y=s.available&&l.loggedIn||u.available&&f.loggedIn;return{codex:{available:s.available,detail:s.detail,auth:l.detail,loggedIn:l.loggedIn},...c?{codexUpdate:c}:{},claude:{available:u.available,detail:u.detail,auth:f.detail,loggedIn:f.loggedIn},configFile:p,runtime:Ie(new URL(`../bin/coder.mjs`,import.meta.url)),...h?{claudePlugin:h}:{},...g?{agentsSkill:g}:{},mcp:_,config:v,ready:y}}async function rn(e={},t){let n=!e.pluginsOnly,r=!e.cliOnly,a=i(),o=B.join(a,`plugins/claude/.claude-plugin/plugin.json`),u={cli:c(),claude:l(o)},f={};if(n){let n=je(s),[r,...i]=e.pm&&Ne[e.pm]||n.command,a=e.pm??n.pm;t?.(`via ${a}`);let o=U(r,i,{encoding:`utf8`});if(o.error?.code===`ENOENT`)throw new d(`invalid-option`,`${a} not found on PATH. Re-run with --pm <npm|pnpm|yarn|bun>, or update manually: ${r} ${i.join(` `)}`);if(o.status!==0){let e=(o.stderr||o.stdout||``).trim();throw new d(`invalid-option`,`CLI update failed (${a}).${e?`\n${e}`:``}\nRun manually: ${r} ${i.join(` `)}`)}Me();let l=c();f.cli={pm:a,from:u.cli,to:l,changed:l!==u.cli}}if(r){if(e.claude||!e.codex&&Q().available){let e=Wt(a);f.claudePlugin={installed:e.installed,note:e.note,from:u.claude,to:l(o)}}if(H.existsSync(Gt())){let e=Kt(),t=qt(a);f.agentsSkill={installed:t.installed,note:t.note,from:e,to:Kt()}}}return f}function an(e=[],t={}){return nn(B.resolve(t.cwd??`.`),{hosts:e})}function on(){let e=process.env.CLAUDE_CONFIG_DIR||B.join(W.homedir(),`.claude`);return B.join(e,`projects`)}async function sn(e,t,n){if(!/^[a-zA-Z0-9_-]+$/.test(e))return null;let r=n?B.join(n,`projects`):on(),i=null;for(let n of await H.promises.readdir(r).catch(()=>[])){let a=B.join(r,n,`${e}.jsonl`);if(!H.existsSync(a))continue;let o=H.createReadStream(a,{encoding:`utf8`}),s=ze.createInterface({input:o,crlfDelay:1/0});try{for await(let e of s){let n;try{n=JSON.parse(e)}catch{continue}n.type===`assistant`&&!n.isSidechain&&Date.parse(n.timestamp)>=t&&(i=n.message?.usage??null)}}finally{s.close(),o.destroy()}}return i}function cn(e){if(!e)return!1;let t=on(),n=!1;try{for(let r of H.readdirSync(t)){let i=B.join(t,r,`${e}.jsonl`);H.existsSync(i)&&(H.rmSync(i,{force:!0}),n=!0)}}catch{}return n}const ln=/^[A-Za-z0-9-]{1,128}$/;function un(e){return[...new Set([...e.previousThreadIds??[],...e.threadId?[e.threadId]:[]])]}async function dn(e,t){if(!/^[a-zA-Z0-9_-]+$/.test(t))return[];let n=e.engine===`claude`,r=n?on():Ae(),i=e.id?B.join(y(e.cwd??``,e.id),`history-files.json`):void 0,a=JSON.stringify([e.engine,r,t]),o=i?D(i)??{}:{},s=o[a];if(s?.length&&s.every(e=>e.startsWith(`${r}${B.sep}`)&&H.existsSync(e)))return s;let c=[],l=async(e,r)=>{for(let i of await H.promises.readdir(e,{withFileTypes:!0}).catch(()=>[])){let a=B.join(e,i.name);i.isDirectory()&&r?await l(a,r-1):i.isFile()&&(n?i.name===`${t}.jsonl`:i.name.endsWith(`-${t}.jsonl`))&&c.push(a)}};return n?await l(r,1):(await l(B.join(r,`sessions`),3),await l(B.join(r,`archived_sessions`),0)),i&&c.length&&C(i,{...o,[a]:c}),c}function fn(e,t){let n=t?e.message:e.type===`response_item`?e.payload:void 0;if(!n||!t&&n.type===`reasoning`)return;let r=n.content,i=Array.isArray(r)?r:[],a=n.role??(n.type?.endsWith(`_output`)?`tool`:`assistant`),o=i.some(e=>e.type===`tool_use`)||[`function_call`,`custom_tool_call`].includes(n.type),s=i.some(e=>e.type===`tool_result`)||[`function_call_output`,`custom_tool_call_output`].includes(n.type),c=typeof r==`string`?r:i.length?i.map(e=>typeof e.text==`string`?e.text:JSON.stringify(e)).join(`
|
|
10
10
|
`):JSON.stringify(n);return{speaker:s&&!o?`tool`:a,time:String(e.timestamp??``),text:c,tooling:o||s}}async function*pn(e,t){for(let n of await dn(e,t)){let t=H.createReadStream(n,{encoding:`utf8`}),r=ze.createInterface({input:t,crlfDelay:1/0});try{for await(let t of r){let n;try{n=JSON.parse(t)}catch{continue}let r=fn(n,e.engine===`claude`);r&&(yield r)}}finally{r.close(),t.destroy()}}}async function mn(e,{query:t,from:n=0,limit:r=10,role:i=`all`}={}){if(i!==`all`&&i!==`conversation`)throw Error(`role is all or conversation`);if(t!==void 0&&(typeof t!=`string`||!t.length||t.length>500))throw Error(`Provide a query of 1 to 500 characters`);if(!Number.isSafeInteger(n)||n<0)throw Error(`Provide from as a nonnegative message index`);if(!Number.isInteger(r)||r<1||r>20)throw Error(`Provide a limit of 1 to 20 messages`);let a=[],o=t?.toLowerCase(),s=0;for(let t of un(e))for await(let c of pn(e,t)){if(i===`conversation`&&c.tooling)continue;let e=s++;if(e<n)continue;let t=o===void 0?0:c.text.toLowerCase().indexOf(o);if(t<0)continue;if(a.length===r)return{messages:a,next:a[a.length-1].index+1};let l=Math.max(0,t-200);a.push({index:e,speaker:c.speaker,time:c.time,text:c.text.slice(l,l+1200)})}return{messages:a}}const hn=`coder-mcp-status`;function gn(e){let t=e=>e&&typeof e==`object`&&(typeof e.data==`string`||typeof e.blob==`string`||Object.values(e).some(t)),n=e=>typeof e==`string`?e:t(e)||[`image`,`document`,`audio`,`video`,`file`].includes(e?.type)?`[${e?.type??`binary`}]`:typeof e?.text==`string`?e.text:e==null?``:JSON.stringify(e);return Array.isArray(e)?e.map(n).join(``):n(e)}function _n(e){if(!e)return 0;let t=e.split(/\r\n|\r|\n/);return t.at(-1)===``&&t.pop(),Math.max(1,t.length)}function vn(e,t,n=!1){if(!t)return[];let r;try{r=H.readFileSync(e,`utf8`)}catch{return[]}let i=[],a=0;for(;a<=r.length;){let e=r.indexOf(t,a);if(e<0)break;let o=_n(r.slice(0,e))+1,s=Math.max(1,_n(t));if(i.push(s===1?`L${o}`:`L${o}-L${o+s-1}`),!n)break;a=e+Math.max(t.length,1)}return i.length>4?[...i.slice(0,4),`+${i.length-4} matches`]:i}function yn(e){let t=(typeof e==`string`?e:JSON.stringify(e)??String(e)).replace(/\s+/g,` `).trim();return t.length>80?`${t.slice(0,80)}…`:t}function bn(e,t,n){let r=String(t.file_path??t.notebook_path??t.path??``),i=r?B.isAbsolute(r)?r:B.resolve(n,r):``,a=r?S(n,i)||r:`(unknown path)`,o=t.path?` in ${S(n,String(t.path))}`:``;if(e===`Write`){let e=_n(String(t.content??``));return`Write ${a} ${e?`L1-L${e}`:`(empty file)`}`}if(e===`Edit`){let e=vn(i,String(t.old_string??``),t.replace_all===!0);return`Edit ${a}${e.length?` ${e.join(`, `)}`:``}`}if(e===`MultiEdit`){let e=Array.isArray(t.edits)?t.edits:[],n=e.flatMap(e=>vn(i,String(e?.old_string??``),e?.replace_all===!0));return`MultiEdit ${a}${n.length?` ${n.join(`, `)}`:``} (${e.length} edits)`}if(e===`NotebookEdit`){let e=t.cell_id??t.cell_number;return`NotebookEdit ${a}${e==null?``:` cell ${e}`}`}if(e===`Read`){let e=Number(t.offset??0),n=Number(t.limit??0);return`Read ${a}${e&&n?` L${e}-L${e+n-1}`:e?` from L${e}`:``}`}if(e===`Bash`)return`Bash ${String(t.command??``).trim()||`(no command)`}`;if(e===`Glob`)return`Glob ${String(t.pattern??``)}${o}`;if(e===`Grep`){let e=t.glob?` (${String(t.glob)})`:``;return`Grep ${String(t.pattern??``)}${o}${e}`}if(e===`Task`)return`Task ${t.subagent_type?`${String(t.subagent_type)}: `:``}${yn(t.description??t.prompt??``)}`;if(e===`WebFetch`)return`WebFetch ${String(t.url??``)}`;if(e===`WebSearch`)return`WebSearch ${String(t.query??``)}`;if(e===`TodoWrite`){let e=Array.isArray(t.todos)?t.todos:[];return`TodoWrite ${e.length} item${e.length===1?``:`s`}`}let s=Object.entries(t??{}).map(([e,t])=>`${e}=${yn(t)}`).join(` `);return s?`${e} ${s}`:e}function Z(e){if(!e||typeof e!=`object`)return null;let t=e=>typeof e==`number`&&Number.isFinite(e)?e:0,n=t(e.input_tokens),r=t(e.cache_read_input_tokens)+t(e.cache_creation_input_tokens),i=t(e.output_tokens);return{input:n,cachedInput:r,output:i,total:n+r+i}}function xn(e,t){return Object.assign(Error(e),{retryable:t})}function Sn(e,t){let n=t&&Je(t),r=n&&`${n.slice(0,14)}5${n.slice(15,19)}${(Number.parseInt(n[19],16)&3|8).toString(16)}${n.slice(20)}`;return{type:`user`,...r?{uuid:r}:{},message:{role:`user`,content:[{type:`text`,text:e}]}}}function Cn(e){let t=!0;return{sendInitial(t,n){return new Promise((r,i)=>{e(`${JSON.stringify(Sn(t,n))}\n`,e=>{e?i(e):r()})})},sendSteer(n,r){return t?new Promise((t,i)=>{e(`${JSON.stringify(Sn(n,r))}\n`,e=>{if(!e){t();return}let n=e.code,r=n===`EPIPE`||n===`ERR_STREAM_DESTROYED`||n===`ERR_STREAM_WRITE_AFTER_END`;i(xn(`Failed to write Claude live steer: ${e.message}`,r))})}):Promise.reject(xn(`Claude turn is no longer accepting live input.`,!0))},stopAccepting(){t=!1}}}async function wn(e){return Ue(`coder-claude-steer-`,async(t,n)=>{if(n)throw xn(`Claude turn is no longer accepting live input.`,!0);let r=typeof t?.params?.text==`string`?t.params.text.trim():``;if(t.method!==`turn/steer`||!r)throw xn(`Invalid Claude steer request.`,!1);return await e(r,t.command),{accepted:!0}})}async function Tn(e,t){let n=t.resumeSessionId??G(),r=Fn(e,t),i=Object.keys(r).length>0&&V.platform!==`win32`,a=i&&V.platform===`linux`?H.mkdtempSync(B.join(W.tmpdir(),`coder-mcp-`)):void 0,o=a&&B.join(a,`config`);o&&Le(`mkfifo`,[`-m`,`600`,o]);let s=Object.keys(r).length&&!i?B.join(t.taskRoot??e,`.claude-mcp-${G()}.json`):void 0,c=t.systemPrompt?B.join(t.taskRoot??e,`.claude-system-${G()}.md`):void 0,l=(t.mcpServers??[]).filter(e=>e.readOnly),u=l.length?B.join(t.taskRoot??e,`.claude-read-only-${G()}.json`):void 0;for(let[e,n]of[[s,`${JSON.stringify({mcpServers:r})}\n`],[c,t.systemPrompt],[u,JSON.stringify(l)]])e&&(H.mkdirSync(B.dirname(e),{recursive:!0}),H.writeFileSync(e,n,{encoding:`utf8`,flag:`wx`,mode:384}));R(`claude.prepare`,{resume:!!t.resumeSessionId});let d=I({CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH:`16384`,...V.env,...t.env}),f=jn(t.executable??`claude`,d,e),p=In(e,t,n,i?o??`/dev/fd/3`:s,f,c,u),m=(e=!0)=>{for(let t of[s,c,...e?[u]:[]])if(t)try{H.unlinkSync(t)}catch{}};return t.onProgress?.({kind:`status`,message:`claude turn started (session ${n})`,threadId:n}),new Promise((s,c)=>{let l=Date.now();R(`claude.spawn`);let u=Re(t.executable??`claude`,p,{cwd:e,stdio:[`pipe`,`pipe`,`pipe`,`pipe`],env:d}),f=u.stdio[3];f.on(`error`,()=>{});let h=`${JSON.stringify({mcpServers:r})}\n`;f.end(i&&!o?h:void 0),o&&(H.promises.writeFile(o,h).catch(()=>{}).finally(()=>H.rmSync(a,{recursive:!0,force:!0})),u.once(`exit`,()=>{try{H.closeSync(H.openSync(o,H.constants.O_RDONLY|H.constants.O_NONBLOCK))}catch{}}));let g=``,_=``,v=[],y=null,b=n,x=null,S=!1,C=Cn((e,t)=>u.stdin.write(e,t)),w=Date.now(),T=new Map,E=0,D=0,O=null,k,A=0,j=n=>{if(!(!n||typeof n!=`object`)){if(m(!1),t.onHeartbeat?.(),n.type===`system`&&n.subtype===`init`&&n.session_id)b=n.session_id,n.mcp_servers?.some(e=>e.status===`failed`)&&u.stdin.write(`${JSON.stringify({type:`control_request`,request_id:hn,request:{subtype:`mcp_status`}})}\n`);else if(n.type===`control_response`&&n.response?.request_id===hn)for(let e of n.response.response?.mcpServers??[])e.status===`failed`&&t.onProgress?.({kind:`error`,message:`MCP server ${e.name} failed to start. ${e.error??``}`.trim()});else if(n.type===`stream_event`&&!n.parent_tool_use_id){let e=n.event;e?.type===`message_start`?(k=e.message?.id,O=e.message?.usage):e?.type===`message_delta`&&(O={...O,...e.usage});let t=Z(O);D=t?t.input+t.cachedInput:0}else if(n.type===`assistant`||n.type===`user`){let r=n.type===`assistant`?Z(n.message?.usage):null;if(n.type===`assistant`&&!n.parent_tool_use_id){(!k||k!==n.message?.id)&&(O=null),k=n.message?.id,(!O||r&&r.input+r.cachedInput>0)&&(O=n.message?.usage);let e=Z(O);D=e?e.input+e.cachedInput:0}if(r){E+=r.output;let e=r.input+r.cachedInput+E;(!A||e-A>=1e3)&&(A=e,t.onProgress?.({kind:`usage`,tokens:{...r,output:E,total:e},context:D,threadId:b}))}for(let r of n.message?.content??[])if(r?.type===`tool_use`||r?.type?.endsWith(`_tool_use`)){let n=String(r.name??`Tool`);r.id&&T.set(String(r.id),{name:n,at:Date.now()}),t.onProgress?.({kind:`tool`,tool:n,...r.id?{callId:String(r.id)}:{},message:bn(n,r.input??{},e),threadId:b})}else if(r?.type===`tool_result`||r?.type?.endsWith(`_tool_result`)){let e=gn(r.content).trim(),n=r.is_error===!0||r.content?.type?.endsWith(`_error`)===!0,i=r.tool_use_id?T.get(String(r.tool_use_id)):void 0;r.tool_use_id&&T.delete(String(r.tool_use_id)),t.onProgress?.({kind:`tool-result`,...r.tool_use_id?{callId:String(r.tool_use_id)}:{},...i?{tool:i.name,durationMs:Date.now()-i.at}:{},...n?{isError:!0}:{},message:e||(n?`(tool failed with no output)`:`(no output)`),threadId:b})}else n.type===`assistant`&&r?.type===`text`&&typeof r.text==`string`&&r.text.trim()?t.onProgress?.({kind:`assistant`,message:r.text.trim(),threadId:b}):n.type===`assistant`&&r?.type===`thinking`&&typeof r.thinking==`string`&&r.thinking.trim()&&t.onProgress?.({kind:`reasoning`,message:r.thinking.trim(),durationMs:Math.max(0,Date.now()-w),threadId:b})}else n.type===`result`&&(R(`claude.result`),y=n,t.onResult?.({status:n.is_error||v.length?1:0,threadId:n.session_id??b,finalMessage:n.structured_output===void 0?String(n.result??``).trim():JSON.stringify(n.structured_output),error:n.is_error||v.length?{message:v[0]||String(n.result??``)}:null}),n.session_id&&(b=n.session_id),C.stopAccepting(),u.stdin.end());w=Date.now()}};u.stdout.on(`data`,e=>{g+=e;let t;for(;(t=g.indexOf(`
|
|
11
|
-
`))>=0;){let e=g.slice(0,t).trim();if(g=g.slice(t+1),e)try{j(JSON.parse(e))}catch(e){v.push(`Invalid Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}}}),u.stderr.on(`data`,e=>{_+=e});let M=()=>{C.stopAccepting(),u.kill(`SIGTERM`),m();let e=x?.endpoint;e?.startsWith(`file:`)&&H.rmSync(e.slice(5),{recursive:!0,force:!0}),V.exit(143)};V.on(`SIGTERM`,M);let N=()=>{C.stopAccepting(),u.kill(`SIGTERM`)};t.signal?.aborted?N():t.signal?.addEventListener(`abort`,N,{once:!0}),(async()=>{t.onSteerReady&&(x=await wn((e,t)=>C.sendSteer(e,t))),await C.sendInitial(t.prompt,t.command),x&&t.onSteerReady?.(x.endpoint)})().catch(e=>{S||(S=!0,C.stopAccepting(),u.kill(`SIGTERM`),m(),V.removeListener(`SIGTERM`,M),x?.close(),c(e))}),u.on(`error`,e=>{S||(S=!0,C.stopAccepting(),V.removeListener(`SIGTERM`,M),m(),x?.close(),c(Error(`claude spawn failed: ${e.message}`)))}),u.on(`close`,async e=>{if(S)return;S=!0,C.stopAccepting(),V.removeListener(`SIGTERM`,M),m(),R(`claude.exit`),await x?.close(),R(`claude.teardown.done`);let n=g.trim();if(n)try{j(JSON.parse(n))}catch(e){v.push(`Invalid trailing Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}let r=y?.structured_output===void 0?(y?.result??``).trim():JSON.stringify(y.structured_output),i=e!==0||y?.is_error===!0||y==null||v.length>0;R(`claude.usage.start`);let a=Z(y?.usage);if(!D&&y){let e=Z(await sn(b,l,d.CLAUDE_CONFIG_DIR).catch(()=>null)),t=e&&e.input+e.cachedInput>0?e:a;D=t?t.input+t.cachedInput:0}R(`claude.usage.done`),s({status:+!!i,threadId:y?.session_id??b,turnId:null,finalMessage:r,tokens:a,contextTokens:D,model:y?.modelUsage&&Object.keys(y.modelUsage).join(`+`)||t.model||null,error:i?{message:v[0]||r||_.trim()||`claude exited ${e}`}:null})})})}var En=t({buildClaudeMcpConfig:()=>Fn,buildClaudeTurnArgs:()=>In,claudeToolName:()=>$,claudeVersion:()=>jn,claudeVersionEnvironment:()=>An,describeClaudeToolUse:()=>bn,getClaudeAuthStatus:()=>Mn,getClaudeAvailability:()=>Q,runClaudeTurn:()=>Rn,steerClaudeTurn:()=>Ln});const Dn=new Map,On=`CODER_CLAUDE_VERSION`;function kn(e,t,n){let r=V.platform===`win32`?t[Object.keys(t).sort().find(e=>e.toLowerCase()===`path`)??`PATH`]??V.env.PATH??``:t.PATH??`/usr/bin:/bin`,i=/[\\/]/.test(e)?[``]:[...V.platform===`win32`?[n]:[],...r.split(B.delimiter)],a=V.platform===`win32`&&!B.extname(e)?[``,...(t.PATHEXT??`.EXE;.COM`).split(`;`)]:[``];for(let t of i)for(let r of a){let i=B.resolve(n,t,e+r);try{if(H.accessSync(i,H.constants.X_OK),H.statSync(i).isFile())return H.realpathSync(i)}catch{}}return B.resolve(n,e)}function An(e,t){let n=kn(`claude`,I(e),t),r=Dn.get(n);return{[On]:r===void 0?void 0:JSON.stringify({executable:n,detail:r})}}function jn(e,t,n){let r=kn(e,t,n),i=Dn.get(r);if(i!==void 0)return i;try{let e=JSON.parse(t[On]??`null`);if(e?.executable===r&&typeof e.detail==`string`)return Dn.set(r,e.detail),e.detail}catch{}return Q(e,t,n).detail}function Q(e=`claude`,t=V.env,n=V.cwd()){t=I(t);let r=kn(e,t,n),i=U(e,[`--version`],{encoding:`utf8`,env:t,cwd:n}),a=!i.error&&i.status===0,o=a?String(i.stdout||``).trim():`claude CLI not found on PATH (npm install -g @anthropic-ai/claude-code)`;return Dn.set(r,o),{available:a,detail:o}}function Mn(){if(V.env.CLAUDE_CODE_OAUTH_TOKEN)return{loggedIn:!0,detail:`CLAUDE_CODE_OAUTH_TOKEN configured`};if(V.env.ANTHROPIC_API_KEY)return{loggedIn:!0,detail:`ANTHROPIC_API_KEY configured`};let e=U(`claude`,[`auth`,`status`,`--json`],{encoding:`utf8`,env:I()});if(e.error||e.status!==0)return{loggedIn:!1,detail:`not logged in`};try{let t=JSON.parse(String(e.stdout||``));return t.loggedIn?{loggedIn:!0,detail:[t.email,t.subscriptionType].filter(Boolean).join(`, `)||`logged in`}:{loggedIn:!1,detail:`not logged in`}}catch{return{loggedIn:!1,detail:`unknown`}}}const $=(e,t)=>[`mcp`,e,...t===void 0?[]:[t]].map(e=>e.replace(/[^A-Za-z0-9_-]/g,`_`)).join(`__`),Nn=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,Pn=`coder-approval`;function Fn(e,t){let n=t.access??`auto`,r=t.mcpServers??[],i={};n===`auto`&&t.approvalTaskId&&(i[Pn]={type:`stdio`,command:V.execPath,args:[s,`task`,`mcp`,t.approvalTaskId,`--cwd`,e],env:{[Vn]:`1`}});for(let e of r)i[e.name]={...e.url?{type:e.type??`http`,url:e.url,...e.headers?{headers:e.headers}:{}}:{type:`stdio`,command:e.command,args:e.args??[],...e.env?{env:e.env}:{}},...e.alwaysLoad?{alwaysLoad:!0}:{}};return i}function In(e,t,n,r,i,a,o){let c=[`-p`,`--input-format`,`stream-json`,`--output-format`,`stream-json`,`--verbose`,`--replay-user-messages`],l=$t(i);if(l&&z(l,`2.1.94`)>=0&&c.push(`--thinking-display`,`summarized`),c.push(t.resumeSessionId?`--resume`:`--session-id`,n),t.model&&c.push(`--model`,t.model),t.effort&&c.push(`--effort`,t.effort),t.systemPrompt&&c.push(`--append-system-prompt-file`,a??B.join(t.taskRoot??e,`.claude-system.md`)),t.systemPrompt&&l&&z(l,`2.1.267`)>=0&&c.push(`--system-prompt-snapshot`,`off`),t.excludeDynamicSections&&c.push(`--exclude-dynamic-system-prompt-sections`),t.settingSources&&c.push(`--setting-sources`,t.settingSources),t.outputSchema){let{$schema:e,...n}=t.outputSchema;c.push(`--json-schema`,JSON.stringify(n))}let u=t.access??`auto`,d=t.additionalDirectories??[],f=u===`read-only`?t.readOnlyAllowedTools??[]:[],p=t.mcpServers??[],m=Fn(e,t),h=u===`auto`&&t.approvalTaskId,g=p.flatMap(e=>e.tools?.length?e.tools.map(t=>$(e.name,t)):[$(e.name)]),_=Object.keys(m).length?[`--mcp-config`,r??B.join(t.taskRoot??e,`.claude-mcp.json`)]:t.nativeMcp?[]:[`--mcp-config`,`{"mcpServers":{}}`];t.nativeMcp||c.push(`--strict-mcp-config`,`--no-chrome`),h?(c.push(...fe.auto,..._,`--permission-prompt-tool`,$(Pn,`approval_prompt`)),g.length&&c.push(`--allowedTools`,...g)):f.length?c.push(...ge.filter(e=>V.env.CODER_MACHINE_SANDBOX!==`1`||e!==`Bash`),..._,`--allowedTools`,...f,...g):(c.push(...fe[u]??fe.auto,..._),g.length&&c.push(`--allowedTools`,...g)),h&&c.push(`--disallowedTools`,$(Pn,`approval_prompt`));for(let e of d)c.push(`--add-dir`,e);let v=p.filter(e=>e.readOnly),y=t.approvalTaskId?[V.execPath,s,`task`,`hook`,t.approvalTaskId,...v.length?[`--servers`,o??B.join(t.taskRoot??e,`.claude-read-only.json`)]:[],`--cwd`,e].map(Nn).join(` `):void 0,b=he(u,e,t.allowedNetworkHosts??[],d,V.env[me]!==`1`,t.scratch,t.local??!0,y,[De()].filter(e=>e!==void 0)),x=b?JSON.parse(b):{},S=y?v.map(e=>({matcher:`${$(e.name)}__.*`,hooks:[{type:`command`,command:y}]})):[],C={...x,...S.length?{hooks:{PreToolUse:[...x.hooks?.PreToolUse??[],...S]}}:{},...t.nativeMcp?{}:{disableClaudeAiConnectors:!0},...t.promptCacheTtl&&l&&z(l,`2.1.242`)>=0?{promptCacheTtl:t.promptCacheTtl}:{}};return Object.keys(C).length&&c.push(`--settings`,JSON.stringify(C)),c}async function Ln(e,t,n=3e3,r){if(!t.trim())return{steered:!1,retryable:!1,detail:`empty follow-up`};let i=await We(e,{id:Je(r),method:`turn/steer`,params:{text:t.trim()},command:r},n,`Claude live steer`);return{steered:i.ok&&i.result?.accepted===!0,retryable:i.retryable,detail:i.detail}}async function Rn(e,t){let n=await Tn(e,t);return!t.resumeSessionId||!n.error?.message?.includes(`No conversation found with session ID`)?n:(t.onProgress?.({kind:`warning`,message:w}),Tn(e,{...t,resumeSessionId:null}))}const zn=/usage|quota|rate.?limit|429|401|unauthorized|not authenticated|login|insufficient|exhausted|not available|\bat capacity\b|ENOENT/i;function Bn(e){return zn.test(e)&&!Ee(e)}const Vn=`CODER_WORKER`;var Hn=class extends Error{engine;detail;constructor(e,t){super(t),this.engine=e,this.detail=t}};function Un(e,t){try{return!!pe(e,t)}catch{return!1}}function Wn(e,t){let n=e=>new d(`invalid-option`,e instanceof Error?e.message:String(e)),r=e.engine;if(r!==void 0&&r!==`codex`&&r!==`claude`&&r!==`custom`){let e=se(r)||r in(t.models??{})?` "${r}" is a model; use --model ${r}.`:``;throw new d(`invalid-option`,`Invalid engine "${r}". Use --model <model> or --model <engine/model>.${e}`)}let i=e.model?r&&!String(e.model).includes(`/`)?`${r}/${e.model}`:e.model:r??t.chain.find(e=>Un(e,t))??t.chain[0],a,o;try{o=oe(i),a=pe(i,t)}catch(e){throw n(e)}let s=a.engine,c=a.model,l=o.effort??e.effort??a.effort,u=e=>{let n=e?t.models?.[e]:void 0;return ne(n)?n:void 0},f=e.access??`auto`;try{_e(t,c)}catch(e){throw n(e)}if(s===`custom`){let e=Object.entries(t.models??{}).filter(([,e])=>ne(e)).map(([e])=>e);if(!c&&e.length===1&&(c=e[0]),!c||!u(c))throw new d(`invalid-option`,c?`No custom model named "${c}". Configured: ${e.join(`, `)||`none`}.`:`No custom model to run: pass --model <name> or list custom/<name> in chain.`,{hint:`Use --model <name> or --model custom/<name>. Add one: coder model add <name> --base-url <url> --model <id>`})}if(!(f in ve))throw new d(`invalid-option`,`Invalid --access "${f}". Use one of: ${Object.keys(ve).join(`, `)}`);return{engine:s,model:c,effort:l,access:f}}const{connection:Gn,description:Kn,...qn}=ce.shape,Jn=e({name:a().check(u(1)),...qn}).check(o(e=>!!e.command!=!!e.url,`one of command or url`)),Yn=r(Jn);function Xn(e,t={}){let n=e.trim();return/^[\[{]/.test(n)?Qn(n):(n===`all`?Object.keys(t):n.split(`,`).map(e=>e.trim()).filter(Boolean)).map(e=>{let n=t[e];if(!n)throw new d(`invalid-option`,`Unknown MCP server "${e}".`,{hint:`configured: ${Object.keys(t).join(`, `)||`none`}; or pass a JSON array`});return{name:e,...n}})}function Zn(e,t={},n={},r={}){typeof e==`string`&&!e.trim()&&(e=void 0);let i=typeof e==`string`?Xn(e,{...t,...n}):e??Object.entries(n).map(([e,t])=>({name:e,...t})),a=[],o=i.filter(e=>e.connection).map(({name:e,connection:t,tools:n})=>({name:e,connection:t,...n?{tools:n}:{}})),s=new Set,c=[];for(let e of i){if(!e.connection||e.resolved){e.connection&&s.add(e.connection),e.repository&&a.push(...ue(e.name,e)),c.push(e);continue}let t=Object.hasOwn(r,e.connection)?r[e.connection]:void 0;if(!t){a.push(`MCP server "${e.name}" skipped because connection "${e.connection}" was not granted to this task.`);continue}if(s.has(e.connection))continue;s.add(e.connection);let n=e.tools?.length?e.tools.filter(e=>!t.tools?.length||t.tools.includes(e)):t.tools;if(e.tools?.length&&!n?.length){a.push(`MCP server "${e.name}" skipped because its tools are not granted by connection "${e.connection}".`);continue}c.push({...t,name:e.name,connection:e.connection,resolved:!0,...n?{tools:n}:{}})}for(let[e,t]of Object.entries(r)){if(s.has(e))continue;let n=c.findIndex(e=>e.name===t.name);n>=0&&c.splice(n,1),c.push({...t,resolved:!0})}return{mcp:c,...o.length?{mcpBindings:o}:{},nativeMcp:typeof e==`string`&&e.trim()===`all`,...a.length?{warnings:a}:{}}}function Qn(e){let t;try{t=JSON.parse(e)}catch(e){throw new d(`invalid-option`,`Invalid --mcp JSON: ${e instanceof Error?e.message:String(e)}`)}let r=Yn.safeParse(t);if(!r.success)throw new d(`invalid-option`,`Invalid --mcp value: ${n(r.error)}`,{hint:`--mcp '[{"name":"docs","command":"npx","args":["-y","docs-mcp"],"tools":["search"]}]'`});return r.data}function $n(e,t=V.env,n,r={}){let i=r.cloud??t.CODER_MCP_MODE===`cloud`,a=r.connectionEnv??JSON.parse(t.CODER_MCP_CONNECTION_ENV??`{}`),o=r.onWarning??(e=>V.stderr.write(`coder: ${e}\n`));return(e??[]).flatMap(e=>{let r=e.repository&&!e.resolved;if(r){for(let t of ue(e.name,e))o(t);if(!i&&!le(e))return o(`MCP server "${e.name}" skipped pending local approval. Run coder connection approve ${e.name} in its repository.`),[]}let s=new Set,c=new Set,l=n=>e.resolved?n.replace(/^\$\{(CODER_CONNECTION_[A-F0-9]{24})\}$/,(e,n)=>t[n]??``):n.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g,(e,n,o)=>r&&i?a[n]===null?(c.add(n),``):Object.hasOwn(a,n)?a[n]:(s.add(n),``):t[n]??o??``),u=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,l(t)])),f=r&&!!e.url,p={...e,...e.command?{command:l(e.command)}:{},...e.args?{args:e.args.map(l)}:{},...e.url?{url:f?e.url:l(e.url)}:{},...e.env?{env:u(e.env)}:{},...e.headers?{headers:f?e.headers:u(e.headers)}:{}};if(c.size)return o(`MCP server "${e.name}" skipped because connection variables ${[...c].join(`, `)} are ambiguous.`),[];if(s.size&&o(`MCP server "${e.name}" has unresolved connection variables ${[...s].join(`, `)}; expanded to empty.`),!n||!p.command)return[p];let m=(p.command.includes(B.sep)?[B.resolve(n,p.command)]:(p.env?.PATH??t.PATH??`/usr/bin:/bin`).split(B.delimiter).map(e=>B.resolve(n,e,p.command))).find(e=>{try{return H.accessSync(e,H.constants.X_OK),H.statSync(e).isFile()}catch{return!1}});if(!m)throw new d(`invalid-option`,`MCP server "${e.name}" command cannot be resolved.`);return p.command=H.realpathSync(m),p.args=p.args?.map(e=>{if(e.startsWith(`-`)||B.isAbsolute(e))return e;let t=B.resolve(n,e),r=H.existsSync(t)&&H.statSync(t).isFile();return!r&&!e.startsWith(`./`)&&!e.startsWith(`../`)?e:r?H.realpathSync(t):t}),[p]})}function er(e,t=[]){let n=[...new Set(t.map(t=>B.resolve(e,t)))];for(let e of n)if(!H.statSync(e,{throwIfNoEntry:!1})?.isDirectory())throw new d(`invalid-option`,`--add-dir ${e} is not a directory.`);return n}function tr(e){return e===`local`||e===`http`?void 0:`--add-dir ignored: this task runs on a ${e} machine`}function nr(e,t){return e===`read-only`&&de.test(t??``)}function rr(e,t,n={},r=!1){let i=y(e,t),a=H.openSync(B.join(i,`worker.log`),`a`),o={...V.env,...n},c=v(e,t);R(`worker.spawn`,{taskId:t});let l;try{l=Re(V.execPath,[s,`task`,`worker`,t,`--cwd`,e],{cwd:e,detached:!0,stdio:[`ignore`,a,a,`ipc`],env:{...o,...An(o,e),[Vn]:`1`,CODER_ENGINE_CHECKED:r?`1`:void 0}})}finally{H.closeSync(a)}let u=n=>{let r=v(e,t);if(!r||r.dispatchId!==c?.dispatchId||r.resumedAt!==c?.resumedAt||r.pid!==(l.pid??null)||!j.includes(r.status)&&!(r.status===`completed`&&ee(e,t)))return;let i=`Task worker exited without finishing: ${n}`;N(e,t,{status:`failed`,error:i,completedAt:new Date().toISOString(),steerClosed:!0,resumeOwner:void 0}),A(e,t,{kind:`error`,message:i})};return l.on(`error`,e=>u(e.message)),l.on(`exit`,(e,t)=>u(t?`signal ${t}`:`exit ${e}`)),l.unref(),l.channel?.unref?.(),N(e,t,{pid:l.pid??null}),l}async function ir(e,t,n,r,i){let a=n.cwd,o=n.availability?.[t.engine===`custom`?`codex`:t.engine]??(t.engine===`claude`?Q(`claude`,{...V.env,...n.connectionEnv,...n.credentialEnv},a):X(a)),s=t.model?e.models?.[t.model]:void 0;if(!o.available&&s&&ne(s)){let e=Xt(o);n.onNote?.(e.note),o=X(a)}if(!o.available)throw new Hn(t.engine,o.detail);let c=s?null:t.engine===`claude`?en(`claude`,t.model,o):en(`codex`,ie(t.model),o);c&&n.onNote?.(c);let l=n.addDirs??[],u=n.taskId??x(),m=n.resume?.engine===t.engine?n.resume:void 0,_=p(u);H.mkdirSync(_,{recursive:!0}),Pe(y(a,u),n.approvals??[]);let b=N(a,u,{status:`queued`,...n.taskId?{dispatchId:G()}:{},name:r.name??null,appendSystem:n.appendSystem??null,promptParts:{cwd:a,...n.agentPrompt,appendSystem:n.appendSystem??void 0,conversation:n.conversation,local:V.env.CODER_MCP_MODE!==`cloud`,scratch:_,writes:t.access!==`read-only`,...n.structured||n.outputSchema?{structured:!0}:{}},engine:t.engine,prompt:n.prompt,...n.outputSchema?{outputSchema:n.outputSchema}:{},model:t.model,effort:t.effort,access:t.access,resumeThreadId:m?.threadId??null,...m?{threadId:m.threadId,...m.previousThreadIds?{previousThreadIds:m.previousThreadIds}:{}}:{},cwd:a,...n.flowRunId?{flowRunId:n.flowRunId}:{},...n.agentId?{agentId:n.agentId}:{},...n.conversation?{conversation:!0}:{},...n.source?{source:n.source}:{},...n.author?{author:n.author}:{},...n.repo?{repo:n.repo}:{},...n.mcp?.length?{mcp:n.mcp}:{},...n.mcpBindings?{mcpBindings:n.mcpBindings}:{},...n.connections?{connections:n.connections}:{},...n.connectionSource?{connectionSource:n.connectionSource}:{},nativeMcp:n.nativeMcp??!1,...l.length?{addDirs:l}:{}});for(let e of new Set(n.mcpWarnings??[]))A(a,u,{kind:`warning`,message:e});n.resume&&!m&&A(a,u,{kind:`warning`,message:w});let S=B.join(y(a,u),`log.jsonl`),C=H.existsSync(S)?H.statSync(S).size:0,E=rr(a,u,{...n.connectionEnv,...n.credentialEnv},!0);if(n.onWorker?.(u,E),!i)return{taskId:u,task:v(a,u)??b,engine:t.engine,startupCheck:`pending`};let O=f(a,u,E),j=k(S,C),M=!1,ee=!1,te=()=>{let e=j().map(e=>{try{return JSON.parse(e)}catch{return{kind:`unknown`}}});return ee||=e.some(e=>e.kind===`tool`||e.kind===`reply`),e.some(e=>e.phase!==`starting`&&![`status`,`usage`].includes(e.kind??``))},re=Date.now()+15e3,P,F=b;try{for(;Date.now()<(P===void 0?re:P+5e3)&&(F=v(a,u)??F,!(T.includes(F.status)||g(a,u).at(-1)?.status===0||Fe(y(a,u)).length||(M=te()||M,F.threadId&&(P??=Date.now(),M))));)await O.wait(Math.min(3e4,(P===void 0?re:P+5e3)-Date.now()))}finally{O.close()}if(F.status===`failed`){te();let e=B.join(y(a,u),`result.json`),n=D(e),r=n?.error?.message??``,i=h(a,u,5).map(e=>e.message??``).join(`
|
|
11
|
+
`))>=0;){let e=g.slice(0,t).trim();if(g=g.slice(t+1),e)try{j(JSON.parse(e))}catch(e){v.push(`Invalid Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}}}),u.stderr.on(`data`,e=>{_+=e});let M=()=>{C.stopAccepting(),u.kill(`SIGTERM`),m();let e=x?.endpoint;e?.startsWith(`file:`)&&H.rmSync(e.slice(5),{recursive:!0,force:!0}),V.exit(143)};V.on(`SIGTERM`,M);let N=()=>{C.stopAccepting(),u.kill(`SIGTERM`)};t.signal?.aborted?N():t.signal?.addEventListener(`abort`,N,{once:!0}),(async()=>{t.onSteerReady&&(x=await wn((e,t)=>C.sendSteer(e,t))),await C.sendInitial(t.prompt,t.command),x&&t.onSteerReady?.(x.endpoint)})().catch(e=>{S||(S=!0,C.stopAccepting(),u.kill(`SIGTERM`),m(),V.removeListener(`SIGTERM`,M),x?.close(),c(e))}),u.on(`error`,e=>{S||(S=!0,C.stopAccepting(),V.removeListener(`SIGTERM`,M),m(),x?.close(),c(Error(`claude spawn failed: ${e.message}`)))}),u.on(`close`,async e=>{if(S)return;S=!0,C.stopAccepting(),V.removeListener(`SIGTERM`,M),m(),R(`claude.exit`),await x?.close(),R(`claude.teardown.done`);let n=g.trim();if(n)try{j(JSON.parse(n))}catch(e){v.push(`Invalid trailing Claude stream-json output: ${e instanceof Error?e.message:String(e)}`)}let r=y?.structured_output===void 0?(y?.result??``).trim():JSON.stringify(y.structured_output),i=e!==0||y?.is_error===!0||y==null||v.length>0;R(`claude.usage.start`);let a=Z(y?.usage);if(!D&&y){let e=Z(await sn(b,l,d.CLAUDE_CONFIG_DIR).catch(()=>null)),t=e&&e.input+e.cachedInput>0?e:a;D=t?t.input+t.cachedInput:0}R(`claude.usage.done`),s({status:+!!i,threadId:y?.session_id??b,turnId:null,finalMessage:r,tokens:a,contextTokens:D,model:y?.modelUsage&&Object.keys(y.modelUsage).join(`+`)||t.model||null,error:i?{message:v[0]||r||_.trim()||`claude exited ${e}`}:null})})})}var En=t({buildClaudeMcpConfig:()=>Fn,buildClaudeTurnArgs:()=>In,claudeToolName:()=>$,claudeVersion:()=>jn,claudeVersionEnvironment:()=>An,describeClaudeToolUse:()=>bn,getClaudeAuthStatus:()=>Mn,getClaudeAvailability:()=>Q,runClaudeTurn:()=>Rn,steerClaudeTurn:()=>Ln});const Dn=new Map,On=`CODER_CLAUDE_VERSION`;function kn(e,t,n){let r=V.platform===`win32`?t[Object.keys(t).sort().find(e=>e.toLowerCase()===`path`)??`PATH`]??V.env.PATH??``:t.PATH??`/usr/bin:/bin`,i=/[\\/]/.test(e)?[``]:[...V.platform===`win32`?[n]:[],...r.split(B.delimiter)],a=V.platform===`win32`&&!B.extname(e)?[``,...(t.PATHEXT??`.EXE;.COM`).split(`;`)]:[``];for(let t of i)for(let r of a){let i=B.resolve(n,t,e+r);try{if(H.accessSync(i,H.constants.X_OK),H.statSync(i).isFile())return H.realpathSync(i)}catch{}}return B.resolve(n,e)}function An(e,t){let n=kn(`claude`,I(e),t),r=Dn.get(n);return{[On]:r===void 0?void 0:JSON.stringify({executable:n,detail:r})}}function jn(e,t,n){let r=kn(e,t,n),i=Dn.get(r);if(i!==void 0)return i;try{let e=JSON.parse(t[On]??`null`);if(e?.executable===r&&typeof e.detail==`string`)return Dn.set(r,e.detail),e.detail}catch{}return Q(e,t,n).detail}function Q(e=`claude`,t=V.env,n=V.cwd()){t=I(t);let r=kn(e,t,n),i=U(e,[`--version`],{encoding:`utf8`,env:t,cwd:n}),a=!i.error&&i.status===0,o=a?String(i.stdout||``).trim():`claude CLI not found on PATH (npm install -g @anthropic-ai/claude-code)`;return Dn.set(r,o),{available:a,detail:o}}function Mn(){if(V.env.CLAUDE_CODE_OAUTH_TOKEN)return{loggedIn:!0,detail:`CLAUDE_CODE_OAUTH_TOKEN configured`};if(V.env.ANTHROPIC_API_KEY)return{loggedIn:!0,detail:`ANTHROPIC_API_KEY configured`};let e=U(`claude`,[`auth`,`status`,`--json`],{encoding:`utf8`,env:I()});if(e.error||e.status!==0)return{loggedIn:!1,detail:`not logged in`};try{let t=JSON.parse(String(e.stdout||``));return t.loggedIn?{loggedIn:!0,detail:[t.email,t.subscriptionType].filter(Boolean).join(`, `)||`logged in`}:{loggedIn:!1,detail:`not logged in`}}catch{return{loggedIn:!1,detail:`unknown`}}}const $=(e,t)=>[`mcp`,e,...t===void 0?[]:[t]].map(e=>e.replace(/[^A-Za-z0-9_-]/g,`_`)).join(`__`),Nn=e=>`'${e.replaceAll(`'`,`'\\''`)}'`,Pn=`coder-approval`;function Fn(e,t){let n=t.access??`auto`,r=t.mcpServers??[],i={};n===`auto`&&t.approvalTaskId&&(i[Pn]={type:`stdio`,command:V.execPath,args:[s,`task`,`mcp`,t.approvalTaskId,`--cwd`,e],env:{[Vn]:`1`}});for(let e of r)i[e.name]={...e.url?{type:e.type??`http`,url:e.url,...e.headers?{headers:e.headers}:{}}:{type:`stdio`,command:e.command,args:e.args??[],...e.env?{env:e.env}:{}},...e.alwaysLoad?{alwaysLoad:!0}:{}};return i}function In(e,t,n,r,i,a,o){let c=[`-p`,`--input-format`,`stream-json`,`--output-format`,`stream-json`,`--verbose`,`--replay-user-messages`],l=$t(i);if(l&&z(l,`2.1.94`)>=0&&c.push(`--thinking-display`,`summarized`),c.push(t.resumeSessionId?`--resume`:`--session-id`,n),t.model&&c.push(`--model`,t.model),t.effort&&c.push(`--effort`,t.effort),t.systemPrompt&&c.push(`--append-system-prompt-file`,a??B.join(t.taskRoot??e,`.claude-system.md`)),t.systemPrompt&&l&&z(l,`2.1.267`)>=0&&c.push(`--system-prompt-snapshot`,`off`),t.excludeDynamicSections&&c.push(`--exclude-dynamic-system-prompt-sections`),t.settingSources&&c.push(`--setting-sources`,t.settingSources),t.outputSchema){let{$schema:e,...n}=t.outputSchema;c.push(`--json-schema`,JSON.stringify(n))}let u=t.access??`auto`,d=t.additionalDirectories??[],f=u===`read-only`?t.readOnlyAllowedTools??[]:[],p=t.mcpServers??[],m=Fn(e,t),h=u===`auto`&&t.approvalTaskId,g=p.flatMap(e=>e.tools?.length?e.tools.map(t=>$(e.name,t)):[$(e.name)]),_=Object.keys(m).length?[`--mcp-config`,r??B.join(t.taskRoot??e,`.claude-mcp.json`)]:t.nativeMcp?[]:[`--mcp-config`,`{"mcpServers":{}}`];t.nativeMcp||c.push(`--strict-mcp-config`,`--no-chrome`),h?(c.push(...fe.auto,..._,`--permission-prompt-tool`,$(Pn,`approval_prompt`)),g.length&&c.push(`--allowedTools`,...g)):f.length?c.push(...ge.filter(e=>V.env.CODER_MACHINE_SANDBOX!==`1`||e!==`Bash`),..._,`--allowedTools`,...f,...g):(c.push(...fe[u]??fe.auto,..._),g.length&&c.push(`--allowedTools`,...g)),h&&c.push(`--disallowedTools`,$(Pn,`approval_prompt`));for(let e of d)c.push(`--add-dir`,e);let v=p.filter(e=>e.readOnly),y=t.approvalTaskId?[V.execPath,s,`task`,`hook`,t.approvalTaskId,...v.length?[`--servers`,o??B.join(t.taskRoot??e,`.claude-read-only.json`)]:[],`--cwd`,e].map(Nn).join(` `):void 0,b=he(u,e,t.allowedNetworkHosts??[],d,V.env[me]!==`1`,t.scratch,t.local??!0,y,[De()].filter(e=>e!==void 0)),x=b?JSON.parse(b):{},S=y?v.map(e=>({matcher:`${$(e.name)}__.*`,hooks:[{type:`command`,command:y}]})):[],C={...x,...S.length?{hooks:{PreToolUse:[...x.hooks?.PreToolUse??[],...S]}}:{},...t.nativeMcp?{}:{disableClaudeAiConnectors:!0},...t.promptCacheTtl&&l&&z(l,`2.1.242`)>=0?{promptCacheTtl:t.promptCacheTtl}:{}};return Object.keys(C).length&&c.push(`--settings`,JSON.stringify(C)),c}async function Ln(e,t,n=3e3,r){if(!t.trim())return{steered:!1,retryable:!1,detail:`empty follow-up`};let i=await We(e,{id:Je(r),method:`turn/steer`,params:{text:t.trim()},command:r},n,`Claude live steer`);return{steered:i.ok&&i.result?.accepted===!0,retryable:i.retryable,detail:i.detail}}async function Rn(e,t){let n=await Tn(e,t);return!t.resumeSessionId||!n.error?.message?.includes(`No conversation found with session ID`)?n:(t.onProgress?.({kind:`warning`,message:w}),Tn(e,{...t,resumeSessionId:null}))}const zn=/usage|quota|rate.?limit|429|401|unauthorized|not authenticated|login|insufficient|exhausted|not available|\bat capacity\b|ENOENT/i;function Bn(e){return zn.test(e)&&!Ee(e)}const Vn=`CODER_WORKER`;var Hn=class extends Error{engine;detail;constructor(e,t){super(t),this.engine=e,this.detail=t}};function Un(e,t){try{return!!pe(e,t)}catch{return!1}}function Wn(e,t){let n=e=>new d(`invalid-option`,e instanceof Error?e.message:String(e)),r=e.engine;if(r!==void 0&&r!==`codex`&&r!==`claude`&&r!==`custom`){let e=se(r)||r in(t.models??{})?` "${r}" is a model; use --model ${r}.`:``;throw new d(`invalid-option`,`Invalid engine "${r}". Use --model <model> or --model <engine/model>.${e}`)}let i=e.model?r&&!String(e.model).includes(`/`)?`${r}/${e.model}`:e.model:r??t.chain.find(e=>Un(e,t))??t.chain[0],a,o;try{o=oe(i),a=pe(i,t)}catch(e){throw n(e)}let s=a.engine,c=a.model,l=o.effort??e.effort??a.effort,u=e=>{let n=e?t.models?.[e]:void 0;return ne(n)?n:void 0},f=e.access??`auto`;try{_e(t,c)}catch(e){throw n(e)}if(s===`custom`){let e=Object.entries(t.models??{}).filter(([,e])=>ne(e)).map(([e])=>e);if(!c&&e.length===1&&(c=e[0]),!c||!u(c))throw new d(`invalid-option`,c?`No custom model named "${c}". Configured: ${e.join(`, `)||`none`}.`:`No custom model to run: pass --model <name> or list custom/<name> in chain.`,{hint:`Use --model <name> or --model custom/<name>. Add one: coder model add <name> --base-url <url> --model <id>`})}if(!(f in ve))throw new d(`invalid-option`,`Invalid --access "${f}". Use one of: ${Object.keys(ve).join(`, `)}`);return{engine:s,model:c,effort:l,access:f}}const{connection:Gn,description:Kn,...qn}=ce.shape,Jn=e({name:a().check(u(1)),...qn}).check(o(e=>!!e.command!=!!e.url,`one of command or url`)),Yn=r(Jn);function Xn(e,t={}){let n=e.trim();return/^[\[{]/.test(n)?Qn(n):(n===`all`?Object.keys(t):n.split(`,`).map(e=>e.trim()).filter(Boolean)).map(e=>{let n=t[e];if(!n)throw new d(`invalid-option`,`Unknown MCP server "${e}".`,{hint:`configured: ${Object.keys(t).join(`, `)||`none`}; or pass a JSON array`});return{name:e,...n}})}function Zn(e,t={},n={},r={}){typeof e==`string`&&!e.trim()&&(e=void 0);let i=typeof e==`string`?Xn(e,{...t,...n}):e??Object.entries(n).map(([e,t])=>({name:e,...t})),a=[],o=i.filter(e=>e.connection).map(({name:e,connection:t,tools:n})=>({name:e,connection:t,...n?{tools:n}:{}})),s=new Set,c=[];for(let e of i){if(!e.connection||e.resolved){e.connection&&s.add(e.connection),e.repository&&a.push(...ue(e.name,e)),c.push(e);continue}let t=Object.hasOwn(r,e.connection)?r[e.connection]:void 0;if(!t){a.push(`MCP server "${e.name}" skipped because connection "${e.connection}" was not granted to this task.`);continue}if(s.has(e.connection))continue;s.add(e.connection);let n=e.tools?.length?e.tools.filter(e=>!t.tools?.length||t.tools.includes(e)):t.tools;if(e.tools?.length&&!n?.length){a.push(`MCP server "${e.name}" skipped because its tools are not granted by connection "${e.connection}".`);continue}c.push({...t,name:e.name,connection:e.connection,resolved:!0,...n?{tools:n}:{}})}for(let[e,t]of Object.entries(r)){if(s.has(e))continue;let n=c.findIndex(e=>e.name===t.name);n>=0&&c.splice(n,1),c.push({...t,resolved:!0})}return{mcp:c,...o.length?{mcpBindings:o}:{},nativeMcp:typeof e==`string`&&e.trim()===`all`,...a.length?{warnings:a}:{}}}function Qn(e){let t;try{t=JSON.parse(e)}catch(e){throw new d(`invalid-option`,`Invalid --mcp JSON: ${e instanceof Error?e.message:String(e)}`)}let r=Yn.safeParse(t);if(!r.success)throw new d(`invalid-option`,`Invalid --mcp value: ${n(r.error)}`,{hint:`--mcp '[{"name":"docs","command":"npx","args":["-y","docs-mcp"],"tools":["search"]}]'`});return r.data}function $n(e,t=V.env,n,r={}){let i=r.cloud??t.CODER_MCP_MODE===`cloud`,a=r.connectionEnv??JSON.parse(t.CODER_MCP_CONNECTION_ENV??`{}`),o=r.onWarning??(e=>V.stderr.write(`coder: ${e}\n`));return(e??[]).flatMap(e=>{let r=e.repository&&!e.resolved;if(r){for(let t of ue(e.name,e))o(t);if(!i&&!le(e))return o(`MCP server "${e.name}" skipped pending local approval. Run coder connection approve ${e.name} in its repository.`),[]}let s=new Set,c=new Set,l=n=>e.resolved?n.replace(/^\$\{(CODER_CONNECTION_[A-F0-9]{24})\}$/,(e,n)=>t[n]??``):n.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\}/g,(e,n,o)=>r&&i?a[n]===null?(c.add(n),``):Object.hasOwn(a,n)?a[n]:(s.add(n),``):t[n]??o??``),u=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,l(t)])),f=r&&!!e.url,p={...e,...e.command?{command:l(e.command)}:{},...e.args?{args:e.args.map(l)}:{},...e.url?{url:f?e.url:l(e.url)}:{},...e.env?{env:u(e.env)}:{},...e.headers?{headers:f?e.headers:u(e.headers)}:{}};if(c.size)return o(`MCP server "${e.name}" skipped because connection variables ${[...c].join(`, `)} are ambiguous.`),[];if(s.size&&o(`MCP server "${e.name}" has unresolved connection variables ${[...s].join(`, `)}; expanded to empty.`),!n||!p.command)return[p];let m=(p.command.includes(B.sep)?[B.resolve(n,p.command)]:(p.env?.PATH??t.PATH??`/usr/bin:/bin`).split(B.delimiter).map(e=>B.resolve(n,e,p.command))).find(e=>{try{return H.accessSync(e,H.constants.X_OK),H.statSync(e).isFile()}catch{return!1}});if(!m)throw new d(`invalid-option`,`MCP server "${e.name}" command cannot be resolved.`);return p.command=H.realpathSync(m),p.args=p.args?.map(e=>{if(e.startsWith(`-`)||B.isAbsolute(e))return e;let t=B.resolve(n,e),r=H.existsSync(t)&&H.statSync(t).isFile();return!r&&!e.startsWith(`./`)&&!e.startsWith(`../`)?e:r?H.realpathSync(t):t}),[p]})}function er(e,t=[]){let n=[...new Set(t.map(t=>B.resolve(e,t)))];for(let e of n)if(!H.statSync(e,{throwIfNoEntry:!1})?.isDirectory())throw new d(`invalid-option`,`--add-dir ${e} is not a directory.`);return n}function tr(e){return e===`local`||e===`http`?void 0:`--add-dir ignored: this task runs on a ${e} machine`}function nr(e,t){return e===`read-only`&&de.test(t??``)}function rr(e,t,n={},r=!1){let i=y(e,t),a=H.openSync(B.join(i,`worker.log`),`a`),o={...V.env,...n},c=v(e,t);R(`worker.spawn`,{taskId:t});let l;try{l=Re(V.execPath,[s,`task`,`worker`,t,`--cwd`,e],{cwd:e,detached:!0,stdio:[`ignore`,a,a,`ipc`],env:{...o,...An(o,e),[Vn]:`1`,CODER_ENGINE_CHECKED:r?`1`:void 0}})}finally{H.closeSync(a)}let u=n=>{let r=v(e,t);if(!r||r.dispatchId!==c?.dispatchId||r.resumedAt!==c?.resumedAt||r.pid!==(l.pid??null)||!j.includes(r.status)&&!(r.status===`completed`&&ee(e,t)))return;let i=`Task worker exited without finishing: ${n}`;N(e,t,{status:`failed`,error:i,completedAt:new Date().toISOString(),steerClosed:!0,resumeOwner:void 0}),A(e,t,{kind:`error`,message:i})};return l.on(`error`,e=>u(e.message)),l.on(`exit`,(e,t)=>u(t?`signal ${t}`:`exit ${e}`)),l.unref(),l.channel?.unref?.(),N(e,t,{pid:l.pid??null}),l}async function ir(e,t,n,r,i){let a=n.cwd,o=n.availability?.[t.engine===`custom`?`codex`:t.engine]??(t.engine===`claude`?Q(`claude`,{...V.env,...n.connectionEnv,...n.credentialEnv},a):X(a)),s=t.model?e.models?.[t.model]:void 0;if(!o.available&&s&&ne(s)){let e=Xt(o);n.onNote?.(e.note),o=X(a)}if(!o.available)throw new Hn(t.engine,o.detail);let c=s?null:t.engine===`claude`?en(`claude`,t.model,o):en(`codex`,ie(t.model),o);c&&n.onNote?.(c);let l=n.addDirs??[],u=n.taskId??x(),m=n.resume?.engine===t.engine?n.resume:void 0,_=p(u);H.mkdirSync(_,{recursive:!0}),Pe(y(a,u),n.approvals??[]);let b=N(a,u,{status:`queued`,...n.taskId?{dispatchId:G()}:{},name:r.name??null,appendSystem:n.appendSystem??null,promptParts:{cwd:a,...n.agentPrompt,appendSystem:n.appendSystem??void 0,conversation:n.conversation,local:V.env.CODER_MCP_MODE!==`cloud`,scratch:_,writes:t.access!==`read-only`,...n.structured||n.outputSchema?{structured:!0}:{}},engine:t.engine,prompt:n.prompt,...n.outputSchema?{outputSchema:n.outputSchema}:{},model:t.model,effort:t.effort,access:t.access,resumeThreadId:m?.threadId??null,...m?{threadId:m.threadId,...m.previousThreadIds?{previousThreadIds:m.previousThreadIds}:{}}:{},cwd:a,...n.flowRunId?{flowRunId:n.flowRunId}:{},...n.agentId?{agentId:n.agentId}:{},...n.conversation?{conversation:!0}:{},...n.source?{source:n.source}:{},...n.author?{author:n.author}:{},...n.repo?{repo:n.repo}:{},...n.pullRequest===void 0?{}:{pullRequest:n.pullRequest},...n.mcp?.length?{mcp:n.mcp}:{},...n.mcpBindings?{mcpBindings:n.mcpBindings}:{},...n.connections?{connections:n.connections}:{},...n.connectionSource?{connectionSource:n.connectionSource}:{},nativeMcp:n.nativeMcp??!1,...l.length?{addDirs:l}:{}});for(let e of new Set(n.mcpWarnings??[]))A(a,u,{kind:`warning`,message:e});n.resume&&!m&&A(a,u,{kind:`warning`,message:w});let S=B.join(y(a,u),`log.jsonl`),C=H.existsSync(S)?H.statSync(S).size:0,E=rr(a,u,{...n.connectionEnv,...n.credentialEnv},!0);if(n.onWorker?.(u,E),!i)return{taskId:u,task:v(a,u)??b,engine:t.engine,startupCheck:`pending`};let O=f(a,u,E),j=k(S,C),M=!1,ee=!1,te=()=>{let e=j().map(e=>{try{return JSON.parse(e)}catch{return{kind:`unknown`}}});return ee||=e.some(e=>e.kind===`tool`||e.kind===`reply`),e.some(e=>e.phase!==`starting`&&![`status`,`usage`].includes(e.kind??``))},re=Date.now()+15e3,P,F=b;try{for(;Date.now()<(P===void 0?re:P+5e3)&&(F=v(a,u)??F,!(T.includes(F.status)||g(a,u).at(-1)?.status===0||Fe(y(a,u)).length||(M=te()||M,F.threadId&&(P??=Date.now(),M))));)await O.wait(Math.min(3e4,(P===void 0?re:P+5e3)-Date.now()))}finally{O.close()}if(F.status===`failed`){te();let e=B.join(y(a,u),`result.json`),n=D(e),r=n?.error?.message??``,i=h(a,u,5).map(e=>e.message??``).join(`
|
|
12
12
|
`),o=r||i;throw nr(t.access,o)?new d(`read-only-unavailable`,o):Bn(o)&&!lr(n,ee)?new Hn(t.engine,o):new d(`startup-failed`,o,{taskId:u})}return{taskId:u,task:F,engine:t.engine,startupCheck:F.threadId?`passed`:`pending`}}function ar(e,t,n,r,i){return{error:`${e} failed to start: ${t}`,fallback:{action:`run-native-subagent`,reason:`no-engine-available`,access:n,instructions:`Mention the engine failure to the user, including any limit reset time. If your harness has a native subagent facility, spawn one subagent with fallback.task verbatim, prefixed with: "NEVER run git write operations (commit, checkout, stash, reset, push, etc.); leave changes uncommitted." If fallback.access is "read-only", append: "Investigate and report without modifying anything." Relay its output when it completes. If your harness has no native subagent facility, report the failure and stop; do not implement the task yourself.`,note:`Every coder engine failed to start. Spawn your own native subagent and forward the task verbatim; tell it to never run git write operations (commit, checkout, stash, reset, push, ...) and to honor the access.`,...r?{appendSystem:r}:{},task:i}}}async function or(e,t={}){if(V.env.CODER_WORKER)throw new d(`nested-dispatch`,`Nested dispatch is disabled inside a worker; do the work directly.`);if(e.outputSchema!==void 0&&(!e.outputSchema||typeof e.outputSchema!=`object`||Array.isArray(e.outputSchema)))throw new d(`invalid-option`,`outputSchema must be an object.`);if(!e.prompt.trim())throw new d(`invalid-option`,`Missing task text.`,{hint:[`Usage: coder run "<task text>"`,`Help: coder task run --help`]});e={...e,addDirs:er(e.cwd,e.addDirs)};let n=t.config??ye(e.cwd),r=Zn(e.mcp,n.mcp),i={...e,mcp:r.mcp,mcpBindings:e.mcpBindings??r.mcpBindings,mcpWarnings:[...e.mcpWarnings??[],...r.warnings??[]],nativeMcp:e.nativeMcp??r.nativeMcp},a=t.models??sr(n,Wn({engine:e.engine,model:e.model,effort:e.effort,access:e.access},n)),o=a[0],s={name:e.name};for(;;)try{return await ir(n,o,i,s,t.waitForStartup!==!1)}catch(t){if(!(t instanceof Hn))throw t;let n=cr(a,o);if(!n){let n=ar(t.engine,t.detail,o.access,e.appendSystem,e.prompt);throw new d(`chain-exhausted`,n.error,{payload:n})}e.onFallback?.({model:E(o),detail:t.detail,next:E(n)}),o=n,s={name:void 0}}}function sr(e,t){let n=[t];for(let r of e.chain)try{let i=Wn({model:r,access:t.access},e);n.some(e=>re(e,i))||n.push(i)}catch{}return n}function cr(e,t){return e[Math.max(0,e.findIndex(e=>re(e,t)))+1]}function lr(e,t=!1){return!!(t||e?.fileChanges?.length||e?.commandExecutions?.length)}function ur(e,t){if(t.status!==`failed`)return!1;let n=t.result;if(!n||!Bn(n.error?.message??``))return!1;let r=Date.parse(t.turns.at(-2)?.at??t.task.resumedAt??t.task.createdAt);return!lr(n,h(e,t.taskId,2**53-1).some(e=>(e.kind===`tool`||e.kind===`reply`)&&(!e.at||Date.parse(e.at)>=r)))&&!t.turns.at(-1)?.lastReply}function dr(e,t,n){if(ur(e,t))return cr(n,{engine:t.task.engine,model:t.task.model??null})??null}function fr(e,t,n){return n&&(j.includes(n.status)||n.status===`failed`&&n.error)?null:D(B.join(y(e,t),`result.json`))}function pr(e,t,n=0){if(n===0)return[];let r=h(e,t,2**53-1);return n===`all`?r:m(r,n)}function mr(e,t,n={}){let r=n.task??v(e,t);if(!r)throw Error(`No task found for "${t}".`);return{taskId:t,status:r.status,result:fr(e,t,r),steps:pr(e,t,n.tail),turns:g(e,t),task:r}}async function hr(e,t,n={}){let r=v(e,t);if(!r)throw Error(`No task found for "${t}".`);let i=await gr(e,r,1e3,n);if(i.reason===`approval`){let e=i.approval;throw new d(`approval-pending`,`Approval needed for task ${t}: ${e.reason}`,{taskId:t,approval:e})}n.onSettle?.();let a=i.task;return{taskId:t,status:a.status,result:fr(e,t,a),steps:pr(e,t,n.tail),turns:g(e,t),task:a}}async function gr(e,t,n=1e3,{turn:r,worker:i,signal:a,seen:o=[]}={}){let s=t,c=f(e,t.id,i);try{let t=O();for(;;){a?.throwIfAborted(),s=v(e,s.id)??s;let i=r===void 0?void 0:g(e,s.id)[r];s=i?{...s,status:i.status===0?`completed`:`failed`}:_(e,s,t);let l=Fe(y(e,s.id)).find(e=>!o.includes(e.id));if(l)return{task:s,reason:`approval`,approval:{id:l.id,reason:l.reason,actions:l.actions}};if(T.includes(s.status)&&(r!==void 0||!b(e,s)))return{task:s,reason:`terminal`};await c.wait(n,a)}}finally{c.close()}}export{an as A,Qe as B,on as C,dn as D,mn as E,Vt as F,nt as I,Ze as L,X as M,Bt as N,Xt as O,Ht as P,Je as R,ln as S,cn as T,hr as _,nr as a,Rn as b,mr as c,Wn as d,Zn as f,gr as g,ur as h,tr as i,rn as j,Ut as k,er as l,dr as m,ar as n,sr as o,rr as p,or as r,fr as s,Vn as t,$n as u,En as v,un as w,Ln as x,Q as y,qe as z};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Ea as e,ha as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import"./dispatch-
|
|
1
|
+
import{Ea as e,ha as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import"./dispatch-BkoIU4GU.js";import r from"node:path";import i from"node:fs";var a=e({collectTopics:()=>s,docsCore:()=>p});const o=[{name:`readme`,file:`README.md`,description:`What Coder is and how to get started.`},{name:`skill`,file:`plugins/agents/skills/coder/SKILL.md`,description:`How a host agent should drive Coder.`}];function s(e=t()){let n=r.join(e,`docs`),a=[];try{a=i.readdirSync(n,{withFileTypes:!0})}catch{a=[]}let s=(t,n)=>({name:t,file:n,description:d(r.join(e,n))}),l=[...new Set(a.filter(e=>e.isDirectory()?c(r.join(n,e.name)):e.name.endsWith(`.md`)).map(e=>e.isDirectory()?e.name:r.basename(e.name,`.md`)))].sort(),u=[];for(let e of l){let t=r.join(n,e);if(!a.some(t=>t.isDirectory()&&t.name===e)){u.push(s(e,r.join(`docs`,`${e}.md`)));continue}u.push(s(e,r.join(`docs`,e,`index.md`)));let o=i.readdirSync(t).filter(e=>e.endsWith(`.md`)&&e!==`index.md`).sort();for(let t of o){let n=r.basename(t,`.md`);u.push(s(`${e}/${n}`,r.join(`docs`,e,t)))}}return[...u,...o]}function c(e){return i.existsSync(r.join(e,`index.md`))}const l=/^---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)\s*/,u=e=>e.replace(l,``);function d(e){let t=``;try{t=i.readFileSync(e,`utf8`)}catch{return``}let n=l.exec(t)?.[1]?.match(/^description:\s*(.*?)\s*$/m)?.[1];if(n)return n;let r=u(t).split(`
|
|
2
2
|
`),a=``,o=``,s=!1;for(let e of r){let t=e.trim();if(t.startsWith("```")){s=!s;continue}if(!(s||t===``||t.startsWith(`<!--`))){if(t.startsWith(`#`)){a||=t.replace(/^#+\s*/,``);continue}o=t;break}}return f(o)||a}function f(e){if(!e)return``;let t=e.match(/^.*?[.!?](?=\s|$)/);return(t?t[0]:e).trim()}function p(e,a={}){let o=t(),c=s(o);if(!e)return{topics:c.map(e=>({name:e.name,description:e.description}))};let l=e.toLowerCase(),d=c.find(e=>{let t=e.name.toLowerCase();return t===l||t.replace(`/`,`-`)===l});if(d?.name===`skill`&&a.claude&&(d={...d,file:`plugins/claude/skills/dispatch/SKILL.md`}),!d)throw new n(`invalid-option`,`Unknown docs topic "${e}". Available: ${c.map(e=>e.name).join(`, `)}`,{hint:`List topics: coder docs`});let f=r.join(o,d.file),p;try{p=u(i.readFileSync(f,`utf8`))}catch{throw new n(`invalid-option`,`Could not read docs for "${d.name}" (${d.file}).`)}return{name:d.name,content:p}}export{p as n,a as r,s as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{
|
|
1
|
+
import{u as e}from"./args-CJsHYWbt.js";import{command as t}from"./cli.js";import{T as n}from"./executor-DBW7R7Tf.js";import r from"node:process";const i=t({name:`drive`,description:`drive a run's orchestrator, detached`,access:`write`,approvalPolicy:`deny`,args:{"run-id":e(),task:e(`the task this run reports to; it gets the result as a message`,`<id>`),tool:e(`with --task: the async tool the run answers for`,`<name>`),timeout:e(`with --task: stop the run after this many seconds`,`<s>`)},globalFlags:{json:!1},cli:{positional:[`run-id`]},mcp:!1,async run({args:[e],options:t,cwd:i}){if(!t.task)return n(e,i);let[{driveAsyncTool:a},{asyncTools:o}]=await Promise.all([import(`./async-BS9tyhva.js`).then(e=>e.t),import(`./tools-DVtBtED6.js`).then(e=>e.i)]),s=o.find(e=>e.name===t.tool);if(!s)throw Error(`Unknown async tool "${t.tool}"`);await a(s,e,i,t.task,t.timeout?Number(t.timeout):void 0),r.exit(0)}});export{i as commandDrive};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,Bn as t,C as n,D as r,Ea as i,En as a,M as o,T as s,Tn as c,b as l,h as u,j as d,k as f,m as p,p as m,sa as h,w as g}from"./args-CJsHYWbt.js";import{t as _}from"./errors-DK_trCff.js";import{K as v}from"./state-CxAUec80.js";import{y}from"./app-server-dnlLhhZb.js";import"./dispatch-BkoIU4GU.js";import b from"node:process";import x from"node:os";var S=i({loadServerConfig:()=>j,requireBunServer:()=>N,rerunUnderBun:()=>P});const C=e=>p(m().check(l(),a()),e),w=r(s(d()),o(e=>e===`1`)),T=(e,t)=>d().check(c(e=>e.replace(/\/$/,``)),f(e=>URL.canParse(e),{error:`must be a URL`,abort:!0}),f(t=>e(new URL(t)),t)),E=e=>r(o(e=>e||void 0),e),D=r(d(),o((e,t)=>{try{let t=JSON.parse(e);if(t&&!Array.isArray(t)&&typeof t==`object`)return t}catch{}return t.issues.push({code:`custom`,message:`must be a JSON object`,input:e}),h})),O=g({AUTH_WULAR_URL:p(T(e=>e.protocol===`https:`||e.hostname===`localhost`,`must use HTTPS unless it is localhost`),`https://auth.wular.ai`)}),k=g({SERVER_LIMITS:E(s(r(D,e({principalPerMinute:s(n().check(l(),a())),authPerMinute:s(n().check(l(),a())),registerPerMinute:s(n().check(l(),a())),ipPerMinute:s(n().check(l(),a())),pairingPerMinute:s(n().check(l(),a())),concurrentTasks:s(n().check(l(),a()))})))),RUNNER:s(u([`local`,`local-docker`,`vercel-sandbox`,`github-actions`,`http`])),RUNNER_CONFIG:E(p(D,{})),WORK_DIR:s(d()),SERVER_ENCRYPTION_KEY:s(d()),SERVER_ENCRYPTION_KEY_PREVIOUS:s(d()),ADMIN_TOKEN:s(d()),PUBLIC_URL:E(s(T(e=>e.pathname===`/`&&!e.search&&!e.hash,`must be an origin, with no path, query or fragment`))),SERVER_NAME:s(d().check(t())),ISSUES_URL:E(s(T(()=>!0,`must be a URL`))),REVIEW_ASSETS:E(s(d().check(t()))),VERCEL_PROJECT_PRODUCTION_URL:s(d()),VERCEL_URL:s(d()),VERCEL:s(d()),DATABASE_URL:s(d()),POSTGRES_URL:s(d()),DATABASE_POOL_MAX:s(m().check(l(),a())),DATABASE_IDLE_TIMEOUT:s(m().check(l(),a())),MAX_TASKS:s(m().check(l(),a())),MAX_QUEUED:C(1e3),TASK_STALL:C(3e5),TASK_ATTEMPTS:C(2),TASK_TIMEOUT:C(18e5),CLAUDE_SUBSCRIPTIONS:w,CODEX_SUBSCRIPTIONS:w,SERVER_INTEGRATIONS:E(s(d())),SERVER_OPERATORS:E(s(d()))});function A(e,t){let n=e.safeParse(t);if(n.success)return n.data;let r=n.error.issues[0];throw new _(`invalid-option`,`Invalid server configuration:${String(r.path[0])} ${r.message}`)}function j(e=b.env,t=`node`){let n=A(k,e),r=n.DATABASE_URL??n.POSTGRES_URL,i=r?`postgres`:`memory`;if(i===`postgres`&&!n.SERVER_ENCRYPTION_KEY)throw new _(`invalid-option`,`SERVER_ENCRYPTION_KEY is required with DATABASE_URL`);let a=t===`vercel`?n.VERCEL_PROJECT_PRODUCTION_URL??n.VERCEL_URL:void 0,o=n.PUBLIC_URL??(a?`https://${a}`:void 0),s=i===`postgres`?A(O,e).AUTH_WULAR_URL:void 0;return{runner:n.RUNNER??(t===`vercel`||n.VERCEL?`vercel-sandbox`:`local`),store:i,workDir:n.WORK_DIR??v(),...n.SERVER_ENCRYPTION_KEY?{encryptionKey:n.SERVER_ENCRYPTION_KEY}:{},...n.SERVER_ENCRYPTION_KEY_PREVIOUS?{previousEncryptionKey:n.SERVER_ENCRYPTION_KEY_PREVIOUS}:{},...n.ADMIN_TOKEN?{adminToken:n.ADMIN_TOKEN}:{},...o?{publicUrl:o}:{},...n.SERVER_NAME?{name:n.SERVER_NAME}:{},issuesUrl:n.ISSUES_URL??`https://github.com/muzam1l/coder/issues/new`,...n.REVIEW_ASSETS?{reviewAssets:n.REVIEW_ASSETS}:{},...r?{databaseUrl:r,databasePool:{max:n.DATABASE_POOL_MAX??(t===`vercel`||n.VERCEL?2:10),idleTimeout:n.DATABASE_IDLE_TIMEOUT??(t===`vercel`||n.VERCEL?30:240)}}:{},runnerConfig:n.RUNNER_CONFIG,maxTasks:n.MAX_TASKS,limits:n.SERVER_LIMITS,maxQueued:n.MAX_QUEUED,taskTimeoutMs:n.TASK_TIMEOUT,taskStallMs:n.TASK_STALL,taskAttempts:n.TASK_ATTEMPTS,...n.CLAUDE_SUBSCRIPTIONS||n.CODEX_SUBSCRIPTIONS?{subscriptions:{claude:n.CLAUDE_SUBSCRIPTIONS,codex:n.CODEX_SUBSCRIPTIONS}}:{},...s?{auth:{wular:{url:s}}}:{},...n.SERVER_INTEGRATIONS?{integrations:n.SERVER_INTEGRATIONS.split(`,`).map(e=>e.trim()).filter(Boolean)}:{},...n.SERVER_OPERATORS?{operators:n.SERVER_OPERATORS.split(`,`).map(e=>e.trim()).filter(Boolean)}:{}}}function M(){return new _(`invalid-option`,`The Coder server needs Bun; the CLI itself runs on Node.`,{hint:[b.platform===`win32`?`Install Bun: powershell -c "irm bun.sh/install.ps1 | iex"`:`Install Bun: curl -fsSL https://bun.sh/install | bash`,`Or with npm: npm install -g bun`,`Then run the command again. More: https://bun.sh/docs/installation`]})}function N(){if(typeof Bun>`u`)throw M()}async function P(){if(typeof Bun<`u`)return;let e=b.platform===`win32`?[`bun.exe`,`bun.cmd`,`bun`]:[`bun`];for(let t of e){let e=await y(t);if(e.error?.code!==`ENOENT`&&e.error?.code!==`EINVAL`){if(e.error)throw e.error;if(e.signal){let t=x.constants.signals[e.signal];b.exit(typeof t==`number`?128+t:1)}b.exit(e.status??1)}}throw M()}export{j as n,N as r,S as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{$ as n,N as r,T as i,V as a,_ as o,bt as s,g as c,gt as l,o as u,tt as d}from"./state-
|
|
2
|
-
`,t),i=r>0?r:t;n.push(e.slice(0,i).trimEnd()),e=e.slice(i).replace(/^\n/,``)}r=e,(o.match(/^```/gm)??[]).length%2==1&&(i=!i)}return a(),n}async function W(e,t,n,r,i){if(!n)return i(t);if(!e.adapter.postEphemeral||!r)return i(`${t}\n\n---\n\n${n}`);let a=await i(t);return await e.postEphemeral(r,n,{fallbackToDM:!1}).catch(t=>console.error(`coder: could not show the notice in ${e.id}`,t)),a}async function G(e,t,n,r){let i=[];for(let a of U(t,n))i.push(r&&e.adapter.reply?await e.reply(r,{markdown:a}):await e.post({markdown:a}));return i}async function K(e,t,n,r,i=e.id,a,o){let s=a??await ue(e,t,r,i);return(await W(s,n,o,o&&(t.chat?.message?.author.userId||t.actor.id),n=>G(s,n,e.replyLimit,t.chat?.message?.id))).flatMap(e=>e.id?[e.id]:[])}async function q(e,t,n,r){let i=N.join(a(e,t),`post-${n}.json`),o=l(i);if(o)return o;I(i,`null`,{flag:`wx`});let c=await r();return s(i,c),c}async function ue(e,t,n,r){if(!t.chat)throw Error(`The ${t.integration} event has no conversation`);let[{Chat:i},{LocalChatState:a}]=await Promise.all([import(`./dist-B5qUdWUG.js`),import(`./chat-Bfu9XKRa.js`).then(e=>e.r)]),o=await e.adapter({fetch,appId:t.appId.slice(e.id.length+1),name:r,installationId:t.installationId,token:async()=>n,privateState:()=>new a}),s=new i({userName:r,adapters:{[e.id]:o},state:new a,logger:`error`});return await s.initialize(),s.thread(t.chat.thread.id)}async function J(e,t,n){if(!n)throw Error(`This turn has no message to react to; give a message id`);let{defaultEmojiResolver:r}=await import(`./dist-B5qUdWUG.js`),i=r.fromSlack(r.fromGChat(t).name);await e.adapter.addReaction(e.id,n,i)}function Y(e,t){return Object.fromEntries(Object.keys(e.tools).map(n=>[n,t[O(n)]??(n===e.event?.integration?t.APP_TOKEN:void 0)]))}async function de(e){let{cwd:n,flow:l}=e,f=p(n),m=await _(n,v),g=e.task;!g&&e.taskFile&&(g={...JSON.parse(await L.readFile(N.resolve(n,e.taskFile),`utf8`)),flow:l});let x=m.find(t=>t.id===e.agent);if(g&&(x={id:g.agent,name:g.definition.name??g.agent,definition:b(g.agent,g.definition),...g.usage?{usage:g.usage}:{},...g.files?{files:g.files}:{},builtin:!1}),!x)throw Error(`No agent named "${e.agent}".`);g??=await fe(n,x,l,e);let w=g.event,T=w&&v[w.integration];if(w&&!T)throw Error(`Unknown integration "${w.integration}".`);let O=h(e.connections??{},e.connectionEnv),k=D(g,e.toolEnvironment?.tokens??Y(g,se.env),e.replyEndpoint);if(l==="default"){let p=e.post!==!1&&!!T,m=e.postToken??se.env.APP_TOKEN,h=p?ue(T,w,m,g.author??T.id):void 0;h?.catch(()=>{});let _=ye(x,g),v=ne(g.mcp?.join(`,`),f.mcp,x.definition.mcp,O.mcp),b=[...Object.values(k.mcp),...v.mcp],C=e.resumeTurn??(e.resumeTaskId?r(n,e.resumeTaskId).length:0),E,D=e.resumeTaskId??e.taskId??o(),A=g.models??ie(f,te(y(x),f)).map(e=>({model:c(e)})),j=e.resumeTaskId?i(n,e.resumeTaskId):void 0,M=Math.max(0,A.findIndex(e=>j&&c(j)===e.model)),P=[...j?.fallbacks??[]],F=!1,I,R;for(;;){let i=A[M],o,c=!1;try{if(o=te({model:i.model,access:S(x,g.access)},f),await e.onModel?.(i)===!1)throw new t(`chain-exhausted`,`No applicable credential is connected for ${i.model}`);F&&d(n,D,{status:`queued`,pid:null,threadId:null,resumeThreadId:null,resumedAt:new Date().toISOString(),error:void 0,completedAt:void 0}),I=e.resumeTaskId?{taskId:e.resumeTaskId}:await ae({onWorker:(t,n)=>{E=n,e.onWorker?.(t,n)},availability:e.availability,taskId:D,...e.resume?{resume:e.resume}:{},mcp:b,mcpBindings:v.mcpBindings,mcpWarnings:v.warnings,nativeMcp:v.nativeMcp,connectionEnv:{...O.env,...k.env},connections:g.connections,cwd:n,agentId:g.agent,...ve(g)?{conversation:!0}:{},...g.author?{author:g.author}:{},...w?.repo?{repo:`${w.repo.owner}/${w.repo.name}`}:{},...e.source?{name:g.name,source:e.source}:{name:`${z}${g.id}`,source:g.source},appendSystem:g.appendSystem,addDirs:g.addDirs,access:o.access,agentPrompt:_.agentPrompt,prompt:_.prompt,outputSchema:g.context?.outputSchema,...g.context?.approvals?{approvals:g.context.approvals}:{},wait:!0},{config:f,models:[o],waitForStartup:!1}),await e.onTask?.(I.taskId,C),R=await X(n,I.taskId,e.onApproval,(e,t,n)=>ee(e,t,{...n,turn:C,worker:E}))}catch(i){if(o&&!(i instanceof t&&i.code===`chain-exhausted`))throw i;c=!0;let l=i instanceof t?i.payload?.error??i.message:String(i.message??i),u=d(n,D,{status:`failed`,engine:o?.engine,prompt:_.prompt,error:l,pid:null}),f={status:1,threadId:null,error:{message:l}};s(N.join(a(n,u.id),`result.json`),f),await L.appendFile(N.join(a(n,u.id),`results.jsonl`),JSON.stringify({...f,prompt:_.prompt})+`
|
|
1
|
+
import{Ea as e}from"./args-CJsHYWbt.js";import{t}from"./errors-DK_trCff.js";import{$ as n,N as r,T as i,V as a,_ as o,bt as s,g as c,gt as l,o as u,tt as d}from"./state-CxAUec80.js";import{R as f,w as p}from"./config-_32PHl9g.js";import{_ as m,a as h,y as g}from"./connections-B90TemYf.js";import{c as _}from"./load-BtIDghgd.js";import{t as v}from"./integrations-DSZSa8Rc.js";import{a as y,l as b,r as x,t as S}from"./definition-D0OpQfGX.js";import{_ as ee,d as te,f as ne,h as re,o as ie,r as ae}from"./dispatch-BkoIU4GU.js";import{a as C}from"./discover-BfYHHJN_.js";import{n as w,p as T,r as oe}from"./view-D-rbQ1Kz.js";import{o as E}from"./executor-DBW7R7Tf.js";import{i as D,o as O}from"./mcp-cEIva8Pd.js";import{a as k,n as A,r as j,t as M}from"./turn-eI4iRPsq.js";import N from"node:path";import se from"node:process";import{readFileSync as P,readdirSync as F,writeFileSync as I}from"node:fs";import L from"node:fs/promises";var R=e({AGENT_TASK_PREFIX:()=>z,agentDeveloperInstructions:()=>$,agentTaskOptions:()=>he,builtinArgs:()=>pe,builtinTaskArgs:()=>Z,defaultTask:()=>ye,execAgent:()=>de,localAgentPrompt:()=>me,postReply:()=>K,postReplyParts:()=>G,postTurnReply:()=>q,reactToMessage:()=>J,replyParts:()=>U,taskFromEvent:()=>B,threadReply:()=>H,waitForAgentTask:()=>X,withNotice:()=>W});const ce=e=>f(e).model??e,z=`agent:`;function B(e,t){let n=v[t.integration];return{id:`local-${t.deliveryId}-${e.id}`,source:t.integration,agent:e.id,flow:`default`,runner:`local`,event:t,definition:e.definition,...e.usage?{usage:e.usage}:{},tools:n?{[t.integration]:n.tools.presets[S(e)]}:{}}}function V(e){return e.normalize(`NFKC`).toLowerCase().replace(/[“”„‟«»‘’‚‛"'`]/g,``).replace(/[‐‑‒–—―−]/g,`-`).replace(/[.!?,;:…]+(?=\s|$)/g,``).replace(/\s+/g,` `).trim()}const le=/issue with the selected model|model_not_found|\bmodel\b.{0,80}\b(?:does not exist|is not supported|not found)/i;function H(e,t,n,r){let i=t?.finalMessage?.trim(),a=r?.lastReply?.trim(),o=e.notice&&!a?{notice:e.notice}:{};if(i&&i.replace(/^`+|`+$/g,``).trim()!==`__EMPTY__`&&!t?.error)return{text:i,...o,...a&&V(i)===V(a)?{duplicate:!0}:{}};let s=t?.error?.message?.trim()??``;if(t?.error&&a)return{text:``,duplicate:!0};if(n)return{text:s};if(t&&!t.error){if(r?.lastReply?.trim()||T(r?.prompt,e.context?.mustReply??e.event?.mustReply,r?.steers)===!1)return{text:``,skipped:!0};let t=e.taskUrl?` [See the task](${e.taskUrl})`:``;return{text:`${w}${t}`}}return le.test(s)?{text:`This agent's model is not available in this workspace. ${e.settingsUrl?`[Open the agent's settings](${e.settingsUrl}) to pick another one.`:`An admin can pick another one in the agent's settings.`}`}:{text:e.failureReply??s}}function U(e,t){if(!t||e.length<=t)return[e];let n=[],r=``,i=!1,a=()=>{r.trim()&&n.push(r.trimEnd()),r=``};for(let o of e.split(/\n\n/)){r&&!i&&`${r}\n\n${o}`.length>t&&a();let e=r?`${r}\n\n${o}`:o;for(;e.length>t;){let r=e.lastIndexOf(`
|
|
2
|
+
`,t),i=r>0?r:t;n.push(e.slice(0,i).trimEnd()),e=e.slice(i).replace(/^\n/,``)}r=e,(o.match(/^```/gm)??[]).length%2==1&&(i=!i)}return a(),n}async function W(e,t,n,r,i){if(!n)return i(t);if(!e.adapter.postEphemeral||!r)return i(`${t}\n\n---\n\n${n}`);let a=await i(t);return await e.postEphemeral(r,n,{fallbackToDM:!1}).catch(t=>console.error(`coder: could not show the notice in ${e.id}`,t)),a}async function G(e,t,n,r){let i=[];for(let a of U(t,n))i.push(r&&e.adapter.reply?await e.reply(r,{markdown:a}):await e.post({markdown:a}));return i}async function K(e,t,n,r,i=e.id,a,o){let s=a??await ue(e,t,r,i);return(await W(s,n,o,o&&(t.chat?.message?.author.userId||t.actor.id),n=>G(s,n,e.replyLimit,t.chat?.message?.id))).flatMap(e=>e.id?[e.id]:[])}async function q(e,t,n,r){let i=N.join(a(e,t),`post-${n}.json`),o=l(i);if(o)return o;I(i,`null`,{flag:`wx`});let c=await r();return s(i,c),c}async function ue(e,t,n,r){if(!t.chat)throw Error(`The ${t.integration} event has no conversation`);let[{Chat:i},{LocalChatState:a}]=await Promise.all([import(`./dist-B5qUdWUG.js`),import(`./chat-Bfu9XKRa.js`).then(e=>e.r)]),o=await e.adapter({fetch,appId:t.appId.slice(e.id.length+1),name:r,installationId:t.installationId,token:async()=>n,privateState:()=>new a}),s=new i({userName:r,adapters:{[e.id]:o},state:new a,logger:`error`});return await s.initialize(),s.thread(t.chat.thread.id)}async function J(e,t,n){if(!n)throw Error(`This turn has no message to react to; give a message id`);let{defaultEmojiResolver:r}=await import(`./dist-B5qUdWUG.js`),i=r.fromSlack(r.fromGChat(t).name);await e.adapter.addReaction(e.id,n,i)}function Y(e,t){return Object.fromEntries(Object.keys(e.tools).map(n=>[n,t[O(n)]??(n===e.event?.integration?t.APP_TOKEN:void 0)]))}async function de(e){let{cwd:n,flow:l}=e,f=p(n),m=await _(n,v),g=e.task;!g&&e.taskFile&&(g={...JSON.parse(await L.readFile(N.resolve(n,e.taskFile),`utf8`)),flow:l});let x=m.find(t=>t.id===e.agent);if(g&&(x={id:g.agent,name:g.definition.name??g.agent,definition:b(g.agent,g.definition),...g.usage?{usage:g.usage}:{},...g.files?{files:g.files}:{},builtin:!1}),!x)throw Error(`No agent named "${e.agent}".`);g??=await fe(n,x,l,e);let w=g.event,T=w&&v[w.integration];if(w&&!T)throw Error(`Unknown integration "${w.integration}".`);let O=h(e.connections??{},e.connectionEnv),k=D(g,e.toolEnvironment?.tokens??Y(g,se.env),e.replyEndpoint);if(l==="default"){let p=e.post!==!1&&!!T,m=e.postToken??se.env.APP_TOKEN,h=p?ue(T,w,m,g.author??T.id):void 0;h?.catch(()=>{});let _=ye(x,g),v=ne(g.mcp?.join(`,`),f.mcp,x.definition.mcp,O.mcp),b=[...Object.values(k.mcp),...v.mcp],C=e.resumeTurn??(e.resumeTaskId?r(n,e.resumeTaskId).length:0),E,D=e.resumeTaskId??e.taskId??o(),A=g.models??ie(f,te(y(x),f)).map(e=>({model:c(e)})),j=e.resumeTaskId?i(n,e.resumeTaskId):void 0,M=Math.max(0,A.findIndex(e=>j&&c(j)===e.model)),P=[...j?.fallbacks??[]],F=!1,I,R;for(;;){let i=A[M],o,c=!1;try{if(o=te({model:i.model,access:S(x,g.access)},f),await e.onModel?.(i)===!1)throw new t(`chain-exhausted`,`No applicable credential is connected for ${i.model}`);F&&d(n,D,{status:`queued`,pid:null,threadId:null,resumeThreadId:null,resumedAt:new Date().toISOString(),error:void 0,completedAt:void 0}),I=e.resumeTaskId?{taskId:e.resumeTaskId}:await ae({onWorker:(t,n)=>{E=n,e.onWorker?.(t,n)},availability:e.availability,taskId:D,...e.resume?{resume:e.resume}:{},mcp:b,mcpBindings:v.mcpBindings,mcpWarnings:v.warnings,nativeMcp:v.nativeMcp,connectionEnv:{...O.env,...k.env},connections:g.connections,cwd:n,agentId:g.agent,...ve(g)?{conversation:!0}:{},...g.author?{author:g.author}:{},...w&&T?.repos?{pullRequest:T.repos.pullRequest(w)}:{},...w?.repo?{repo:`${w.repo.owner}/${w.repo.name}`}:{},...e.source?{name:g.name,source:e.source}:{name:`${z}${g.id}`,source:g.source},appendSystem:g.appendSystem,addDirs:g.addDirs,access:o.access,agentPrompt:_.agentPrompt,prompt:_.prompt,outputSchema:g.context?.outputSchema,...g.context?.approvals?{approvals:g.context.approvals}:{},wait:!0},{config:f,models:[o],waitForStartup:!1}),await e.onTask?.(I.taskId,C),R=await X(n,I.taskId,e.onApproval,(e,t,n)=>ee(e,t,{...n,turn:C,worker:E}))}catch(i){if(o&&!(i instanceof t&&i.code===`chain-exhausted`))throw i;c=!0;let l=i instanceof t?i.payload?.error??i.message:String(i.message??i),u=d(n,D,{status:`failed`,engine:o?.engine,prompt:_.prompt,error:l,pid:null}),f={status:1,threadId:null,error:{message:l}};s(N.join(a(n,u.id),`result.json`),f),await L.appendFile(N.join(a(n,u.id),`results.jsonl`),JSON.stringify({...f,prompt:_.prompt})+`
|
|
3
3
|
`),I={taskId:u.id},await e.onTask?.(u.id,C),R={taskId:u.id,task:u,status:`failed`,result:f,turns:r(n,u.id),steps:[]}}let l=c||re(n,R)?A[M+1]:void 0;if(c||l){let e=R.result?.error?.message??`the engine could not start`,t=ce(i.model);u(n,D,{kind:`warning`,message:`${t} skipped because ${e}`}),l&&(P.push({model:i.model,detail:e,next:l.model}),d(n,D,{fallbacks:P}))}if(!l)break;C=r(n,I.taskId).length,E&&await new Promise(e=>{if(E.exitCode!==null||E.signalCode)return e();E.once(`exit`,()=>e())}),M++,F=!0,e={...e,resumeTaskId:void 0,resume:void 0}}let B=r(n,I.taskId)[C],{text:V,skipped:le,duplicate:U,notice:W}=B?H(g,B,!1,B):H(g,R.result,R.status===`cancelled`);le&&p&&u(n,I.taskId,{kind:`status`,message:oe});let G=p&&!!V&&!U,J=G?await q(n,I.taskId,C,async()=>K(T,w,V,m,g.author,await h,W)):[],Y=(B??R.result)?.error?.message;return{ok:R.status===`completed`,flow:l,reply:V,...Y?{error:Y}:{},posted:G,...J.length?{postedMessages:J}:{},taskId:I.taskId,turn:C,tokens:R.result?.tokens??void 0}}let A=C(l,n),j=A.scope===`builtin`?{...await Z(g,x),cwd:n,...g.args}:g.args??w,M=await E(A.path,{cwd:n,...e.taskId?{runId:e.taskId}:{},args:j,access:S(x,g.access),...e.postToken?{integrationToken:e.postToken}:{},connections:{mcp:{...O.mcp,...k.mcp},env:{...O.env,...k.env},ids:g.connections??[]}},{...e.onTask?{onEvent:t=>{t.kind===`task-start`&&e.onTask(t.taskId)}}:{},...e.onStart?{onStart:e.onStart}:{},...e.onFlowModel?{onModel:e.onFlowModel}:{}});return{ok:!0,flow:l,runId:M.runId,result:M.result,tokens:M.tokens}}async function X(e,r,i,a=ee,o){let s=new Set,c=n(e,r);try{for(;;)try{return await a(e,r,{seen:[...s]})}catch(e){if(!(e instanceof t)||e.code!==`approval-pending`||!i)throw e;let n=String(e.approval?.id);if(!s.has(n)){s.add(n),await i(e.approval);continue}await(o?o():c.wait(3e4))}}finally{c.close()}}async function Z(e,t){if(!e.event)throw Error(`built-in flows need a GitHub pull request event`);return{...pe(e.event,e.author),...y(t),...e.access?{access:e.access}:{}}}async function fe(e,t,n,r){if(r.taskFile){let t=JSON.parse(await L.readFile(N.resolve(e,r.taskFile),`utf8`));return{...t,flow:n,tools:t.tools??{}}}if(!r.eventFile)throw Error(`Missing --task or --event file.`);return B(t,JSON.parse(await L.readFile(N.resolve(e,r.eventFile),`utf8`)))}function pe(e,t){let n=v[e.integration]?.repos?.pullRequest(e);if(!n)throw Error(`built-in flows need a pull request event`);return{pr:n,...t?{author:t}:{}}}async function me(e,t){let n=(await _(e,v).catch(()=>[])).find(e=>e.id===t);return n?{access:S(n),developer:$(n)}:{access:`read-only`}}async function he(e,n,r,i,a,o){let s=await _(e,v),c=s.find(e=>e.id===n);if(!c)throw new t(`invalid-option`,`No agent named "${n}".`,{hint:`Agents here: ${s.map(e=>e.id).join(`, `)}`});let{definition:l,usage:u}=c,d=S(c,o),f=i===void 0?await m(g(u?.connections,a),void 0,void 0,d):void 0,h=l.mcp??{},b=ne(r,p(e).mcp,h,i??f?.mcp);return{...y({definition:l,usage:u}),access:d,developer:$(c),...b,mcpWarnings:b.warnings,connections:u?.connections,...f?{connected:f}:{}}}const Q=48e3;function $(e,t){return{description:e.definition.description,instructions:ge(e),notes:t?.instructions}}function ge(e){if(!e.dir)return _e(e.files??{});let t;try{t=F(e.dir).filter(e=>e.endsWith(`.md`))}catch{return``}t.sort((e,t)=>e===`system.md`?-1:t===`system.md`?1:e.localeCompare(t));let n=``;for(let r of t){let t=`### ${r}\n\n${P(N.join(e.dir,r),`utf8`).trim()}\n`;if(n+=t.slice(0,Q-n.length),n.length===Q)break}return n.trimEnd()}function _e(e){let t=Object.keys(e).filter(e=>e.endsWith(`.md`));t.sort((e,t)=>e===`system.md`?-1:t===`system.md`?1:e.localeCompare(t));let n=``;for(let r of t){let t=`### ${r}\n\n${e[r].trim()}\n`;if(n+=t.slice(0,Q-n.length),n.length===Q)break}return n.trimEnd()}const ve=e=>!!(e.event&&e.source===e.event.integration);function ye(e,t){let{event:n,context:r}=t,i=ve(t),a=t.prompt===void 0?r?.user:void 0,o=n&&v[n.integration],s=t.prompt===void 0?n?A([n],a):``:k(t.prompt,n?.repo,n&&o?.repos?.pullRequest(n));return{agentPrompt:{developer:$(e,r),...i?{platform:{name:n.integration,prompt:o?.prompt},events:x(e.definition.integrations[n.integration])}:{},access:S(e,t.access)},prompt:j(r?.messages??[],M(r,s))}}export{K as a,J as c,X as d,W as f,R as i,B as l,he as n,G as o,de as r,q as s,z as t,H as u};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import{Ea as e,la as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import{r,s as i}from"./output-BKeyLbvt.js";import{L as a,O as o,P as s,R as c,T as l,ft as u,g as d,ht as f,i as ee,k as p,l as m,mt as te,vt as ne,x as re}from"./state-
|
|
2
|
-
[flow] dry-run ended early: a downstream step depends on real task output (stub it or run for real).`:``;throw new n(`flow-failed`,`[flow] ${e} ${r.runId} failed: ${r.message}${i}`,{runId:r.runId,hint:`Resume${e===`resume`?` again`:``}: coder flow resume ${r.runId}`})}}function je(e,t){let r=e?D(e):M();if(!r)throw new n(`flow-failed`,e?`No flow run "${e}".`:t,{hint:`Run one: coder flow run <name>`});return r}async function Me(e,t={},n={}){if(t.detached){if(!t.dryRun)return b(K(e,t),t.cwd?g.resolve(t.cwd):_.cwd(),{wait:t.wait});De(h(e,t.cwd?g.resolve(t.cwd):_.cwd()).path,_.argv.slice(2))}return Ae(`run`,t.dryRun,()
|
|
3
|
-
`).filter(Boolean).flatMap(e=>{try{return[JSON.parse(e)]}catch{return[]}}):[]}function S(e,t={}){let n=e?D(e):M();return n?{...n,steps:He(n.runId,t.tail),journal:I(g.join(w(n.runId),`journal.jsonl`)).map(e=>({kind:e.kind,taskId:e.taskId,tokens:e.tokens})),events:x(n.runId)}:null}function C(e,t={}){let r=je(e,`No flow runs yet.`),i=t.from;return{record:r,events:i===void 0?
|
|
1
|
+
import{Ea as e,la as t}from"./args-CJsHYWbt.js";import{t as n}from"./errors-DK_trCff.js";import{r,s as i}from"./output-BKeyLbvt.js";import{L as a,O as o,P as s,R as c,T as l,ft as u,g as d,ht as f,i as ee,k as p,l as m,mt as te,vt as ne,x as re}from"./state-CxAUec80.js";import{w as ie,z as ae}from"./config-_32PHl9g.js";import{g as oe,h as se}from"./app-server-dnlLhhZb.js";import{_ as ce,d as le,f as ue,h as de,o as fe,r as pe}from"./dispatch-BkoIU4GU.js";import{a as h}from"./discover-BfYHHJN_.js";import{i as me}from"./view-D-rbQ1Kz.js";import{g as he,v as ge}from"./actions-DO8MvHwc.js";import{createRequire as _e}from"node:module";import g from"node:path";import _ from"node:process";import{fileURLToPath as ve,pathToFileURL as v}from"node:url";import y from"node:fs";import{spawn as ye,spawnSync as be}from"node:child_process";import xe from"node:os";import Se,{randomUUID as Ce}from"node:crypto";import{AsyncLocalStorage as we}from"node:async_hooks";var Te=e({archiveRun:()=>T,archiveRuns:()=>Fe,collectFlowRuns:()=>Ue,deleteRuns:()=>Ie,detachRun:()=>b,driveRun:()=>ke,flowTaskIds:()=>N,generateRunId:()=>Le,latestRun:()=>M,listArchivedRuns:()=>j,readFlowRecord:()=>D,readRawRecord:()=>E,resumeRun:()=>Ne,runDirFor:()=>w,runResult:()=>S,startRun:()=>Me,unarchiveRun:()=>Re,watchRun:()=>C,writeFlowRecord:()=>O});function Ee(){try{return be(`bun`,[`--version`],{stdio:`ignore`}).status===0}catch{return!1}}function De(e,r){if(!e.endsWith(`.ts`)||_.versions.bun||_.features.typescript)return;if(!Ee())throw new n(`invalid-option`,`This flow is a TypeScript file (${e}) and this Node cannot run TypeScript.`,{hint:[`Upgrade to Node 23.6+ or install bun: https://bun.sh`,`Or write the flow as .mjs / .js`]});let i=be(`bun`,[t,...r],{stdio:`inherit`});_.exit(i.status??1)}function Oe(e){let t=!1,n=n=>{t||(t=!0,(async()=>{let{runId:t}=e;_.stderr.write(`\n[flow] Stopping run ${t}. No new tasks will dispatch.\n`);let a=n?e.runningIds():await Q(t,e.runningIds());a.length&&_.stderr.write(`[flow] ${n?`left running`:`stopped tasks`}: ${a.join(`, `)}\n`),_.stderr.write(`\n${i([`Resume: coder flow resume ${t}`],r)}\n`),e.requestStop(),_.exit(130)})())};_.once(`SIGINT`,()=>n(!1)),_.once(`SIGTERM`,()=>n(!0))}async function ke(e,t){let n=E(e);if(!n)throw Error(`No flow run "${e}".`);try{await jt(n,t,{onStart:Oe})}catch(t){throw J(e,t instanceof Error?t.message:String(t)),t}}function b(e,n,r={}){let i=e.script.endsWith(`.ts`)&&!_.versions.bun&&!_.features.typescript;if(i&&!Ee())throw Error(`TypeScript flows need bun or Node 23.6+.`);let a=y.openSync(g.join(w(e.runId),`flow.log`),`a`),o=ye(i?`bun`:_.execPath,[t,`flow`,`drive`,e.runId,`--cwd`,n,...r.drive??[]],{detached:!0,stdio:[`ignore`,a,a],env:r.env??_.env});return o.unref(),y.closeSync(a),{runId:e.runId,status:`running`,...r.wait?{watch:C(e.runId,{bootPid:o.pid})}:{}}}async function Ae(e,t,r){try{return await r()}catch(r){if(!(r instanceof n)||r.code!==`flow-failed`)throw r;let i=t?`
|
|
2
|
+
[flow] dry-run ended early: a downstream step depends on real task output (stub it or run for real).`:``;throw new n(`flow-failed`,`[flow] ${e} ${r.runId} failed: ${r.message}${i}`,{runId:r.runId,hint:`Resume${e===`resume`?` again`:``}: coder flow resume ${r.runId}`})}}function je(e,t){let r=e?D(e):M();if(!r)throw new n(`flow-failed`,e?`No flow run "${e}".`:t,{hint:`Run one: coder flow run <name>`});return r}async function Me(e,t={},n={}){if(t.detached){if(!t.dryRun)return b(K(e,t),t.cwd?g.resolve(t.cwd):_.cwd(),{wait:t.wait});De(h(e,t.cwd?g.resolve(t.cwd):_.cwd()).path,_.argv.slice(2))}return Ae(`run`,t.dryRun,()=>$(e,t,n))}async function Ne(e,t={},n={}){let r=je(e,`No flow runs to resume.`);if(t.detached){if(!t.dryRun)return b(K(``,t,r.runId),t.cwd?g.resolve(t.cwd):_.cwd(),{wait:t.wait});De(r.script,_.argv.slice(2))}return Ae(`resume`,t.dryRun,()=>At(r.runId,t,n))}function x(e){let t=g.join(w(e),`events.jsonl`);return y.existsSync(t)?y.readFileSync(t,`utf8`).split(`
|
|
3
|
+
`).filter(Boolean).flatMap(e=>{try{return[JSON.parse(e)]}catch{return[]}}):[]}function S(e,t={}){let n=e?D(e):M();return n?{...n,steps:He(n.runId,t.tail),journal:I(g.join(w(n.runId),`journal.jsonl`)).map(e=>({kind:e.kind,taskId:e.taskId,tokens:e.tokens})),events:x(n.runId)}:null}function C(e,t={}){let r=je(e,`No flow runs yet.`),i=t.from;return{record:r,events:i===void 0?Et(r.runId,t.bootPid,{tail:t.tail}):(async function*(){yield*x(r.runId).slice(i)})(),final(){let e=S(r.runId,{tail:0});if(!e)throw new n(`flow-failed`,`[flow] run ${r.runId} vanished while following.`,{hint:`Recent runs: coder flow list`});return e}}}function Pe(e){let t=D(e);if(!t)throw new n(`flow-failed`,`No flow run "${e}".`,{hint:`Recent runs: coder flow list`});if(t.status===`running`)throw new n(`flow-failed`,`Run ${t.runId} is still running.`,{runId:t.runId,hint:`Stop it first: coder flow stop ${t.runId}`});return t}function Fe(e,t={}){if(t.allStopped){let e=A().filter(e=>e.status!==`running`);for(let t of e)T(t);let t=e.map(e=>e.runId);return{archived:t,count:t.length}}if(!e)throw new n(`invalid-option`,`Missing run id.`,{hint:[`Archive one: coder flow archive <run-id>`,`Archive all stopped: coder flow archive --all-stopped`]});let r=Pe(e);return T(r),{runId:r.runId,archived:!0}}function Ie(e,t={}){if(t.allArchived){let e=j().filter(e=>ze(e.runId)).map(e=>e.runId);return{deleted:e,count:e.length}}if(!e)throw new n(`invalid-option`,`Missing run id.`,{hint:[`Delete one: coder flow delete <run-id>`,`Delete all archived: coder flow delete --all-archived`]});let r=Pe(e);return{runId:r.runId,deleted:ze(r.runId)}}function Le(){return`flow-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}function w(e){m(e,`flow run id`);let t=g.join(c(),e);if(y.existsSync(g.join(t,`flow.json`)))return t;let n=g.join(a(),e);return y.existsSync(g.join(n,`flow.json`))?n:t}function T(e){let t=w(e.runId),n=g.join(a(),e.runId);t!==n&&f(t,n);let r={...e,archived:!0,archivedAt:e.archivedAt??new Date().toISOString()};return O(n,r),r}function Re(e){let t=w(e.runId),n=g.join(c(),e.runId);t!==n&&f(t,n);let r={...e,archived:void 0,archivedAt:void 0};return O(w(e.runId),r),r}function ze(e){let t=w(e);return y.existsSync(g.join(t,`flow.json`))?(y.rmSync(t,{recursive:!0,force:!0}),!0):!1}function E(e){if(!re(e))return null;let t=g.join(w(e),`flow.json`);if(!y.existsSync(t))return null;try{return JSON.parse(y.readFileSync(t,`utf8`))}catch{return null}}function Be(e,t=o){return e.status!==`running`||!e.pid||X(e,t)?e:(J(e.runId,`orchestrator died`),E(e.runId)??e)}function D(e){let t=E(e);return t?Be(t):null}function O(e,t){y.writeFileSync(g.join(e,`flow.json`),`${JSON.stringify(t,null,2)}\n`,`utf8`)}function Ve(e){let t=[];try{t=y.readdirSync(e)}catch{return[]}let n=[],r=p();for(let i of t)try{n.push(Be(JSON.parse(y.readFileSync(g.join(e,i,`flow.json`),`utf8`)),r))}catch{}return n}const k=(e,t)=>String(t.startedAt).localeCompare(String(e.startedAt));function A(){return Ve(c()).sort(k)}function j(){return Ve(a()).sort(k)}function M(){return[...A(),...j()].sort(k)[0]??null}function N(e){let t=I(g.join(w(e),`journal.jsonl`));return[...new Set([...t.flatMap(e=>e.kind===`task`&&e.taskId?[e.taskId]:[]),...x(e).flatMap(e=>e.kind===`task-start`?[e.taskId]:[])])]}function He(e,t=`all`){if(t===0)return[];let n=I(g.join(w(e),`journal.jsonl`)).filter(e=>e.kind===`task`),r=_.cwd(),i=p(),a=N(e).flatMap(e=>{let t=l(r,e);return t?[s(r,t,i)]:[]}),o=new Map(a.map(e=>[e.id,e])),c=e=>e?.name??e?.prompt?.replace(/\s+/g,` `).trim().slice(0,60)??null,u=n.map(e=>{let t=e.taskId?o.get(e.taskId):void 0;return{taskId:e.taskId??null,name:c(t),status:t?.status??e.result?.status??`?`,tokens:e.tokens??null}}),d=new Set(u.map(e=>e.taskId));for(let t of a)t.flowRunId===e&&!d.has(t.id)&&u.push({taskId:t.id,name:c(t),status:t.status,tokens:null});return t===`all`?u:u.slice(-t)}function Ue(e={}){let t=e.limit===`all`?void 0:e.limit,n;n=e.archived?j():A().filter(e=>e.status===`running`||ee(e.endedAt??e.startedAt)<=18e5||(T(e),!1));let r=t===void 0?0:Math.max(0,n.length-t);return{runs:t===void 0?n:n.slice(0,t),clipped:r}}function P(e){return typeof e!=`object`||!e?JSON.stringify(e)??`null`:Array.isArray(e)?`[${e.map(P).join(`,`)}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${P(e[t])}`).join(`,`)}}`}function We(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function F(e,t){return Se.createHash(`sha256`).update(`${e}\0${P(t)}`).digest(`hex`)}function I(e){return y.existsSync(e)?y.readFileSync(e,`utf8`).split(/\r?\n/).filter(Boolean).map(e=>{try{return JSON.parse(e)}catch{return null}}).filter(e=>e!==null):[]}var Ge=class{file;recorded;seq=0;constructor(e,t){this.file=t,this.recorded=e.map(e=>({...e})),y.writeFileSync(t,``,`utf8`)}write(e){e.seq=this.seq++,y.appendFileSync(this.file,`${JSON.stringify(e)}\n`,`utf8`)}replay(...e){let t=this.recorded.find(t=>!t.consumed&&e.includes(t.fingerprint));if(!t)return null;t.consumed=!0;let{consumed:n,...r}=t;return this.write(r),r}record(e){this.write({...e,seq:0})}};function L(e,t){e&&(y.appendFileSync(g.join(e.runDir,`events.jsonl`),`${JSON.stringify(t)}\n`,`utf8`),e.hooks.onEvent?.(t))}const Ke=globalThis,R=Ke.__coderFlowCtxALS??=new we,z=Ke.__coderFlowScopeALS??=new we;function qe(e){let t=R.getStore()?.stopHooks;return t?.add(e),()=>{t?.delete(e)}}function Je(){return z.getStore()?.args}function Ye(){return R.getStore()?.integrationToken}function Xe(){return R.getStore()?.checksToken}function Ze(){return R.getStore()?.links}function B(){return z.getStore()?.depth??0}var Qe=class{limit;active=0;queue=[];constructor(e){this.limit=e}async run(e){this.active<this.limit?this.active+=1:await new Promise(e=>this.queue.push(e));try{return await e()}finally{let e=this.queue.shift();e?e():--this.active}}};function $e(e,t){if(!t.tokens)return;let n=t.model??`default`;e.ledger[n]=me(e.ledger[n]??null,t.tokens)}function et(e){return!!e&&typeof e.safeParse==`function`}async function tt(e){try{let t=await import(`./zod-_-snqfdO.js`).then(e=>e.t);if(typeof t.toJSONSchema==`function`)return t.toJSONSchema(e)}catch{}return null}function nt(e){let t=e.trim(),n=t.match(/```(?:json)?\s*([\s\S]*?)```/i);n&&(t=n[1].trim());let r=t.indexOf(`{`);if(r===-1)throw Error(`no JSON object found in reply`);let i=0,a=!1,o=!1;for(let e=r;e<t.length;e+=1){let n=t[e];if(a){o?o=!1:n===`\\`?o=!0:n===`"`&&(a=!1);continue}if(n===`"`)a=!0;else if(n===`{`)i+=1;else if(n===`}`&&(--i,i===0))return JSON.parse(t.slice(r,e+1))}throw Error(`unterminated JSON object in reply`)}function V(e,t){if(!et(e))return{ok:!0,data:t};let n=e.safeParse(t);if(n.success)return{ok:!0,data:n.data};let r=n.error?.issues??n.error?.errors??[];return{ok:!1,errors:Array.isArray(r)?r.map(e=>`${(e.path??[]).join(`.`)||`(root)`}: ${e.message}`).join(`; `):String(n.error)}}function rt(e,t,n){return{cwd:t,model:e.model,mcp:e.mcp,access:ae(e.access,n?.access),name:e.name,appendSystem:e.appendSystem,addDirs:e.addDirs,wait:!0,flowRunId:n?.runId}}function it(e,t){return{taskId:e,status:t.status,output:t.result?.finalMessage||t.result?.error?.message||``,tokens:t.result?.tokens??null,model:t.result?.model??t.model}}async function at(e,t,n){n?.running.add(t);try{let n=await ce(e,t);return{status:n.status,result:n.result,model:n.task.model??null,fallback:de(e,n)}}finally{n?.running.delete(t)}}async function ot(e,t,r,i){let a=i?.cwd??_.cwd(),o=l(a,e);if(!o)throw new n(`invalid-option`,`No task "${e}".`);return await he(o.cwd??a,o,t,{...i?.connections?{resolveConnections:async e=>({mcp:Object.fromEntries(Object.entries(i.connections.mcp).filter(([t])=>e.includes(t))),env:i.connections.env,warnings:[]})}:{},model:r.model,access:r.access,credentialEnv:i?.credentialEnv?.get(e)}),it(e,await at(a,e,i))}async function st(e,t,r,i){let a=t.cwd?g.resolve(t.cwd):r?.cwd??_.cwd(),o=t.returns&&!i?[t.appendSystem,se(null)].filter(Boolean).join(`
|
|
4
4
|
|
|
5
|
-
`):t.appendSystem,s=ie(a),c={prompt:e,...
|
|
5
|
+
`):t.appendSystem,s=ie(a),c={prompt:e,...rt(t,a,r),appendSystem:o,...i?{outputSchema:i}:{},...t.returns?{structured:!0}:{}},u=fe(s,le(c,s)),f=r?.connections?ue(c.mcp,s.mcp,{},r.connections.mcp):void 0,ee=n=>{let i=l(a,n),o=i?d(i):void 0;L(r,{kind:`task-start`,taskId:n,name:t.name,prompt:e,engine:o,depth:B()})},p,m;for(let e of u){let t=r?.hooks.onModel?await r.hooks.onModel(e):[void 0];t.length||U(`${d(e)} skipped: no credential runs it.`);for(let i of t){m&&(L(r,{kind:`task-end`,taskId:m.taskId,status:`failed`,tokens:null}),U(`${m.model??`The model`} failed. Trying ${d(e)}.`));let t;try{t=await pe({...c,onWorker:ee,...i?{credentialEnv:i}:{},...r?.connections?{...f,mcpWarnings:f?.warnings,connectionEnv:r.connections.env,connections:r.connections.ids,connectionSource:`server`}:{}},{config:s,models:[e]})}catch(t){if(!(t instanceof n)||t.code!==`chain-exhausted`)throw t;U(`${d(e)} failed to start. ${t.message.replace(/\s+/g,` `).slice(0,140)}`),p=t,m=void 0;continue}i&&(r.credentialEnv??=new Map).set(t.taskId,i);let o=await at(a,t.taskId,r);if(m=it(t.taskId,o),p=void 0,!o.fallback)return m}}if(m)return m;throw p??new n(`chain-exhausted`,`No credential runs any listed model.`)}async function ct(e,t,r,i=null){if(r?.dryRun){_.stdout.write(`\n[dry-run] task${t.name?` (${t.name})`:``}:\n${e}\n`);let n={...t,returns:t.returns?`<schema>`:void 0};return _.stdout.write(`[dry-run] opts: ${JSON.stringify(n)}\n`),{taskId:`dry`,status:`completed`,output:`[dry-run]`,data:void 0,tokens:null,model:t.model??null}}let a=await st(e,t,r,i);if(a.status!==`completed`){let e={...a,data:void 0};throw new n(`task-failed`,`Task ${a.taskId} ${a.status}: ${a.output||`no output`}`,{taskId:a.taskId,result:e})}let o=a.output,s=a.tokens,c;if(t.returns){let e;try{e=V(t.returns,nt(o))}catch(t){e={ok:!1,errors:t instanceof Error?t.message:String(t)}}if(e.ok)c=e.data;else{let i=await ot(a.taskId,oe(e.errors),{},r);o=i.output||o,s=me(s,i.tokens);try{let e=V(t.returns,nt(o));if(!e.ok)throw Error(e.errors);c=e.data}catch(e){let t={taskId:a.taskId,status:`completed`,output:o,data:void 0,tokens:s,model:a.model};throw new n(`task-failed`,`Task ${a.taskId} produced no valid structured output: ${e instanceof Error?e.message:String(e)}`,{taskId:a.taskId,result:t})}}}return{taskId:a.taskId,status:`completed`,output:o,data:c,tokens:s,model:a.model}}async function lt(e,t,r){let i=e.journal.replay(t);if(i)return i.result;if(++e.taskCount>e.maxTasks)throw Error(`Flow exceeded --max-tasks (${e.maxTasks}). Raise it with --max-tasks, or fix a runaway loop; the run is resumable.`);return e.semaphore.run(async()=>{let i=new Date().toISOString(),a;try{a=await r()}catch(t){let r=t instanceof n?t.result:void 0;throw r&&L(e,{kind:`task-end`,taskId:r.taskId,status:r.status===`completed`?`failed`:r.status,tokens:r.tokens}),t}return $e(e,a),e.dryRun||L(e,{kind:`task-end`,taskId:a.taskId,status:a.status,tokens:a.tokens}),e.journal.record({kind:`task`,fingerprint:t,result:a,taskId:a.taskId,tokens:a.tokens,startedAt:i,endedAt:new Date().toISOString()}),a})}async function ut(e,t={}){let n=R.getStore(),r=t.returns?await tt(t.returns):null,i=()=>ct(e,t,n,r);if(!n)return i();let{returns:a,...o}=t;return lt(n,F(`task`,We({prompt:e,...o,returns:a?r??`<schema>`:void 0})),i)}async function dt(e,t,r={}){let i=R.getStore(),a=async()=>{if(i?.dryRun)return _.stdout.write(`\n[dry-run] steer ${e}:\n${t}\n`),{taskId:e,status:`completed`,output:`[dry-run]`,tokens:null,model:r.model??null};let a=await ot(e,t,r,i);if(a.status!==`completed`)throw new n(`task-failed`,`Task ${e} ${a.status}: ${a.output||`no output`}`,{taskId:e,result:a});return a};return i?lt(i,F(`steer`,We({taskId:e,text:t,...r})),a):a()}const H=262144;function ft(e){let t=[];for(let n=e;;){t.push(g.join(n,`node_modules`,`.bin`));let e=g.dirname(n);if(e===n)break;n=e}let n=_.platform===`win32`?`;`:`:`;return{..._.env,PATH:[...t,_.env.PATH??``].join(n)}}async function pt(e,t){return new Promise(n=>{let r=ye(e,{shell:!0,cwd:t,env:ft(t)}),i=``,a=e=>{i.length>=H||(i+=e,i.length>=H&&(i=`${i.slice(0,H)}\n... [gate output truncated]`))};r.stdout?.on(`data`,a),r.stderr?.on(`data`,a),r.on(`error`,e=>n({ok:!1,code:1,output:String(e.message??e).trim()})),r.on(`close`,e=>n({ok:e===0,code:e??0,output:i.trim()}))})}async function mt(e,t={}){let n=R.getStore(),r=t.cwd?g.resolve(t.cwd):n?.cwd??_.cwd();if(!n)return pt(e,r);let i=F(`gate`,{cmd:e,cwd:t.cwd}),a=n.journal.replay(i);if(a)return a.result;if(n.dryRun){_.stdout.write(`\n[dry-run] gate: ${e}\n`);let t={ok:!0,code:0,output:``};return n.journal.record({kind:`gate`,fingerprint:i,result:t,startedAt:new Date().toISOString(),endedAt:new Date().toISOString()}),t}let o=new Date().toISOString(),s=`gate-${_.pid}-${Ce()}`,c=B();L(n,{kind:`gate-start`,gateId:s,cmd:e,depth:c});let l=await pt(e,r);return L(n,{kind:`gate`,gateId:s,cmd:e,ok:l.ok,code:l.code,depth:c}),n.journal.record({kind:`gate`,fingerprint:i,result:l,startedAt:o,endedAt:new Date().toISOString()}),l}async function ht(e,...t){return Promise.all(e.map(async(e,n)=>{let r=e;for(let[i,a]of t.entries())try{r=await a(r,e,n)}catch(e){return U(`stage ${i+1} failed: ${e instanceof Error?e.message:String(e)}`),null}return r}))}function U(e){let t=R.getStore();L(t,{kind:`log`,message:e,depth:B()}),(!t||_.stderr.isTTY&&!t.hooks.onEvent)&&_.stderr.write(`[flow] ${e}\n`)}const gt=_e(import.meta.url);function W(e){let t=g.dirname(ve(import.meta.url));for(;g.basename(t)!==`dist`&&g.dirname(t)!==t;)t=g.dirname(t);return g.basename(t)===`dist`?v(g.join(t,e)).href:null}function _t(e){if(e===`zod`||e.startsWith(`zod/`)){let e=W(`zod.js`)??new URL(`./zod.js`,import.meta.url).href;if(y.existsSync(ve(e)))return e}if(!(e===`@wular/coder`||e===`@wular/coder/flow`||e===`zod`||e.startsWith(`zod/`)))return null;try{return v(gt.resolve(e)).href}catch{}return e===`@wular/coder/flow`?W(`flow/index.js`):e===`@wular/coder`?W(`sdk.js`):null}const vt=/(\bfrom\s+|\bimport\s+|\bimport\s*\(\s*)(['"])([^'"]+)\2/g;function yt(e){return e.replace(vt,(e,t,n,r)=>{let i=_t(r);return i?`${t}${n}${i}${n}`:e})}async function bt(e){e=y.realpathSync(e);let t=z.getStore(),n=t.imports??={dirs:new Set,node:!1};if(_.versions?.bun){if(n.dirs.has(e))return;n.dirs.add(e);let{plugin:t}=await import(`bun`),r=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);t({name:`coder-flow:${e}`,setup(e){e.onLoad({filter:RegExp(`^${r}/(?!.*node_modules/).*\\.m?[jt]sx?$`)},e=>({contents:yt(y.readFileSync(e.path,`utf8`)),loader:g.extname(e.path).replace(/^\.m?/,``)}))}});return}if(n.node)return;n.node=!0;let{register:r}=await import(`node:module`),i=Object.fromEntries([`@wular/coder`,`@wular/coder/flow`,`zod`].flatMap(e=>{let t=_t(e);return t?[[e,t]]:[]})),a=`const urls = ${JSON.stringify(i)}, parent = ${JSON.stringify(import.meta.url)};
|
|
6
6
|
export function resolve(spec, ctx, next) {
|
|
7
7
|
if (spec.startsWith('zod/') && urls.zod) return { url: urls.zod, shortCircuit: true };
|
|
8
8
|
if (urls[spec]) return { url: urls[spec], shortCircuit: true };
|
|
9
9
|
return next(spec, spec.startsWith('zod/') ? { ...ctx, parentURL: parent } : ctx);
|
|
10
|
-
}`;r(`data:text/javascript,${encodeURIComponent(a)}`)}async function
|
|
11
|
-
`).length-1-a)}catch{}let s=te(i),c=()=>{let e=[];for(let t of s()){if(o>0){--o;continue}try{e.push(JSON.parse(t))}catch{}}return e},l=p(),u=E(e);for(;(!u||u.status===`running`)&&(yield*c(),u=E(e)??u,!(u&&u.status!==`running`));){let n=u?.pid?!X(u,l):t!==void 0&&!Y(t);if(u&&(u.pid||t!==void 0)&&n){J(e,`orchestrator died`);break}await r.wait(1e3)}yield*c()}finally{r.close()}}function
|
|
10
|
+
}`;r(`data:text/javascript,${encodeURIComponent(a)}`)}async function xt(e,t,n){try{return await import(v(e).href)}catch(e){let r=e instanceof Error?e.message:String(e);throw t===`.ts`&&!_.versions?.bun&&/Unknown file extension|Unexpected token|SyntaxError|Cannot parse|import type|interface/i.test(r)?Error(`Could not run ${g.basename(n)}: TypeScript flows need bun. Run under \`bun\`, or write the flow as .mjs/.js.`):e}}async function St(e){if(!y.existsSync(e))throw Error(`Cannot read flow file: ${e}`);return await bt(g.dirname(e)),xt(e,g.extname(e),e)}async function G(e,t,n){let r=z.getStore();r.args=t??{};let i=await St(e),a=R.getStore();a?.flowConcurrency&&!r.depth&&typeof i.concurrency==`number`&&(a.semaphore.limit=Math.max(1,i.concurrency),n&&(n.concurrency=a.semaphore.limit,O(a.runDir,n)));let o=i.args,s=r.args;if(et(o)){let e=V(o,t??{});if(!e.ok)throw Error(`Invalid flow args: ${e.errors}`);s=e.data,r.args=s}let c=i.default;return typeof c==`function`?c(s):c}async function Ct(e,t){let n=R.getStore(),r=n?.cwd??_.cwd(),i=h(e,r);if(!n)return z.run({args:t??{},depth:0},()=>G(i.path,t));let a=z.getStore();if(a&&a.depth>=1)throw Error(`flow("${e}") nesting is one level deep; a sub-flow cannot call flow().`);let o=F(`flow`,{name:i.name,args:t??{}}),s=n.journal.replay(o);if(s)return s.result;let c=new Date().toISOString();L(n,{kind:`flow-start`,name:i.name,depth:(a?.depth??0)+1});let l=await z.run({args:t??{},depth:(a?.depth??0)+1,imports:a?.imports},()=>G(i.path,t));return n.journal.record({kind:`flow`,fingerprint:o,result:l,startedAt:c,endedAt:new Date().toISOString()}),l}var wt=e({drivePreparedRun:()=>jt,markRunFailed:()=>J,orchestratorAlive:()=>X,pidAlive:()=>Y,prepareRun:()=>K,resumeFlow:()=>At,review:()=>Mt,runFlowByName:()=>$,stopFlowTasks:()=>Q,stopRun:()=>Tt,streamFlowCore:()=>Et});function K(e,t={},n,r){let i,a,o;if(n){let e=D(n);if(!e)throw Error(`No flow run "${n}".`);e.archived&&Re(e),i=e.name,a=e.script,o=t.args??e.args}else{let n=h(e,t.cwd?g.resolve(t.cwd):_.cwd());i=n.name,a=n.path,o=t.args??{}}let s=n??t.runId??Le(),c=w(s);y.mkdirSync(c,{recursive:!0});let l={runId:s,name:i,script:a,args:o,status:`running`,startedAt:new Date().toISOString(),concurrency:Math.max(1,t.concurrency??xe.cpus().length),maxTasks:Math.max(1,t.maxTasks??xe.cpus().length*10),taskCount:0,ledger:{},...r?{pid:r,pidStartedAt:new Date().toISOString()}:{},...t.concurrency===void 0?{}:{concurrencySet:!0}};return O(c,l),l}function q(e,t,n){O(e,{...t,endedAt:new Date().toISOString(),pid:void 0,pidStartedAt:void 0,...n})}function J(e,t){let n=E(e);!n||n.status!==`running`||q(w(e),n,{status:`failed`,error:t})}function Y(e){try{return _.kill(e,0),!0}catch(e){return e.code===`EPERM`}}function X(e,t=o){if(!e.pid||!Y(e.pid))return!1;let n=t(e.pid),r=Date.parse(e.pidStartedAt??``);return n===null||!Number.isFinite(r)||n<=r+6e4}function Z(e){return N(e).filter(e=>{let t=l(_.cwd(),e);return t&&!u.includes(t.status)})}async function Q(e,t=[]){let n=_.cwd(),r=[];for(let i of new Set([...Z(e),...t])){let e=l(n,i);if(!(!e||u.includes(e.status)))try{await ge(n,e),r.push(i)}catch{}}return r}async function Tt(e,t={}){let r=e?D(e):M();if(!r)throw new n(`flow-failed`,e?`No flow run "${e}".`:`No flow runs.`,{hint:`Run one: coder flow run <name>`});if(r.status!==`running`)throw new n(`flow-failed`,`Run ${r.runId} is not running.`,{runId:r.runId,hint:`Result: coder flow result ${r.runId}`});let i=w(r.runId);if(!X(r))return q(i,r,{status:`failed`,error:`orchestrator died`}),{runId:r.runId,status:`failed`,stoppedTasks:[],keptTasks:Z(r.runId)};let a=Z(r.runId),o=ne(i);try{_.kill(r.pid,t.keepTasks?`SIGTERM`:`SIGINT`)}catch(e){throw o.close(),e}let s=await o.until(()=>{let e=E(r.runId);return e?.status===`running`?void 0:e},5e3);if(!s||s.status===`running`)throw new n(`flow-failed`,`Run ${r.runId} did not stop within 5s.`,{runId:r.runId,hint:`Check it: coder flow result ${r.runId}`});let c=_.cwd(),d=[],f=[];for(let e of a){let t=l(c,e);t&&(t.status===`cancelled`?d.push(e):u.includes(t.status)||f.push(e))}return{runId:r.runId,status:s.status,stoppedTasks:d,keptTasks:f}}async function*Et(e,t,n={}){let r=ne(w(e));try{let i=g.join(w(e),`events.jsonl`),a=n.tail??`all`,o=0;if(a!==`all`)try{o=Math.max(0,y.readFileSync(i,`utf8`).split(`
|
|
11
|
+
`).length-1-a)}catch{}let s=te(i),c=()=>{let e=[];for(let t of s()){if(o>0){--o;continue}try{e.push(JSON.parse(t))}catch{}}return e},l=p(),u=E(e);for(;(!u||u.status===`running`)&&(yield*c(),u=E(e)??u,!(u&&u.status!==`running`));){let n=u?.pid?!X(u,l):t!==void 0&&!Y(t);if(u&&(u.pid||t!==void 0)&&n){J(e,`orchestrator died`);break}await r.wait(1e3)}yield*c()}finally{r.close()}}function Dt(e,t,n,r,i){let a=i?{...i,pid:_.pid,pidStartedAt:new Date().toISOString()}:K(e,t,r,_.pid),{runId:o}=a,s=w(o);i&&O(s,a),y.writeFileSync(g.join(s,`events.jsonl`),``,`utf8`);let c=g.join(s,`journal.jsonl`),l=r?I(c):[],u=new Ge(l,c),d={runId:o,runDir:s,cwd:t.cwd?g.resolve(t.cwd):_.cwd(),journal:u,semaphore:new Qe(a.concurrency),flowConcurrency:t.concurrency===void 0,maxTasks:a.maxTasks,dryRun:t.dryRun??!1,ledger:{},running:new Set,taskCount:0,stopping:!1,stopHooks:new Set,hooks:n,...t.integrationToken?{integrationToken:t.integrationToken}:{},...t.checksToken?{checksToken:t.checksToken}:{},...t.links?{links:t.links}:{},...t.connections?{connections:t.connections}:{},...t.access?{access:t.access}:{}};return{record:a,ctx:d,markStopped:()=>{d.stopping=!0,q(s,a,{status:`stopped`,concurrency:d.semaphore.limit,taskCount:d.taskCount,ledger:d.ledger})},replayable:l.length}}async function Ot(e){let{ctx:t,record:r}=e,{runDir:i,runId:a}=t,{script:o,name:s,args:c}=r;try{let e=await R.run(t,()=>z.run({args:c??{},depth:0},()=>G(o,c,r)));return q(i,r,{status:`completed`,concurrency:t.semaphore.limit,taskCount:t.taskCount,ledger:t.ledger,result:e}),{runId:a,name:s,status:`completed`,result:e,tokens:t.ledger,taskCount:t.taskCount}}catch(e){throw t.stopping||q(i,r,{status:`failed`,concurrency:t.semaphore.limit,taskCount:t.taskCount,ledger:t.ledger,error:e instanceof Error?e.message:String(e)}),e instanceof n&&(e.code===`chain-exhausted`||e.code===`approval-pending`)?(e.runId??=a,e):new n(`flow-failed`,e instanceof Error?e.message:String(e),{runId:a})}}async function kt(e,t,n,r,i){let a=Dt(e,t,n,r,i);return n.onStart?.({runId:a.ctx.runId,requestStop:a.markStopped,stopHooks:a.ctx.stopHooks,runningIds:()=>[...a.ctx.running]}),a.replayable&&L(a.ctx,{kind:`replay`,count:a.replayable}),Ot(a)}function $(e,t={},n={}){return kt(e,t,n)}function At(e,t={},n={}){return kt(``,t,n,e)}function jt(e,t,n,r,i,a,o){return kt(``,{cwd:t,concurrency:e.concurrencySet?e.concurrency:void 0,maxTasks:e.maxTasks,...r?{integrationToken:r}:{},...i?{links:i}:{},...o?{checksToken:o}:{},...a?{access:a}:{}},n,e.runId,e)}const Mt={async run(e={}){let t=await $(`review`,{cwd:e.cwd,args:e});return{...t.result,runId:t.runId}}};export{Te as A,Ie as C,E as D,D as E,C as M,Ne as O,Ue as S,ke as T,qe as _,Mt as a,ut as b,Tt as c,Ye as d,Ze as f,U as g,mt as h,K as i,Me as j,S as k,R as l,Ct as m,wt as n,$ as o,Je as p,Y as r,Q as s,jt as t,Xe as u,ht as v,b as w,Fe as x,dt as y};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { Finding,
|
|
1
|
+
import { _ as renderReviewMarkdown, a as ReviewResult, b as reviewCli, c as args, d as description, f as fetchEnvironment, g as postReviewRun, h as postReviewHere, i as ReviewExec, l as changedLines, m as fingerprint, n as REVIEW_PLATFORM, o as ReviewServices, p as fetchInto, r as ReviewArgs, s as ReviewSummary, t as Finding, u as concurrency, v as repositoryRules, y as review } from "../../../index-CTAQrCRU.js";
|
|
2
|
+
export { Finding, REVIEW_PLATFORM, ReviewArgs, ReviewExec, ReviewResult, ReviewServices, ReviewSummary, args, changedLines, concurrency, review as default, description, fetchEnvironment, fetchInto, fingerprint, postReviewHere, postReviewRun, renderReviewMarkdown, repositoryRules, reviewCli };
|