@wular/coder 0.4.11 → 0.4.12
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/README.md +3 -1
- package/dist/actions-BT7_eKXm.js +10 -0
- package/dist/{adapter-Bi768A94.js → adapter-BT8ECcRG.js} +1 -1
- package/dist/{adapter-CkL4PqXE.js → adapter-CU9H4g6c.js} +1 -1
- package/dist/{adapter-DYxjaefw.js → adapter-CVd5klMH.js} +1 -1
- package/dist/{agent-6GooVMsq.js → agent-BA6xr8QY.js} +2 -2
- package/dist/apps-D-v5sQJk.js +367 -0
- package/dist/args-CbO_Ck9Z.js +11 -0
- package/dist/async-XNO3nqum.js +3 -0
- package/dist/auth-DuXnSNf9.js +1 -0
- package/dist/base64url-CsVsW4Id.js +1 -0
- package/dist/chat-CgQdDRhs.js +13 -0
- package/dist/cli.js +19 -1
- package/dist/{client-sqXb-y09.js → client-C4QCT6cG.js} +2 -2
- package/dist/cmd-DX5ByXo3.js +119 -0
- package/dist/connection-DNxi2btM.js +1 -0
- package/dist/context-65bOofts.js +7 -0
- package/dist/dash/standalone/node_modules/contextjsx/dist/index.mjs +1 -0
- package/dist/dash/standalone/node_modules/contextjsx/dist/jsx-runtime.mjs +1 -0
- package/dist/dash/standalone/node_modules/contextjsx/dist/src-BJ0QFeB8.mjs +2 -0
- package/dist/dash/standalone/node_modules/contextjsx/package.json +70 -0
- package/dist/dash/standalone/server/build-index.json +1 -1
- package/dist/dash/standalone/server/manifest.json +1310 -1310
- package/dist/dash/standalone/server/modules-server-server-react-server/src/agent/context/turn.dac8eb211c500271.js +141 -0
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/create/[id]/page.70913bd4075da914.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/(list)/{page.5f88059c03cf82b4.js → page.c6efd5432c1a4a75.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{layout.b7392d534ce0410e.js → layout.a795379254982121.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/{page.5aae24bbfd90c434.js → page.a2cb6d1f1714259a.js} +4 -4
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/platforms/{page.91c992fdd3b4a493.js → page.996172c951739b35.js} +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{agent-settings-form.eb707a9e32718374.js → agent-settings-form.aa9e157d141481d7.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/settings/{page.9ec1ec08ba05da59.js → page.44d886e60ae04303.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{loading.dd9088a4581b1d65.js → loading.521c9e7b8d77f557.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/(tabs)/tasks/{page.71dc042821133e82.js → page.828cfb8112404792.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/[slug]/edit/{page.e3179ddf20a7e55d.js → page.dd11f2618e08becd.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/editor/{editor.62cb8207218e6437.js → editor.776856fe1ed1a642.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/agents/new/{page.dffb05f2d256d81a.js → page.7d84ef2b178b34d2.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/credentials.b43dd3d97c536c2a.js +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/settings/[tab]/page.dfed4ae6ffc74434.js +5 -5
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/setup/page.f06fda0df59beeb5.js +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{loading.56520888d5270b88.js → loading.47cbb34ea8d2e33f.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{page.25b29e72df84806b.js → page.abed2a8424ef3da0.js} +2 -2
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/[id]/{task-view.f2e902c8208b2e78.js → task-view.dc294bb94b7437e1.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{composer.b0bb1faaac8e0b6c.js → composer.5072aacdce127689.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{task.a0c68180db5fb4c1.js → task.0a1b5878dccd3b37.js} +1 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-list.b52a49fb5faeefd0.js → tasks-list.1162926f7498c732.js} +6 -6
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/list/{tasks-section.80f9c9a42ecae854.js → tasks-section.1d687c986db53a73.js} +3 -3
- package/dist/dash/standalone/server/modules-server-server-react-server/src/server/dash/app/dash/[org]/tasks/{page.20b5c22658eae312.js → page.d5d8cb5033823c9c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/action-71685b2d5ad9f359.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{agent-pills-bd32cb89331aff7e.js → agent-pills-15da36c2cb81991b.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-6e6a87d6e673daa8.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{agent-toggle-a45b95908d62f926.js → agent-toggle-ca98586e3b4ce9ae.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{agents-grid-9f79b5074899c8be.js → agents-grid-29c399e46b4e9e2b.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{back-b0cd2b85c9d8403e.js → back-fa9d6e37f9828093.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{combo-1050768988cd0347.js → combo-86f3e11d1f6f6cee.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{composer-87f138e21d68370d.js → composer-85e0ec7163ae18b7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/composer-910bb87127972f62.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{confirm-01d5814b1c5f7721.js → confirm-c29a1db0130638d2.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-b73490e04ae6398d.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{connect-repositories-49098298b3a82647.js → connect-repositories-0de82daaf654b1d3.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{connections-list-46d48443d8fc8a0d.js → connections-list-c50f58b4b28d10bb.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{copy-5db9d328f8f65d82.js → copy-445c11202f136275.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-6d64a2d5f9ce6de0.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{credentials-list-3cccc85ef335cb22.js → credentials-list-bee95799b2319b3b.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{custom-range-fdf1946aac09cfc3.js → custom-range-a0630599f907b30e.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{editor-d2460c315bb1fd32.js → editor-b9951819f21b2e43.js} +2 -2
- package/dist/dash/standalone/static/assets/chunks/{engines-list-0159c8baa0b3e711.js → engines-list-2720c3e8fa12b2f7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{field-c530e261587d94df.js → field-b82a0f895266791c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{instructions-3ea5afeea1992bf2.js → instructions-affaaeff366b1725.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-fd7402ac5aa8b50e.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{list-b67ce61483dd6acb.js → list-d918f79562d497eb.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{models-list-98c956ba00913a73.js → models-list-12bc7aceaa52f5b0.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{notice-8939183c8a889bae.js → notice-57db7a1f05b7308c.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{outcome-dialog-6323cb5300b6d3c9.js → outcome-dialog-5cf575a5e6921a5d.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-b219595be320108a.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/platform-actions-1d27d2ba7eee9ff1.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{platform-actions-aafbf038008de64f.js → platform-actions-dba96dcb0f6513db.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runners-list-a13d0f8f6583c6d2.js → runners-list-36f8c5ecfcf8e9ae.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{runtime-71b727f8f5906f08-1.js → runtime-6e12333f12903a62-1.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{secrets-list-53a0c079492199c9.js → secrets-list-d7dbafd24dd18481.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{segmented-a3642b8169857fb1.js → segmented-8f809ebe712e92a7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-6e12333f12903a62-2.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{shared-init-6cad28f8cc696d91.js → shared-init-cc13a835f3508618.js} +2 -2
- package/dist/dash/standalone/static/assets/chunks/{shared-init-94883db7bc70a5a8.js → shared-init-f475017dd5811e33.js} +2 -2
- package/dist/dash/standalone/static/assets/chunks/side-toggle-0aa237eba3dfe9c1.js +1 -0
- package/dist/dash/standalone/static/assets/chunks/{tail-81b69d49bfebfd4c.js → tail-b1c46587301ef397.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/task-681061023bdf0a49.js +5 -0
- package/dist/dash/standalone/static/assets/chunks/{task-actions-25c70b47b5a53cd2.js → task-actions-c9e46e81604e85c5.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{task-view-e5ee0ada38552918.js → task-view-134186a544917ceb.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{tasks-list-d58f3063ae31d9d2.js → tasks-list-352a3222d878de0f.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{versions-list-fbeed95c0b4e5f0f.js → versions-list-21cb854e6a7108a7.js} +1 -1
- package/dist/dash/standalone/static/assets/chunks/{wular-pnext-71b727f8f5906f08-0.js → wular-pnext-6e12333f12903a62-0.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-05df74b071ddb0b3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2c19cca257f78ae6.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-2db05dfa62642a65.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-36b0d6085a073880.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-576c06599e241231.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6aa0f19a30d58d63.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6b30b71f452f2f07.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-6ccb4d4fff812db3.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-74eb465defba421e.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-8c692d12b2fd90d6.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-92e17d39063a9ced.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-93246aea268c2682.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-9954dcbc0c579e0d.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-c0dfa1cdde9a9855.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-c28d38d4aafd4af6.js +1 -0
- package/dist/dash/standalone/static/assets/{pnext-client-e4c659a371f4cd79.js → pnext-client-c2c30dcb6dc31d60.js} +1 -1
- package/dist/dash/standalone/static/assets/pnext-client-dbf741073e11eac0.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-e29194a27280333f.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-f8a7e692b27caad9.js +1 -0
- package/dist/dash/standalone/static/assets/pnext-client-fc5b8cfcba2a9f63.js +1 -0
- package/dist/discover-CPZdprlQ.js +1 -0
- package/dist/docs-x-l7gjFE.js +2 -0
- package/dist/drive-Y-ZlgiUW.js +1 -0
- package/dist/env-B9JG6gwo.js +1 -0
- package/dist/errors-XBA-Ls4n.js +10 -0
- package/dist/exec-iFssTO5V.js +3 -0
- package/dist/executor-Dt2FFT-y.js +11 -0
- package/dist/flow/builtin/review/index.d.ts +2 -0
- package/dist/flow/builtin/review/index.js +16 -0
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.js +1 -1
- package/dist/http-BZfjbiov.js +1 -0
- package/dist/{types-C6NAqGqn.d.ts → index-BdkdNI1v.d.ts} +705 -121
- package/dist/{integrations-IGnXBrPw.js → integrations-DyInAa5g.js} +2 -2
- package/dist/lib/broker.js +2 -2
- package/dist/load-zhcrwSRF.js +2 -0
- package/dist/local-D55UkW93.js +5 -0
- package/dist/maintenance-BfxcatXH.js +1 -0
- package/dist/{match-BwcxeAZF.js → match-Bq4sDuCy.js} +1 -1
- package/dist/mcp-Bta09QCU.js +13 -0
- package/dist/mcp-CUITALl1.js +1 -0
- package/dist/models-C1O2DrXx.js +1 -0
- package/dist/output-D95NoAA9.js +16 -0
- package/dist/prompt-onpyIyXK.js +8 -0
- package/dist/prompts-B8pKhMcu.js +4 -0
- package/dist/refresh-D-0K9fo3.js +1 -0
- package/dist/{remote-D3JZ4MMQ.js → remote-CDm0YUU3.js} +1 -1
- package/dist/runner-CTFTuaz_.js +1 -0
- package/dist/runner.json +1 -1
- package/dist/runner.tgz +0 -0
- package/dist/{runners-DyLnqHKy.js → runners-CYTicTb7.js} +3 -3
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +8 -1
- package/dist/sdk.d.ts +12552 -4
- package/dist/sdk.js +1 -1
- package/dist/serve-Bzs_lEg-.js +1 -0
- package/dist/serve-CWtLyyTz.js +12 -0
- package/dist/serve-DE6A-rBk.js +4 -0
- package/dist/{slack-DhPhLuWb.js → slack-Bo5l13Rs.js} +3 -3
- package/dist/task-BU1JEK9X.js +7 -0
- package/dist/task-CPzBITsp.js +1 -0
- package/dist/tools-BMaKWTa6.js +1 -0
- package/dist/tools-CM4UCsId.js +1 -0
- package/dist/turn-DMvPfhb5.js +3 -0
- package/dist/{views-CE2d9x6T.js → views-DEdKqLm_.js} +1 -1
- package/dist/{wire-nJ7sEi-M.js → wire-JMNPv8f6.js} +1 -1
- package/dist/worker-BuP_Lem1.js +9 -0
- package/dist/worker-C1tuzq5n.js +1 -0
- package/docs/agents/index.md +18 -20
- package/docs/cli/agent.md +137 -0
- package/docs/cli/auth.md +48 -0
- package/docs/cli/connection.md +89 -0
- package/docs/cli/credentials.md +58 -0
- package/docs/cli/flow.md +158 -0
- package/docs/cli/index.md +139 -0
- package/docs/cli/model.md +116 -0
- package/docs/cli/runner.md +92 -0
- package/docs/cli/server.md +89 -0
- package/docs/cli/task.md +271 -0
- package/docs/flows.md +0 -6
- package/docs/mcp.md +8 -8
- package/docs/review.md +4 -0
- package/package.json +3 -1
- package/plugins/agents/skills/coder/SKILL.md +16 -1
- package/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/plugins/claude/.mcp.json +5 -0
- package/plugins/claude/skills/dispatch/SKILL.md +16 -1
- package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
- package/plugins/cursor/skills/coder/SKILL.md +16 -1
- package/dist/actions-Cwe3IDVs.js +0 -2
- package/dist/add-B6vPKZEr.js +0 -1
- package/dist/add-n6c9OINP.js +0 -2
- package/dist/add-v1Pv00HX.js +0 -1
- package/dist/add-wC8ByRgM.js +0 -6
- package/dist/agent-BkxXgha0.js +0 -1
- package/dist/alias-A8ObWElH.js +0 -2
- package/dist/app-CaxTL1H3.js +0 -1
- package/dist/approvals-h5lytkey.js +0 -2
- package/dist/approve-BNhg0MLi.js +0 -2
- package/dist/approve-BiHM8kSo.js +0 -1
- package/dist/apps-BNe86LfS.js +0 -367
- package/dist/archive-CMHRsVYf.js +0 -4
- package/dist/archive-H2B7Me8E.js +0 -3
- package/dist/args-CURX44CA.js +0 -1
- package/dist/ask-D8TIVhPl.js +0 -4
- package/dist/auth-BSMPjhnz.js +0 -1
- package/dist/auth-D3quZAKT.js +0 -1
- package/dist/chat-3AvUDOwf.js +0 -13
- package/dist/chat-bridge-BmqYsASZ.js +0 -2
- package/dist/cli-BBlH53hA.js +0 -9
- package/dist/config-K6Rrjsee.js +0 -3
- package/dist/connection-B-IB8tlP.js +0 -1
- package/dist/connection-BXBDeoax.js +0 -1
- package/dist/create-CP_JmJnh.js +0 -1
- package/dist/credentials-BRFajC0d.js +0 -1
- package/dist/dash/standalone/server/modules-server-server-react-server/src/core/event-prompt.87f064ca0141e796.js +0 -30
- package/dist/dash/standalone/static/assets/chunks/action-fc8716cda7527d8c.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/agent-settings-form-f5576a2c50fce094.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/composer-8f0e8b1d07e74aad.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/connect-apps-857dc9fa3f6f5bbc.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/create-link-6b6e9eeac436c4af.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/instructions-d8884576a18e6cdb.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/outcome-dialog-be3fbe8c4b43d180.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/platform-actions-ed27388f722b4a4c.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/shared-init-71b727f8f5906f08-2.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/side-toggle-a2f67a8671a0309b.js +0 -1
- package/dist/dash/standalone/static/assets/chunks/task-95daa40d39de664f.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-037852a9f274c8c8.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-10eac8df53f62104.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-12635905e9754177.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-12955733c71cc641.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-26999113ea61d5b9.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-27b6e4b7d1697094.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-34fec171024dd082.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-44eb6d4096f7e875.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-4c558a168b95d9b1.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5d21f3dd3f4407af.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-5fe04a4e1dff28a3.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-88bbc009041aa776.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b36106c6b8a6cd35.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b47dda1cd4cfac04.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b556f5611fdcf545.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-b8485144ca29d436.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-c5c3c90b3518c5a8.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-f139547dc55d7d76.js +0 -1
- package/dist/dash/standalone/static/assets/pnext-client-fd280710b31af681.js +0 -1
- package/dist/default-Ojx5oFuw.js +0 -1
- package/dist/delete-D1hEPpsk.js +0 -2
- package/dist/delete-UyzcQPoG.js +0 -4
- package/dist/disable-Dml_Slph.js +0 -1
- package/dist/discover-CyIfIBGD.js +0 -3
- package/dist/dispatch-CFZ9Crvg.js +0 -8
- package/dist/docs-BUHKbQjM.js +0 -2
- package/dist/docs-CvjWiada.js +0 -2
- package/dist/drive-BqunNi9n.js +0 -1
- package/dist/enable-xye-Nanc.js +0 -1
- package/dist/env-BgE9ipvN.js +0 -1
- package/dist/exec-Cprez703.js +0 -3
- package/dist/executor-3QMa-XRY.js +0 -11
- package/dist/flow/builtin/review.d.ts +0 -2
- package/dist/flow/builtin/review.js +0 -12
- package/dist/flow-CtillCQY.js +0 -1
- package/dist/history-C53URBjs.js +0 -8
- package/dist/http-CDZKt5ln.js +0 -1
- package/dist/hub-B0WCXtsP.js +0 -2
- package/dist/init-HdSVUozH.js +0 -1
- package/dist/integrations-BdLs4W6o.js +0 -1
- package/dist/list-1IMeVNg3.js +0 -1
- package/dist/list-BTjIMvNs.js +0 -1
- package/dist/list-BlOB32n6.js +0 -4
- package/dist/list-CZGTVKcS.js +0 -4
- package/dist/list-CquHtsmW.js +0 -3
- package/dist/list-CxjPT0Il.js +0 -1
- package/dist/list-DvFVuGT_.js +0 -1
- package/dist/list-gFnOS9Hk.js +0 -2
- package/dist/load-Q9fL4VC6.js +0 -2
- package/dist/local-Bzdmzc1o.js +0 -5
- package/dist/login-C723kHh6.js +0 -1
- package/dist/login-Dq3r6gh6.js +0 -1
- package/dist/logout-DEg0aTmq.js +0 -1
- package/dist/maintenance-DYOstY6V.js +0 -1
- package/dist/mcp-CKqinFkk.js +0 -1
- package/dist/mcp-Dsl3Xdd3.js +0 -13
- package/dist/mcp-server-BlP9lACI.js +0 -1
- package/dist/model-Bs27g5EX.js +0 -1
- package/dist/models-Cb0ZTKZ7.js +0 -1
- package/dist/output-BKeyLbvt.js +0 -5
- package/dist/prompt-PEgcMJO7.js +0 -8
- package/dist/prompts-Bj4Fbd_n.js +0 -78
- package/dist/push-DpEW4XbQ.js +0 -1
- package/dist/reconnect-BmP_XXDv.js +0 -1
- package/dist/refresh-SHNJq9Cx.js +0 -1
- package/dist/remove-BZZgJq8Z.js +0 -1
- package/dist/remove-CId1EwPg.js +0 -1
- package/dist/remove-Ci87WQq0.js +0 -1
- package/dist/remove-DxCv9BB4.js +0 -1
- package/dist/rename-DJaf5SwH.js +0 -1
- package/dist/result-BesDQ-b1.js +0 -5
- package/dist/result-D0dpv2O_.js +0 -18
- package/dist/resume-2Y0uC5MM.js +0 -3
- package/dist/review-DIm9oK_W.js +0 -7
- package/dist/review-Dxs-idTn.d.ts +0 -566
- package/dist/rotate-key-CS1G6ReH.js +0 -1
- package/dist/run-BKUd6B8S.js +0 -2
- package/dist/run-DjTTb8oA.js +0 -5
- package/dist/run-UPW-7pKo.js +0 -2
- package/dist/runner-BLS_ReEw.js +0 -1
- package/dist/runner-BM_98EQl.js +0 -1
- package/dist/schema-CjHmulYJ.js +0 -8
- package/dist/sdk-B4Cl0Hbw.d.ts +0 -12551
- package/dist/serve-BApfeXk8.js +0 -12
- package/dist/serve-DE1cKoGa.js +0 -1
- package/dist/serve-lF97RlpX.js +0 -2
- package/dist/serve-mXTjboT1.js +0 -1
- package/dist/server-CUsxAflx.js +0 -1
- package/dist/setup-host-tlsilI6C.js +0 -6
- package/dist/show-Dn7zTz-9.js +0 -1
- package/dist/show-uyUpeqa9.js +0 -1
- package/dist/status-D_1VGn9F.js +0 -1
- package/dist/steer-CMp-a7v2.js +0 -4
- package/dist/stop-C7YjN2sB.js +0 -1
- package/dist/stop-D8G7AtdY.js +0 -3
- package/dist/task-DJ6nruuA.js +0 -1
- package/dist/task-DeFLNmQH.js +0 -1
- package/dist/task-bkoi8_NN.js +0 -7
- package/dist/test-BD9rvefN.js +0 -1
- package/dist/tools-CdWkwI1g.js +0 -1
- package/dist/unalias-bL5t8Isc.js +0 -1
- package/dist/update-DIYW08ME.js +0 -2
- package/dist/upgrade-3fH6dGJw.js +0 -2
- package/dist/usage-Dr8F0xt0.js +0 -1
- package/dist/watch-BiyN4NxE.js +0 -5
- package/dist/watch-DJXu13jK.js +0 -9
- package/dist/worker-CHD_OiQS.js +0 -1
- package/dist/worker-KfrTK_Dk.js +0 -2
- package/dist/workflow-C21qQ4rT.js +0 -1
- package/docs/agents/prompt.md +0 -231
- package/docs/cli.md +0 -155
package/dist/serve-BApfeXk8.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{At as t,D as n,E as r,H as i,M as a,U as o,V as s,Vt as c,Y as l,cr as u,j as d,kt as f,lt as p,nn as m,nt as h,q as g,v as _,x as v}from"./prompts-Bj4Fbd_n.js";import{U as y}from"./dispatch-CFZ9Crvg.js";import{a as b,c as x,h as S,i as C,n as w,r as ee}from"./load-Q9fL4VC6.js";import{d as T,m as E}from"./slack-DhPhLuWb.js";import{n as te}from"./integrations-IGnXBrPw.js";import{t as ne}from"./history-C53URBjs.js";import{n as re}from"./models-Cb0ZTKZ7.js";import{a as D,d as O,f as k,l as ie,n as ae,o as oe,p as se,r as ce,s as le,t as ue,u as de,y as fe}from"./http-CDZKt5ln.js";import{$ as pe,$n as me,$t as he,A as ge,An as _e,At as ve,Bn as ye,Bt as be,C as xe,Cn as Se,Cr as Ce,Ct as we,D as Te,Dn as Ee,E as De,En as Oe,Et as ke,F as Ae,Fn as je,G as A,Gn as Me,Gt as Ne,H as Pe,Hn as Fe,Ht as j,I as Ie,In as Le,It as Re,J as ze,Jn as Be,Jt as Ve,K as He,Kn as Ue,Kt as We,L as Ge,Ln as Ke,Lt as qe,M as Je,Mn as Ye,Mt as Xe,N as Ze,Nn as Qe,Nt as M,O as N,On as $e,Ot as et,P as tt,Pn as nt,Pt as P,Q as rt,Qn as it,Qt as at,R as ot,Rn as st,Rt as ct,S as F,Sn as lt,Sr as ut,St as dt,T as ft,Tn as pt,Tt as mt,U as ht,Un as gt,Ut as _t,V as vt,Vn as yt,Vt as bt,W as xt,Wn as St,Wt as I,X as Ct,Xn as wt,Xt as Tt,Y as Et,Yn as Dt,Yt as Ot,Z as kt,Zn as At,Zt as jt,_ as Mt,_n as Nt,_t as Pt,a as Ft,an as It,ar as Lt,at as Rt,b as zt,br as L,c as R,cn as Bt,cr as Vt,ct as Ht,d as Ut,dn as Wt,dr as Gt,en as Kt,er as qt,et as Jt,f as Yt,fn as Xt,fr as Zt,ft as Qt,g as $t,gn as en,gt as z,h as B,hn as tn,hr as nn,ht as rn,i as an,in as on,ir as sn,it as cn,j as V,jn as ln,jt as un,k as dn,kn as fn,kt as pn,l as mn,ln as hn,lr as gn,lt as _n,m as vn,mn as yn,mr as bn,mt as xn,nn as Sn,nr as Cn,nt as wn,o as Tn,on as En,or as Dn,ot as On,p as kn,pn as An,pr as jn,pt as Mn,q as Nn,qn as Pn,qt as Fn,r as In,rn as Ln,rr as Rn,rt as zn,s as Bn,sn as Vn,sr as Hn,st as Un,tn as Wn,tr as Gn,tt as Kn,u as qn,un as Jn,ur as Yn,ut as Xn,v as Zn,vn as Qn,vr as $n,vt as er,w as tr,x as nr,xr as H,xt as rr,y as ir,yr as U,yt as ar,z as or,zn as sr,zt as cr}from"./apps-BNe86LfS.js";import{n as lr,r as ur}from"./env-BgE9ipvN.js";import{C as W,S as dr,a as fr,g as pr,i as mr,m as hr,n as gr,o as _r,x as G}from"./runners-DyLnqHKy.js";import{S as vr,_ as yr,a as br,b as xr,f as Sr,g as K,h as q,i as Cr,m as wr,n as Tr,p as Er,x as Dr}from"./local-Bzdmzc1o.js";import{X as Or}from"./schema-CjHmulYJ.js";import{r as kr}from"./client-sqXb-y09.js";import J from"node:path";import Y from"node:process";import Ar from"node:fs";import{spawnSync as jr}from"node:child_process";import{createHash as Mr,randomBytes as Nr,randomUUID as Pr}from"node:crypto";import X from"node:fs/promises";import{isDeepStrictEqual as Fr,promisify as Ir}from"node:util";import Lr from"node:http";import{gunzip as Rr,gzip as zr}from"node:zlib";async function Br(e){try{return await X.readdir(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function Vr(e){try{return await X.lstat(e),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}async function Hr(e,t){if(e===t||!await Vr(e))return 0;let n=await Br(e),r=n.filter(e=>e.isDirectory()).length;if(!await Vr(t))return await u(e,t),r;for(let r of n)await u(J.join(e,r.name),J.join(t,r.name));return await X.rmdir(e),r}async function Ur(e){let t=J.dirname(e),n=J.basename(e);for(let e of await Br(t)){let r=e.name.startsWith(n)?e.name.slice(n.length):``;if(!e.isFile()||!(r===`.tmp`||/^\.\d+(?:\.[a-f0-9-]{36})?\.tmp$/.test(r)))continue;let i=Number(e.name.slice(n.length+1).split(`.`)[0]);if(Number.isInteger(i)&&i>0)try{process.kill(i,0);continue}catch(e){if(e.code!==`ESRCH`)continue}await X.unlink(J.join(t,e.name)).catch(e=>{if(e.code!==`ENOENT`)throw e})}}async function Wr(e,t){if(await Ur(e),e===t||!await Vr(e))return 0;if(!await Vr(t))return await u(e,t),1;let n=JSON.parse(await X.readFile(e,`utf8`)),r=JSON.parse(await X.readFile(t,`utf8`)),i={...n,...r,...n.rows||r.rows?{rows:{...n.rows,...r.rows}}:{}},a=`${t}.${process.pid}.${Pr()}.tmp`;try{await X.writeFile(a,`${JSON.stringify(i)}\n`,{mode:384,flag:`wx`}),await X.rename(a,t),await X.unlink(e)}finally{await X.rm(a,{force:!0})}return 1}async function Gr(){let e=f(),n=t(`state`),r=f(`archive`),i=f(`flows-archived`),a=f(`usage.json`),o=f(`runner`,`usage.json`),s={from:t(`checkouts`),to:f(`checkouts`)},c={from:t(`update-check.json`),to:f(`update-check.json`)},l={cache:e,tasks:0,flows:0,files:0},u=(await Br(n)).filter(e=>e.isDirectory()).map(e=>({archive:t(`state`,e.name,`archive`),flows:t(`state`,e.name,`flows-archived`),usage:t(`state`,e.name,`usage.json`),runnerUsage:t(`state`,e.name,`runner`,`usage.json`)}));await Ur(a),await Ur(o);for(let e of u)l.tasks+=await Hr(e.archive,r),l.flows+=await Hr(e.flows,i),l.files+=await Wr(e.usage,a),l.files+=await Wr(e.runnerUsage,o);return await Hr(s.from,s.to),l.files+=await Wr(c.from,c.to),l}async function Kr(e){let t=(e.now??Date.now)(),n=await e.store.list(`runner`);return{online:1+n.filter(({value:e})=>e.lastSeen!==void 0&&t-e.lastSeen<3e5).length,total:1+n.length}}async function qr(e){let t=(e.now??Date.now)(),n=e.healthyAt!==void 0&&t-e.healthyAt<5e3,r=n||await Jr(e);return e.healthyAt=r?n?e.healthyAt:t:void 0,D({ok:r},r?200:503,{"cache-control":`no-store`})}async function Jr(e){return e.config.store===`postgres`?e.databaseHealth?e.databaseHealth().then(()=>!0,()=>!1):!1:!0}async function Yr(e){let t=(e.now??Date.now)();if(!e.local)return{...await e.queue.metrics(e.organizationId,t-864e5),runnersOnline:(await Kr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0};let n=await e.queue.list(e.organizationId),r=e.local?[...P(e.local.cwd,!1),...P(e.local.cwd,!0)]:[],i=new Map([...r,...n.map(e=>e.status===`queued`?e:r.find(t=>t.task.id===e.task.id)??e)].map(e=>[e.task.id,e])),a={queued:0,running:0,waiting:0,completed:0,failed:0,cancelled:0},o=0;for(let e of i.values())e.createdAt>=t-864e5&&a[e.status]++,e.status===`queued`&&o++;return{tasks:a,queueDepth:o,runnersOnline:(await Kr(e)).online,requests:e.limits?.requests??0,rateLimitRejections:e.limits?.rejections??0}}const Xr=Ir(Rr),Zr=Ir(zr);async function Qr(e,t,n){return D(await t.store.listHistory(n.id))}async function $r(e,t,n){let r=await t.store.get(`history`,`${n.id}:${n.conversation}`);if(!r)return D({error:`No saved history`},404);try{return D({engine:r.engine,conversation:r.conversation,data:G(t.config,r.data),...r.state?{state:G(t.config,r.state)}:{}})}catch(e){return console.error(`coder server: history ${n.id}/${n.conversation} could not be decrypted`,e),D({error:`The saved history cannot be read`},422)}}async function ei(e,t,n){let r=await e.json().catch(()=>void 0);if(r?.engine!==`claude`&&r?.engine!==`codex`||typeof r.conversation!=`string`||!ne.test(r.conversation)||typeof r.data!=`string`||r.state!==void 0&&(!r.state||typeof r.state!=`object`||Array.isArray(r.state)))return D({error:`Invalid history`},400);let i;try{i=(await Xr(Buffer.from(r.data,`base64`),{maxOutputLength:67108864})).toString(`utf8`)}catch{return D({error:`Invalid history`},400)}let a=await Nt(t,t.callbackTask,!0);return await t.store.put(`history`,`${n.id}:${r.conversation}`,{engine:r.engine,conversation:r.conversation,data:W(t.config,(await Zr(a(i))).toString(`base64`)),...r.state?{state:W(t.config,JSON.parse(a(JSON.stringify(r.state))))}:{},savedAt:(t.now??Date.now)()}),D({ok:!0})}async function ti(e,t,n,r){let i=t.session.user.id;n.id;let a=(await e.json().catch(()=>({}))).engine??``;if(!oi.has(a)||!t.config.subscriptions?.[a])return D({error:`Sign in with ${a||`that engine`} is off on this server.`},403);let o=t.runners[t.config.runner];if(!o||o.kind===`github-actions`)return D({error:`Sign-in cannot run on the ${t.config.runner} runner.`},409);let s=(await t.store.list(`login`)).find(({value:e})=>e.owner===i&&e.engine===a&&e.state!==`done`&&e.state!==`failed`&&e.expiresAt>si(t));if(s)return D(li(s.id,s.value));let c=`login-${Nr(12).toString(`base64url`)}`,l=Qn(c,t.organizationId,0),u={owner:i,engine:a,state:`starting`,tokenHash:l.hash,runner:o.kind,createdAt:si(t),expiresAt:si(t)+ai};await ci(t,c,u);let d;try{let e=await o.start({id:c},{CODER_SERVER:t.config.publicUrl??``,CODER_TASK_TOKEN:l.token,CODER_LOGIN:a},void 0,{timeoutMs:ai,hosts:[hr[a].api,...hr[a].account]}),n=await t.store.patchLogin(c,{handle:e},{tokenHash:u.tokenHash});if(!n)return await o.stop(e).catch(()=>{}),D({error:`This sign-in is gone. Start again.`},409);d=n}catch(e){return await t.store.delete(`login`,c),D({error:e instanceof Error?e.message:String(e)},502)}return D(li(c,d),201)}async function ni(e,t,n,r){t.session.user.id;let i=n.id??``;if(!r.searchParams.has(`state`)){let e=i&&!i.includes(`/`)?await Z(t,i):void 0;return e?D(li(i,e)):D({error:`This sign-in is gone. Start again.`},404)}let a=await t.store.watch(`login`,i);try{let n=i&&!i.includes(`/`)?await Z(t,i):void 0;if(!n)return D({error:`This sign-in is gone. Start again.`},404);let o=r.searchParams.get(`state`),s=Date.now()+25e3;for(;o&&n.state===o&&Date.now()<s&&!e.signal.aborted;)if(await a.wait(Math.min(1e4,s-Date.now()),e.signal),n=await Z(t,i),!n)return D({error:`This sign-in is gone. Start again.`},404);return D(li(i,n))}finally{a.close()}}async function ri(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await Z(t,i):void 0;if(!a)return D({error:`This sign-in is gone. Start again.`},404);let o=await e.json().catch(()=>({})),s=typeof o.code==`string`?o.code.trim():``;return a.engine!==`claude`||a.state!==`open`||!s||!await t.store.patchLogin(i,{state:`verifying`,input:W(t.config,s)},{state:`open`,tokenHash:a.tokenHash})?D({error:`This sign-in is not waiting for a code.`},409):D({ok:!0})}async function ii(e,t,n,r){t.session.user.id;let i=n.id??``,a=i&&!i.includes(`/`)?await Z(t,i):void 0;return a?(await t.store.delete(`login`,i),a.handle&&await t.runners[a.runner]?.stop(a.handle).catch(()=>{}),D({ok:!0})):D({error:`This sign-in is gone. Start again.`},404)}const ai=6e5,oi=new Set([`claude`,`codex`]),si=e=>(e.now??Date.now)();function ci(e,t,n){return e.store.put(`login`,t,n,{ttlMs:Math.max(1,n.expiresAt-si(e))})}function li(e,t){return{id:e,engine:t.engine,state:t.state,expiresAt:t.expiresAt,...t.url?{url:t.url}:{},...t.code?{code:t.code}:{},...t.error?{error:t.error}:{}}}async function Z(e,t){let n=await e.store.get(`login`,t);return n&&n.owner===e.session?.user.id?n:void 0}function ui(e,t){let n=t.handle&&e.runners[t.runner]?.stop(t.handle);if(!n)return;let r=n.catch(e=>console.error(`coder server: could not stop the machine of a finished ${t.engine} sign-in`,e));e.waitUntil?.(r)}async function di(e,t,n,r){let i=n.id,a=await t.store.watch(`login`,i),o=Date.now()+25e3;try{for(;;){if(e.signal.aborted)return D({});let n=await t.store.get(`login`,i);if(!n||n.tokenHash!==t.callbackLogin.tokenHash)return new Response(`Unauthorized`,{status:401});if(n.input){let e=await t.store.patchLogin(i,{input:null},{input:n.input,tokenHash:n.tokenHash});return D(e?{code:G(t.config,n.input)}:{})}if(n.state===`verifying`||n.state===`done`||n.state===`failed`||Date.now()>=o)return D({});await a.wait(Math.min(1e4,o-Date.now()),e.signal)}}finally{a.close()}}async function fi(e,t,n,r){return D({engine:t.callbackLogin.engine})}async function pi(e,t,n,r){let i=n.id,a=t.callbackLogin,o=await e.json().catch(()=>({}));if(a.state===`done`||a.state===`failed`)return D({ok:!0});let s={state:[`starting`,`open`,`verifying`],tokenHash:a.tokenHash};if(typeof o.error==`string`)return await t.store.patchLogin(i,{state:`failed`,error:o.error.slice(0,500)},s)&&ui(t,a),D({ok:!0});let c=o.result?.env;if(c){let e=a.engine===`claude`?`CLAUDE_CODE_OAUTH_TOKEN`:`CODEX_AUTH_JSON`;if(Object.keys(c).join()!==e||typeof c[e]!=`string`)return D({error:`Invalid sign-in result`},400);let n=o.result?.account;return await t.store.completeLogin(i,a.tokenHash,{...dr(t.config,{env:c}),createdAt:(t.now??Date.now)(),...n?.email||n?.plan?{account:{...typeof n.email==`string`?{email:n.email}:{},...typeof n.plan==`string`?{plan:n.plan}:{}}}:{}})?(ui(t,a),D({ok:!0})):D({error:`This sign-in changed. Try again.`},409)}let l={...typeof o.url==`string`&&/^https:\/\//.test(o.url)?{url:o.url}:{},...typeof o.code==`string`?{code:o.code.slice(0,64)}:{}};return await t.store.patchLogin(i,l.url?{...l,state:`open`}:l,s)?D({ok:!0}):D({error:`This sign-in changed. Try again.`},409)}const mi=e=>`audit:${String(9999999999999-e).padStart(13,`0`)}:${Nr(4).toString(`hex`)}`,hi=e=>e.config.name??`Wular`,gi=e=>Hn(e,e.serverOrganizationId??e.organizationId);async function _i(e,t,n){let r=(e.now??Date.now)(),i=e.session?.user,a={at:r,actor:i?{id:i.id,name:i.name,email:i.email}:{id:`admin-token`},action:t,target:n};await gi(e).store.put(`snapshot`,mi(r),a)}async function vi(e,t){let n=await gi(t).store.list(`app`),r=Object.values(t.integrations).filter(e=>e.app.builtin===`shared`).map(e=>{let t=n.find(({value:t})=>t.builtin&&t.integration===e.id)?.value;return{integration:e.id,name:e.name,brand:e.brand,organizationApps:e.organizationApps===!0,...t?{app:{id:t.id,name:t.name,createdAt:t.createdAt}}:{}}}),i=t.config.publicUrl,a=!!i&&B.has(new URL(i).hostname);return D({name:hi(t),platforms:r,...a?{unreachable:!0}:{}})}async function yi(e,t,n){let r=t.integrations[n.integration];if(!r)return D({error:`Unknown integration "${n.integration}".`},404);if(r.app.builtin!==`shared`)return D({error:`Create ${r.name} apps in your workspace from the agent's Platforms tab.`},400);if(!t.config.publicUrl)return D({error:`Set PUBLIC_URL on this server first. Platforms call it.`},400);let i=await e.json().catch(()=>void 0),a=e=>typeof e==`string`&&e.trim()||void 0,o=a(i?.name)??hi(t),s=r.organizationApps?a(i?.owner):void 0,c=await In(gi(t),r.id,{name:o,owner:s});return await _i(t,`Started setting up a shared app`,`${o} on ${r.name}`),D({url:c})}async function bi(e,t){let n=await gi(t).store.list(`snapshot`,{prefix:`audit:`,limit:100});return D(n.map(e=>e.value))}const xi=e=>`create-finished:${E(e)}`;async function Si(e,t){let n=await e.store.get(`delivery`,xi(t));return n&&`target`in n?n.target:void 0}async function Ci(e,t,n){let r=e.operatorApp??!1,i=r?`*`:e.session?.user.id??`anonymous`;if(!e.integrations[t])return{error:`Unknown integration "${t}"; run coder agent integrations list to see them`,status:404};if(!e.config.publicUrl)return{error:`PUBLIC_URL is not set on this server; set it to the address platforms should call and restart`,status:400};if(r&&e.integrations[t].app.builtin!==`shared`)return{error:`Create this app in your workspace from the agent's Platforms tab.`,status:400};let a=qn(n);if(!a)return{error:`Setup link is missing or malformed; start again from the agent's Platforms tab`,status:400};if(!a.definition.integrations[t])return{error:`This agent declares no ${t} integration in its agent.json`,status:400};if(a.state.public&&!r&&!e.integrations[t].publicApps)return{error:`${e.integrations[t].name} apps cannot be public here. Create a private one.`,status:400};let o=Tn(t,a.state),s=a.state.tx?await ut(e,a.state.tx,`create`,i)===o?a.state.tx:void 0:await Ce(e,`create`,i,o);return s?{state:{...a.state,tx:s},definition:a.definition}:{error:`This app creation link is invalid, expired, or already used`,status:403}}async function wi(e,t,n,r){let i=r.searchParams.get(`tx`);if(t.operatorApp&&i&&(await ut(t,i,`create`,`*`)||await Si(t,i)===n.id))return await bn(e,t.dashboardHosts)??jn();let a=new URLSearchParams(r.searchParams);return a.set(`create`,n.id),se(`${Bn(t)}${Yt(vn(t),`/setup`)}?${a}`)}async function Ti(e,t,n){let r=await Ci(e,t,n);if(`error`in r)return D({error:r.error},r.status);let{app:i}=e.integrations[t],a=r.state.tx,o=i.createStep&&(e.operatorApp||r.state.public)?i.createStep(e.config.publicUrl,{saved:await Be(e,t),name:r.definition.name,public:r.state.public}):void 0,s=e.config.publicUrl;if(i.createPost&&B.has(new URL(s).hostname))return D({error:`${e.integrations[t].name} cannot reach ${s}. Set a public address first.`},400);let c=e.operatorApp?void 0:mn(e,r.state.agent),l=i.createPost?.({publicUrl:s,...r,encodedState:fe({tx:a,...c?{back:c}:{}})});return D({tx:a,...l?{post:l}:{},...o?{create:o}:{}})}async function Ei(e,t,n,r){return Ti(t,n.id,r.searchParams)}async function Di(e,t,n){let r=await e.json().catch(()=>void 0);return Ti(t,n.integration,new URLSearchParams(r&&typeof r==`object`?r:{}))}async function Oi(e,t,n,r,i){let a=t.operatorApp??!1,o=a?`*`:t.session?.user.id??`anonymous`,s=t.integrations[n];if(!s)return R(t,`unknown-integration`,{platform:n},i);if(a&&s.app.builtin!==`shared`)return D({error:`Create this app in your workspace from the agent's Platforms tab.`},400);let c=t.config.publicUrl;if(!c)return R(t,`no-public-url`,{},i);let l=r?await Ut(t,r,n,o):void 0;if(!l)return R(t,`create-expired`,{platform:n},i);a&&await t.store.put(`delivery`,xi(r),{at:t.now?.()??Date.now(),target:n},{ttlMs:6e5});let u=a?`/create/${n}`:mn(t,l.state.agent),d=a?{tx:r}:{},f=a?void 0:(await an(t)).find(e=>e.integration===n),p=await s.app.createCallback(e,{publicUrl:c,...l,fetch:t.fetch??fetch,tokens:Pn(t,n),...f?{shared:G(t.config,f.credentials)}:{}}).catch(r=>r instanceof T&&r.code===`invalid-field`&&e.headers.get(`accept`)===`application/json`?D({error:r.message},400):r instanceof T?R(t,r.code,{platform:n,error:r.error,...d},u):(console.error(`coder server: creating the ${n} app failed`,r),R(t,`failed`,{platform:n,...d},u)));if(p instanceof Response)return p;let m={id:`${n}:${p.platformAppId}`,integration:n,agent:l.state.agent,name:p.name,...l.state.repo?{agentsRepo:l.state.repo}:{},...l.state.repo?{branch:l.state.branch??`main`}:{},...a?{builtin:!0}:{},...`shared`in p?{shared:f.id,credentials:``}:{credentials:W(t.config,p.credentials)},createdAt:t.now?.()??Date.now()};if(await t.store.put(`app`,m.id,m),s.app.values&&await t.store.put(`delivery`,Me(m.id),{version:0,manifest:s.app.values(m,{publicUrl:c,definition:l.definition}).lines,changed:!1}),a)return await _i(t,`Created the shared app`,`${p.name} on ${s.name}`),R(t,`created`,{platform:n,app:p.name,...d},u);let h=await Ce(t,`install`,o,m.id);return se(`${c}/install/${n}?app=${encodeURIComponent(m.id)}&state=${fe({tx:h,back:u})}`)}async function ki(e,t,n,r){let i=ce(r.searchParams.get(`state`));return Oi(e,t,n.id,i?.tx,Ft(i?.back))}async function Ai(e,t,n,r){let i=new URLSearchParams(await e.clone().text()).get(`tx`),a=await Oi(e,t,n.id,i,void 0),o=a.headers.get(`location`);return o&&e.headers.get(`accept`)===`application/json`?D({url:o}):a}async function ji(e,t,n,r){if(t.source!==`repo`||!t.repo)return;let i=(await(r??e.store.list(`app`))).find(({value:e})=>e.agent===t.id&&e.agentsRepo===t.repo)?.value;return((i&&e.integrations[i.integration])??Object.values(e.integrations).find(e=>e.repos))?.repos?.url(t.repo,t.path,i?.branch??n?.commit)}async function Mi(e,t,n){return C()[t]&&await wr(e,n),Er(e.store,t)}async function Q(e,t){let n=(e.now??Date.now)();(!t||C()[t])&&await wr(e,n);let r=e.local?await Cr(e.store,e.local.cwd,e.integrations,t).catch(()=>void 0):void 0;return{now:n,local:r,loadCurrent:()=>r?Promise.resolve(r.find(({record:e})=>e.id===t)??{}):Mi(e,t,n)}}async function Ni(e,t,{after:n,q:r,source:i,platform:a,limit:o}){return t?(t??[]).filter(({version:e})=>!a||!!e?.definition?.integrations?.[a]).map(({record:e})=>e).filter(e=>(!n||e.id>n)&&(!i||e.source===i)&&(!r||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(r)))).sort((e,t)=>e.id.localeCompare(t.id)).slice(0,o):(await e.store.listAgentSummaries({after:n,q:r,source:i,platform:a,limit:o})).map(({record:e})=>e)}async function Pi(e,t,n,r){let i=r.searchParams.get(`fields`);if(i&&![`id`,`id,name`].includes(i))return D({error:`Invalid fields`},400);let{local:a}=await Q(t);if(!a&&k(r)&&!i)return D(await zi(t,r));let o=O(r,200);if(i){let e=await Ni(t,a,{after:ae(r),q:r.searchParams.get(`q`)?.trim().toLowerCase(),source:Ri[r.searchParams.get(`type`)??``],platform:r.searchParams.get(`platform`)??void 0,limit:o+ +!!k(r)}),n=e=>i===`id`?{id:e.id}:{id:e.id,name:e.name},s=de(e,o,e=>e.id);return D(k(r)?{...s,items:s.items.map(n)}:e.map(n))}let s=a??await t.store.listAgentSummaries({limit:o});if(k(r))return D(await zi(t,r,s));let c,l=b();return D(await Promise.all(s.slice(0,o).map(async({record:e,version:n})=>{e.source===`repo`&&e.repo&&(c??=t.store.list(`app`));let r=await ji(t,e,n,c);return{...e,problems:Sr(e,n,t.integrations),...e.id===l?{default:!0}:{},definition:n?.definition,...r?{sourceUrl:r}:{}}})))}async function Fi(e,t,n,r){let i=n.slug,{now:a,local:o,loadCurrent:s}=await Q(t,i),c=O(r,10,50),l=ae(r),[u,d]=await Promise.all([o?s().then(e=>e.record):q(t.store,i),o?Promise.resolve(o.flatMap(({version:e})=>e?[{value:e}]:[])):t.store.listVersions(i,c+1,l)]);return u?D(await Bi(t,u,c,l??u.currentVersion+1,d)):D({error:`No agent named "${i}"`},404)}async function Ii(e,t,n,r){let i=n.slug,a=n.version?Number(n.version):void 0;if(n.version&&!/^\d+$/.test(r.pathname.split(`/`).at(-1)))return ie();let{now:o,local:s,loadCurrent:c}=await Q(t,i),l=s?s.find(({version:e})=>e?.version===a)?.version:await K(t.store,i,a);return l?D(l):D({error:`No version ${a} for agent "${i}"`},404)}async function Li(e,t,n,r){let i=n.slug,{now:a,local:o,loadCurrent:s}=await Q(t,i),c=r.searchParams.get(`versions`)!==`0`,l=r.searchParams.get(`content`)!==`0`,u=r.searchParams.get(`handles`)===`1`,d=t.session?.user.id,[{record:f,version:p},m,h,g]=await Promise.all([!l&&!o?t.store.listAgentSummaries({slug:i}).then(e=>e[0]??{}):s(),c?o?o.flatMap(({version:e})=>e?[{value:e}]:[]):t.store.listVersions(i):[],u?Ye(t,i):[],u?tn(t.store,i):void 0]);if(!f)return D({error:`No agent named "${i}"`},404);let _=u?await et(t,{engine:f.settings?.engine??p?.definition.engine,model:f.settings?.model??p?.definition.model},d):void 0,v=p?.definition.integrations??{},y=e=>{let t=v[e]?.events;return Array.isArray(t)?t.includes(`mention`):!!(t&&`mention`in t)},b=[],x=Object.keys(t.integrations),S=(e,t)=>x.indexOf(e.value.integration)-x.indexOf(t.value.integration);for(let{value:e}of[...h].sort(S))y(e.integration)&&!b.some(t=>t.integration===e.integration&&t.name.toLowerCase()===e.name.toLowerCase())&&b.push({name:e.name,integration:e.integration,platform:t.integrations[e.integration]?.name??e.integration});let C=m.map(({value:e})=>{let{systemPrompt:t,files:n,...r}=e;return r}),w=await ji(t,f,p);return D({...f,problems:Sr(f,p,t.integrations),...p?{definition:p.definition,...l&&`systemPrompt`in p?{systemPrompt:p.systemPrompt,...p.files?{files:p.files}:{}}:{}}:{},...w?{sourceUrl:w}:{},...c?{versions:C}:{},...b.length?{handles:b}:{},...g?.failed?{deliveries:{failed:g.failed,recent:g.recent.map(e=>({at:e.at,platform:t.integrations[e.integration]?.name??e.integration,...e.type?{type:e.type}:{},error:e.error,...e.url?{url:e.url}:{}}))}}:{},..._?{..._.usable?{}:{needsModel:!0}}:{}})}const Ri={builtin:`builtin`,dashboard:`upload`,repository:`repo`};async function zi(e,t,n){let r=O(t,24,100),i=ae(t),a=t.searchParams.get(`q`)?.trim().toLowerCase(),o=Ri[t.searchParams.get(`type`)??``],s=t.searchParams.get(`platform`),c=t.searchParams.get(`connect`)===`1`,l=e.serverOrganizationId,u=e.store.list(`app`),[d,f,p,m]=await Promise.all([u,e.store.list(`installation`),c&&l!==void 0&&l!==e.organizationId&&e.scope?e.scope(l).store.list(`app`):[],n?n.filter(({record:e})=>(!i||e.id>i)&&(!o||e.source===o)&&(!a||[e.id,e.name,e.description,e.repo].some(e=>e?.toLowerCase().includes(a)))):e.store.listAgentSummaries({after:i,source:o,q:a,platform:s??void 0,limit:r+1})]),h=new Set(f.filter(({value:e})=>!e.deletedAt&&!e.uninstalled).map(({value:e})=>e.app)),g=(e,t)=>{let n=d.filter(({value:n})=>n.agent===e&&n.integration===t);return n.length?n.some(({value:e})=>h.has(e.id))?`installed`:`created`:`none`},_=[];for(let{record:e,version:t}of m){let n=Object.keys(t?.definition?.integrations??{}).sort();if(!(s&&!n.includes(s))&&(_.push({record:e,version:t,ids:n}),_.length>r))break}let v=de(_,r,e=>e.record.id),y=b();return{...v,...c?{connectable:[...d,...p].filter(({value:t})=>t.builtin&&e.integrations[t.integration]?.app.builtin===`shared`&&!h.has(t.id)).map(({value:e})=>({id:e.id,integration:e.integration,agent:e.agent}))}:{},items:await Promise.all(v.items.map(async({record:t,version:n,ids:r})=>{let i=await ji(e,t,n,u);return{...t,problems:Sr(t,n,e.integrations),...t.id===y?{default:!0}:{},definition:n?.definition,...i?{sourceUrl:i}:{},platforms:r.map(e=>({id:e,state:g(t.id,e)}))}}))}}async function Bi(e,t,n,r,i){let a=(i??await e.store.listVersions(t.id,n+1,r)).map(({value:e})=>{let{systemPrompt:t,files:n,definition:r,...i}=e;return i}).filter(e=>e.version<r).reverse();return de(a,n,e=>e.version)}var Vi=class{options;entries=new Map;pending=new Map;constructor(e){this.options=e}async get(e,t){let n=this.options.now??Date.now,r=n(),i=this.entries.get(e);if(i&&r-i.at<this.options.ttlMs)return i.value;let a=this.pending.get(e);return a||(a=Promise.resolve().then(t).then(t=>{if(t===void 0)return i?.value;if(this.options.accept&&!this.options.accept(t))return i?.value??t;this.entries.set(e,{value:t,at:n()});let r=this.entries.keys().next().value;return this.entries.size>this.options.max&&r!==void 0&&this.entries.delete(r),t}).catch(t=>(console.error(`coder server: model probe failed for ${e}`,t),i?.value)).finally(()=>this.pending.delete(e)),this.pending.set(e,a)),a}};const Hi=/^[a-z0-9][a-z0-9-]*$/,Ui=new Set([`openrouter.ai`,`ai-gateway.vercel.sh`,`api.groq.com`,`api.together.xyz`]);function Wi(e){return{builtin:{codex:a,claude:n},models:e.models??{}}}async function Gi(e,t){let{baseUrl:n,envKey:r,key:i}=await _t(e);if(!n||!/^https?:\/\//.test(n)||!URL.canParse(n))return D({error:`An http or https base URL is required`},400);let a=!i&&r&&await Ki(t,n,r)?await we(t,r):void 0,o=i||a,s=t.settings??={},c=s.probes??=new Vi({ttlMs:6e5,max:100,now:t.now,accept:e=>e.reachable}),l=`${new URL(n).host}|${r??``}|${E(String(o??``))}`;return D(await c.get(l,()=>re({baseUrl:n},{key:o,fetch:t.fetch})))}async function Ki(e,t,n){let r=new URL(t).host;if(Ui.has(r))return!0;let i=(await Ve(e)).models??{};return Object.values(i).some(e=>`baseUrl`in e&&e.envKey===n&&new URL(e.baseUrl).host===r)}async function qi(e,t,n,r){return D(Wi(await Ve(t)))}async function Ji(e,t,n,r){let{name:a=``,...o}=await _t(e);return!Hi.test(a)||i(a)?D({error:`Invalid model name "${a}"`},400):I(t,e=>{if(e.models?.[a])throw new j(`"${a}" already exists`);e.models={...e.models,[a]:o}})}async function Yi(e,t,n,r){let i=n.name;return I(t,e=>{if(!e.models?.[i])throw new j(`No model "${i}"`);l(e,i)})}async function Xi(e,t,i,s){let c=i.name,{spec:l}=await _t(e);return I(t,e=>{if(!Hi.test(c))throw new j(`Invalid alias name "${c}"`);let t=e.models?.[c];if(t&&o(t))throw new j(`"${c}" is a custom model name`);let i=g(l,h(e));if(!i?.model||i.engine===`custom`)throw new j(`"${l}" does not name a codex or claude model`);let s=i.engine===`claude`?n:a,u=l.split(`:`).some(e=>d.has(e)||r.has(e));e.models={...e.models,[c]:{provider:i.engine,model:s[i.model]??i.model,...u&&i.effort?{effort:i.effort}:{}}}})}async function Zi(e,t,n,r){let i=n.name;return I(t,e=>{let t=e.models??={},n=t[i];n&&(o(n)||s(n))?n.disabled=!0:t[i]={disabled:!0}})}async function Qi(e,t,n,r){let i=n.name;return I(t,e=>{let t=e.models??={},n=t[i];n&&(o(n)||s(n))?delete n.disabled:delete t[i]})}async function $i(e,t){let{now:n,local:r}=await Q(t),[i,a,o]=await Promise.all([Ni(t,r,{limit:200}),Ve(t),t.store.list(`runner`)]),s=b(),c=i.filter(e=>!e.settings?.disabled).sort((e,t)=>Number(t.id===s)-Number(e.id===s)).map(({id:e,name:t})=>({id:e,name:t,...e===s?{default:!0}:{}})),l=Ne(t,a),u=Object.values(t.integrations).find(e=>e.repos);return D({agents:c,...l.chain?.[0]?{engine:l.chain[0]}:{},engines:l.engines??{},models:Wi(a),runners:Ht(t,o,n).map(({id:e,name:t,default:n})=>({id:e,name:t,default:n})),flows:v(_(),`builtin`).map(e=>e.name),...t.local?{folders:At(t.local.cwd)}:{},...u?{connectLabel:u.installLabel??`Connect ${u.id}`}:{}})}async function ea(e,t){let n=(await e.store.list(`installation`)).filter(({value:t})=>!t.deletedAt&&e.integrations[t.integration]?.repos),r=new Map((await ye(e.store,n.map(({value:e})=>e.app))).map(({id:e,value:t})=>[e,t]));for(let{value:i}of n){let n=e.integrations[i.integration];if(i.deletedAt||!n?.repos)continue;let a=r.get(i.app);if(!(!a||a.integration!==n.id))try{let r=await be(e,n,i,G(e.config,a.credentials));if(i.repos?.includes(t)||(await n.repos.list(bt(e,i),r)).includes(t))return{contents:n,token:r,app:a,installation:i}}catch(e){console.error(`coder server: repository access for ${i.id} failed`,e)}}}async function ta(e,t,n){let r=await ea(e,t);if(!r)return D({error:`No installed app can read ${t}`},400);let i=await r.contents.repos.listDir(t,yt,r.token,n).catch(()=>[]),a=await Promise.all(i.map(async i=>{let a=await r.contents.repos.readFile(t,`${yt}/${i}/agent.json`,r.token,n).catch(()=>void 0);if(a===void 0)return;let o={};try{let e=JSON.parse(a);e&&typeof e==`object`&&(o=e)}catch{}let s=Object.entries(o.mcp&&typeof o.mcp==`object`&&!Array.isArray(o.mcp)?o.mcp:{}).flatMap(([e,t])=>p(e,t)),c=await q(e.store,i),l=c?.source===`repo`&&c.repo===t,u=l?await K(e.store,i):void 0;return{id:i,name:typeof o.name==`string`?o.name:i,...s.length?{warnings:s}:{},...typeof o.description==`string`?{description:o.description}:{},...l?{version:c.currentVersion,...u?.source?{commit:u.source.commit}:{}}:{},...c&&!l?{taken:!0}:{}}}));return D({repo:t,agents:a.filter(Boolean)})}async function na(e,t,n,r){let i=r.searchParams.get(`repo`);return i?ta(t,i,r.searchParams.get(`ref`)||`HEAD`):D({error:`repo is required`},400)}async function ra(e,t,n,r){let i=await e.json().catch(()=>void 0),a=i?.agents;if(typeof i?.repo!=`string`||i.ref!==void 0&&typeof i.ref!=`string`||a!==void 0&&!(Array.isArray(a)&&a.every(e=>typeof e==`string`)))return D({error:`repo is required, ref must be a string and agents a list of ids`},400);try{let e=await ea(t,i.repo);if(!e)return D({error:`No installed app can read ${i.repo}`},400);let n=i.ref??`HEAD`,r=a??await e.contents.repos.listDir(i.repo,`.coder/agents`,e.token,n);for(let e of r){let n=await q(t.store,e);if(n&&(n.source!==`repo`||n.repo!==i.repo))return D({error:`Agent id "${e}" is already taken`},409)}let o=await Fe(t.store,e.contents,i.repo,n,e.token,(t.now??Date.now)(),{slugs:r});return await Ue(t,o),D({imported:o.map(e=>e.agent)})}catch(e){return D({error:e instanceof Error?e.message:String(e)},400)}}function ia(e){if(!e||Array.isArray(e)||typeof e!=`object`)return!1;let t=Object.entries(e);if(t.length>100)return!1;let n=0;for(let[e,r]of t){if(typeof r!=`string`||e.startsWith(`/`)||e.includes(`\\`)||e.includes(`\0`)||e.split(`/`).includes(`..`)||e===`agent.json`||e===`system.md`)return!1;n+=Buffer.byteLength(e)+Buffer.byteLength(r)}return n<=262144}async function aa(e,t){return(await St(e,[t])).flatMap(({app:e,error:t,check:n})=>{let r={id:e.id,integration:e.integration,name:e.name};return t?[{...r,error:t}]:n?n.changed?[{...r,drift:!0}]:[]:[{...r,updated:!0}]})}async function oa(e,t,n,r){let i=n.slug,{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);try{let e=S({[i]:c})[i];if(!e||typeof e!=`object`)throw Error(`settings must be an object`);let{disabled:n,...r}=e,a=n?{...r,disabled:n}:r,{record:o,version:l}=await s();if(!o||!l)throw Error(`No agent named "${i}".`);if(vr({...o,settings:void 0},l,r,t.integrations),t.local){let e=x(t.local.cwd,i,!!n);return e?D({error:`Agent "${i}" is ${n?`enabled`:`disabled`} by agents.${i} in ${e}. Change it there.`},409):(await Ot(t,e=>{e.agents={...e.agents,[i]:a}}),await Cr(t.store,t.local.cwd,t.integrations),D(await q(t.store,i)))}return D(await Dr(t.store,i,a,(t.now??Date.now)()))}catch(e){return D({error:e instanceof Error?e.message:String(e)},400)}}async function sa(e,t,n,r){let i=n.slug,{now:a,local:o,loadCurrent:s}=await Q(t,i),{record:c}=await s();return c?c.source===`builtin`?D({error:`Built-in agents cannot be deleted.`},400):t.local&&!await Tr(t.local.cwd,t.integrations,i)?D({error:`Delete .coder/agents/${i} in the repo`},409):(await t.store.delete(`agent`,i),D({ok:!0})):D({error:`No agent named "${i}"`},404)}async function ca(e,t,n,r){let i=n.slug,{now:a,local:o,loadCurrent:s}=await Q(t,i),c=await e.json().catch(()=>void 0);if(!c||typeof c.systemPrompt!=`string`||c.files!==void 0&&!ia(c.files)||c.name!==void 0&&typeof c.name!=`string`||c.description!==void 0&&typeof c.description!=`string`)return D({error:`definition and systemPrompt are required; files must contain strings`},400);try{ee([i]);let[e]=w({definitions:{[i]:{json:c.definition,builtin:!1}},usage:void 0},t.integrations);if(!e)throw Error(`No agent named "${i}".`);let n=t.local?await q(t.store,i):void 0,r=t.local&&n?await K(t.store,i):void 0,a=c.files;t.local&&(await br(t.local.cwd,t.integrations,i,{definition:{...c.definition,...c.name===void 0?{}:{name:c.name},...c.description===void 0?{}:{description:c.description}},systemPrompt:c.systemPrompt,...a?{files:a}:{}}),await Cr(t.store,t.local.cwd,t.integrations));let o=t.local?void 0:await yr(t.store,{id:i,name:c.name??e.name,description:c.description??e.definition.description,source:`upload`,definition:e.definition,systemPrompt:c.systemPrompt,files:a,importedFrom:`upload`},(t.now??Date.now)()),s=o?.version??await K(t.store,i),l=o?.unchanged??Fr(r&&{...r,createdAt:0},{...s,createdAt:0}),u=await aa(t,s),d=o?.record??await q(t.store,i);return D({...d,definition:s.definition,version:s.version,unchanged:l,apps:u})}catch(e){return D({error:e instanceof Error?e.message:String(e)},400)}}async function la(e,t,n,r){let i=n.id,a=Number(r.searchParams.get(`after`)??-1),o=Number.isFinite(a)?a:-1;r.searchParams.has(`limit`)&&O(r,500,2e3);let s=await t.store.get(`task`,i);if(!s||t.local&&s.handle?.startsWith(`cli:`)&&s.task.flow==="default"){let n=s?.task.cwd??t.local?.cwd;if(!n||!M(n,i,!1))return D({error:`No task "${i}"`},404);{let r=Number(e.headers.get(`last-event-id`)??o);return _a(e,t,`cli:${n}:${i}`,Number.isFinite(r)?r:o,async e=>{let t=M(n,i);if(t)return{status:t,lines:Xe(n,i,e,500),pendingResult:ua(n,t,!t.result)}})}}let c=Number(e.headers.get(`last-event-id`)??o),l=t.statementTimeout??((e,t)=>t());return _a(e,t,i,Number.isFinite(c)?c:o,e=>l(ha,async()=>{let n=await t.store.get(`task`,i);if(n)return{status:await pt(t,n),lines:await en(t.store,i,e,500)}}))}function ua(e,t,n=!1){if(!Tt.has(t.status)||t.error||t.status===`cancelled`)return!1;let r=c(e,t.task.id),i=Date.parse(r?.resumedAt??r?.createdAt??``)||0;return n||(Ar.statSync(J.join(m(e,t.task.id),`result.json`),{throwIfNoEntry:!1})?.mtimeMs??0)<i}const da=1e3,$=3e4;function fa(e,t,n,r){let i=[...new Set((r.searchParams.get(`tasks`)??``).split(`,`).filter(Boolean))].slice(0,100),a=Date.now(),o=t.taskWatcher??new ma,s=o.tag(t),[c,l]=(e.headers.get(`last-event-id`)??``).split(`-`),u=Number(c),d=u>0&&`-${l}`===s,f=d?Math.min(Math.max(u,a-29e4),a):a,p=u>0&&(!d||u<f)?`event: reset
|
|
2
|
-
data: {}
|
|
3
|
-
|
|
4
|
-
`:``,m=new TextEncoder,h=()=>{},g=new ReadableStream({start(n){n.enqueue(m.encode(`retry: ${da}\nid: ${f}${s}\n\n${p}`)),h=o.watch(t,i,f,e=>n.enqueue(m.encode(e)),()=>n.close(),d);let r=()=>{h();try{n.close()}catch{}};e.signal.aborted?r():e.signal.addEventListener(`abort`,r)},cancel(){h()}});return new Response(g,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}function pa(e,t){let{task:n,approval:r,archivedAt:i,createdAt:a,startedAt:o,finishedAt:s}=e;return{id:n.id,agent:n.agent,status:e.status,approval:r??null,archivedAt:e.autoArchived&&!t?void 0:i,createdAt:a,startedAt:o,finishedAt:s,...xn(e),...t?{result:e.result??null,error:e.error??null,answer:e.answer??null}:{}}}var ma=class{options;watches=new Set;timer;counts=new Map;runners=new Map;reading=!1;closed=!1;last=Date.now();scans=new Map;left=new Map;archived=new Map;reads=0;generation=Pr().slice(0,8);constructor(e={}){this.options=e}watch(e,t,n,r,i,a=!1){if(this.closed)return queueMicrotask(i),()=>{};let o=Date.now();this.watches.size||(this.last=o);let s={ctx:e,ids:new Set(t),sent:new Map,gone:new Set,from:n,fresh:!0,...a?{runners:``}:{},tag:this.tag(e),beat:o,marked:o,until:o+(this.options.lifeMs??29e4),send:r,close:i};return this.watches.add(s),this.timer||(this.timer=setInterval(()=>this.tick(),this.options.pollMs??1e3),this.timer.unref?.()),this.tick(),()=>this.drop(s)}tag(e){return`-${Mr(`sha256`).update(e.organizationId).digest(`hex`).slice(0,8)}${e.queue instanceof Xn?`.${this.generation}`:``}`}runnersChanged(e){this.runners.delete(e)}close(){this.closed=!0;for(let e of[...this.watches]){this.drop(e);try{e.close()}catch{}}}drop(e){this.watches.delete(e)&&([...this.watches].some(t=>t.ctx.organizationId===e.ctx.organizationId)||(this.counts.delete(e.ctx.organizationId),this.runners.delete(e.ctx.organizationId)),this.watches.size||(clearInterval(this.timer),this.timer=void 0,this.counts.clear(),this.runners.clear()))}tick(){let e=Date.now();for(let t of[...this.watches])if(e>=t.until){this.drop(t);try{t.close()}catch{}}else e-t.beat>=(this.options.heartbeatMs??2e4)&&(t.beat=e,this.send(t,`: ping
|
|
5
|
-
|
|
6
|
-
`));this.reading||!this.watches.size||(this.reading=!0,this.read(e).finally(()=>this.reading=!1))}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){let t=[...this.watches],n=new Map;for(let e of t){let t=n.get(e.ctx.organizationId)??{ctx:e.ctx,ids:new Set};for(let n of e.ids)t.ids.add(n);n.set(e.ctx.organizationId,t)}let r=Math.min(this.last,...t.flatMap(e=>e.fresh?[e.from]:[]));this.reads++;let i=await this.changes(n,r-$,e).catch(e=>{console.error(`coder server: task events failed`,e)});if(i){this.last=e;try{for(let[e,{ctx:t}]of n){let n=this.counts.get(e),r=JSON.stringify([[...i.rows.get(e)??[]].map(([e,t])=>[e,t.status,t.archivedAt]).sort(),[...i.deleted.get(e)?.keys()??[]].sort()]),a=n?.fingerprint!==r,o=t.local?[...i.rows.get(e)?.values()??[]].filter(e=>!e.archivedAt&&[`queued`,`running`,`waiting`].includes(e.status)).length:a?(await t.queue.counts(e,{archived:!1,statuses:[`queued`,`running`,`waiting`]})).active:n.active;[...this.watches].some(t=>t.ctx.organizationId===e)&&this.counts.set(e,{active:o,fingerprint:r})}}catch(e){console.error(`coder server: task counts failed`,e);return}await Promise.all([...n].filter(([t])=>e-(this.runners.get(t)?.at??-1/0)>=15e3).map(async([t,{ctx:n}])=>{try{this.runners.set(t,{at:e,records:await n.store.list(`runner`)})}catch(e){console.error(`coder server: runner events failed`,e)}}));for(let n of t){if(!this.watches.has(n))continue;let t=[];try{t=this.news(n,i,e);let r=this.counts.get(n.ctx.organizationId)?.active;r!==void 0&&r!==n.active&&(n.active=r,t.push(`id: ${e}${n.tag}\nevent: counts\ndata: ${JSON.stringify({active:r})}\n\n`)),t.push(...this.runnerNews(n,e))}catch{}!t.length&&e-n.marked>=(this.options.heartbeatMs??2e4)&&t.push(`id: ${e}${n.tag}\n\n`),t.length&&(n.marked=e,this.send(n,t.join(``)))}}}runnerNews(e,t){let n=this.runners.get(e.ctx.organizationId);if(!n)return[];let r=Ht(e.ctx,n.records,t),i=JSON.stringify(r.map(({lastSeen:e,...t})=>t.online?t:{...t,lastSeen:e})),a=e.runners;return e.runners=i,a===void 0||a===i?[]:[`id: ${t}${e.tag}\nevent: runners\ndata: ${JSON.stringify({items:r})}\n\n`]}async changes(e,t,n){let r=await[...e.values()][0].ctx.queue.changes([...e].map(([e,t])=>({organizationId:e,ids:[...t.ids]})),t),i=new Map;for(let{organizationId:e,status:t}of r.rows){let n=i.get(e)??new Map;i.set(e,n.set(t.task.id,t))}let a=new Map;for(let{organizationId:e,id:t,at:n}of r.deleted){let r=a.get(e)??new Map;a.set(e,r.set(t,n))}for(let[t,{ctx:r}]of e){if(!r.local)continue;let e=[...i.get(t)?.values()??[]],a=this.scans.get(r.local.cwd);if(!a||n-a.at>=(this.options.localScanMs??4e3)||e.some(e=>e.updatedAt>a.at)){let e=!a||n-a.archivedAt>=(this.options.archiveScanMs??15e3);await ct(r,r.local.cwd);let t=e?P(r.local.cwd,!0):a.archived,i=P(r.local.cwd,!1),o=new Set(i.map(e=>e.task.id)),s=[...i,...t.filter(e=>!o.has(e.task.id))],l=new Set(s.map(e=>e.task.id)),u=this.left.get(r.local.cwd)??new Map;for(let e of a?.rows??[])l.has(e.task.id)||u.set(e.task.id,a.at);for(let[e,t]of u)(t<n-6e5||l.has(e))&&u.delete(e);let d=this.archived.get(r.local.cwd)??new Set;for(let e of d)l.has(e)?d.delete(e):c(r.local.cwd,e)||(u.set(e,a?.at??n),d.delete(e));this.left.set(r.local.cwd,u),this.scans.set(r.local.cwd,a={at:n,rows:s,archived:t,archivedAt:e?n:a.archivedAt})}i.set(t,new Map(Ln(r.local.cwd,a.rows,e).map(e=>[e.task.id,e])))}return{rows:i,deleted:a}}news(e,{rows:t,deleted:n},r){let{ctx:i}=e,a=t.get(i.organizationId)??new Map,o=[],s=(t,n)=>{let i=JSON.stringify(n);e.sent.get(t)!==i&&(e.sent.set(t,i),o.push(`id: ${r}${e.tag}\nevent: task\ndata: ${i}\n\n`))},c=e=>({id:e,deleted:!0}),l=t=>{let n=i.local&&M(i.local.cwd,t,e.ids.has(t));if(s(t,n?pa(n,e.ids.has(t)):c(t)),e.gone.add(t),n&&i.local){let e=this.archived.get(i.local.cwd)??new Set;this.archived.set(i.local.cwd,e.add(t))}};for(let[t,n]of a){let a=e.ids.has(t);e.gone.delete(t);let o=pa(a&&i.local&&n.local&&Tt.has(n.status)?M(i.local.cwd,t)??n:n,a);if(i.local&&n.local&&e.sent.get(t)!==JSON.stringify(o)&&r-(n.finishedAt??0)<$&&ua(i.local.cwd,n)){e.sent.has(t)||e.sent.set(t,``);continue}a||i.local&&!e.fresh||n.updatedAt>e.from-$?s(t,o):e.fresh&&e.sent.set(t,JSON.stringify(o))}for(let t of e.ids)a.has(t)||l(t);for(let[t,r]of n.get(i.organizationId)??[])r>e.from-$&&s(t,c(t));if(i.local){for(let t of e.sent.keys())!a.has(t)&&!e.ids.has(t)&&!e.gone.has(t)&&l(t);for(let[t,n]of this.left.get(i.local.cwd)??[])n>e.from-$&&!a.has(t)&&e.sent.get(t)!==JSON.stringify(c(t))&&l(t)}return e.fresh=!1,e.from=r,o}};const ha=1e4;var ga=class{options;feeds=new Map;closed=!1;reads=0;constructor(e={}){this.options=e}watch(e,t,n,r,i){if(this.closed)return queueMicrotask(i),()=>{};let a=this.feeds.get(e),o=a?.reading!==void 0&&Date.now()-a.reading>=(this.options.stallMs??1e4);if(!a||o){let t={key:e,read:n,watches:new Set,head:1/0};if(a){clearTimeout(a.timer);for(let e of a.watches)t.watches.add(Object.assign(e,{feed:t}));a.watches.clear()}this.feeds.set(e,a=t)}let s={cursor:t,feed:a,timers:[],send:r,close:i};s.timers=[setTimeout(()=>this.end(s),this.options.lifeMs??5e4),setInterval(()=>this.send(s,`: ping
|
|
7
|
-
|
|
8
|
-
`),this.options.heartbeatMs??2e4)];for(let e of s.timers)e.unref?.();return a.watches.add(s),a.reading===void 0&&t<a.head&&(clearTimeout(a.timer),this.read(a)),()=>this.drop(s)}close(){this.closed=!0;for(let e of[...this.feeds.values()])for(let t of[...e.watches])this.end(t)}drop(e){let{feed:t}=e;for(let t of e.timers)clearTimeout(t);!t.watches.delete(e)||t.watches.size||(clearTimeout(t.timer),this.feeds.get(t.key)===t&&this.feeds.delete(t.key))}end(e,t=``){try{t&&e.send(t),e.close()}catch{}this.drop(e)}send(e,t){try{e.send(t)}catch{this.drop(e)}}async read(e){if(e.timer=void 0,this.feeds.get(e.key)!==e||!e.watches.size)return;let t=[...e.watches],n=Math.min(...t.map(e=>e.cursor));e.reading=Date.now(),this.reads++;let r=await e.read(n).catch(e=>(console.error(`coder server: task log read failed`,e),null));if(e.reading=void 0,this.feeds.get(e.key)!==e)return;let i=t.filter(t=>e.watches.has(t)),a=i.length<e.watches.size?0:this.options.pollMs??1e3;if(r===void 0)for(let e of i)this.end(e);else if(r){let{status:t,lines:o,pendingLogs:s,pendingResult:c}=r,l=o.length===500,u=Tt.has(t.status)&&!l&&!s&&!c,d=o.map(e=>[e.seq,`id: ${e.seq}\nevent: log\ndata: ${JSON.stringify(e)}\n\n`]);e.head=Math.max(n,o.at(-1)?.seq??n),l&&(a=0);for(let e of i){let t=d.flatMap(([t,n])=>t>e.cursor?[n]:[]).join(``);!l&&!u&&!e.caught&&(e.caught=!0,t+=`event: caught-up
|
|
9
|
-
data: {}
|
|
10
|
-
|
|
11
|
-
`),e.cursor=Math.max(e.cursor,o.at(-1)?.seq??-1),u?this.end(e,`${t}event: end\ndata: {}\n\n`):t&&this.send(e,t)}}this.feeds.get(e.key)===e&&(e.timer=setTimeout(()=>void this.read(e),a),e.timer.unref?.())}};function _a(e,t,n,r,i){let a=t.logWatcher??new ga,o=new TextEncoder,s=()=>{},c=new ReadableStream({start(c){c.enqueue(o.encode(`retry: ${da}\n\n`)),s=a.watch(`${t.organizationId}:${n}`,r,i,e=>c.enqueue(o.encode(e)),()=>c.close());let l=()=>{s();try{c.close()}catch{}};e.signal.aborted?l():e.signal.addEventListener(`abort`,l)},cancel(){s()}});return new Response(c,{headers:{"content-type":`text/event-stream; charset=utf-8`,"cache-control":`no-cache, no-transform`}})}const va={npm:[`npx`,`-y`],pypi:[`uvx`],oci:[`docker`,`run`,`-i`,`--rm`]},ya=(e=[])=>e.map(({name:e,description:t,isRequired:n,isSecret:r,value:i,default:a})=>({name:e,...t?{description:t}:{},...i??a?{placeholder:i??a}:{},required:n===!0,secret:r===!0}));function ba(e=[],t,n){return e.flatMap((e,r)=>{let i=`${t}:${r}`,a=Object.entries(e.variables??{}),o=e.value??e.default,s=(e,t,r)=>{let[i]=ya([{...r,name:e}]);return n.push({...i,label:t}),`{${e}}`};if(a.length)for(let[e,t]of a)o=o?.replaceAll(`{${e}}`,s(`${i}:${e}`,e,t));else o===void 0&&(e.valueHint||e.isRequired)&&(o=s(i,e.valueHint??e.name??i,e));return[...e.type===`named`&&e.name?[e.name]:[],...o===void 0?[]:[o]]})}function xa(e){let t=e.remotes?.find(e=>e.type===`streamable-http`||e.type===`sse`);if(t)return{type:t.type===`sse`?`sse`:`http`,url:t.url,env:[],headers:ya(t.headers)};let n=e.packages?.find(e=>va[e.registryType]&&(e.transport?.type??`stdio`)===`stdio`);if(!n)return;let[r,...i]=va[n.registryType],a=[],o=ba(n.runtimeArguments,`runtime`,a),s=ba(n.packageArguments,`package`,a);return{type:`stdio`,command:n.runtimeHint??r,args:[...!n.runtimeHint||n.runtimeHint===r?i:[],...o,n.identifier,...s],...a.length?{argumentInputs:a}:{},env:ya(n.environmentVariables),headers:[]}}function Sa(e,t){let[n=``,r]=e.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),[i=``,a]=t.replace(/^v/,``).split(`+`)[0].split(/-(.*)/),o=n.localeCompare(i,`en`,{numeric:!0});if(o)return o;if(r===void 0||a===void 0)return Number(r===void 0)-Number(a===void 0);let s=r.split(`.`),c=a.split(`.`);for(let e=0;e<Math.max(s.length,c.length);e++){let t=s[e],n=c[e];if(t===void 0||n===void 0)return Number(t!==void 0)-Number(n!==void 0);let r=/^\d+$/.test(t),i=/^\d+$/.test(n),a=r===i?t.localeCompare(n,`en`,{numeric:r}):Number(i)-Number(r);if(a)return a}return 0}var Ca=class{sources=[{url:`https://api.mcp.github.com/v0.1/servers`,curated:!0,rows:new Map,ready:!1,failed:!1},{url:`https://registry.modelcontextprotocol.io/v0.1/servers`,curated:!1,rows:new Map,ready:!1,failed:!1}];refreshAt=0;timer;controller;closed=!1;inFlight;response(e,t){if((e.now??Date.now)()>=this.refreshAt&&this.refresh(e),!this.inFlight&&this.sources.some(e=>e.failed)&&!this.sources.some(e=>[...e.rows.values()].some(e=>e.found)))return D({error:`The MCP registry did not answer. Try again.`},502);let n=t.trim().toLowerCase(),r=new Set,i=this.sources.flatMap(e=>[...e.rows].flatMap(([t,{found:i}],a)=>{if(r.has(t)||(r.add(t),!i))return[];let o=[i.name.split(`/`).pop(),i.title].map(e=>e.toLowerCase()),s=!n||o.includes(n)?0:o.some(e=>e.startsWith(n))?1:o.some(e=>e.includes(n))?2:i.description.toLowerCase().includes(n)?3:4;if(s===4)return[];let c=n&&i.verified&&s<3?0:1;return[{found:i,curated:e.curated,order:a,vendor:c,quality:s}]})),a=e=>Number(e===3);return i.sort((e,t)=>a(e.quality)-a(t.quality)||Number(t.curated)-Number(e.curated)||(e.curated?e.order-t.order:e.vendor-t.vendor||e.quality-t.quality||e.found.name.localeCompare(t.found.name))),D(i.slice(0,30).map(({found:e})=>e),200,this.sources.every(e=>e.ready)?{}:{partial:`true`})}refresh(e){if(this.inFlight||this.closed)return;this.timer&&clearTimeout(this.timer);let t=this.controller=new AbortController;this.inFlight=Promise.all(this.sources.map(n=>this.fill(e,n,t.signal))).then(()=>{}).finally(()=>{this.inFlight=void 0,this.refreshAt=(e.now??Date.now)()+36e5,this.closed||(this.timer=setTimeout(()=>this.refresh(e),36e5),this.timer.unref())}),e.waitUntil?.(this.inFlight)}async fill(e,t,n){let r=new Map,i=new Set,a;try{do{let o=new URLSearchParams({limit:`100`});a&&o.set(`cursor`,a);let s=await(e.fetch??fetch)(`${t.url}?${o}`,{headers:{accept:`application/json`},signal:AbortSignal.any([n,AbortSignal.timeout(2e4)])});if(!s.ok)throw Error(`Registry unavailable`);let{servers:c,metadata:l}=await s.json();for(let{server:e,_meta:n}of c){let i=n?.[`io.modelcontextprotocol.registry/official`]?.isLatest===!0,a=e.version??``,o=r.get(e.name);if(o&&(o.latest===i?Sa(o.version,a)>=0:o.latest))continue;let s=xa(e),c=/^[a-z0-9-]+(?:\.[a-z0-9-]+)+\//i.test(e.name)&&!/^io\.github(?:\.|\/)/i.test(e.name);r.set(e.name,{version:a,latest:i,found:s?{name:e.name,title:e._meta?.[`io.modelcontextprotocol.registry/publisher-provided`]?.github?.displayName??e.title??e.name.split(`/`).pop()??e.name,description:e.description??``,...c?{verified:!0}:{},...t.curated?{curated:!0}:{},...s}:void 0})}if(t.ready||(t.rows=new Map(r)),a=l?.nextCursor,a&&i.has(a))throw Error(`Registry cursor repeated`);a&&i.add(a)}while(a);t.rows=r,t.ready=!0,t.failed=!1}catch{t.failed=!0}}close(){this.closed=!0,this.timer&&clearTimeout(this.timer),this.controller?.abort()}};async function wa(e,t,n){let r=t.settings??={};return(r.registry??=new Ca).response(t,n.searchParams.get(`q`)??``)}const Ta=`/api/auth/callback`,Ea=`/.well-known/oauth-client.json`,Da=`/.well-known/oauth-cli-client.json`,Oa=`openid profile email offline_access organizations:read`;function ka(e,t){return{client_id:`${e}${Ea}`,client_name:`Coder at ${new URL(e).host}`,redirect_uris:[`${e}${Ta}`],post_logout_redirect_uris:[`${e}/?signed_out=1`],grant_types:[`authorization_code`,`refresh_token`],response_types:[`code`],token_endpoint_auth_method:`private_key_jwt`,token_endpoint_auth_signing_alg:`ES256`,jwks:t,scope:Oa}}function Aa(e){return{client_id:`${e}${Da}`,client_name:`Coder CLI for ${new URL(e).host}`,redirect_uris:[`http://127.0.0.1/callback`],grant_types:[`authorization_code`,`refresh_token`,`urn:ietf:params:oauth:grant-type:device_code`],response_types:[`code`],token_endpoint_auth_method:`none`,scope:Oa}}function ja(e,t){return{resource:new URL(e).origin,authorization_servers:[t],bearer_methods_supported:[`header`],scopes_supported:Oa.split(` `)}}function Ma(e){let t=D(e);return t.headers.set(`cache-control`,`public, max-age=3600`),t}function Na(e,t,n,r){return Ma(ka(t.config.publicUrl,t.auth.jwks))}function Pa(e,t,n,r){return Ma(Aa(t.config.publicUrl))}function Fa(e,t,n,r){return Ma(ja(t.config.publicUrl,t.auth.issuer))}const Ia=[H(`GET`,`/runner/:file`,fr),H(`GET`,me,Gn),H(`GET`,Ea,Na,tt),H(`GET`,Da,Pa,tt),H(`GET`,`/.well-known/oauth-protected-resource`,Fa,tt),H(`GET`,`/health`,(e,t)=>qr(t)),H(`GET`,`/`,Gt,ot),H(`GET`,`/login`,nn,ht),...L(`/login`,Zt,ht).filter(e=>e.method!==`GET`),H(`POST`,`/dash/token`,Yn,ft),...L(`/dash/:org/operator`,gn,Ge),...L(`/dash`,gn,tr)],La=[H(`GET`,`/api/auth/capabilities`,(e,t)=>D({wular:t.auth?.issuer??null})),...L(`/api/auth`,(e,t)=>t.auth.handler(e),ir),H(`GET`,`/me`,kn,$t)],Ra=[...U(`/tasks`,[H(`GET`,`/:id/messages`,Ct,Te),H(`POST`,`/:id/ack`,Nn,Te),H(`POST`,`/:id/heartbeat`,ze,Te),H(`POST`,`/:id/logs`,rt,Ze),H(`POST`,`/:id/result`,pe,vt),H(`POST`,`/:id/credential`,kt,vt),H(`POST`,`/:id/reply`,Kn,A),H(`POST`,`/:id/react`,Jt,A),H(`GET`,`/:id/history`,Qr,A),H(`GET`,`/:id/history/:conversation`,$r,A),H(`POST`,`/:id/history`,ei,vt),H(`GET`,`/:id`,Et,nr)]),...U(`/logins`,[H(`GET`,`/:id/input`,di,Je),H(`GET`,`/:id`,fi,Je),H(`POST`,`/:id`,pi,Je)]),...U(`/runners`,[H(`POST`,`/register`,Un)])],za=[...U(`/create`,[H(`GET`,`/:id`,wi,F),H(`POST`,`/:id`,Ei,F),H(`GET`,`/:id/callback`,ki,F),H(`POST`,`/:id/callback`,Ai,F)]),...U(`/install`,[H(`GET`,`/:id`,yn,N),H(`POST`,`/:id`,yn,N),H(`GET`,`/:id/callback`,An,N),H(`POST`,`/:id/callback`,An,N)])],Ba=U(`/connect`,[H(`GET`,``,Lt,He),H(`POST`,``,Rn,He),H(`GET`,`/:integration`,sn,Ae),H(`GET`,`/:integration/callback`,Cn,Ae)]),Va=[...U(`/hooks`,[H(`POST`,`/*`,(e,t,n)=>Bt(e,t,n[`*`]),(e,t,n)=>t.integrations[n[`*`]]?t:ie())]),...za,...Ba],Ha=[H(`GET`,`/metrics`,async(e,t)=>D(await Yr(t),200,{"cache-control":`no-store`}),Zn),H(`GET`,`/usage`,lt),H(`GET`,`/usage/totals`,Se)],Ua=U(``,[H(`GET`,`/folders`,(e,t)=>D(At(t.local.cwd))),H(`POST`,`/folders/check`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return D(Dt(n?.path))}),H(`POST`,`/folders/clone`,async(e,t)=>{let n=await e.json().catch(()=>void 0);return D(await wt(n?.url))}),H(`POST`,`/folders/pick`,async(e,t)=>D(await it()))],ge),Wa=U(``,[H(`GET`,`/engines/status`,async(e,t)=>D(await un(t))),H(`POST`,`/engines/:engine/login`,pn),H(`POST`,`/engines/:engine/logout`,ve)],De),Ga=[H(`POST`,`/apps/:id/install`,(e,t,n,r)=>_e(e,t,n.id,r.searchParams.get(`back`))),H(`POST`,`/apps/create/:integration`,Di),H(`GET`,`/apps`,nt),H(`DELETE`,`/apps/:id`,Ke),H(`GET`,`/apps/:id/drift`,Le),H(`POST`,`/apps/:id/update`,st),H(`GET`,`/installations`,je),H(`GET`,`/connections`,ar,z),H(`POST`,`/connections`,Pt,z),H(`PATCH`,`/connections/:id`,rr,z),H(`DELETE`,`/connections/:id`,er,z),H(`POST`,`/connections/:id/authorize`,rn,z),H(`GET`,`/integrations`,(e,t,n,r)=>Qe(t,r)),H(`GET`,`/repositories`,(e,t)=>ln(t)),H(`POST`,`/repositories/refresh`,(e,t)=>ln(t,!0))],Ka=[H(`GET`,`/agents/import`,na),H(`POST`,`/agents/import`,ra),H(`GET`,`/agents`,Pi),H(`PATCH`,`/agents/:slug/settings`,oa),H(`GET`,`/agents/:slug/versions`,Fi),H(`GET`,`/agents/:slug/versions/:version`,Ii),H(`GET`,`/agents/:slug`,Li),H(`DELETE`,`/agents/:slug`,sa,(e,t)=>or(t,`Only an owner or admin can delete an agent.`)),H(`PUT`,`/agents/:slug`,ca)],qa=[H(`GET`,`/credentials`,ke),H(`POST`,`/credentials`,dt,xe),H(`DELETE`,`/credentials/:name`,mt),H(`POST`,`/logins`,ti,V),H(`GET`,`/logins/:id`,ni,V),H(`POST`,`/logins/:id`,ri,V),H(`DELETE`,`/logins/:id`,ii,V)],Ja=[H(`GET`,`/runners`,Rt),H(`POST`,`/runners`,zn),H(`POST`,`/runners/pair`,On),H(`POST`,`/runners/:id/test`,wn),H(`PATCH`,`/runners/:id`,_n),H(`DELETE`,`/runners/:id`,cn)],Ya=[H(`GET`,`/composer`,$i),H(`GET`,`/tasks`,Sn),H(`POST`,`/tasks`,jt),H(`GET`,`/tasks/:id`,on),H(`DELETE`,`/tasks/:id`,It),H(`GET`,`/tasks/:id/logs`,Vn),H(`GET`,`/tasks/:id/stream`,la),H(`POST`,`/tasks/:id/steer`,En),H(`POST`,`/tasks/:id/ask`,Kt),H(`POST`,`/tasks/:id/approve`,at),H(`POST`,`/tasks/:id/cancel`,Wn),H(`POST`,`/tasks/:id/archive`,he),H(`GET`,`/events`,fa)],Xa=[H(`GET`,`/config`,Fn),H(`PATCH`,`/config`,We)],Za=[H(`POST`,`/models/probe`,(e,t)=>Gi(e,t)),H(`GET`,`/models`,qi),H(`POST`,`/models`,Ji),H(`DELETE`,`/models/:name`,Yi),H(`POST`,`/models/:name/alias`,Xi),H(`POST`,`/models/:name/disable`,Zi),H(`POST`,`/models/:name/enable`,Qi)],Qa=[H(`GET`,`/mcp-registry`,(e,t,n,r)=>wa(e,t,r))],$a=U(`/operator`,[H(`GET`,`/apps`,vi),H(`POST`,`/apps/:integration`,yi),H(`GET`,`/audit`,bi)],Ie),eo=[H(`GET`,`/flows`,hn),H(`GET`,`/pulls`,Jn),H(`POST`,`/flows/:name/run`,Xt),H(`POST`,`/review`,Wt)],to=U(`/admin`,[...Ha,...Ua,...Wa,...Ga,...Ka,...qa,...Ja,...Ya,...Xa,...Za,...Qa,...eo,...$a]).map(e=>({...e,guard:Mt(e.guard)})),no=[H(`GET`,`/connections/oauth/callback`,(e,t,n,r)=>qt(e,t,r),zt),...Ra,...to,...La,...Va,...Ia];async function ro(e,t,n){if(!dn(e,t))return ie();let r=new URL(e.url);return n.scope instanceof Response?n.scope:(t=n.scope??t,await $n(no,e,t,r)??gn(e,t))}const io=`x-coder-request-scope`;function ao(e,{sessions:t,operators:n,cookies:r}){let i=e.auth;return i?{...e,auth:{...i,session(e,n){let a=JSON.stringify([...[`cookie`,`authorization`].map(t=>e.get(t)),!!n]),o=t.get(a);if(!o){let s=new Headers(e);s.delete(`x-coder-organization`),o=i.session(s,n,r),t.set(a,o)}let s=e.get(`x-coder-organization`);return s?o.then(e=>e&&(e.stale?e:Dn(e,s))):o},setOrganization:(e,t)=>i.setOrganization(e,t,r),operator(e){let t=e.get(`cookie`)??``,a=n.get(t);return a||(a=i.operator(e,r),n.set(t,a)),a}}}:e}function oo(e,t,n){let r=t.requestScopes??=new Map,i=e.headers.get(io),a=n&&i?r.get(i):void 0;if(a)return{req:e,ctx:ao(t,a),end(){}};let o=new Headers(e.headers);if(o.delete(io),!t.auth)return{req:i?new Request(e,{headers:o}):e,ctx:t,end(){}};let s=Pr(),c={sessions:new Map,operators:new Map,cookies:[]};return r.set(s,c),o.set(io,s),{req:new Request(e,{headers:o}),ctx:ao(t,c),cookies:c.cookies,end:()=>r.delete(s)}}async function so(e,t,n={}){t.limits??=new $e((t.now??Date.now)()),t.limits.requests++,t.settings??={},t.taskWatcher??=new ma,t.logWatcher??=new ga,t.dashboardHosts??=new Vt;let r=()=>co(e,t,n);return t.dbProfile?t.dbProfile.request(n.inProcess===!0,r):r()}async function co(e,t,n){let r=await oe(e,ue(new URL(e.url).pathname));if(r instanceof Response)return r;let i=oo(r,t,n.inProcess===!0),a=!1;try{let r=n.clientIp??`unknown`,o=await fn(i.req,i.ctx,r),s=lo(o instanceof Response?o:await ro(i.req,i.ctx,o),i.cookies),c=new URL(e.url).pathname.split(`/`),l=c[1]===`tasks`,u=c[1]===`admin`&&c[2]===`tasks`;if(e.method!==`GET`&&s.ok&&![`hooks`,`tasks`,`logins`].includes(c[1])&&!(o instanceof Response)){let e=o.scope instanceof Response?void 0:o.scope??i.ctx;e&&Mn(e,e.organizationId)}return e.method!==`GET`&&s.ok&&!(l&&c.length===4&&c[2]&&[`heartbeat`,`logs`].includes(c[3]))&&!(u&&c.length===5&&c[3]&&[`steer`,`ask`,`approve`,`archive`].includes(c[4]))&&(l||u||c[1]===`admin`&&c[2]===`review`||c[1]===`admin`&&c[2]===`flows`&&c.length===5&&c[3]&&c[4]===`run`)&&Ee(t,u&&c.length===3&&e.method===`POST`),a=!!s.body&&(s.headers.get(`content-type`)??``).includes(`text/html`),a?uo(s,i.end):s}finally{a||i.end()}}function lo(e,t=[]){if(!t.length)return e;let n=new Headers(e.headers);for(let e of t)n.append(`set-cookie`,e);return new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}function uo(e,t){let n=e.body.getReader(),r=new ReadableStream({async pull(e){try{let{done:r,value:i}=await n.read();r?(t(),e.close()):e.enqueue(i)}catch(n){t(),e.error(n)}},cancel(e){return t(),n.cancel(e)}});return new Response(r,e)}async function fo(e={}){let t=e.env??Y.env,n=lr(t,e.host??`node`),r=e.runner??n.runner;if((e.host===`vercel`||t.VERCEL)&&(r===`local`||r===`local-docker`))throw new y(`invalid-option`,`The ${r} runner cannot run on Vercel.`,{hint:`Leave RUNNER unset to use vercel-sandbox.`});if(n.store===`memory`&&r!==`local`&&r!==`local-docker`)throw new y(`invalid-option`,`The ${r} runner needs a database.`,{hint:`Set DATABASE_URL, or use RUNNER=local for a memory server.`});if(!n.publicUrl)throw new y(`invalid-option`,`PUBLIC_URL is required to start a Coder server.`,{hint:`Set PUBLIC_URL to the address platforms and browsers use.`});let i=[];if(n.store===`memory`&&!e.local&&i.push(`test server, not for production: everything is in memory, nothing survives a restart, no sign-in; set DATABASE_URL for a real deployment`),!t.SERVER_ENCRYPTION_KEY&&!e.local&&i.push(`secrets are stored unencrypted; set SERVER_ENCRYPTION_KEY (openssl rand -base64 32)`),n.store===`postgres`&&!n.encryptionKey)throw new y(`invalid-option`,`SERVER_ENCRYPTION_KEY is required for a Postgres server.`,{hint:`Set SERVER_ENCRYPTION_KEY (openssl rand -base64 32); sign-in keys derive from it.`});let a=te(n.integrations),o=n.store===`memory`&&!n.adminToken?Nr(18).toString(`base64url`):void 0;n.store===`postgres`&&n.adminToken&&i.push(`ADMIN_TOKEN is ignored with Postgres; owners and admins sign in with coder auth login`);let s={...n,...n.store===`postgres`?{adminToken:void 0}:{},...o?{adminToken:o}:{},...e.runner?{runner:e.runner}:{}},c=await sr(s,{local:!!e.local});try{s.store===`memory`&&await xr(c.store(c.defaultOrganizationId),Date.now());let n=c.connection&&s.auth?await(await import(`./auth-BSMPjhnz.js`)).createAuth(c.connection.db,s):void 0,r=e.cwd??Y.cwd(),l=c.store(c.defaultOrganizationId),u=mr({kind:s.runner,workDir:s.workDir,config:s.runnerConfig,local:!(e.host===`vercel`||t.VERCEL),sandbox:{region:pr(s.databaseUrl),snapshots:_r(l)}});if(!u[s.runner])throw await c.close(),new y(`invalid-option`,`Runner ${s.runner} is not configured.`,{hint:`Set RUNNER_CONFIG to JSON containing url and secret.`});let d=new Vt,f=new $e,p=new Ca,m=new Map,h=new Map,g=new ma,_=new ga,v=t=>{let i=m.get(t);if(i)return i;let o=c.store(t),l=new Map,y={registry:p},b={limits:f,...c.connection?{databaseHealth:async()=>{await c.connection.db.execute(Or`select 1`)},statementTimeout:c.connection.statementTimeout}:{},config:s,settings:y,organizationId:t,integrations:a,runners:u,store:o,queue:c.queue,requestScopes:h,taskWatcher:g,logWatcher:_,dashboardHosts:d,dbProfile:c.connection?.profile,chatState:c.chatState,fileReads:l,repositoryLists:new Map,loadAgent:gt(a,{...e.local?{cwd:r}:{},config:s,store:o,fileReads:l,settings:y}),...n?{auth:n}:{},scope:v,webhookTarget:(e,t)=>c.webhookTarget(e,t),appRecord:e=>c.appRecord(e),apps:e=>c.apps(e),installationOrganization:e=>c.installationOrganization(e),installations:e=>c.installations(e),serverOrganizationId:c.defaultOrganizationId,taskOrganization:(e,t)=>c.taskOrganization(e,t),...e.local?{local:e.local}:{}};return m.set(t,b),b};globalThis.__coder={handle:e=>so(e,v(c.defaultOrganizationId),{inProcess:!0})};let b=v(c.defaultOrganizationId);b.local&&un(b).catch(()=>{});let x;return e.local&&(await Re(b),x=setImmediate(()=>{cr(b).catch(()=>void 0)})),{config:s,context:v,defaultContext:b,warnings:i,...o?{mintedToken:o}:{},sweep:c.sweep,close:async()=>{p.close(),g.close(),_.close(),x&&clearImmediate(x),await b.local?.usageSync?.catch(()=>void 0),await qe(b),await c.close()}}}catch(e){throw await c.close(),e}}var po=e({serve:()=>bo,serverHandler:()=>go});const mo=36e5;function ho(e){try{let t=new URL(e);return B.has(t.hostname)?Number(t.port||(t.protocol===`https:`?443:80)):void 0}catch{return}}function go(e=Y.env,t=e.VERCEL?`vercel`:`node`){ur();let n,r,i=()=>n??=fo({env:e,host:t}).catch(e=>{throw n=void 0,e}),a=e=>Promise.all([e.sweep(),Oe(e.defaultContext,!1,!0),Qt(e.defaultContext)]).then(()=>void 0);return Object.assign(async(t,n)=>{let o=await i(),s=n?e=>n(e):e=>void e.catch(()=>{}),c=Date.now();(r===void 0||c-r>=mo)&&(r=c,s(o.defaultContext.store.create(`delivery`,`maintenance:${o.config.publicUrl}`,{at:c},{ttlMs:mo}).then(e=>e?a(o):void 0).catch(e=>console.error(`coder server: maintenance failed`,e))));let l=e=>({...o.context(e),waitUntil:s,scope:l});return so(t,l(o.defaultContext.organizationId),{clientIp:e.VERCEL?t.headers.get(`x-forwarded-for`)?.split(`,`,1)[0]?.trim():void 0})},{scheduled:async()=>{let e=await i();await a(e)},close:async()=>{let e=n;n=void 0,r=void 0,await(await e)?.close()}})}function _o(e){let t=jr(`lsof`,[`-nP`,`-iTCP:${e}`,`-sTCP:LISTEN`,`-t`],{encoding:`utf8`}),n=Number(t.stdout?.split(`
|
|
12
|
-
`)[0]);if(n)return{pid:n,command:jr(`ps`,[`-o`,`command=`,`-p`,String(n)],{encoding:`utf8`}).stdout?.trim().slice(0,120)||`another process`}}function vo(e){let t=_o(e),n=t&&/\bcoder (dash|server serve)\b/.test(t.command);return new y(`server`,t?n?`Coder is already running on port ${e} (pid ${t.pid}): http://localhost:${e}`:`Port ${e} is in use by ${t.command} (pid ${t.pid}).`:`Port ${e} is in use.`,{hint:t?`Stop it with \`kill ${t.pid}\`, or use another port: --port ${e+1}`:`Use another port: --port ${e+1}`})}async function yo(e={}){ur();let t=e.env??Y.env;if(e.runner&&!gr.includes(e.runner))throw new y(`invalid-option`,`Invalid --runner value: use ${gr.join(`, `)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))throw new y(`invalid-option`,`Invalid port: use 1 through 65535.`);let n=t.PORT&&/^\d+$/.test(t.PORT)?Number(t.PORT):void 0,r=ho(t.PUBLIC_URL),i=e.port??n??r??8787;if(!Number.isInteger(i)||i<1||i>65535)throw new y(`invalid-option`,`Invalid PORT: use 1 through 65535.`);let a=t.PUBLIC_URL?t:{...t,PUBLIC_URL:`http://localhost:${i}`},o=!!(t.DATABASE_URL||t.POSTGRES_URL);if(o&&e.memory)throw new y(`invalid-option`,`A memory server cannot use DATABASE_URL.`,{hint:`Unset DATABASE_URL, or drop --memory.`});let s=(e.host??t.HOST??(o?void 0:`127.0.0.1`))?.replace(/^\[(.*)\]$/,`$1`),c=!o&&!e.memory;if(c&&!B.has(s))throw new y(`invalid-option`,`A local server listens on loopback only.`,{hint:`Reach it through a tunnel or a proxy on this machine; set DATABASE_URL for a deployment, or use --memory for a test server.`});if(e.memory&&t.VERCEL)throw new y(`invalid-option`,`A memory server cannot run on Vercel.`,{hint:`Set DATABASE_URL for a real deployment.`});let l,u,d=c?new Promise((e,t)=>{u=t,l=()=>{Gr().then(e,t)}}):void 0,f=d?.then(()=>void 0).catch(()=>void 0),p=c?{cwd:e.cwd??Y.cwd(),port:i,cacheMaintenance:f}:void 0,m=await fo({cwd:e.cwd,env:a,runner:e.runner,...p?{local:p}:{}}),h=m.defaultContext,g=()=>{m.sweep().catch(e=>console.error(`coder server: sweep failed`,e))};g();let _=setInterval(g,mo);_.unref();let v=setInterval(()=>{Oe(h,!1,!0).catch(e=>console.error(`coder server: scheduled kick failed`,e)),Qt(h).catch(e=>console.error(`coder server: inbox flush failed`,e))},6e4);v.unref();let b=Lr.createServer(le((e,t)=>so(e,h,{clientIp:t}),{admit:e=>o||xt(e.socket.remoteAddress,e.url??`/`)})),x=m.config.publicUrl;r!==void 0&&r!==i&&m.warnings.push(`PUBLIC_URL points at port ${r} but the server listens on ${i}`),await new Promise((e,t)=>{b.once(`error`,t),b.listen(i,s,e)}).catch(async e=>{throw u?.(e),clearInterval(v),clearInterval(_),await m.close(),e.code===`EADDRINUSE`?vo(i):e}),l?.();let S=!1,C=async()=>{S||(S=!0,clearInterval(v),clearInterval(_),h.taskWatcher?.close(),h.logWatcher?.close(),await new Promise((e,t)=>b.close(n=>n?t(n):e())),await f,await m.close())},w=h.auth?`Wular Auth (${h.auth.issuer})`:void 0,ee=`http://localhost:${i}`,T=Pe(h),E=T===`local`?ee:x,te=m.config.store===`memory`?m.mintedToken??t.ADMIN_TOKEN:void 0;return{address:ee,publicUrl:x,warnings:m.warnings,close:C,runner:m.config.runner,store:m.config.store,mode:T,...d?{cacheMigration:d}:{},maxTasks:m.config.maxTasks??m.config.limits?.concurrentTasks??10,...w?{signIn:w}:{},...m.mintedToken?{mintedToken:m.mintedToken}:{},...m.config.store===`postgres`&&t.DATABASE_URL?{database:kr(t.DATABASE_URL)}:{},...B.has(new URL(E).hostname)?{dashboard:`${E}/dash${te?`#token=${encodeURIComponent(te)}`:``}`}:{}}}async function bo(e={}){try{return await yo(e)}catch(e){if(e instanceof y)throw e;let t=e instanceof Error&&e.cause instanceof Error?`: ${e.cause.message}`:``;throw new y(`server`,`${e instanceof Error?e.message:String(e)}${t}`)}}export{Oa as a,Ta as i,po as n,Ea as o,go as r,bo as t};
|
package/dist/serve-DE1cKoGa.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{At as t}from"./prompts-Bj4Fbd_n.js";import{U as n}from"./dispatch-CFZ9Crvg.js";import{a as r,t as i}from"./remote-D3JZ4MMQ.js";import{p as a}from"./slack-DhPhLuWb.js";import{h as o,o as s,s as c,t as l}from"./http-CDZKt5ln.js";import u from"node:path";import d from"node:fs";import{createHmac as f,randomBytes as p}from"node:crypto";import m from"node:os";import h from"node:http";var g=e({runnerController:()=>w,serveRunner:()=>x});const _=()=>t(`runners.json`);function v(){try{return JSON.parse(d.readFileSync(_(),`utf8`))}catch{return{}}}function y(e){d.mkdirSync(u.dirname(_()),{recursive:!0}),d.writeFileSync(_(),JSON.stringify(e,null,2),{mode:384})}const b=e=>[`cloudflared tunnel --url http://localhost:${e}`,`ngrok http ${e}`,`tailscale funnel ${e}`,`VS Code: forward port ${e} in the Ports view and set its visibility to Public`];async function x(e={}){let a=e.port??4100,u=e.token?e.runnerUrl??process.env.CODER_RUNNER_URL:e.url;if(!u)throw new n(`invalid-option`,e.token?`Expose this runner and set CODER_RUNNER_URL or --runner-url to its public HTTPS address.`:`Expose this runner with a tunnel, then pass its public URL with --url.`,{hint:b(a)});let d=e.token?r({...e,server:e.url??e.server,yes:!0}):r(e),f=v(),g=f[d]??{secret:p(32).toString(`base64url`)},_=new o(t(`runner`)),x=w({secret:g.secret,server:d,runner:_}),S=h.createServer(c(async e=>{let t=await s(e,l(new URL(e.url).pathname));return t instanceof Response?t:x(t)}));await new Promise((e,t)=>{S.once(`error`,t),S.listen(a,`127.0.0.1`,e)});let C=()=>new Promise(e=>S.close(()=>e())),T=e.name??m.hostname(),E=async(e,t)=>{let r=await fetch(`${d}/runners/register`,{method:`POST`,redirect:`manual`,signal:AbortSignal.timeout(5e3),headers:{"content-type":`application/json`},body:JSON.stringify({...e?{token:e}:{id:g.id,organizationId:g.organizationId},name:T,url:u,secret:g.secret,...t?{offline:t}:{}})});if(!r.ok)throw new n(`server`,`Runner registration failed`,{status:r.status});return r.json()},D;try{if(e.token){let t=await E(e.token);D=t,g.organizationId=t.organizationId}else{let t=g.id&&g.organizationId?await E().catch(e=>{if(!(e instanceof n&&e.status===401))throw e}):void 0;if(t)D=t;else{let t=i(e),n=await t.me();D=await t.runners.add({kind:`http`,name:T,scope:e.workspace||!n.user?`workspace`:`personal`,config:{url:u,secret:g.secret}}),g.organizationId=n.organization?.id,g.id=D.id,D=await E()}}g.id=D.id,y({...f,[d]:g})}catch(e){throw await C(),e}let O=Promise.resolve(),k=setInterval(()=>{O=O.then(()=>E().then(()=>{})).catch(()=>{})},6e4);return{...D,port:a,server:d,close:async()=>{clearInterval(k),await O,await E(void 0,!0).catch(()=>{}),await C()}}}const S=3e5,C=(e,t=200)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`}});function w(e){let t=e.now??Date.now,n=new Map,r=(r,i)=>{let o=r.headers.get(`x-coder-timestamp`)??``,s=r.headers.get(`x-coder-nonce`)??``,c=r.headers.get(`x-coder-signature`)??``,l=Number(o);if(!s||!Number.isFinite(l)||Math.abs(t()-l)>S)return!1;let u=f(`sha256`,e.secret).update(`${i}.${o}.${s}`).digest(`base64url`);if(!a(c,u))return!1;for(let[e,r]of n)r<t()&&n.delete(e);return!n.has(s)&&(n.set(s,l+S),!0)};return async t=>{let n=t.method===`GET`?``:await t.text();if(!r(t,n))return C({error:`Unauthorized`},401);let[,i,a]=new URL(t.url).pathname.split(`/`).map(decodeURIComponent);try{if(t.method===`POST`&&i===`start`&&!a){let t=JSON.parse(n);if(typeof t.task!=`string`||!t.env)return C({error:`Invalid start`},400);let r=t.env.CODER_TASK_TOKEN;if(typeof r!=`string`)return C({error:`Invalid start`},400);let i={CODER_SERVER:e.server,CODER_TASK_TOKEN:r,CODER_INBOX_MODE:e.runner.push?`push`:`poll`,...t.env.CODER_LOGIN===`claude`||t.env.CODER_LOGIN===`codex`?{CODER_LOGIN:t.env.CODER_LOGIN}:{}};return C({handle:await e.runner.start({id:t.task},i)})}if(t.method===`GET`&&i===`health`&&!a)return C({ok:!0});if(!a)return C({error:`Not found`},404);if(t.method===`POST`&&i===`messages`&&e.runner.push){let{entries:t}=JSON.parse(n);return!Array.isArray(t)||!t.length?C({error:`Invalid messages`},400):C(await e.runner.push(a,t))}return t.method===`GET`&&i===`status`?C(await e.runner.status(a)):t.method===`POST`&&i===`stop`?(await e.runner.stop(a),new Response(null,{status:204})):C({error:`Not found`},404)}catch(e){return C({error:e instanceof Error?e.message:String(e)},400)}}}export{g as n,x as t};
|
package/dist/serve-lF97RlpX.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Zt as e}from"./core-DwsAMCnL.js";import{At as t,mr as n,wr as r,yr as i}from"./prompts-Bj4Fbd_n.js";import{U as a}from"./dispatch-CFZ9Crvg.js";import{i as o}from"./prompt-PEgcMJO7.js";import{i as s}from"./cli-BBlH53hA.js";import{p as c,s as l}from"./output-BKeyLbvt.js";import{c as u,n as d,t as f}from"./args-CURX44CA.js";import p from"node:process";function m(e){let n=c,r=[...e.publicUrl===e.address?[]:[[`public`,e.publicUrl]],[`store`,e.database??(e.mode===`local`?t():e.store)],[`runner`,e.runner],...e.signIn?[[`sign-in`,e.signIn]]:[],...e.mintedToken?[[`token`,e.mintedToken]]:[]],i=Math.max(...r.map(([e])=>e.length))+2;p.stdout.write(`${n.bold({local:`Coder local server`,memory:`Coder test server`,cloud:`Coder server`}[e.mode])} ${n.dim(`listening on ${e.address}`)}\n`);for(let[e,t]of r)p.stdout.write(` ${n.light(e.padEnd(i))}${t}\n`);e.warnings.length&&p.stdout.write(`
|
|
2
|
-
`);for(let t of e.warnings)p.stdout.write(` ${n.yellow(`!`)} ${t}\n`);if(e.cacheMigration?.then(e=>{(e.tasks||e.flows||e.files)&&p.stdout.write(`\n moved ${e.tasks.toLocaleString(`en-US`)} archived tasks to ${e.cache}\n`)}).catch(e=>p.stderr.write(`\n Cache migration failed: ${e instanceof Error?e.message:String(e)}\n`)),e.mode===`memory`&&p.stdout.write(`\n${l([`the CLI reaches this server with its token in ADMIN_TOKEN: coder task list --server ${e.publicUrl}`],n)}\n`),e.dashboard){let t=p.stdout.isTTY&&o(e.dashboard);p.stdout.write(t?`\nOpening the dashboard in your browser. If it doesn't open, go to:\n ${e.dashboard}\n`:`\n ${n.light(`dashboard`)} ${e.dashboard}\n`)}}const h=s({name:`server serve`,help:{usage:`coder server serve [--port <n>] [--host <address>] [--memory] [--runner <name>] [--json] [--cwd <dir>]`,summary:`Run the Coder server on Bun: the address platforms deliver events to, the dashboard, and the worker that runs tasks. With DATABASE_URL it is a full server with sign-in and workspaces. Without one it is the dashboard for this machine's CLI: its config, agents, tasks and engine logins, on loopback only. --memory makes a throwaway test server that keeps everything in memory. Configured through the environment; every variable is in coder docs self-host.`,flags:[[`--port <n>`,`listen port (default: PORT, else the port in a localhost PUBLIC_URL, else 8787)`],[`--host <address>`,`listen address (default: HOST, else 127.0.0.1 without a database, else every interface)`],[`--memory`,`a throwaway test server: everything in memory, no sign-in, admin token only`],[`--runner <name>`,`local, local-docker, vercel-sandbox, github-actions, or http`]],env:[[`PUBLIC_URL`,`the address platforms and browsers reach the server at (default http://localhost:<port>)`],[`PORT`,`listen port, as hosts set it (default 8787)`],[`HOST`,`listen address, as --host`],[`DATABASE_URL`,`Postgres, set up with drizzle-kit push; turns on sign-in and workspaces`],[`AUTH_WULAR_URL`,`the Wular Auth issuer people sign in with (default https://auth.wular.ai)`],[`SERVER_ENCRYPTION_KEY`,`encrypts stored secrets and derives the sign-in keys; required with DATABASE_URL (openssl rand -base64 32)`],[`RUNNER`,`where tasks run: local (default), local-docker, vercel-sandbox, github-actions, http`],[`MAX_TASKS, TASK_TIMEOUT, TASK_STALL, TASK_ATTEMPTS`,`runner capacity and lifecycle limits`],[`ADMIN_TOKEN`,`local and memory servers: the dashboard and CLI key; minted and shown when unset`],[`CODER_CACHE_HOME`,`archived tasks, flows and usage (default OS cache directory/wular-coder)`],[`WORK_DIR`,`where tasks check out repositories`],[`SERVER_NAME`,`what the dashboard calls this server (default Coder)`]],examples:[[`PUBLIC_URL=https://abc.ngrok.app coder server serve`,`receive GitHub and Slack events through a tunnel; the tunnel serves only their webhooks and callbacks`],[`PUBLIC_URL=https://agents.example.com DATABASE_URL=postgres://... coder server serve`,`on your own host, backed by Postgres`]]},options:{...f,port:r(n().check(i(),e())),host:u,runner:u,memory:d},async run({options:e,cwd:t}){let{rerunUnderBun:n}=await import(`./env-BgE9ipvN.js`).then(e=>e.t);if(await n(),e.memory&&!p.env.ADMIN_TOKEN&&!p.stdout.isTTY)throw new a(`invalid-option`,`Memory server needs an admin token: set ADMIN_TOKEN, or run in a terminal to get a printed one.`);let{serve:r}=await import(`./serve-BApfeXk8.js`).then(e=>e.n),i=await r({cwd:t,port:e.port,...e.host?{host:e.host}:{},...e.runner?{runner:e.runner}:{},...e.memory?{memory:!0}:{}}),o=()=>void i.close().finally(()=>p.exit(0));return p.once(`SIGINT`,o),p.once(`SIGTERM`,o),i},json:e=>({ok:!0,address:e.address,publicUrl:e.publicUrl,runner:e.runner,store:e.store,mode:e.mode,maxTasks:e.maxTasks,...e.signIn?{signIn:e.signIn}:{},...e.mintedToken?{adminToken:e.mintedToken}:{},warnings:e.warnings}),print:m});export{h as commandServerServe};
|
package/dist/serve-mXTjboT1.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Zt as e}from"./core-DwsAMCnL.js";import{mr as t,wr as n,yr as r}from"./prompts-Bj4Fbd_n.js";import{i,t as a}from"./cli-BBlH53hA.js";import{p as o,s}from"./output-BKeyLbvt.js";import{c,n as l,o as u,t as d}from"./args-CURX44CA.js";import f from"node:process";const p=i({name:`runner serve`,help:{usage:`coder runner serve --url <public url> [--token <token>] [--runner-url <url>] [--port <n>] [--name <name>] [--workspace] [--server [url]] [--json]`,summary:`Run tasks on this machine with its own claude and codex logins. Expose the port with any tunnel (cloudflared, ngrok, Tailscale Funnel or a public VS Code port) and pass the tunnel's URL; each start registers the current URL, so a changing tunnel URL is fine. Choose a default with coder runner default. Tasks use their named runner, the agent setting, your default, the workspace default, then the server default.`,flags:[[`--url <public url>`,`the HTTPS address the server reaches this runner at`],[`--token <token>`,`one-use pairing token, --url is the Coder server`],[`--runner-url <url>`,`public tunnel address when pairing, or CODER_RUNNER_URL`],[`--port <n>`,`local port the tunnel forwards to (default 4100)`],[`--name <name>`,`shown in the dashboard (default: this machine's hostname)`],[`--workspace`,`run every member's tasks, not only yours (owners and admins)`],a],examples:[[`cloudflared tunnel --url http://localhost:4100`,`expose the port in one terminal`],[`coder runner serve --url https://abc.trycloudflare.com`,`then serve through it`]]},options:{...d,port:n(t().check(r(),e())),url:c,name:c,token:c,"runner-url":c,workspace:l,server:u,yes:l},async run({options:e}){let{serveRunner:t}=await import(`./serve-DE1cKoGa.js`).then(e=>e.n),n=await t({...e,runnerUrl:e[`runner-url`]}),r=()=>void n.close().finally(()=>f.exit(0));return f.once(`SIGINT`,r),f.once(`SIGTERM`,r),n},json:({server:e,close:t,...n})=>({ok:!0,...n}),print:e=>f.stdout.write(`Runner ${o.bold(e.name)} serves ${e.server} at ${o.cyan(e.config.url??``)} (${e.scope}), listening on localhost:${e.port}.\n${s([`Tasks run here with this machine's own claude and codex logins`,`Stop with Ctrl-C; the server marks the runner offline`],o,o.cyan)}\n`)});export{p as commandRunnerServe};
|
package/dist/server-CUsxAflx.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./cli-BBlH53hA.js";const t=e(`server`,{serve:async()=>(await import(`./serve-lF97RlpX.js`)).commandServerServe,"rotate-key":async()=>(await import(`./rotate-key-CS1G6ReH.js`)).commandServerRotateKey,app:async()=>(await import(`./app-CaxTL1H3.js`)).commandServerApp,workflow:async()=>(await import(`./workflow-C21qQ4rT.js`)).commandServerWorkflow},{menu:[{usage:`serve [--port <n>]`,blurb:`run the server`},{usage:`rotate-key`,blurb:`re-seal secrets with SERVER_ENCRYPTION_KEY`},{usage:`app create <integration>`,blurb:`create the built-in agent's public app`},{usage:`workflow`,blurb:`print the GitHub Actions workflow for RUNNER=github-actions`}],description:[`Self-host Coder: the server your agents and platform apps talk to, with a dashboard and sign-in. We run one as the hosted service; you can run your own.`],exampleCommand:`server serve`},{nested:[`app`]});export{t as commandServer};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{E as e}from"./dispatch-CFZ9Crvg.js";import{i as t}from"./cli-BBlH53hA.js";import{f as n,p as r,t as i}from"./output-BKeyLbvt.js";import{t as a}from"./args-CURX44CA.js";import o from"node:process";const s=t({name:`setup-host`,help:{usage:`coder setup-host [claude] [agents] [--json]`,summary:`Set up coder in your host: check engines and auth, seed the config, and
|
|
2
|
-
install the host plugin/skill for the named host(s). Claude Code gets its
|
|
3
|
-
marketplace plugin; "agents" installs a skill into ~/.agents/skills for
|
|
4
|
-
every host that reads the Agent Skills standard dir (Codex, Pi, OpenCode,
|
|
5
|
-
...). With no host, checks and seeds.`,examples:[[`coder setup-host claude`,`install the Claude Code plugin`],[`coder setup-host agents`,`install the skill into ~/.agents/skills (Codex, Pi, OpenCode, ...)`]]},options:a,args:1/0,run:({options:t,args:n,cwd:r})=>e(r,{...t,hosts:n},()=>t.json||c()),print:l});function c(){o.stdout.write(`${r.bold(`Coder host setup`)}\n\n`)}function l(e){let t=r.bold,a=r.dim,{codex:s,claude:c,codexUpdate:l,config:u,configFile:d,claudePlugin:f,agentsSkill:p,ready:m}=e,h=[],g=s.available?s.loggedIn?n(`codex ${a(`${s.detail}; ${s.auth}`)}`):i(`codex not logged in ${a(`(${s.auth})`)} - run: codex login`):i(`codex CLI not installed - run: npm install -g @openai/codex`),_=c.available?c.loggedIn?n(`claude ${a(`${c.detail}; ${c.auth}`)}`):i(`claude not logged in - run: claude auth login`):i(`claude CLI not installed - run: npm install -g @anthropic-ai/claude-code`);h.push(t(`Available Engines`),g,_,` ${a(`custom models (local/provider endpoints): coder model --help`)}`),l?.updated?h.push(n(`codex ${a(`updated ${l.from} -> ${s.detail} (GPT-6 support)`)}`)):l&&h.push(i(`codex ${l.note}`)),h.push(``);let v=e=>{let t=u.engines?.[e]??{};return[t.model,t.effort,t.permissions].filter(Boolean).join(`/`)};h.push(t(`Config`),` chain: ${(u.chain??[]).join(` -> `)} codex: ${v(`codex`)} claude: ${v(`claude`)}`,` ${a(d)} ${a(`(coder config set <key> <value> to change)`)}`,``);let y=[[`claude plugin`,f??null],[`agents skill `,p??null]];for(let[e,t]of y)t&&h.push(t.installed?n(`${e} ${a(t.note)}`):i(`${e} ${t.note}`),``);h.push(m?n(`ready - try: coder run --wait "explain this repo's layout"`):i(`not ready - install an engine CLI to run tasks: codex (npm install -g @openai/codex, then codex login) or claude (npm install -g @anthropic-ai/claude-code, then claude auth login)`)),o.stdout.write(`${h.join(`
|
|
6
|
-
`)}\n`)}export{s as commandSetupHost};
|
package/dist/show-Dn7zTz-9.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import{g as t,p as n}from"./output-BKeyLbvt.js";import{n as r}from"./args-CURX44CA.js";import i from"node:process";function a(e){let r=n,a=[...Object.entries(e.events).map(([e,t])=>({kind:`event`,name:e,does:t})),...Object.entries(e.tools).map(([e])=>({kind:`tools`,name:e===`read`?`Read-only`:`Read-write`,does:e===`read`?`Platform tools marked read-only`:`All platform tools`}))];i.stdout.write(t([{header:`kind`,value:e=>e.kind,paint:e=>r.light(e)},{header:`name`,value:e=>e.name},{header:`does`,value:e=>e.does}],a,r))}const o=e({name:`agent integrations show`,globalFlags:{cwd:!1},help:{usage:`coder agent integrations show <id> [--json]`,summary:`Describe one integration: each event with what triggers it, and the tools each preset (read, write) allows.`,examples:[[`coder agent integrations show github`,`the GitHub integration in full`]]},options:{json:r},args:1,run:async({args:[e]})=>{let{agents:t}=await import(`./agent-6GooVMsq.js`).then(e=>e.t);return t.integrations.show(e)},print:a});export{o as commandIntegrationsShow};
|
package/dist/show-uyUpeqa9.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-BBlH53hA.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{s as i,t as a}from"./args-CURX44CA.js";import{isLocal as o}from"./list-gFnOS9Hk.js";import s from"node:path";import c from"node:process";function l(e,t){return o(e)?{id:e.id,name:e.name,source:e.builtin?`builtin`:`repo`,...e.dir&&!e.builtin?{dir:s.relative(t,e.dir)}:{},definition:e.definition,...e.usage?{usage:e.usage}:{}}:{id:e.id,name:e.name,source:e.source,definition:e.definition,...e.settings?{usage:e.settings}:{}}}function u(e){let t=r,{definition:i,usage:a}=e,o=`dir`in e?e.dir:void 0,s=[[`name`,e.name],[`source`,o?`${e.source} (${o})`:e.source],[`description`,i.description],[`permissions`,a?.permissions??i.permissions],[`access`,a?.access===`read`||i.access===`read`?`Read-only`:`Read-write`],[`engine`,a?.engine??i.engine],[`model`,a?.model??i.model],[`effort`,a?.effort??i.effort]],l=Math.max(...s.map(([e])=>e.length))+2;for(let[e,n]of s)n&&c.stdout.write(`${t.dim(e.padEnd(l))}${n}\n`);let u=Object.entries(i.integrations).map(([e,t])=>{let n=a?.integrations?.[e],r=Array.isArray(t.events)?t.events:Object.keys(t.events??{});return{id:e,events:(n?.allowedEvents?r.filter(e=>n.allowedEvents.includes(e)):r).join(`, `)||`-`}});c.stdout.write(`\n${n([{header:`integration`,value:e=>e.id,paint:e=>t.cyan(e)},{header:`events`,value:e=>e.events}],u,{style:t,border:!0})}`)}const d=e({name:`agent show`,help:{usage:`coder agent show <id> [--server [url]] [--json] [--cwd <dir>]`,summary:`Describe one agent as it will run here, or its active version on a server: its settings, access and per-integration events.`,flags:[t],examples:[[`coder agent show coder`,`what the built-in agent listens to and may do`]]},options:{...a,...i},args:1,run:async({options:e,args:[t],cwd:n})=>{let{agents:r}=await import(`./agent-6GooVMsq.js`).then(e=>e.t);return r.show(t,{...e,cwd:n,organization:e.workspace})},json:(e,{cwd:t})=>l(e,t),print:(e,{cwd:t})=>u(l(e,t))});export{d as commandAgentShow};
|
package/dist/status-D_1VGn9F.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import{g as t,p as n,s as r}from"./output-BKeyLbvt.js";import{n as i}from"./args-CURX44CA.js";import a from"node:process";const o=e({name:`auth status`,globalFlags:{cwd:!1},help:{usage:`coder auth status [--json]`,summary:`List saved sessions with their server, user, and workspace.`,env:[[`CODER_SERVER`,`the server to use instead of https://coder.wular.ai`]]},options:{json:i},run:async()=>{let{sessions:e}=await import(`./remote-D3JZ4MMQ.js`).then(e=>e.s);return e.status()},print:e=>{let i=n,o=Object.entries(e);if(!o.length)return void a.stdout.write(`${i.dim(`Not signed in`)}\n\n${r([`Sign in: coder auth login`],i)}\n`);a.stdout.write(`${t([{header:`server`,value:([e])=>e,paint:e=>i.cyan(e)},{header:`user`,value:([,e])=>e.user.email},{header:`workspace`,value:([,e])=>e.organization?`${e.organization.name} (${e.organization.slug})`:`-`}],o,i)}\n`)}});export{o as commandStatus};
|
package/dist/steer-CMp-a7v2.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{U as e}from"./dispatch-CFZ9Crvg.js";import{i as t,r as n}from"./cli-BBlH53hA.js";import{p as r,r as i,s as a}from"./output-BKeyLbvt.js";import{c as o,n as s,s as c,t as l}from"./args-CURX44CA.js";import{i as u,r as d}from"./result-D0dpv2O_.js";import f from"node:process";function p(t,n,r){let[i,...a]=t,o=a.join(` `).trim();if(!i||!o)throw new e(`invalid-option`,n,{hint:r});return{id:i,text:o}}function m(e,t=!1){let{taskId:n,steered:o}=e;if(o===`queued`){f.stdout.write(`${r.dim(`[coder]`)} follow-up queued for task ${r.cyan(n)}; it runs when the current turn finishes.\n`),t&&f.stdout.write(`\n${r.dim(`[coder] --wait is not available for a queued follow-up.`)}\n\n${a([`Wait in its own background shell, one per task: coder task result ${n} --wait`],r)}\n`);return}if(!t){f.stdout.write(o===`live`?`${r.dim(`[coder]`)} steered follow-up into running task ${r.cyan(n)}.\n`:`${r.dim(`[coder]`)} resumed task ${r.cyan(n)} with the follow-up (same thread, same id).\n`),f.stdout.write(`\n${a([`Wait in its own background shell, one per task: coder task result ${n} --wait`],r)}\n`);return}f.stdout.write(`\n${e.finalMessage||`(no final message)`}\n\n`),f.stderr.write(`${r.dim(`[coder] task=${n} status=${e.status??`unknown`}`)}\n\n${d(n,i)}\n`)}const h=t({name:`task steer`,help:{usage:`coder task steer <task-id> "<follow-up instructions>" [--wait] [--server [url]]`,summary:`Continue a task's thread with new instructions. They are injected into a live Codex or
|
|
2
|
-
Claude turn at its next tool boundary and queued across a startup or completion race.
|
|
3
|
-
A stopped, finished, or archived task resumes on the same task id. It reuses the
|
|
4
|
-
task's engine, model, and permissions unless overridden.`,flags:[[`--wait`,`run in the foreground and block until the answer is ready`],[`--model <alias|slug>`,`override the task's model for this follow-up`],[`--effort <low|medium|high>`,`override the task's reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto`],n],examples:[[`coder task steer task-abc "now add tests"`,`continue that task with a follow-up`]]},options:{...l,model:o,effort:o,permissions:o,wait:s,...c},args:1/0,async run({options:e,args:t}){let{tasks:n}=await import(`./task-DJ6nruuA.js`).then(e=>e.t),{id:r,text:i}=p(t,`Missing task id or follow-up text.`,[`Usage: coder task steer <task-id> "<follow-up>" [--wait]`,`Help: coder task steer --help`]);return n.steer(r,i,{...e,organization:e.workspace})},json(e,{options:t}){let n=e;return t.server!==void 0||!t.wait||n.steered===`queued`?e:{taskId:n.taskId,status:n.status??null,finalMessage:n.finalMessage??null}},print(e,{options:t,args:[n]}){if(t.server===void 0)return m(e,t.wait);if(t.wait)return u(e,r);f.stdout.write(`Steered server task ${r.cyan(n)}.\n`)},exit(e,{options:t}){let n=e;if(t.wait&&(t.server!==void 0||n.steered!==`queued`))return n.status===`completed`?0:1}});export{h as commandSteer,p as idAndText};
|
package/dist/stop-C7YjN2sB.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-BBlH53hA.js";import{p as n}from"./output-BKeyLbvt.js";import{s as r,t as i}from"./args-CURX44CA.js";import a from"node:process";const o=e({name:`task stop`,help:{usage:`coder task stop <task-id> [--server [url]]`,summary:`Interrupt a running task and mark it cancelled.`,flags:[t]},options:{...i,...r},args:1,run:async({options:e,args:[t]})=>{let{tasks:n}=await import(`./task-DJ6nruuA.js`).then(e=>e.t);return n.stop(t,{...e,organization:e.workspace})},print:(e,{options:t,args:[r]})=>a.stdout.write(t.server===void 0?`Stopped task ${n.cyan(e.taskId)} ${n.dim(`(${e.interrupt})`)}\n`:`Stopped server task ${n.cyan(r)}.\n`)});export{o as commandStop};
|
package/dist/stop-D8G7AtdY.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import{m as t,p as n,s as r}from"./output-BKeyLbvt.js";import{n as i,t as a}from"./args-CURX44CA.js";import o from"node:process";const s=e({name:`flow stop`,help:{usage:`coder flow stop [run-id] [--keep-tasks] [--json]`,summary:`Stop a running flow: signal the orchestrator so it stops dispatching, stamp the
|
|
2
|
-
run stopped, and stop its still-running tasks. Defaults to the most recent run;
|
|
3
|
-
the journal stays ready for \`coder flow resume\`.`,flags:[[`--keep-tasks`,`leave the run's still-running tasks running`]]},options:{...a,"keep-tasks":i},args:1,run:async({options:e,args:[t]})=>{let{stopRun:n}=await import(`./executor-3QMa-XRY.js`).then(e=>e.t);return n(t,{keepTasks:e[`keep-tasks`]})},print:c});function c(e){let i=n;e.status===`failed`?o.stdout.write(`${i.dim(`[flow]`)} Run ${i.cyan(e.runId)} orchestrator died. Marked ${t(`failed`)}.\n`):o.stdout.write(`${i.dim(`[flow]`)} run ${i.cyan(e.runId)} ${t(e.status)}.\n`),e.stoppedTasks.length&&o.stdout.write(`${i.dim(`[flow]`)} stopped tasks: ${e.stoppedTasks.join(`, `)}\n`),e.keptTasks.length&&o.stdout.write(`${i.dim(`[flow]`)} left running: ${e.keptTasks.join(`, `)}\n`),o.stdout.write(`\n${r([`Resume: coder flow resume ${e.runId}`],i)}\n`)}export{s as commandStop};
|
package/dist/task-DJ6nruuA.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Bt as t,Et as n,Mt as r,Rt as i,St as a,Vt as o,W as s,Xn as c,Yt as l,hn as u,lr as d,nn as f,pn as p,qt as m,zt as h}from"./prompts-Bj4Fbd_n.js";import{U as g,d as _,f as v,i as y,l as b,m as ee,o as x,p as S,r as C,t as w,y as T}from"./dispatch-CFZ9Crvg.js";import{v as E}from"./prompt-PEgcMJO7.js";import{t as D}from"./remote-D3JZ4MMQ.js";import{c as O,i as k,l as A,n as j,r as M,s as N,t as P}from"./actions-Cwe3IDVs.js";import F from"node:path";import I from"node:process";var L=e({tasks:()=>$});function R(e){return{cwd:e.cwd?F.resolve(e.cwd):I.cwd(),...e.server===void 0?{}:{api:D(e)}}}function z(e,t){let n=r(e,t);if(n)return n;throw new g(`invalid-option`,t?`No task found for "${t}".`:`No tasks found for this workspace.`,{hint:t?[`List tasks: coder task list`,`Start one: coder run "<text>"`]:[`Start one: coder run "<text>"`]})}async function B(e,t){if(t)return e.tasks.get(t);let[n]=await e.tasks.list({limit:1});if(!n)throw new g(`server`,`No server tasks found.`);return n}function V(e){throw new g(`invalid-option`,`Missing task id.`,{hint:e})}async function H(e,t={}){if(t.outputSchema!==void 0&&(!t.outputSchema||typeof t.outputSchema!=`object`||Array.isArray(t.outputSchema)))throw new g(`invalid-option`,`outputSchema must be an object.`);let{cwd:n,api:r}=R(t);if(r){let n=await r.tasks.create({source:`cli`,prompt:e,...t.cwd?{cwd:t.cwd}:{},...t.outputSchema?{outputSchema:t.outputSchema}:{},...t.repo?{repo:t.repo}:{},...t.agent?{agent:t.agent}:{},...t.engine?{engine:t.engine}:{},...t.model?{model:t.model}:{},...t.effort?{effort:t.effort}:{},...t.permissions?{permissions:t.permissions}:{},...t.runner?{runner:t.runner}:{},...t.mcp?{mcp:t.mcp.split(`,`).map(e=>e.trim())}:{},...t.connections?{connections:t.connections}:{}});return t.wait?r.tasks.wait(n.task.id,{onLog:t.onLog}):n}let i=t.agent?await(await import(`./exec-Cprez703.js`).then(e=>e.i)).agentTaskOptions(n,t.agent,t.mcp,void 0,t.connections):void 0,a=i?.connected??await c(t.connections);for(let e of a.warnings)t.onNote?.(e);let o=s(n),l=i??b(t.mcp,o.mcp,{},a.mcp),u={prompt:e,outputSchema:t.outputSchema,cwd:n,engine:t.engine??i?.engine,model:t.model??(t.engine?void 0:i?.model),effort:t.effort??(t.engine?void 0:i?.effort),permissions:t.permissions??i?.permissions,name:t.name,system:t.system,...i?{agentPrompt:{developer:i.developer}}:{},wait:t.wait,simulateApproval:t.simulateApproval,addDirs:t.addDirs,...t.agent?{agentId:t.agent}:{},mcp:l.mcp,mcpBindings:l.mcpBindings,mcpWarnings:l.warnings,connectionEnv:a.env,connections:a.ids,nativeMcp:l.nativeMcp,...t.onFallback?{onFallback:t.onFallback}:{},...t.onNote?{onNote:t.onNote}:{}},d=await C(u,{config:o});if(!t.wait){let e=d.taskId;return{taskId:e,status:d.task.status,startupCheck:d.startupCheck,commands:{result:`coder task result ${e} --wait`,steer:`coder task steer ${e} "<follow-up>"`,stop:`coder task stop ${e}`,list:`coder task list`}}}for(;;){let r=d.taskId;t.onWaiting?.(r);let i=await S(n,r),{task:a,result:s}=i,c=s?.error?.message??``;if(a.status===`failed`&&y(a.permissions??`auto`,c))throw new g(`read-only-unavailable`,c);let l=_(n,i,o);if(l!==void 0){if(l===null)throw new g(`chain-exhausted`,c,{payload:w(d.engine,c,a.permissions??`auto`,t.system,e)});t.onFallback?.({engine:d.engine,detail:c,next:l}),d=await C({...u,engine:l,model:void 0,effort:void 0,name:void 0,simulateApproval:void 0},{config:o});continue}return{taskId:r,status:a.status,finalMessage:s?.finalMessage,...c?{error:c}:{},tokens:s?.tokens??null,model:s?.model??a.model??null}}}async function U(e,t={}){let{cwd:n,api:r}=R(t);if(r){let n=await B(r,e);return t.wait?r.tasks.wait(n.task.id):n}let o=z(n,e);if(t.wait){p.includes(o.status)&&t.onWaiting?.(o.id);let e=await v(n,o);if(o=e.task,e.reason===`approval`)throw new g(`approval-pending`,`Approval needed for task ${o.id}: ${e.approval.summary}`,{taskId:o.id,approval:e.approval})}let{steps:s,result:c,turns:l}=x(n,o.id,{tail:t.tail}),u=T(f(n,o.id)).filter(e=>!e.response),d=p.includes(o.status),h=d?i(n,o):o.updatedAt,_=a(h),y=d?m(n,o.id,200):[];return{taskId:o.id,status:d&&u.length?`waiting-approval`:o.status,task:o,result:c,steps:s,turns:l,pendingApprovals:u.map(e=>({id:e.id,summary:e.summary,cwd:e.cwd??null})),...d?{idleMs:_,lastActivityAt:h??null,stalled:u.length===0&&_>6e5,lastLog:y.at(-1),liveTokens:y.reverse().find(e=>e.kind===`usage`&&String(e.at??``)>=(o.resumedAt??``))?.tokens??null}:{}}}async function W(e={}){let{cwd:t,api:n}=R(e);if(n){let t=await n.tasks.list({status:e.running?`running`:void 0,limit:e.limit===`all`?200:e.limit,archived:e.archived});return e.stopped?t.filter(e=>u.includes(e.status)):t}let{tasks:r,clipped:o}=M(t,{...e,dir:e.dir??e.cwd}),s=r.map(e=>{let n=p.includes(e.status)?T(f(t,e.id)).filter(e=>!e.response).length:0;return{taskId:e.id,status:n?`waiting-approval`:e.status,pendingApprovals:n,engine:e.engine??null,model:e.model??null,effort:e.effort??null,name:e.name??null,cwd:e.cwd??null,prompt:String(e.prompt??``).replace(/\s+/g,` `).trim().slice(0,80),updatedAt:e.updatedAt,archived:e.archived??!1,flowRunId:e.flowRunId??null,idleMs:p.includes(e.status)?a(i(t,e)):null}}),c=!s.length&&!e.archived?h(t,{migrate:!1}).length:0;return Object.assign(s,{clipped:o,archived:c})}async function*G(e,t){let n=-1;for(;;){let r=await e.tasks.stream(t,n);if(!r.ok||!r.body){let n=await e.tasks.get(t);if(u.includes(n.status))return;if(r.status===401)continue;throw new g(`server`,`The task stream answered ${r.status}.`)}let i=!1;for await(let e of E(r.body))if(e.event===`log`){let t=JSON.parse(e.data);n=t.seq,yield t}else e.event===`end`&&(i=!0);if(i)return}}async function K(e,t={}){let{cwd:n,api:r}=R(t);if(r){let t=await B(r,e);return{task:t,events:G(r,t.task.id),final:()=>r.tasks.get(t.task.id)}}let i=z(n,e);return{task:i,events:A(n,i.id,{tail:t.tail}),async final(){let e=l(n,o(n,i.id)??i),t=d(F.join(f(n,i.id),`result.json`));return{taskId:i.id,status:e.status,result:t,task:e}}}}async function q(e,t,n={}){let{cwd:r,api:i}=R(n);if(i){let r=await i.tasks.steer(e,t,{...n.model?{model:n.model}:{},...n.effort?{effort:n.effort}:{},...n.permissions?{permissions:n.permissions}:{}});return n.wait?i.tasks.wait(e):r}let a=await N(r,z(r,e),t,{model:n.model,effort:n.effort,permissions:n.permissions});if(!n.wait||a.steered===`queued`)return a;let s=o(r,a.taskId),c=s?(await S(r,s.id)).task:null,l=d(F.join(f(r,a.taskId),`result.json`));return{...a,status:c?.status??null,finalMessage:l?.finalMessage??null}}async function J(e,t,n={}){let{cwd:r,api:i}=R(n);if(i)return i.tasks.ask(e,t);let a=z(r,e);n.onAsking?.(a.id);let o=await P(r,a,t,{model:n.model,effort:n.effort});return{taskId:a.id,answer:o.finalMessage||null,...o.error?{error:o.error.message}:{},ok:o.status===0}}async function Y(e,t={}){let{cwd:n,api:r}=R(t);if(r)return(e?[await r.tasks.get(e)]:await r.tasks.list({limit:200})).flatMap(e=>e.approval?[{taskId:e.task.id,...e.approval}]:[]);if(!e)return j(n);let i=z(n,e);return T(f(n,i.id)).map(e=>({taskId:i.id,id:e.id,summary:e.summary,cwd:e.cwd??null,createdAt:e.createdAt,answered:e.response?.decision??null}))}async function X(e,t,n={}){let{cwd:r,api:i}=R(n),a=n.deny?`decline`:`accept`;if(i){if(!e||!t)throw new g(`invalid-option`,`Server approvals need a task id and approval id.`,{hint:`Usage: coder task approve <task-id> <approval-id> --server <url>`});return i.tasks.approve(e,t,a)}if(e&&!t&&e.startsWith(`apr-`)&&(t=e,e=j(r).find(e=>e.id===t)?.taskId,!e))throw new g(`invalid-option`,`No pending approval "${t}".`,{hint:`List them: coder task approvals`});if(!e||!t)throw new g(`invalid-option`,`Missing approval id.`,{hint:[`List them: coder task approvals`,`Usage: coder task approve [task-id] <approval-id> [--deny]`]});let o=z(r,e);return ee(f(r,o.id),t,a),{taskId:o.id,approvalId:t,decision:a}}async function Z(e,t={}){let{cwd:n,api:r}=R(t);if(r)return r.tasks.cancel(e??V([]));let i=z(n,e),{interrupt:a}=await O(n,i);return{taskId:i.id,status:`cancelled`,interrupt:a}}async function Q(e,r={}){let{cwd:i,api:a}=R(r);if(a){let t=r.allStopped?(await a.tasks.list({limit:200})).filter(e=>u.includes(e.status)).map(e=>e.task.id):[e??V([])];return await Promise.all(t.map(e=>a.tasks.archive(e))),{archived:t,count:t.length}}if(r.allStopped){let e=t(i).filter(e=>u.includes(e.status));for(let t of e)n(i,t);return{archived:e.map(e=>e.id),count:e.length}}e||V([`Archive one: coder task archive <task-id>`,`Archive all stopped: coder task archive --all-stopped`]);let o=z(i,e);return n(i,o),{taskId:o.id,archived:!0}}async function te(e,t={}){let{cwd:n,api:r}=R(t);if(r){let n=t.allArchived?(await r.tasks.list({limit:200,archived:!0})).map(e=>e.task.id):[e??V([])];return await Promise.all(n.map(e=>r.tasks.delete(e))),{deleted:n,count:n.length}}if(t.allArchived){let e=h(n).filter(e=>k(n,e)).map(e=>e.id);return{deleted:e,count:e.length}}e||V([`Delete one: coder task delete <task-id>`,`Delete all archived: coder task delete --all-archived`]);let i=z(n,e);if(i.status===`running`)throw new g(`invalid-option`,`Task ${i.id} is still running.`,{hint:`Stop it first: coder task stop ${i.id}`});return k(n,i),{taskId:i.id,deleted:!0}}async function*ne(e,t={}){yield*(await K(e,t)).events}const $={run:H,result:U,list:W,watch:K,stream:ne,steer:q,ask:J,approvals:Y,approve:X,stop:Z,archive:Q,delete:te};export{$ as n,L as t};
|
package/dist/task-DeFLNmQH.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./cli-BBlH53hA.js";const t=[[`--wait`,`run in the foreground and block until the answer is ready`],[`--engine <codex|claude|custom>`,`engine to use; custom runs your configured custom models (default: first in the chain)`],[`--model <alias|slug>`,`luna/sol/astra (codex) · sonnet/opus/fable (claude) · a custom model (coder model list)`],[`--effort <low|medium|high>`,`reasoning effort`],[`--permissions <mode>`,`read-only · workspace-write · auto (default: auto)`],[`--mcp <names|all|json>`,'attach MCP servers from `mcp` in .coder/config.json by name (or all), or an inline JSON array [{"name","command","args","env","tools"}]; none by default, all adds your engine\'s own MCP servers'],[`--connections <ids>`,`use only these connections (coder connection list), within the agent's`],[`--add-dir <dir>`,`give the task another directory beyond --cwd (repeatable); read-only can only read it, other modes can also write`]],n=e(`task`,{worker:async()=>(await import(`./worker-CHD_OiQS.js`)).commandWorker,mcp:async()=>(await import(`./mcp-CKqinFkk.js`)).commandTaskMcp,hub:async()=>(await import(`./hub-B0WCXtsP.js`)).commandTaskHub,run:async()=>(await import(`./run-UPW-7pKo.js`)).commandTask,list:async()=>(await import(`./list-CZGTVKcS.js`)).commandTasks,ls:async()=>(await import(`./list-CZGTVKcS.js`)).commandTasks,watch:async()=>(await import(`./watch-DJXu13jK.js`)).commandWatch,stream:async()=>(await import(`./watch-DJXu13jK.js`)).commandWatch,result:async()=>(await import(`./result-D0dpv2O_.js`).then(e=>e.s)).commandResult,steer:async()=>(await import(`./steer-CMp-a7v2.js`)).commandSteer,ask:async()=>(await import(`./ask-D8TIVhPl.js`)).commandAsk,stop:async()=>(await import(`./stop-C7YjN2sB.js`)).commandStop,archive:async()=>(await import(`./archive-CMHRsVYf.js`)).commandArchive,delete:async()=>(await import(`./delete-D1hEPpsk.js`)).commandDelete,approvals:async()=>(await import(`./approvals-h5lytkey.js`)).commandApprovals,approve:async()=>(await import(`./approve-BNhg0MLi.js`)).commandApprove},{menu:[{sub:`run`,usage:`run "<text>"`,blurb:`run a task (background; --wait blocks)`,alias:`run`},{sub:`list`,usage:`list`,blurb:`list recent tasks (by default running + just stopped)`,alias:`list`},{sub:`result`,usage:`result [task-id]`,blurb:`status + final answer (--wait blocks)`,alias:`result`},{sub:`watch`,usage:`watch [task-id]`,blurb:`stream a task's live transcript`},{sub:`steer`,usage:`steer <task-id> "<follow-up>"`,blurb:`continue a task's thread`},{sub:`ask`,usage:`ask <task-id> "<question>"`,blurb:`ask about a task without interrupting it`},{sub:`stop`,usage:`stop <task-id>`,blurb:`interrupt a running task`},{sub:`archive`,usage:`archive <task-id>`,blurb:`archive a session (or --all-stopped)`},{sub:`delete`,usage:`delete <task-id>`,blurb:`delete a session (or --all-archived)`},{sub:`approvals`,usage:`approvals [task-id]`,blurb:`pending approvals (all tasks, or one)`},{sub:`approve`,usage:`approve <id>`,blurb:`answer an escalated permission`}].map(e=>({usage:e.usage,blurb:e.blurb,...e.alias?{note:`(coder ${e.alias})`}:{}}))},{aliases:{stream:`watch`,ls:`list`},hint:`Run a task: coder run "<text>"`});export{t as TASK_FLAGS,n as commandTaskGroup};
|
package/dist/task-bkoi8_NN.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{qi as e}from"./core-DwsAMCnL.js";import{Bt as t,C as n,Dn as r,F as i,Ft as a,Jt as o,Kn as s,N as c,Vt as l,W as u,dn as d,dr as f,fr as p,gn as m,jt as h,kt as g,lr as _,mt as ee,nn as v,or as y,pr as b,un as x,wt as te}from"./prompts-Bj4Fbd_n.js";import{B as ne,L as S,a as re,c as ie,m as C,p as ae,z as w}from"./dispatch-CFZ9Crvg.js";import{t as oe}from"./integrations-IGnXBrPw.js";import{a as T,n as E,t as D}from"./history-C53URBjs.js";import{a as O,c as k,s as A,t as j}from"./actions-Cwe3IDVs.js";import{t as se}from"./log-view-CL3_S0IQ.js";import{o as M}from"./mcp-Dsl3Xdd3.js";import{a as ce,d as le,r as ue,s as de,u as fe}from"./exec-Cprez703.js";import N from"node:path";import P from"node:process";import{execFile as pe}from"node:child_process";import{createHash as F}from"node:crypto";import I from"node:os";import L from"node:net";import R from"node:fs/promises";import{promisify as z}from"node:util";import B from"node:http";import{gunzipSync as V,gzipSync as H}from"node:zlib";const U=e=>F(`sha256`).update(e).digest(`hex`);function W(e,t,r){if(e===`claude`)return N.join(n(),process.env.CLAUDE_CODE_PROJECT_DIR_NAME||`coder`,`${t}.jsonl`);let i=new Date(JSON.parse(r.slice(0,r.indexOf(`
|
|
2
|
-
`))).timestamp).toISOString().slice(0,19).replaceAll(`:`,`-`);return N.join(m(),`sessions`,...i.slice(0,10).split(`-`),`rollout-${i}-${t}.jsonl`)}function G(e,t){return t.flatMap(e=>[e,...e.startsWith(`Bearer `)?[e.slice(7)]:[]]).filter(e=>e.length>=8).flatMap(e=>[e,JSON.stringify(e).slice(1,-1)]).sort((e,t)=>t.length-e.length).reduce((e,t)=>e.replaceAll(t,`[REDACTED]`),e)}function K(e,t){let n=new Map;return{async restore(){let t=await e(`/history`).catch(e=>(console.error(`coder runner: saved history could not be listed`,e),[])),r=t.at(-1),i;return await Promise.all(t.map(async({engine:t,conversation:a})=>{if(D.test(a))try{let{data:o,state:s}=await e(`/history/${a}`);a===r.conversation&&(i=s);let c=V(Buffer.from(o,`base64`)).toString(`utf8`);for(let e of c.split(`
|
|
3
|
-
`))e.trim()&&JSON.parse(e);let[l]=await T({engine:t},a);l||(l=W(t,a,c),await R.mkdir(N.dirname(l),{recursive:!0,mode:448}),await R.writeFile(l,c,{mode:384})),n.set(a,{engine:t,hash:U(c),file:l})}catch(e){console.error(`coder runner: history ${a} could not be restored`,e)}})),{...r?{resume:{...i,engine:r.engine,threadId:r.conversation}}:{},restored:!!(r&&n.has(r.conversation))}},async save(r){let i=new Map([...n].map(([e,{engine:t}])=>[e,t]));if(r?.engine===`claude`||r?.engine===`codex`)for(let e of E(r))i.delete(e),i.set(e,r.engine);let a=await t();for(let[t,o]of i){let i=n.get(t)?.file,s=i&&await R.stat(i).then(e=>e.isFile(),()=>!1)?i:(await T({engine:o},t))[0],c=s?await R.readFile(s,`utf8`).catch(()=>``):``,l=t===r?.threadId;if(!c||!l&&U(c)===n.get(t)?.hash)continue;let u=H(G(c,a)).toString(`base64`);if(u.length>3145728){console.error(`coder runner: history ${t} is too large to save`);continue}let d=l?JSON.parse(G(JSON.stringify({previousThreadIds:r.previousThreadIds,pendingRollover:r.pendingRollover}),a)):void 0;await e(`/history`,{method:`POST`,body:JSON.stringify({engine:o,conversation:t,data:u,...d?{state:d}:{}})}).then(()=>n.set(t,{engine:o,hash:U(c),file:s}),e=>console.error(`coder runner: history ${t} was not saved`,e))}}}}var q=e({INBOX_COMMAND:()=>Ne,INBOX_SOCKET:()=>Ae,applyTaskMessage:()=>Ee,checkout:()=>Z,checkoutCache:()=>he,inboxSocket:()=>je,prepareRepo:()=>Ce,receiveInbox:()=>Pe,releaseCheckout:()=>$,requestInboxControl:()=>Te,runTask:()=>Oe,sendInbox:()=>Me,startInboxControl:()=>we,taskServer:()=>Y,withCheckoutLock:()=>Q});const J=z(pe);function Y(){let e=P.env.CODER_SERVER?.replace(/\/+$/,``),t=P.env.CODER_TASK_TOKEN;if(!e||!t)throw Error(`CODER_SERVER and CODER_TASK_TOKEN are required with --task`);return{server:e,token:t}}async function X(e,t,n,r=``,i={}){let a=await fetch(`${e}/tasks/${encodeURIComponent(n)}${r}`,{...i,signal:i.signal?AbortSignal.any([i.signal,AbortSignal.timeout(3e4)]):AbortSignal.timeout(3e4),headers:{authorization:`Bearer ${t}`,...i.body?{"content-type":`application/json`}:{},...i.headers}}),o=await a.json().catch(()=>({}));if(!a.ok)throw Object.assign(Error(o.error??`Coder server answered ${a.status}`),{status:a.status});return o}function me(e){return e.length>0&&!e.startsWith(`-`)&&!e.endsWith(`/`)&&!e.endsWith(`.`)&&!e.endsWith(`.lock`)&&!/[\x00-\x20\x7f~^:?*[\\]/.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.includes(`//`)}async function Z(e,t,n,r,i){let a=e.event?.repo;if(!a)return t;let o=N.join(t,`repo`);if(!me(a.defaultBranch))throw Error(`Invalid repository ref`);let s=new URL(a.cloneUrl),c=oe[e.event.integration]?.repos?.cloneHosts??[];if(s.protocol!==`https:`||!c.includes(s.hostname))throw Error(`Repository clone host does not match the integration`);await R.mkdir(t,{recursive:!0});let l=await R.mkdtemp(N.join(t,`.git-credential-`)),u=N.join(l,`token`),d=N.join(l,`askpass.sh`);n&&(await R.writeFile(u,n,{mode:384}),await R.writeFile(d,`#!/bin/sh
|
|
4
|
-
case "$1" in *Username*) printf x-access-token;; *) command cat "$CODER_GIT_TOKEN_FILE";; esac
|
|
5
|
-
`,{mode:448}));let f=n?{env:{...P.env,GIT_ASKPASS:d,CODER_GIT_TOKEN_FILE:u,GIT_TERMINAL_PROMPT:`0`}}:void 0;try{let e={...f,signal:i,maxBuffer:67108864};if(r)return await Q(r,async()=>{if(!await R.stat(N.join(r,`.git`)).catch(()=>void 0)){let t=await R.mkdtemp(`${r}-clone-`);try{await J(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,t],e),await R.rename(t,r)}finally{await R.rm(t,{recursive:!0,force:!0})}}await J(`git`,[`-C`,r,`worktree`,`prune`,`--expire`,`now`],e),await J(`git`,[`-C`,r,`remote`,`set-url`,`origin`,a.cloneUrl],e),await J(`git`,[`-C`,r,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await J(`git`,[`-C`,r,`worktree`,`add`,`--detach`,o,`FETCH_HEAD`],e)}),o;await R.stat(N.join(o,`.git`)).then(()=>!0).catch(()=>!1)||await J(`git`,[`clone`,`--depth`,`50`,a.cloneUrl,o],e),await J(`git`,[`-C`,o,`fetch`,`--depth`,`50`,`origin`,a.defaultBranch],e),await J(`git`,[`-C`,o,`checkout`,`--detach`,`FETCH_HEAD`],e)}finally{await R.rm(l,{recursive:!0,force:!0})}return o}function he(e){let t=e.event?.repo;if(t){if(![t.owner,t.name].every(e=>/^[\w.-]+$/.test(e)&&!/^\.+$/.test(e)))throw Error(`Invalid repository name`);return g(`checkouts`,new URL(t.cloneUrl).hostname,t.owner,t.name)}}async function Q(e,t){return p(`${e}.lock`,t,1/0,3e5)}async function $(e){if(!(await R.stat(N.join(e,`.git`)).catch(()=>void 0))?.isFile())return;let t=await J(`git`,[`-C`,e,`rev-parse`,`--git-common-dir`]).catch(async t=>{if(await R.stat(N.join(e,`.git`)).catch(()=>void 0))throw t});if(!t)return;let{stdout:n}=t,r=N.resolve(e,n.trim());await Q(N.dirname(r),async()=>{await R.stat(N.join(e,`.git`)).catch(()=>void 0)&&await J(`git`,[`--git-dir`,r,`worktree`,`remove`,`--force`,e])})}const ge=1048576;async function _e(e){let t={maxBuffer:67108864};await J(`git`,[`-C`,e,`add`,`--intent-to-add`,`--all`],t);let{stdout:n}=await J(`git`,[`-C`,e,`diff`,`HEAD`],t);return Buffer.byteLength(n)>ge?`${Buffer.from(n).subarray(0,ge).toString()}\n[diff truncated]`:n}async function ve(e,t){delete P.env.CODER_SERVER,delete P.env.CODER_TASK_TOKEN,delete P.env.APP_TOKEN;for(let t of Object.keys(e.tokens))delete P.env[M(t)];for(let t of e.engineCredentials??[])for(let e of Object.keys(t.credential.env))delete P.env[e];let{CODEX_AUTH_JSON:n,[c]:r,...a}=e.credential.env;if(Object.assign(P.env,a),P.env[i]=JSON.stringify(e.config??{}),P.env.CODER_MCP_MODE=`cloud`,P.env.CODER_MCP_CONNECTION_ENV=JSON.stringify(s(e.connections??{})),!n)return;let o=await R.mkdtemp(N.join(t,`.codex-`));return await R.writeFile(N.join(o,`auth.json`),n,{mode:384}),P.env.CODEX_HOME=o,o}async function ye(e,t){let{ANTHROPIC_API_KEY:n,CLAUDE_CODE_OAUTH_TOKEN:r}=e.credential.env;if(e.credential.engine!==`claude`||!n&&!r)return;let i=await R.mkdtemp(N.join(t,`.claude-`));return P.env.CLAUDE_CONFIG_DIR=i,P.env.CLAUDE_CODE_PROJECT_DIR_NAME=`coder`,i}async function be(e,t,n){let r=n?await R.readFile(N.join(n,`auth.json`),`utf8`).catch(()=>``):``,i=(e=``)=>{let t=[];try{JSON.parse(e,(e,n)=>(typeof n==`string`&&/token|key/i.test(e)&&t.push(n),n))}catch{e&&console.error(`coder runner: history credentials could not be parsed`)}return t};return[t,...Object.values(e.tokens),...e.postToken?[e.postToken]:[],...Object.values(e.nativeTokens??{}),...Object.values(e.connectionEnv??{}),...Object.entries(e.credential.env).filter(([e])=>/KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|AUTH/i.test(e)).map(([,e])=>e),...i(e.credential.env.CODEX_AUTH_JSON),...e.engineCredentials?.flatMap(e=>[...Object.values(e.credential.env),...i(e.credential.env.CODEX_AUTH_JSON)])??[],...i(r)]}async function xe(e,t,n,r){if(!r)return;let i=await R.readFile(N.join(r,`auth.json`),`utf8`).catch(()=>``);i&&i!==n.credential.env.CODEX_AUTH_JSON&&await X(e.server,e.token,t,`/credential`,{method:`POST`,body:JSON.stringify({authJson:i,credentialId:n.task.credential})}).catch(()=>{}),await R.rm(r,{recursive:!0,force:!0})}const Se=[[`bun.lock`,`bun`,[`install`,`--frozen-lockfile`]],[`bun.lockb`,`bun`,[`install`,`--frozen-lockfile`]],[`pnpm-lock.yaml`,`npx`,[`-y`,`pnpm`,`install`,`--frozen-lockfile`]],[`yarn.lock`,`npx`,[`-y`,`yarn`,`install`,`--frozen-lockfile`]],[`package-lock.json`,`npm`,[`ci`]]];async function Ce(e,t){let n=Y(),r=await X(n.server,n.token,e),i=r.task.event;if(!i?.repo)throw Error(`The task has no repository`);let a=await Z(r.task,t,r.tokens[i.integration]);for(let[e,t,n]of Se)if(await R.stat(N.join(a,e)).catch(()=>void 0)){await J(t,n,{cwd:a,maxBuffer:67108864}).catch(()=>{});break}let o=(await J(`git`,[`-C`,a,`rev-parse`,`HEAD`])).stdout.trim();return console.log(`coder-snapshot ${o}`),{sha:o}}function we(e,t,n){let r=new Set,i=ne(N.join(e,`inbox-control`),{apply(e){let i=e.entry;if(e.task!==t||!Number.isInteger(i?.seq)||i.seq<0||!Number.isInteger(i.generation)||i.generation<0||![`steer`,`ask`,`approve`].includes(i.kind))throw Error(`Invalid engine inbox command`);let a=n(i);return r.add(a),a.finally(()=>r.delete(a)).catch(()=>{}),a}});return{close:async()=>{i(),await Promise.allSettled([...r])}}}function Te(e,t,n){let r=w({task:t,generation:n.generation,seq:n.seq});return S(`apply`,{task:t,entry:n},{dir:N.join(e,`inbox-control`),id:r,keepReply:!0,timeoutMs:3e4})}async function Ee(e,t,n,r=O(t.mcp)){let i={task:t.name?.slice(6)??t.id,generation:n.generation,seq:n.seq},a=N.join(v(e,t.id),`inbox-control`,`${w(i)}.transcript.jsonl`);return p(`${a}.lock`,async()=>{let o=await R.readFile(a,`utf8`).catch(e=>{if(e.code===`ENOENT`)return``;throw e});for(let e of o.split(`
|
|
6
|
-
`)){if(!e.trim())continue;let t;try{t=JSON.parse(e)}catch{continue}if(w(t.command)===w(i)&&Object.hasOwn(t,`result`))return t.result}let s=n.value;if(n.kind===`steer`){let a=String(s?.text??n.value??``),o=!1;t.threadId||(o=await d(e,t.id,()=>{let n=l(e,t.id)??t;if(n.threadId)return!1;if(n.steerClosed||![`running`,`queued`].includes(n.status))throw Error(`Task stopped before it opened a conversation`);return h(e,t.id,a),!0})),o||await A(e,l(e,t.id)??t,a,{command:i,resolveConnections:r})}else if(n.kind===`ask`){let r=await j(e,t,String(s?.question??n.value??``),{command:i});return r.finalMessage??r.error?.message??``}else n.kind===`approve`&&C(v(e,t.id),String(s?.approvalId??s?.id??``),s?.decision===`deny`||s?.decision===`decline`?`decline`:`accept`);await R.mkdir(N.dirname(a),{recursive:!0}),await R.appendFile(a,JSON.stringify({command:i,result:null})+`
|
|
7
|
-
`)})}async function De(e){for(let t=1;;t++)try{return await e()}catch(e){let n=e.status;if(n!==void 0&&n<500||t>=6)throw e;console.error(`coder runner: Coder server did not take the request, trying again: ${e instanceof Error?e.message:e}`),await new Promise(e=>setTimeout(e,1e3*2**(t-1)))}}async function Oe(e,t){let n=Y();r(`runner.credentials.start`);let a=await De(()=>X(n.server,n.token,e)).catch(async t=>{throw await X(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`failed`,error:t instanceof Error?t.message:String(t)})}).catch(()=>{}),t});r(`runner.credentials.done`);let o=a.task.event,s=o&&a.tokens[o.integration],c=P.env.CODER_INBOX_MODE===`poll`;delete P.env.CODER_INBOX_MODE;let u=P.env.CODER_CHECKOUT_CACHE;delete P.env.CODER_CHECKOUT_CACHE;let d,f,p={CODEX_HOME:P.env.CODEX_HOME,CLAUDE_CONFIG_DIR:P.env.CLAUDE_CONFIG_DIR},m,h=new AbortController,g=setTimeout(()=>h.abort(Error(`timeout`)),a.timeoutMs??18e5),ee=setInterval(()=>{X(n.server,n.token,e,`/heartbeat`,{method:`POST`,signal:AbortSignal.timeout(1e4)}).catch(()=>{})},3e4),v,y=async()=>{let r=_(N.join(t,`.runner-task.json`)),i=v&&r?.generation===a.generation?l(v,r.id):void 0;await m?.save(i??void 0).catch(e=>console.error(`coder runner: history upload failed`,e)),f&&await R.rm(f,{recursive:!0,force:!0}),await xe(n,e,a,d)},b=!1,x=async t=>{b=!0,await y(),await De(()=>X(n.server,n.token,e,`/result`,{method:`POST`,body:JSON.stringify(t)}))};try{let i=(async()=>{[d,f]=await Promise.all([ve(a,t),ye(a,t)]),m=a.task.flow==="default"?K((t,r)=>X(n.server,n.token,e,t,r),()=>be(a,n.token,d)):void 0,r(`runner.environment.done`);let i=await m?.restore();return r(`runner.history.done`),i})();r(`runner.checkout.start`);let o=Promise.race([Z(a.task,t,s,u,h.signal),new Promise((e,t)=>h.signal.addEventListener(`abort`,()=>t(h.signal.reason),{once:!0}))]).then(e=>(v=e,r(`runner.checkout.done`),e)),[l,g]=await Promise.allSettled([o,i]);if(l.status===`rejected`)throw l.reason;if(g.status===`rejected`)throw g.reason;return h.signal.throwIfAborted(),await ke(e,t,n,a,l.value,s,c,h.signal,y,x,g.value,a.engineCredentials?async e=>{if(e===a.credential.engine)return!0;let n=a.engineCredentials.find(t=>t.credential.engine===e);if(!n)return!1;await y();for(let[e,t]of Object.entries(p))t===void 0?delete P.env[e]:P.env[e]=t;return a.credential=n.credential,a.task={...a.task,credential:n.id,usage:{...a.task.usage,engine:e,model:void 0,effort:void 0}},[d,f]=await Promise.all([ve(a,t),ye(a,t)]),!0}:void 0)}catch(e){throw b||await x({status:`failed`,error:e instanceof Error?e.message:String(e),...a.task.event&&oe[a.task.event.integration]?.isUninstalled?.(e)?{installationRevoked:!0}:{}}).catch(e=>console.error(`coder runner: result delivery failed`,e)),e}finally{clearTimeout(g),clearInterval(ee);try{v&&await $(v)}finally{delete P.env[i],delete P.env.CODER_MCP_MODE,delete P.env.CODER_MCP_CONNECTION_ENV}}}async function ke(e,n,r,i,s,c,d,p,m,h,g,ne){let S=i.task.event,C=i.task.flow==="default"?i.postToken:c,w=new AbortController,T,E,D=!1,O=await Pe({root:n,generation:i.generation,apply:async t=>{let n=T&&l(s,T);if(!n)throw Error(`The task is not ready`);if(t.kind===`cancel`){await k(s,n),D=!0,await U(),await m();return}return Te(v(s,n.id),e,t)}}),A=O.ack().seq>=0?O.ack():void 0,j,M=()=>{if(j)return j;if(!A)return Promise.resolve();let t=A;return j=X(r.server,r.token,e,`/ack`,{method:`POST`,body:JSON.stringify(t),signal:w.signal}).then(()=>{A&&A.seq<=t.seq&&(A=void 0)}).catch(e=>{throw(e.status===401||e.status===403)&&(A=void 0),e}).finally(()=>{j=void 0}),j},P=async()=>{let t=await X(r.server,r.token,e,`/messages?after=${O.ack().seq}`,{signal:w.signal});try{t.length&&await O.apply(t)}finally{t.length&&O.ack().seq>=0&&(A=O.ack()),await M().catch(()=>{})}},pe=setInterval(()=>{M().catch(()=>{})},1e3),F=_(N.join(n,`.runner-task.json`)),I=new Map,L=new Map,R=(i.logCursor??-1)+1,z=0,B=[],V,H=()=>{for(let e of L.values())for(let t of e()){if(z>=2097152)continue;let e=Buffer.byteLength(t)>65536?`A task log entry exceeded 64 KB`:t;B.push({seq:R++,at:Date.now(),level:`out`,line:e}),z+=Buffer.byteLength(e)}return V||(V=(async()=>{for(;B.length;){let t=0,n=B.slice(0,100).filter(e=>(t+=Buffer.byteLength(JSON.stringify(e)))<524288);if(!n.length)throw Error(`Task log batch is too large`);let i=!1;for(let t=0;t<3;t++)try{await X(r.server,r.token,e,`/logs`,{method:`POST`,signal:AbortSignal.timeout(5e3),body:JSON.stringify({entries:n})}),i=!0;break}catch(e){if(t===2)throw e;await new Promise(e=>setTimeout(e,1e3))}i&&B.splice(0,n.length)}})().finally(()=>{V=void 0}),V)},U=()=>H().catch(e=>{console.error(`coder runner: log delivery failed`,e)}),W,G,K=!1,q=F?.generation===i.generation?F.usageStart:0,J=F?.generation===i.generation?F.turn:0,Y=J+1,me=(e,t=!1,n=!1)=>ce(oe[S.integration],S,e,C,i.task.author,t,n),Z=async t=>{await X(r.server,r.token,e,`/result`,{method:`POST`,body:JSON.stringify({status:`waiting`,approval:t})})};try{let t=g?.restored&&g.resume?.engine===ie({engine:i.task.usage?.engine??i.task.definition.engine,model:i.task.usage?.model??i.task.definition.model},u(s)).engine,c,m=ue({cwd:s,...F?.generation===i.generation?{resumeTaskId:F.id,resumeTurn:J}:{},...g?.resume?{resume:g.resume}:{},agent:i.task.agent,flow:i.task.flow,task:t?{...i.task,context:{...i.task.context,messages:void 0}}:i.task,toolEnvironment:{tokens:{...i.tokens,...i.nativeTokens},native:Object.keys(i.nativeTokens??{})},replyEndpoint:{url:`${r.server}/tasks/${encodeURIComponent(e)}`,token:r.token},connections:i.connections,connectionEnv:i.connectionEnv,post:i.task.source===S?.integration,...C?{postToken:C}:{},onStart(e){E=e},onWorker(e,t){c=t,t.once(`error`,()=>{c=void 0})},async onTask(e,t){if(T=e,p.aborted){let t=l(s,e);throw t&&await k(s,t),p.reason}L.has(e)||L.set(e,y(N.join(v(s,e),`log.jsonl`))),I.has(e)||I.set(e,f(v(s,e),e=>{(!e||e===`log.jsonl`)&&H().catch(()=>{})})),H().catch(()=>{}),b(N.join(n,`.runner-task.json`),{generation:i.generation,id:e,turn:t??J,usageStart:q}),await M().catch(()=>{}),await P().catch(()=>{}),clearInterval(W),d&&(W=setInterval(()=>{G||=P().catch(()=>{}).finally(()=>{G=void 0})},4e3))},onApproval:Z,onEngine:ne}),_=new Promise((e,t)=>{let n=()=>t(p.reason);p.addEventListener(`abort`,n,{once:!0}),p.aborted&&n()}),w=await Promise.race([m,_]);if(Y=(w.turn??J)+1,T&&i.task.flow==="default"){let e=[...w.postedMessages??[]],t=x(s,T,c);try{for(;;){let n=o(s,T);for(let[t,r]of n.slice(Y).entries()){let n=fe(i.task,r,D,r);n.skipped&&te(s,T,{kind:`status`,message:ee}),i.task.source===S?.integration&&n.text&&!n.duplicate&&e.push(...await de(s,T,Y+t,()=>me(n.text,n.problem))),w.reply=n.text,w.ok=r.status===0}Y=Math.max(Y,n.length);let r=l(s,T);if(r?.status===`running`||r?.status===`queued`){await Promise.race([le(s,T,Z,(e,t)=>ae(e,t,{turn:Y,worker:c,signal:p})),_]);continue}if(r?.rollingOver){await Promise.race([ae(s,T,{rollover:!0,worker:c,signal:p}),_]);continue}if(c?.exitCode===null&&!c.signalCode||a(s,T)){await Promise.race([t.wait(3e4),_]);continue}if(!K){clearInterval(W),await G,await O.close(),K=!0;continue}if(o(s,T).length<=Y)break}}finally{t.close()}let n=(l(s,T)?.turnUsage??[]).slice(q).flatMap(e=>e.tokens?[e.tokens]:[]);w.tokens=n.length?n.reduce((e,t)=>se(e,t)):re(s,T)?.tokens??w.tokens,e.length&&(w.postedMessages=e)}for(await U();A;)p.throwIfAborted(),await M().catch(()=>{}),A&&await new Promise(e=>setTimeout(e,1e3));return await h({status:D?`cancelled`:w.ok?`completed`:`failed`,result:w.reply??w.result,tokens:w.tokens,...w.postedMessages?.length?{postedMessages:w.postedMessages}:{},...s===n?{}:{diff:await _e(s).catch(()=>void 0)}}),w}catch(n){if(p.aborted){E?.requestStop();let n=new Set([...T?[T]:[],...E?.runningIds()??[],...t(s).filter(t=>t.name===`agent:${e}`||E&&t.flowRunId===E.runId).map(e=>e.id)]);for(let e of n){L.has(e)||L.set(e,y(N.join(v(s,e),`log.jsonl`)));let t=l(s,e);t&&await k(s,t)}}throw await U(),n}finally{for(let e of I.values())e.close();await V?.catch(()=>{}),clearInterval(pe),clearInterval(W),w.abort(),await Promise.allSettled([G,j]),K||await O.close()}}const Ae=`/tmp/coder-inbox.sock`,je=e=>N.join(I.tmpdir(),`coder-${F(`sha256`).update(e).digest(`hex`).slice(0,24)}.sock`);function Me(e,t){return new Promise((n,r)=>{let i=B.request({socketPath:e,path:`/messages`,method:`POST`,headers:{"content-type":`application/json`}},e=>{let t=``;e.on(`data`,e=>{t+=e}),e.on(`end`,()=>{if(e.statusCode!==200)return r(Error(`Task inbox answered ${e.statusCode}`));try{n(JSON.parse(t))}catch(e){r(e)}}),e.on(`error`,r)});i.setTimeout(1e4,()=>i.destroy(Error(`Task inbox timed out`))),i.on(`error`,r),i.end(JSON.stringify({entries:t}))})}const Ne=`const http=require('node:http');const req=http.request({socketPath:process.env.CODER_INBOX_SOCKET||'/tmp/coder-inbox.sock',path:'/messages',method:'POST',headers:{'content-type':'application/json'}},res=>{res.pipe(process.stdout);res.on('end',()=>{if(res.statusCode!==200)process.exitCode=1})});req.on('error',()=>{process.exitCode=1});req.setTimeout(10000,()=>req.destroy());req.end(JSON.stringify({entries:JSON.parse(process.env.CODER_INBOX_MESSAGES)}));`;async function Pe(e){let t=N.join(e.root,`.runner-inbox.json`),n=_(t),r=n?.generation===e.generation?n:{generation:e.generation,seq:-1,answers:[]},i=Promise.resolve(),a=n=>{let a=async()=>{if(!Array.isArray(n)||n.some(t=>!Number.isInteger(t.seq)||t.seq<0||t.generation!==e.generation||![`steer`,`ask`,`approve`,`cancel`].includes(t.kind)))throw Error(`Invalid task messages`);for(let i of[...n].sort((e,t)=>e.seq-t.seq)){if(i.seq<=r.seq)continue;let n=await e.apply(i),a={generation:e.generation,seq:i.seq,answers:[...r.answers??[],...i.kind===`ask`?[{seq:i.seq,value:n}]:[]]};b(t,a),r=a}return r},o=i.then(a,a);return i=o.then(()=>{},()=>{}),o},o=e.socketPath??P.env.CODER_INBOX_SOCKET??je(e.root);if(await R.lstat(o).then(()=>!0,()=>!1)){if(!await new Promise((e,t)=>{let n=L.connect(o);n.once(`connect`,()=>{n.destroy(),e(!1)}),n.once(`error`,n=>n.code===`ECONNREFUSED`?e(!0):t(n))}))throw Error(`The task inbox is already running`);await R.unlink(o)}let s=B.createServer(async(e,t)=>{if(e.method!==`POST`||e.url!==`/messages`){t.writeHead(404).end();return}let n=``;try{for await(let t of e)if(n+=t,Buffer.byteLength(n)>1048576)throw Error(`Messages too large`);let r=await a(JSON.parse(n).entries);t.writeHead(200,{"content-type":`application/json`}).end(JSON.stringify(r))}catch{t.writeHead(409).end()}});return await R.mkdir(e.root,{recursive:!0}),await new Promise((e,t)=>{s.once(`error`,t),s.listen(o,e)}),await R.chmod(o,384),{apply:a,ack:()=>r,close:async()=>{await i,await new Promise(e=>s.close(()=>e()))}}}export{je as a,Oe as c,q as d,Q as f,he as i,Me as l,Ae as n,Ce as o,Ee as r,$ as s,Ne as t,Y as u};
|
package/dist/test-BD9rvefN.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,t}from"./cli-BBlH53hA.js";import{runnerOptions as n}from"./remove-DxCv9BB4.js";import r from"node:process";const i=e({name:`runner test`,globalFlags:{cwd:!1},args:1,required:[`<id>`],help:{usage:`coder runner test <id> [--server [url]] [--json]`,summary:`Check the runner connection.`,flags:[t]},options:n,async run({options:e,args:[t]}){let{testRunner:n}=await import(`./runner-BM_98EQl.js`).then(e=>e.t);return n(t,e)},print:e=>r.stdout.write(`${e.ok?`OK`:`Failed`} ${e.detail} (${e.ms} ms).\n`)});export{i as commandRunnerTest};
|
package/dist/tools-CdWkwI1g.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import{n as t,r as n}from"./mcp-server-BlP9lACI.js";import r from"node:process";const i=e({name:`agent tools`,options:{},args:1,async run({args:e}){let{INTEGRATIONS:i}=await import(`./integrations-IGnXBrPw.js`).then(e=>e.r),{agentTools:a}=await import(`./mcp-Dsl3Xdd3.js`).then(e=>e.i),o=e[0]??``,s=i[o]?.tools.server;if(s){let e=s([`read`],void 0,``),n=r.env[e.credentialFields?.env??`APP_TOKEN`];if(!n)throw Error(`Platform token is not set`);await t(s([`read`],void 0,n));return}let c=a(o);if(!c)throw Error(`Unknown tool set "${o}"`);await n(`coder-${o}`,c,{fetch})}});export{i as commandTools};
|
package/dist/unalias-bL5t8Isc.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import{t}from"./models-Cb0ZTKZ7.js";import{n}from"./add-wC8ByRgM.js";import{t as r}from"./remove-CId1EwPg.js";const i=e({name:`model unalias`,help:{usage:`coder model unalias <name> [--workspace]`,summary:`Remove a user-defined alias.`,flags:[[`--workspace`,`target <repo>/.coder/config.json instead of the user file`]]},options:n,args:1,run:({options:e,args:[n],cwd:r})=>t.unalias(n,{...e,cwd:r}),print:e=>r(`unaliased`,e.unaliased,e.file)});export{i as commandModelUnalias};
|
package/dist/update-DIYW08ME.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import{t}from"./models-Cb0ZTKZ7.js";import{a as n,i as r,n as i,r as a}from"./add-wC8ByRgM.js";const o=e({name:`model update`,help:{usage:`coder model update <name> [--base-url <url>] [--model <id>] [--env-key VAR]`,summary:`Update a configured custom model. Only the flags you pass change; the endpoint
|
|
2
|
-
is re-probed and the wire protocol re-detected.`,flags:[[`--base-url <url>`,`new API base`],[`--model <id>`,`new provider model id`],[`--env-key <VAR>`,`new API-key env var`],[`--workspace`,`write to <repo>/.coder/config.json instead of the user file`]]},options:i,args:1,run:({options:e,args:[r],cwd:i})=>t.update(r,{...n(e),cwd:i}),json:a,print:e=>r(e,`updated`)});export{o as commandModelUpdate};
|
package/dist/upgrade-3fH6dGJw.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{D as e}from"./dispatch-CFZ9Crvg.js";import{i as t}from"./cli-BBlH53hA.js";import{f as n,p as r,t as i}from"./output-BKeyLbvt.js";import{c as a,n as o}from"./args-CURX44CA.js";import s from"node:process";const c=t({name:`upgrade`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder upgrade [--cli-only] [--plugins-only] [--codex] [--claude] [--pm <mgr>]`,summary:`Update the coder CLI through whichever package manager installed it, then refresh
|
|
2
|
-
the host plugins to match.`,flags:[[`--cli-only`,`update just the CLI`],[`--plugins-only`,`refresh just the host plugins`],[`--codex`,`limit the refresh to the Agent Skills copy (Codex, Pi, ...)`],[`--claude`,`limit the refresh to the Claude Code plugin`],[`--pm <npm|pnpm|yarn|bun>`,`force a package manager instead of auto-detecting`]]},options:{pm:a,"cli-only":o,"plugins-only":o,codex:o,claude:o},run:({options:t})=>e({...t,cliOnly:t[`cli-only`],pluginsOnly:t[`plugins-only`]},l),print:u});function l(e){s.stdout.write(`${r.bold(`Updating coder CLI`)} ${r.dim(`${e}...`)}\n`)}function u(e){let t=r.bold,a=r.dim,o=(e,n)=>n&&e&&n!==e?`${e} ${a(`->`)} ${t(n)}`:`${n??e??`?`} ${a(`(unchanged)`)}`,c=(e,t)=>`${t.installed?n(`${e} ${o(t.from,t.to)} ${a(`- ${t.note}`)}`):i(`${e} ${t.note}`)}\n`;e.cli&&s.stdout.write(e.cli.changed?`${n(`coder CLI ${o(e.cli.from,e.cli.to)}`)}\n`:`${n(`coder CLI ${e.cli.from} ${a(`(already latest)`)}`)}\n`),e.claudePlugin&&s.stdout.write(c(`claude plugin`,e.claudePlugin)),e.agentsSkill&&s.stdout.write(c(`agents skill `,e.agentsSkill))}const d=async()=>(await import(`./refresh-SHNJq9Cx.js`)).commandRefreshUpdate,f=Object.assign(async e=>e[0]===`refresh`?(await d())(e.slice(1)):c(e),c,{subcommands:{refresh:d}});export{f as commandUpgrade};
|
package/dist/usage-Dr8F0xt0.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,r as t}from"./cli-BBlH53hA.js";import{g as n,p as r}from"./output-BKeyLbvt.js";import{c as i,s as a,t as o}from"./args-CURX44CA.js";import s from"node:process";function c(e,t){let i=Array.isArray(e.totals)?e.totals.map(e=>({group:t??``,...e})):Object.entries(e.totals).flatMap(([e,t])=>t.map(t=>({group:e,...t})));if(!i.length)return void s.stdout.write(`${r.dim(`No usage in this period.`)}\n`);s.stdout.write(`${n([{header:`by`,value:e=>e.group},{header:`key`,value:e=>e.key,paint:e=>r.cyan(e)},{header:`tasks`,value:e=>String(e.tasks)},{header:`runner ms`,value:e=>String(e.runnerMs)},{header:`tokens`,value:e=>e.tokens===void 0?``:JSON.stringify(e.tokens)}],i,r)}\n`)}const l=e({name:`agent usage`,help:{usage:`coder agent usage [--since 7d|24h|<ms>] [--by agent|installation|engine] [--server [url]] [--json] [--cwd <dir>]`,flags:[[`--since <period|ms>`,`period such as 7d or 24h, or milliseconds since epoch`],[`--by <group>`,`agent, installation, or engine`],t]},options:{...o,...a,since:i,by:i},run:async({options:e,cwd:t})=>{let{agents:n}=await import(`./agent-6GooVMsq.js`).then(e=>e.t);return n.usage({...e,cwd:t,organization:e.workspace,since:e.since??`7d`})},print:(e,{options:t})=>c(e,t.by)});export{l as commandAgentUsage};
|
package/dist/watch-BiyN4NxE.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{dr as e,nn as t,or as n,qt as r}from"./prompts-Bj4Fbd_n.js";import{i}from"./cli-BBlH53hA.js";import{_ as a,a as o,b as s,c,h as l,l as u,n as d,p as f,s as p,u as m,v as h,y as g}from"./output-BKeyLbvt.js";import{t as _,u as v}from"./args-CURX44CA.js";import y from"node:path";import b from"node:process";import x from"node:fs";const S=i({name:`flow watch`,help:{usage:`coder flow watch [run-id] [--tail <n|all>] [--json]`,summary:`Watch a flow run live: replay its progress lines from the start, then keep
|
|
2
|
-
following while it runs (Ctrl-C detaches; it keeps running). Blocks until it
|
|
3
|
-
finishes; exits 0 on success, 1 otherwise. Defaults to the most recent run.
|
|
4
|
-
For the result alone, prefer \`coder flow result\`. Alias: stream.`,flags:[[`--tail <n|all>`,`replay only the last n events first (default: all)`]],examples:[[`coder flow watch`,`follow the most recent run to completion`]]},options:{..._,tail:v},args:1,run:async({options:e,args:[t]})=>{let{watchRun:n}=await import(`./executor-3QMa-XRY.js`).then(e=>e.S);return R(n(t,{tail:e.tail}),{json:e.json,stream:!0})}}),C=[`⣾`,`⣽`,`⣻`,`⢿`,`⡿`,`⣟`,`⣯`,`⣷`];function w(e,t=!1){let n=f;return t?d(`[${E(e)}]`,10):e===`completed`?n.bold(n.green(`✔`)):e===`failed`||e===`cancelled`||e===`stopped`?n.bold(n.red(`✘`)):e===`running`?n.bold(n.cyan(`●`)):n.dim(`○`)}function T(){return d(`[start]`,10)}function E(e){return e===`completed`?`done`:e===`cancelled`?`failed`:e}function D(e,t){return e??t.replace(/\s+/g,` `).trim().slice(0,60)}function O(e,t,n,r,i,a){let o=f,s=d(t??n,32);return[`${e} ${a?o.bold(s):s}`,o.dim(d(n,24)),o.light(d(i??``,20)),r?o.light(`${u(r.total)} tok`):``].join(` `).trimEnd()}function k(e,t=!1){let n=f;return`${w(e.ok?`completed`:`failed`,t)} ${n.dim(`gate`)} ${n.light(e.cmd)}${e.ok?``:n.dim(` · exit ${e.code}`)}`}function A(e,t,n){let r=f,i=n!==void 0&&n>=1e3?r.dim(` · ${o(n)}`):``;return`${t} ${r.dim(`gate`)} ${r.light(e)}${i}`}function j(e,t=!1){return f.dim(`${`│ `.repeat(e)}${t?`└─`:`├─`}`)}function M(e){return f.dim(`${`│ `.repeat(e)}│ `)}function N(e){return`${` `.repeat(e.depth)}${e.log?`${d(`[log]`,10)} `:``}${e.body}`}function P(e,t,n=!1){return n?N(e):`${e.log?M(e.depth):j(e.depth,t)} ${e.body}`}function F(e){return f.dim(`${`│ `.repeat(Math.max(0,e))}│`)}var I=class{stream;names=new Map;active=new Map;activeGates=new Map;pending;previews=new Map;tails=new Map;previewWatchers=new Map;frame=0;hasCommitted=!1;timer;tty;region;constructor(e=b.stdout){this.stream=e,this.tty=!!e.isTTY,this.region=new a(e)}emit(n){let r=f;switch(n.kind){case`task-start`:{let r={name:D(n.name,n.prompt),engine:n.engine,depth:n.depth??0};if(this.names.set(n.taskId,r),!this.tty){this.final(r.depth,O(T(),r.name,n.taskId,null,r.engine));return}this.active.set(n.taskId,r),this.previewWatchers.get(n.taskId)?.close(),this.previewWatchers.set(n.taskId,e(t(b.cwd(),n.taskId),e=>{e&&e!==`log.jsonl`||(this.refreshPreviews(n.taskId),this.repaint())})),this.refreshPreviews(n.taskId),this.spin(!0),this.repaint();return}case`task-end`:{this.active.delete(n.taskId),this.previews.delete(n.taskId),this.tails.delete(n.taskId),this.previewWatchers.get(n.taskId)?.close(),this.previewWatchers.delete(n.taskId),this.idle();let e=this.names.get(n.taskId);this.final(e?.depth??0,O(w(n.status,!this.tty),e?.name??null,n.taskId,n.tokens,e?.engine));return}case`gate-start`:{let e={cmd:n.cmd,depth:n.depth??0,startedAt:Date.now()};if(!this.tty){this.final(e.depth,A(e.cmd,T()));return}this.activeGates.set(n.gateId,e),this.spin(!0),this.repaint();return}case`gate`:n.gateId&&this.activeGates.delete(n.gateId),this.idle(),this.final(n.depth??0,k(n,!this.tty));return;case`log`:for(let e of n.message.split(`
|
|
5
|
-
`))this.final(n.depth??0,r.light(e),!0);return;case`flow-start`:this.final(n.depth-1,r.bold(`flow ${n.name}`));return;case`replay`:this.final(0,r.dim(`replayed ${n.count} steps from journal`),!0)}}done(){this.spin(!1);for(let e of this.previewWatchers.values())e.close();this.previewWatchers.clear(),this.flush(0),this.tty&&this.repaint(),this.region.done()}flush(e){this.pending&&=(this.region.commit(`${P(this.pending,e<this.pending.depth,!this.tty)}\n`),this.hasCommitted=!0,void 0)}final(e,t,n=!1){if(!this.tty){this.region.commit(`${N({depth:e,body:t,log:n})}\n`),this.hasCommitted=!0;return}this.flush(e),this.pending={depth:e,body:t,log:n},this.tty&&this.repaint()}repaint(){let e=[],t=[];if(this.pending){let n=P(this.pending,!1);e.push(n),t.push(n)}let n=this.timer?f.bold(f.cyan(C[this.frame%C.length])):w(`running`);for(let[r,i]of this.active){let a=`${j(i.depth??0)} ${O(n,i.name,r,null,i.engine,!0)}`;(e.length||this.hasCommitted)&&e.push(F(i.depth??0)),e.push(a),t.push(a);let o=this.previews.get(r);o&&e.push(`${M(i.depth??0)} ${f.dim(o)}`)}for(let r of this.activeGates.values()){let i=`${j(r.depth)} ${A(r.cmd,n,Date.now()-r.startedAt)}`;(e.length||this.hasCommitted)&&e.push(F(r.depth)),e.push(i),t.push(i)}let r=(s(this.stream)??1/0)-1,i=e.length<=r?e:t;if(i.length>r){let e=Math.max(0,r-1);i=[f.dim(`… +${i.length-e} more running`),...i.slice(-e)]}this.region.set(i)}refreshPreviews(e){try{let i=this.tails.get(e),a;if(!i){let o=y.join(t(b.cwd(),e),`log.jsonl`),s=x.existsSync(o)?x.statSync(o).size:0;a=r(b.cwd(),e,1)[0],i=n(o,s),this.tails.set(e,i)}for(let e of i())try{a=JSON.parse(e)}catch{a={message:e}}let o=a?.message?.replace(/\s+/g,` `).trim();if(!o)return;let s=(g(this.stream)??120)-8;this.previews.set(e,o.length>s?`${o.slice(0,s-1)}…`:o)}catch{}}idle(){!this.active.size&&!this.activeGates.size&&this.spin(!1)}spin(e){e&&!this.timer?this.timer=setInterval(()=>{this.frame++,this.repaint()},120).unref():!e&&this.timer&&(clearInterval(this.timer),this.timer=void 0)}};function L(e,t){if(t){l(e);return}let n=!b.stdout.isTTY,r=n?``:`${f.dim(`└─`)} `;b.stdout.write(`${r}${w(`completed`,n)} run ${f.cyan(e.runId)} completed ${f.dim(`(${e.taskCount} tasks)`)}\n`),b.stdout.write(`\n${c(e.result)}\n`),z(e.tokens)}async function R(e,t){let{runId:n}=e.record,r=!!(t.stream&&t.json);!t.json&&e.record.status===`running`&&b.stderr.write(`${f.dim(`[flow]`)} Run ${f.cyan(n)} started and is waiting to finish. Press Ctrl-C to detach. It keeps running.\n\n`);let i=t.json?()=>{}:h(),a=()=>{i(),r||(b.stderr.write(`\n${f.dim(`[flow] Detached. The run is still going.`)}\n`),b.stderr.write(`\n${p([`Result: coder flow result ${n}`,`Stop it: coder flow stop ${n}`],f)}\n`)),b.exit(130)};b.on(`SIGINT`,a);let o=new I;for await(let n of e.events)r?b.stdout.write(`${JSON.stringify(n)}\n`):t.json||o.emit(n);o.done(),i(),b.off(`SIGINT`,a);let s=e.final();r&&(b.stdout.write(`${JSON.stringify(B(s))}\n`),b.exit(s.status===`completed`?0:1)),s.status===`completed`&&(L({runId:n,name:s.name,status:`completed`,result:s.result,tokens:s.ledger,taskCount:s.taskCount},t.json),b.exit(0)),s.status===`stopped`&&(t.json?l({runId:n,name:s.name,status:`stopped`,taskCount:s.taskCount}):b.stdout.write(`\n${f.dim(`[flow] Run ${n} stopped.`)}\n\n${p([`Resume: coder flow resume ${n}`],f)}\n`),b.exit(1)),b.stdout.write(`\n${f.red(`error:`)} ${s.error??`unknown error`}\n`),b.stdout.write(`\n${p([`Resume: coder flow resume ${n}`],f)}\n`),b.exit(1)}function z(e){let t=Object.keys(e);if(t.length){b.stdout.write(`\n${f.bold(`Tokens:`)}\n`);for(let n of t)b.stdout.write(` ${f.dim(m(e[n],n))}\n`)}}function B(e){let{steps:t,events:n,...r}=e;return r}export{I as FlowStepRenderer,S as commandWatch,k as gateLine,A as gateRunningLine,N as paintPlain,R as printFollow,z as printLedger,L as printRunSummary,B as resultJson,w as stepSymbol,D as taskLabel,O as taskLine};
|
package/dist/watch-DJXu13jK.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import{Zt as e}from"./core-DwsAMCnL.js";import{br as t,jr as n,mr as r,pn as i,ur as a,wr as o,yr as s}from"./prompts-Bj4Fbd_n.js";import{i as c,r as l}from"./cli-BBlH53hA.js";import{p as u,y as d}from"./output-BKeyLbvt.js";import{s as f,t as p,u as m}from"./args-CURX44CA.js";import{a as h,c as g,i as _,l as v,n as y,t as b,u as x}from"./result-D0dpv2O_.js";import S from"node:process";function C(e,t){let n=e.level===`sys`?t.dim(`· ${e.line}`):e.level===`err`?t.light(e.line):e.line;S.stdout.write(`${n}\n`)}async function w(e,t,n){let r=n.trim===void 0?500:n.trim===`none`?1/0:n.trim;if(`attempts`in e.task){let{logEntry:i}=await import(`./log-view-CL3_S0IQ.js`).then(e=>e.r),a=await b.create({cwd:e.task.task.cwd??t,startedAt:e.task.startedAt??e.task.createdAt,trim:r,explicitTrim:n.trim!==void 0,width:d()});for await(let t of e.events){let e=t;if(n.json){S.stdout.write(`${JSON.stringify(e,null,2)}\n`);continue}let r=e.entry??i(e.line);if(!r){C(e,u);continue}let o=a.render({...r,at:r.at??new Date(e.at).toISOString()});o.length&&S.stdout.write(`${o.join(`
|
|
2
|
-
`)}\n`)}let o=await e.final();n.json||_(o,u),S.exit(0)}let o=e.task,s=await b.create({cwd:o.cwd??t,startedAt:Date.parse(o.createdAt??``)||void 0,trim:r,explicitTrim:n.trim!==void 0,width:d()});if(!n.json){let e=[...g(o,{status:o.status}),...i.includes(o.status)?[u.dim(`Watching. Press Ctrl-C to stop.`)]:[],...o.prompt?h(o.prompt,u,{truncate:!1}):[],``];S.stdout.write(`${e.join(`
|
|
3
|
-
`)}\n`)}let c=null,l=null,f=e=>{let t=s.render(e);t.length&&S.stdout.write(`${t.join(`
|
|
4
|
-
`)}\n`)};for await(let t of e.events){let e=t;if(e.kind===`usage`&&e.tokens&&(c=e.tokens),n.json){let t=e.kind===`steer`?1/0:r,n=e.message?{...e,message:x(e.message,t,{plain:!0})}:e;S.stdout.write(`${JSON.stringify(n)}\n`);continue}e.kind!==`usage`&&(l&&=(f(l),null),e.kind===`assistant`?l=e:f(e))}let{status:p,result:m,task:w}=await e.final();if(n.json)S.stdout.write(`${JSON.stringify({taskId:o.id,status:p,result:m},null,2)}\n`);else{let e=p===`completed`?`(no final message)`:`(task ${p})`,n=v(w,{tokens:m?.tokens??c,tokenModel:m?.model,files:m?.touchedFiles?.map(e=>a(o.cwd??t,e)),statusChanged:p!==o.status});n.length&&S.stderr.write(`\n${n.join(`
|
|
5
|
-
`)}\n`);let r=y(m,w.error,e),i=l?String(l.message??``):``;S.stdout.write(`\n${r.trim()?r:i}\n`)}S.exit(p===`completed`?0:1)}const T=c({name:`task watch`,help:{usage:`coder task watch [task-id] [--server [url]]`,summary:`Stream a running task's transcript live (for you/debugging), then print its
|
|
6
|
-
final answer. Replays the last line first so the current step is visible;
|
|
7
|
-
--tail <n> replays the last n lines (--tail all for the whole transcript).
|
|
8
|
-
Blocks until it finishes; exits 0 on success, 1 otherwise. For the answer
|
|
9
|
-
alone, prefer \`coder result\`. Alias: stream.`,flags:[[`--tail <n|all>`,`replay the last n log lines first (default: 1)`],[`--trim <n|none>`,`budget for tool output and thinking (default: 1200 chars, 12 lines)`],l],examples:[[`coder task watch`,`follow the most recent task to completion`]]},options:{...p,tail:m,trim:o(n([t(`none`),r().check(s(),e())],{error:`expected a positive integer or "none"`})),...f},args:1,async run({options:e,args:[t],cwd:n}){let{tasks:r}=await import(`./task-DJ6nruuA.js`).then(e=>e.t);await w(await r.watch(t,{...e,organization:e.workspace}),n,e)}});export{T as commandWatch,C as printLine};
|
package/dist/worker-CHD_OiQS.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Vt as e}from"./prompts-Bj4Fbd_n.js";import{i as t}from"./cli-BBlH53hA.js";import{i as n}from"./output-BKeyLbvt.js";import{c as r}from"./args-CURX44CA.js";const i=t({name:`task worker`,options:{cwd:r},args:1,async run({args:[t],cwd:r}){let{startAgentMailbox:i}=await import(`./exec-Cprez703.js`).then(e=>e.i),{runWorker:a}=await import(`./worker-KfrTK_Dk.js`),o=e(r,t);o||n(`Worker: task ${t} not found.`),await a(r,o,i)}});export{i as commandWorker};
|
package/dist/worker-KfrTK_Dk.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{$n as e,Dn as t,J as n,Ot as r,P as i,Q as a,U as o,Vt as s,W as c,X as l,Yn as u,Z as d,an as f,bt as p,cn as m,dn as h,fn as g,g as _,nn as v,or as y,pr as b,r as x,wt as S}from"./prompts-Bj4Fbd_n.js";import{F as C,I as w,M as T,S as E,b as D,h as O,s as k}from"./dispatch-CFZ9Crvg.js";import{t as A}from"./chat-bridge-BmqYsASZ.js";import{i as j}from"./history-C53URBjs.js";import{n as M,t as N}from"./log-view-CL3_S0IQ.js";import{c as P,r as F,t as I}from"./mcp-Dsl3Xdd3.js";import{t as L}from"./wire-nJ7sEi-M.js";import R from"node:path";import z from"node:process";import B from"node:fs";const V={claude:{CLAUDE_CODE_DISABLE_AUTO_MEMORY:`1`},codex:{"features.memories":!1}};function H(e){let t=e.currentPrompt??e.prompt??``;return e.resumeThreadId||!e.pendingRollover?t:_(e.pendingRollover,t)}async function U(n,r,i,a){let o=!!r.pendingRollover;g(n,r.id,{status:`running`,steerEndpoint:null,turnId:null,turnUsage:r.turnUsage??[]});let c=v(n,r.id),l=R.join(c,`log.jsonl`),u=y(l,B.existsSync(l)?B.statSync(l).size:0),d=o?{...r,resumeThreadId:null}:r,f,m=e=>{let i=u().flatMap(e=>{let t=M(e);return t?[t]:[]}),a=i.flatMap(e=>e.message?.startsWith(`Steer accepted live:
|
|
2
|
-
`)?[e.message.slice(p.length)]:[]),o=i.filter(e=>e.kind===`reply`).at(-1)?.message;return t(`worker.record.start`,{taskId:r.id,finalized:!1}),J(n,r,e,{steers:a,lastReply:o})},h;try{h=await a(d,{privateTurn:!1,steerable:!o,onResult:e=>{!f&&e.status===0&&!e.error&&(f=m(e))}})}catch(e){throw o&&g(n,r.id,{threadId:r.threadId,resumeThreadId:r.threadId,steerEndpoint:null}),e}h.status!==0&&o&&(h={...h,threadId:r.threadId??null});let _=[...r.previousThreadIds??[]];h.status===0&&r.threadId&&h.threadId&&r.threadId!==h.threadId&&!_.includes(r.threadId)&&_.push(r.threadId);let C=h.status===0&&!!h.threadId&&Number(h.contextTokens)>i,w=new Date().toISOString();t(`worker.engine.closed`,{taskId:r.id}),f??=m(h),b(R.join(c,`result.json`),JSON.parse(e(h))),t(`worker.record.start`,{taskId:r.id,finalized:!0});let T=g(n,r.id,{turnUsage:[...s(n,r.id)?.turnUsage??[],{at:f,tokens:h.tokens,model:h.model}],status:h.status===0?`completed`:`failed`,completedAt:w,rollingOver:C,...C?{pid:z.pid}:{},threadId:h.threadId,resumeThreadId:h.threadId,previousThreadIds:_,...h.status===0?{pendingRollover:void 0}:{},steerEndpoint:null,turnId:h.turnId??null});if(t(`worker.result.recorded`,{taskId:r.id,finalized:!0}),o&&h.status===0&&S(n,r.id,{kind:`status`,message:`Context rolled over: summary plus the last ${r.pendingRollover.exchanges} exchanges`}),!C)return h;try{let t=await j(T),i=await a({...T,currentPrompt:x,outputSchema:void 0},{privateTurn:!0});if(!s(n,r.id))return h;if(i.tokens){let t=new Date(Math.max(Date.now(),Date.parse(f)+1)).toISOString();g(n,r.id,{turnUsage:[...s(n,r.id)?.turnUsage??[],{at:t,tokens:i.tokens,model:i.model}]}),h={...h,tokens:N(h.tokens??null,i.tokens)},b(R.join(c,`result.json`),JSON.parse(e(h)))}if(i.status!==0||!i.finalMessage?.trim())throw Error(i.error?.message??`Summary turn returned no summary`);if(Buffer.byteLength(i.finalMessage)>64e3)throw Error(`Summary exceeded the context budget`);if(s(n,r.id)?.status===`cancelled`)return h;g(n,r.id,{pendingRollover:{summary:i.finalMessage,recent:t.text,exchanges:t.exchanges}})}catch(e){S(n,r.id,{kind:`warning`,message:`Context rollover deferred: ${e instanceof Error?e.message:String(e)}`})}finally{s(n,r.id)&&g(n,r.id,{rollingOver:!1})}return h}function W(e,t){let n=0;return()=>{Date.now()-n>=1e4&&(n=Date.now(),m(e,t))}}function G(t,n,{echo:r}){let i=i=>{let a=JSON.parse(e(typeof i==`string`?{message:i}:i));S(t,n,a),r&&a.message&&z.stderr.write(`[coder] ${a.message}\n`)};for(let e of Object.keys(u()))z.env[e]!==void 0&&i({kind:`warning`,message:`${e} is temporarily unavailable; skipped for this task.`});return i}async function K(e,t,{echo:r,env:s={},privateTurn:u=!1,steerable:p=!u,onResult:m}){let h=f(e),_=v(e,t.id),y=c(e),b=G(e,t.id,{echo:r}),x=i[t.permissions??`auto`]??i.auto,E=x.approvalPolicy===`never`?void 0:O({workspaceRoot:h,taskDir:_,mode:x.approvalMode,escalationTimeoutMs:y.approvals.escalationTimeoutMs,allowedNetworkHosts:y.approvals.allowedNetworkHosts,onEvent:e=>b(e)}),D=t.model?y.models?.[t.model]:void 0,j=D&&o(D)?D:void 0;if(j&&!j.wireApi&&t.model){let r=await L(j);r&&(j={...j,...r},y.models[t.model]=j,n(e,t.model,r),S(e,t.id,{kind:`info`,message:`detected wire api for ${t.model}: ${r.wireApi} @ ${j.baseUrl}`}))}if(j?.envKey&&!z.env[j.envKey])throw Error(`Missing environment variable: \`${j.envKey}\`.`);let M=j?await A(j,j.wireApi??`chat`):null,N=a(y,t.model,M??void 0),I=w(e,t);try{return await T(e,{availabilityChecked:z.env.CODER_ENGINE_CHECKED===`1`,prompt:H(t),developerInstructions:t.systemPrompt,outputSchema:t.outputSchema,model:N?.model??l(t.model),modelProvider:N?.modelProvider??null,configOverrides:{...N?.configOverrides,...I||Object.keys(s).length?{"shell_environment_policy.set":{...s,...I?{[C]:I}:{}}}:{},...t.agentId?V.codex:{}},effort:t.effort,sandbox:x.sandbox,approvalPolicy:x.approvalPolicy,networkAccess:d(t.permissions??`auto`,y.engines.codex?.network),approvalsReviewer:x.approvalMode===`auto`?`auto_review`:null,mcpServers:F(e,t.id,P(t,_,k(t.mcp,z.env,void 0,{onWarning:e=>b({kind:`warning`,message:e})}))),nativeMcp:t.nativeMcp??!1,writableRoots:[...x.sandbox===`read-only`?[]:t.addDirs??[],...I?[I]:[]],onApprovalRequest:E,onHeartbeat:W(e,t.id),onResult:m,resumeThreadId:t.resumeThreadId??null,onControlReady:p?(n,r,i)=>{g(e,t.id,{status:`running`,steerEndpoint:n,threadId:r,turnId:i})}:void 0,onProgress:n=>{if(u||(b(n),!p))return;let r=typeof n==`object`?n.threadId:null,i=typeof n==`object`?n.turnId:null;(r||i)&&g(e,t.id,{status:`running`,...r?{threadId:r}:{},...i?{turnId:i}:{}})}})}finally{g(e,t.id,{steerEndpoint:null}),await M?.close()}}async function q(e,t,{echo:n,env:r={},privateTurn:a=!1,steerable:o=!a,onResult:s}){let l=v(e,t.id),u=c(e),d=G(e,t.id,{echo:n}),f=i[t.permissions??`auto`]??i.auto,p=w(e,t);try{return await E(e,{env:{...r,...p?{[C]:p}:{},...t.agentId?V.claude:{}},prompt:H(t),systemPrompt:t.systemPrompt,excludeDynamicSections:t.conversation,settingSources:t.agentId&&t.source&&![`cli`,`dashboard`,`schedule`].includes(t.source)?`project,local`:void 0,outputSchema:t.outputSchema,model:t.model,effort:t.effort,permissions:t.permissions,approvalTaskId:f.approvalMode===`auto`?t.id:null,allowedNetworkHosts:u.approvals.allowedNetworkHosts,additionalDirectories:t.addDirs,...p?{writableDirectories:[p]}:{},mcpServers:P(t,l,k(t.mcp,z.env,void 0,{onWarning:e=>d({kind:`warning`,message:e})})),nativeMcp:t.nativeMcp??!1,promptCacheTtl:t.conversation&&(r.ANTHROPIC_API_KEY||z.env.ANTHROPIC_API_KEY)?`1h`:void 0,taskRoot:l,resumeSessionId:t.resumeThreadId??null,onHeartbeat:W(e,t.id),onResult:s,onSteerReady:o?n=>{g(e,t.id,{status:`running`,steerEndpoint:n})}:void 0,onProgress:n=>{a||(d(n),o&&n.threadId&&g(e,t.id,{status:`running`,threadId:n.threadId}))}})}finally{g(e,t.id,{steerEndpoint:null})}}function J(n,r,i,a={}){let{steers:o=[],lastReply:s}=a,c=r.turnUsage?.at(-1)?.at,l=v(n,r.id);b(R.join(l,`result.json`),JSON.parse(e(i)));let u={at:new Date(Math.max(Date.now(),c?Date.parse(c)+1:0)).toISOString(),prompt:r.currentPrompt??r.prompt??null,...o.length?{steers:o}:{},...s?{lastReply:s}:{},...i};return B.appendFileSync(R.join(l,`results.jsonl`),`${e(u)}\n`,`utf8`),t(`worker.result.recorded`,{taskId:r.id,finalized:!1}),z.connected&&z.send?.(`result`),u.at}function Y(e){return async(e,t,n)=>{let r=await I(k(t.mcp,z.env,void 0,{onWarning:()=>{}}));try{let i=t.engine===`claude`?q:K;return await U(e,t,t.conversation?c(e).conversationCompactTokens:1/0,(t,a)=>i(e,t,{...n,...a,env:r.env}))}finally{await r.close()}}}async function X(e,t){for(;;){let n=await h(e,t,()=>{let n=s(e,t);if(!n)return[];let i=n.status===`failed`||n.status===`cancelled`?[]:r(e,t);return i.length||(g(e,t,{steerClosed:!0,steerEndpoint:null}),z.connected&&z.send?.(`settled`)),i});if(!n.length)return;for(let r of n){let n=g(e,t,{status:`running`,currentPrompt:r,resumeThreadId:s(e,t)?.threadId??null});S(e,t,{message:`Running steered follow-up.`});try{await Y(n)(e,n,{echo:!1})}catch(n){let r=n instanceof Error?n.message:String(n);g(e,t,{status:`failed`,error:r}),S(e,t,{kind:`error`,message:r});return}}}}async function Z(e,t,n){if(t.dispatchId&&!t.resumedAt)try{B.writeFileSync(R.join(v(e,t.id),`start-${t.dispatchId}`),``,{flag:`wx`})}catch(e){if(e.code===`EEXIST`)return;throw e}g(e,t.id,{status:`running`,pid:z.pid,steerClosed:!1});let r=()=>{},i;try{if(r=n(e,t),t.name?.startsWith(`agent:`)){let{startInboxControl:n,applyTaskMessage:r}=await import(`./task-bkoi8_NN.js`).then(e=>e.d);i=n(v(e,t.id),t.name.slice(6),n=>r(e,s(e,t.id)??t,n))}if(t.simulateApproval){let n=await D(v(e,t.id),{onEvent:n=>S(e,t.id,n)});if(S(e,t.id,{message:`simulated approval: ${n}`}),n===`decline`){g(e,t.id,{status:`cancelled`,completedAt:new Date().toISOString(),error:`simulated approval denied`});return}}await Y(t)(e,t,{echo:!1}),await X(e,t.id)}catch(n){let r=n instanceof Error?n.message:String(n);throw g(e,t.id,{status:`failed`,error:r}),S(e,t.id,{kind:`error`,message:r}),n}finally{await h(e,t.id,()=>{s(e,t.id)?.pid===z.pid&&(g(e,t.id,{steerClosed:!0,steerEndpoint:null}),z.connected&&z.send?.(`settled`))}),r(),await i?.close()}}export{Z as runWorker};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./cli-BBlH53hA.js";import t from"node:process";const n=e({name:`server workflow`,globalFlags:{json:!1,cwd:!1},help:{usage:`coder server workflow`,summary:`Print the workflow the github-actions runner dispatches. Save it as .github/workflows/coder-agent.yml in every repo the agent runs on, and set RUNNER=github-actions on the server.`,examples:[[`coder server workflow > .github/workflows/coder-agent.yml`,`add it to a repo`]]},options:{},run:async()=>{let{actionsWorkflow:e}=await import(`./runners-DyLnqHKy.js`).then(e=>e.y);return e()},print:e=>t.stdout.write(e)});export{n as commandServerWorkflow};
|