farming-code 2.2.29 → 2.2.32
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 +25 -66
- package/README.zh_cn.md +15 -66
- package/THIRD_PARTY_NOTICES.md +7 -0
- package/backend/acp/{client-services.js → client-services.cjs} +132 -134
- package/backend/acp/packaged-claude-acp.cjs +37 -0
- package/backend/acp/packaged-codex-acp.cjs +37 -0
- package/backend/acp/patch-decisions.cjs +182 -0
- package/backend/acp/permission-security.cjs +131 -0
- package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
- package/backend/{acp-runtime.js → acp-runtime.cjs} +1219 -1125
- package/backend/acp-session-state.cjs +622 -0
- package/backend/acp-transcript.cjs +525 -0
- package/backend/agent-env.cjs +257 -0
- package/backend/agent-extension-discovery.cjs +452 -0
- package/backend/agent-extension-inventory.cjs +116 -0
- package/backend/agent-json-stream.cjs +283 -0
- package/backend/agent-lifecycle-journal.cjs +185 -0
- package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
- package/backend/agent-order-transaction.cjs +85 -0
- package/backend/agent-order.cjs +159 -0
- package/backend/agent-provider-session.cjs +98 -0
- package/backend/agent-runtime-binding.cjs +179 -0
- package/backend/agent-session-history.cjs +1022 -0
- package/backend/agent-session-inventory.cjs +291 -0
- package/backend/async-cache.cjs +104 -0
- package/backend/atomic-json-store.cjs +67 -0
- package/backend/auth.cjs +261 -0
- package/backend/authoritative-inventory-cache.cjs +383 -0
- package/backend/business-health.cjs +68 -0
- package/backend/chat-runtime.cjs +50 -0
- package/backend/claude-settings.cjs +132 -0
- package/backend/cli-agents.cjs +435 -0
- package/backend/codex-context-window.cjs +196 -0
- package/backend/codex-models.cjs +228 -0
- package/backend/codex-session-archive.cjs +82 -0
- package/backend/codex-session-history.cjs +590 -0
- package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
- package/backend/codex-transcript-sanitizer.cjs +130 -0
- package/backend/codex-transcript.cjs +2107 -0
- package/backend/command-runner-child.cjs +105 -0
- package/backend/config-manager.cjs +1263 -0
- package/backend/control-api.cjs +439 -0
- package/backend/data/LICENSE.cua +21 -0
- package/backend/executable-discovery.cjs +204 -0
- package/backend/farming-agent-bootstrap.cjs +81 -0
- package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
- package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
- package/backend/farming-cli.cjs +414 -0
- package/backend/farming-net-pass.cjs +319 -0
- package/backend/farming-net-registry.cjs +123 -0
- package/backend/farming-net-server.cjs +309 -0
- package/backend/farming-session-store.cjs +651 -0
- package/backend/git-worktree-info.cjs +181 -0
- package/backend/haiku-token.cjs +828 -0
- package/backend/index-html.cjs +96 -0
- package/backend/input-parts.cjs +68 -0
- package/backend/input-routing.cjs +40 -0
- package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
- package/backend/main-agent-skills.cjs +309 -0
- package/backend/main-page-session.cjs +132 -0
- package/backend/native-pty-controller-generation.cjs +139 -0
- package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
- package/backend/native-pty-host-identity.cjs +125 -0
- package/backend/native-pty-host-path.cjs +68 -0
- package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
- package/backend/native-session-engine.cjs +296 -0
- package/backend/network.cjs +57 -0
- package/backend/npm-update-helper.cjs +399 -0
- package/backend/packaged-node-pty.cjs +120 -0
- package/backend/preview-session-manager.cjs +89 -0
- package/backend/provider-adapters.cjs +492 -0
- package/backend/provider-home-configuration.cjs +211 -0
- package/backend/provider-session-id.cjs +79 -0
- package/backend/provider-session-service.cjs +333 -0
- package/backend/qr-share-tickets.cjs +119 -0
- package/backend/resource-broadcast-protocol.cjs +50 -0
- package/backend/review-diff-router.cjs +202 -0
- package/backend/review-diff-service.cjs +1267 -0
- package/backend/review-session-router.cjs +93 -0
- package/backend/review-session-service.cjs +470 -0
- package/backend/review-session-store.cjs +161 -0
- package/backend/review-state-router.cjs +132 -0
- package/backend/review-state-store.cjs +299 -0
- package/backend/run-history-store.cjs +97 -0
- package/backend/runtime-dependency-manager.cjs +893 -0
- package/backend/runtime-executable-invocation.cjs +37 -0
- package/backend/runtime-observation.cjs +96 -0
- package/backend/server-process-identity.cjs +70 -0
- package/backend/server.cjs +3356 -0
- package/backend/session-engine-bridge.cjs +144 -0
- package/backend/session-engine-router.cjs +105 -0
- package/backend/session-engine.cjs +64 -0
- package/backend/session-stream-protocol.cjs +181 -0
- package/backend/shell-busy-integration.cjs +442 -0
- package/backend/slash-command-discovery.cjs +423 -0
- package/backend/storage-layout.cjs +263 -0
- package/backend/system-monitor.cjs +96 -0
- package/backend/terminal-attach-checkpoint.cjs +73 -0
- package/backend/terminal-exit-quiescence.cjs +57 -0
- package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
- package/backend/terminal-runtime-cleanup.cjs +99 -0
- package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
- package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
- package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
- package/backend/terminal-screen-worker.cjs +352 -0
- package/backend/terminal-state-serialization.cjs +147 -0
- package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
- package/backend/theme-manager.cjs +185 -0
- package/backend/update-service.cjs +675 -0
- package/backend/usage-forecast.cjs +95 -0
- package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
- package/backend/usage-history-smoke.cjs +85 -0
- package/backend/usage-history-worker.cjs +60 -0
- package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
- package/backend/workspace-directory.cjs +239 -0
- package/backend/workspace-discovery.cjs +271 -0
- package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
- package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
- package/backend/workspace-root-registry.cjs +192 -0
- package/bin/farming +1 -1
- package/config/farming.deploy.env.example +1 -1
- package/config/farming.install.env.example +1 -1
- package/dist/acp/codex-acp-1.1.4.mjs +405 -8
- package/dist/assets/App-BCkdpWB6.css +1 -0
- package/dist/assets/App-CRjKpaGp.js +697 -0
- package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
- package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
- package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
- package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
- package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
- package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
- package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
- package/dist/assets/code-dark-B7eM_9G9.css +1 -0
- package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
- package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
- package/dist/assets/file-icons-BpeqWkIB.js +1 -0
- package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
- package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
- package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
- package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
- package/dist/assets/{index-CQNaZc3l.js → index-C8MchCem.js} +3 -3
- package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
- package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
- package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
- package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
- package/dist/assets/main-CLKXa6hf.css +1 -0
- package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
- package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
- package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
- package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
- package/dist/assets/review-C8-oPKXk.css +1 -0
- package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
- package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
- package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
- package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
- package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
- package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
- package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
- package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
- package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
- package/dist/index.html +2 -1
- package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
- package/extensions/browser/backend/agent-capability.cjs +85 -0
- package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
- package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
- package/extensions/browser/backend/browser-resource-store.cjs +228 -0
- package/extensions/browser/backend/browser-router.cjs +203 -0
- package/extensions/browser/backend/executable-discovery.cjs +248 -0
- package/extensions/browser/backend/farming-browser-client.cjs +116 -0
- package/extensions/browser/backend/index.cjs +32 -0
- package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
- package/extensions/browser/bin/farming-browser +16 -7
- package/extensions/computer/backend/agent-capability.cjs +72 -0
- package/extensions/computer/backend/computer-constants.cjs +59 -0
- package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
- package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
- package/extensions/computer/backend/computer-resource-store.cjs +190 -0
- package/extensions/computer/backend/computer-router.cjs +257 -0
- package/extensions/computer/backend/cua-tools.json +3067 -0
- package/extensions/computer/backend/farming-computer-client.cjs +84 -0
- package/extensions/computer/backend/index.cjs +35 -0
- package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
- package/extensions/computer/bin/farming-computer +131 -0
- package/frontend/farming-net/app.js +255 -262
- package/frontend/ghostty-loader.js +24 -20
- package/frontend/reading-anchor.js +210 -193
- package/frontend/runtime-paths.js +24 -26
- package/frontend/session-bridge.js +90 -111
- package/frontend/session-modal-bridge.js +184 -302
- package/frontend/skin-bridge.js +20 -23
- package/frontend/skins/crt/app.js +7686 -7901
- package/frontend/skins/crt/effects.js +7 -6
- package/frontend/skins/crt/index.html +6 -6
- package/frontend/skins/crt/styles/markdown.css +4 -4
- package/frontend/terminal-bridge.js +174 -181
- package/frontend/terminal-replay.js +320 -345
- package/frontend/theme-loader.js +55 -71
- package/index.html +1 -0
- package/package.json +64 -37
- package/shared/backend-connection-status.js +38 -69
- package/shared/browser-protocol.js +235 -110
- package/shared/websocket-liveness.js +40 -0
- package/backend/acp/packaged-claude-acp.js +0 -13
- package/backend/acp/packaged-codex-acp.js +0 -13
- package/backend/acp/patch-decisions.js +0 -153
- package/backend/acp/permission-security.js +0 -108
- package/backend/acp-session-state.js +0 -644
- package/backend/acp-transcript.js +0 -512
- package/backend/agent-env.js +0 -250
- package/backend/agent-json-stream.js +0 -268
- package/backend/agent-lifecycle-journal.js +0 -133
- package/backend/agent-memory-report.js +0 -583
- package/backend/agent-order.js +0 -166
- package/backend/agent-provider-session.js +0 -76
- package/backend/agent-runtime-binding.js +0 -174
- package/backend/agent-session-history.js +0 -953
- package/backend/async-cache.js +0 -94
- package/backend/atomic-json-store.js +0 -37
- package/backend/auth.js +0 -251
- package/backend/bundle-update-helper.js +0 -113
- package/backend/chat-runtime.js +0 -28
- package/backend/claude-settings.js +0 -121
- package/backend/cli-agents.js +0 -486
- package/backend/codex-context-window.js +0 -189
- package/backend/codex-models.js +0 -226
- package/backend/codex-rollout-follower.js +0 -326
- package/backend/codex-session-archive.js +0 -65
- package/backend/codex-session-history.js +0 -647
- package/backend/codex-transcript-sanitizer.js +0 -115
- package/backend/codex-transcript.js +0 -2564
- package/backend/command-runner-child.js +0 -67
- package/backend/config-manager.js +0 -1133
- package/backend/control-api.js +0 -455
- package/backend/executable-discovery.js +0 -216
- package/backend/farming-agent-bootstrap.js +0 -49
- package/backend/farming-cli.js +0 -457
- package/backend/farming-net-pass.js +0 -285
- package/backend/farming-net-registry.js +0 -112
- package/backend/farming-net-server.js +0 -298
- package/backend/farming-session-store.js +0 -677
- package/backend/git-worktree-info.js +0 -181
- package/backend/haiku-token.js +0 -772
- package/backend/index-html.js +0 -62
- package/backend/input-parts.js +0 -54
- package/backend/input-routing.js +0 -24
- package/backend/json-cli-runtime.js +0 -275
- package/backend/main-agent-skills.js +0 -305
- package/backend/main-page-session.js +0 -122
- package/backend/native-pty-controller-generation.js +0 -106
- package/backend/native-pty-host-identity.js +0 -86
- package/backend/native-pty-host-path.js +0 -42
- package/backend/native-session-engine.js +0 -268
- package/backend/network.js +0 -23
- package/backend/npm-update-helper.js +0 -374
- package/backend/packaged-node-pty.js +0 -99
- package/backend/preview-session-manager.js +0 -68
- package/backend/provider-adapters.js +0 -399
- package/backend/provider-session-id.js +0 -47
- package/backend/provider-session-service.js +0 -345
- package/backend/qr-share-tickets.js +0 -100
- package/backend/review-diff-router.js +0 -180
- package/backend/review-diff-service.js +0 -1270
- package/backend/review-session-router.js +0 -74
- package/backend/review-session-service.js +0 -446
- package/backend/review-session-store.js +0 -151
- package/backend/review-state-router.js +0 -116
- package/backend/review-state-store.js +0 -286
- package/backend/run-history-store.js +0 -67
- package/backend/runtime-dependency-manager.js +0 -759
- package/backend/runtime-executable-invocation.js +0 -20
- package/backend/runtime-observation.js +0 -81
- package/backend/server-process-identity.js +0 -47
- package/backend/server.js +0 -3267
- package/backend/session-engine-bridge.js +0 -129
- package/backend/session-engine-router.js +0 -66
- package/backend/session-engine.js +0 -39
- package/backend/session-stream-protocol.js +0 -185
- package/backend/shell-busy-integration.js +0 -472
- package/backend/slash-command-discovery.js +0 -433
- package/backend/storage-layout.js +0 -190
- package/backend/system-monitor.js +0 -77
- package/backend/terminal-attach-checkpoint.js +0 -74
- package/backend/terminal-exit-quiescence.js +0 -39
- package/backend/terminal-runtime-cleanup.js +0 -80
- package/backend/terminal-screen-worker.js +0 -337
- package/backend/terminal-state-serialization.js +0 -127
- package/backend/theme-manager.js +0 -163
- package/backend/update-service.js +0 -1545
- package/backend/usage-forecast.js +0 -86
- package/backend/usage-history-scanner.ts +0 -2718
- package/backend/usage-history-smoke.js +0 -64
- package/backend/usage-history-worker.js +0 -34
- package/backend/workspace-directory.js +0 -232
- package/backend/workspace-discovery.js +0 -311
- package/backend/workspace-root-registry.js +0 -166
- package/dist/assets/App-BKNUILuL.css +0 -1
- package/dist/assets/App-Ex2oVVXO.js +0 -693
- package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
- package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
- package/dist/assets/ProjectFilesSection-Cf2BEcAN.js +0 -12
- package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
- package/dist/assets/code-dark-BEZTQwYZ.css +0 -1
- package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
- package/dist/assets/main-DK9Sy7-c.css +0 -1
- package/dist/assets/review-BcnwQtJv.css +0 -1
- package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
- package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
- package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
- package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
- package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
- package/extensions/browser/backend/agent-capability.js +0 -55
- package/extensions/browser/backend/browser-mcp-server.js +0 -621
- package/extensions/browser/backend/browser-resource-manager.js +0 -1309
- package/extensions/browser/backend/browser-resource-store.js +0 -190
- package/extensions/browser/backend/browser-router.js +0 -133
- package/extensions/browser/backend/executable-discovery.js +0 -224
- package/extensions/browser/backend/farming-browser-client.js +0 -83
- package/extensions/browser/backend/index.js +0 -7
- package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
- package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
- package/extensions/browser/frontend/browser-resource-state.ts +0 -60
- package/extensions/browser/frontend/browser.css +0 -567
- package/extensions/browser/frontend/types.ts +0 -31
- package/extensions/browser/frontend/useBrowserResources.ts +0 -158
- package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
- package/shared/backend-connection-status.d.ts +0 -37
- package/shared/browser-protocol.d.ts +0 -5
- /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
- /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
- /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
- /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
- /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
- /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
- /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
- /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
- /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
- /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
- /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
- /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
- /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
- /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
- /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
- /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
- /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
- /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
- /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
- /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
- /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
- /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
- /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
- /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
- /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
- /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
- /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
- /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
- /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
- /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
- /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
- /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
- /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
- /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
- /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
- /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
- /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
- /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
- /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
- /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
- /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
- /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
- /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
- /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
- /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
- /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
- /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
- /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
- /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
- /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
- /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
- /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
- /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
- /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
- /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
- /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
- /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Generated by scripts/build-backend-runtime.ts. Do not edit.
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var farming_computer_client_exports = {};
|
|
21
|
+
__export(farming_computer_client_exports, {
|
|
22
|
+
requestJson: () => requestJson
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(farming_computer_client_exports);
|
|
25
|
+
const fs = require("fs");
|
|
26
|
+
const http = require("http");
|
|
27
|
+
const https = require("https");
|
|
28
|
+
const { URL } = require("url");
|
|
29
|
+
function connection(env = process.env) {
|
|
30
|
+
const controlUrl = String(env.FARMING_CONTROL_URL || "").trim();
|
|
31
|
+
if (!controlUrl) throw new Error("FARMING_CONTROL_URL is not available");
|
|
32
|
+
let token = "";
|
|
33
|
+
if (env.FARMING_TOKEN_FILE && fs.existsSync(env.FARMING_TOKEN_FILE)) {
|
|
34
|
+
token = fs.readFileSync(env.FARMING_TOKEN_FILE, "utf8").trim();
|
|
35
|
+
}
|
|
36
|
+
return { controlUrl: controlUrl.replace(/\/+$/, ""), token };
|
|
37
|
+
}
|
|
38
|
+
function requestJson(method, pathname, body, env = process.env) {
|
|
39
|
+
const target = connection(env);
|
|
40
|
+
const url = new URL(`${target.controlUrl}${pathname}`);
|
|
41
|
+
const client = url.protocol === "https:" ? https : http;
|
|
42
|
+
const payload = body === void 0 ? "" : JSON.stringify(body);
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
const request = client.request(url, {
|
|
45
|
+
method,
|
|
46
|
+
headers: {
|
|
47
|
+
Accept: "application/json",
|
|
48
|
+
...payload ? { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(payload) } : {},
|
|
49
|
+
...target.token ? { Cookie: `farming_token=${encodeURIComponent(target.token)}` } : {},
|
|
50
|
+
...env.FARMING_AGENT_ID ? { "X-Farming-Agent-Id": env.FARMING_AGENT_ID } : {}
|
|
51
|
+
}
|
|
52
|
+
}, (response) => {
|
|
53
|
+
const chunks = [];
|
|
54
|
+
response.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
|
|
55
|
+
response.on("end", () => {
|
|
56
|
+
const text = Buffer.concat(chunks).toString("utf8");
|
|
57
|
+
let value = {};
|
|
58
|
+
try {
|
|
59
|
+
value = text ? JSON.parse(text) : {};
|
|
60
|
+
} catch {
|
|
61
|
+
value = { error: text || `HTTP ${response.statusCode}` };
|
|
62
|
+
}
|
|
63
|
+
if (Number(response.statusCode) < 200 || Number(response.statusCode) >= 300) {
|
|
64
|
+
const record = value && typeof value === "object" ? value : {};
|
|
65
|
+
reject(Object.assign(new Error(String(record.error || `HTTP ${response.statusCode}`)), {
|
|
66
|
+
status: response.statusCode,
|
|
67
|
+
code: record.code,
|
|
68
|
+
uncertain: record.uncertain === true
|
|
69
|
+
}));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
resolve(value);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
request.setTimeout(6e4, () => request.destroy(new Error("Computer request timed out")));
|
|
76
|
+
request.on("error", reject);
|
|
77
|
+
if (payload) request.write(payload);
|
|
78
|
+
request.end();
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
82
|
+
0 && (module.exports = {
|
|
83
|
+
requestJson
|
|
84
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Generated by scripts/build-backend-runtime.ts. Do not edit.
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var backend_exports = {};
|
|
21
|
+
__export(backend_exports, {
|
|
22
|
+
ComputerResourceManager: () => import_computer_resource_manager.ComputerResourceManager,
|
|
23
|
+
IsolatedBrowserProvider: () => import_isolated_browser_provider.IsolatedBrowserProvider,
|
|
24
|
+
createComputerRouter: () => import_computer_router.createComputerRouter
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(backend_exports);
|
|
27
|
+
var import_computer_resource_manager = require("./computer-resource-manager.cjs");
|
|
28
|
+
var import_computer_router = require("./computer-router.cjs");
|
|
29
|
+
var import_isolated_browser_provider = require("./isolated-browser-provider.cjs");
|
|
30
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
31
|
+
0 && (module.exports = {
|
|
32
|
+
ComputerResourceManager,
|
|
33
|
+
IsolatedBrowserProvider,
|
|
34
|
+
createComputerRouter
|
|
35
|
+
});
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// Generated by scripts/build-backend-runtime.ts. Do not edit.
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var isolated_browser_provider_exports = {};
|
|
21
|
+
__export(isolated_browser_provider_exports, {
|
|
22
|
+
IsolatedBrowserProvider: () => IsolatedBrowserProvider,
|
|
23
|
+
LEGACY_ISOLATED_BROWSER_IMAGE_DIGEST: () => LEGACY_ISOLATED_BROWSER_IMAGE_DIGEST
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(isolated_browser_provider_exports);
|
|
26
|
+
var import_managed_chromium_installer = require("../../browser/backend/managed-chromium-installer.cjs");
|
|
27
|
+
const { execFile } = require("child_process");
|
|
28
|
+
const { promisify } = require("util");
|
|
29
|
+
const crypto = require("crypto");
|
|
30
|
+
const execFileAsync = promisify(execFile);
|
|
31
|
+
const LEGACY_ISOLATED_BROWSER_IMAGE_DIGEST = "sha256:27764b6a7867b1d7ed07975b4678e20c3005e469b0fb8178d8ee6986c14cc97b";
|
|
32
|
+
function isolatedBrowserError(message, code, status = 409) {
|
|
33
|
+
return Object.assign(new Error(message), { code, status });
|
|
34
|
+
}
|
|
35
|
+
class IsolatedBrowserProvider {
|
|
36
|
+
computerResourceManager;
|
|
37
|
+
configFingerprint;
|
|
38
|
+
chromiumInstaller;
|
|
39
|
+
docker;
|
|
40
|
+
preparePromise = null;
|
|
41
|
+
constructor(options) {
|
|
42
|
+
this.computerResourceManager = options.computerResourceManager;
|
|
43
|
+
this.configFingerprint = crypto.createHash("sha256").update(options.configDir).digest("hex").slice(0, 12);
|
|
44
|
+
this.docker = options.dockerRunner || (async (args, runOptions = {}) => {
|
|
45
|
+
const result = await execFileAsync("docker", args, {
|
|
46
|
+
encoding: "utf8",
|
|
47
|
+
timeout: runOptions.timeoutMs || 9e4,
|
|
48
|
+
maxBuffer: runOptions.maxBuffer || 20 * 1024 * 1024
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
stdout: String(result.stdout || ""),
|
|
52
|
+
stderr: String(result.stderr || "")
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
this.chromiumInstaller = options.chromiumInstaller || new import_managed_chromium_installer.ManagedChromiumInstaller({
|
|
56
|
+
configDir: options.configDir,
|
|
57
|
+
platform: "linux",
|
|
58
|
+
arch: process.arch,
|
|
59
|
+
platformKey: `linux-${process.arch}-computer`,
|
|
60
|
+
verifyBrowser: (executablePath) => this.computerResourceManager.verifyBrowserExecutable(executablePath)
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async capability(refresh = false) {
|
|
64
|
+
const computer = await this.computerResourceManager.capability(refresh);
|
|
65
|
+
const chromiumValue = this.chromiumInstaller.status();
|
|
66
|
+
const chromium = chromiumValue && typeof chromiumValue === "object" ? chromiumValue : {};
|
|
67
|
+
const imageReady = computer.imageReady === true && chromium.state === "ready";
|
|
68
|
+
return {
|
|
69
|
+
available: computer.dockerAvailable === true && imageReady,
|
|
70
|
+
dockerAvailable: computer.dockerAvailable === true,
|
|
71
|
+
imageReady,
|
|
72
|
+
image: computer.image || "",
|
|
73
|
+
imageDigest: computer.imageDigest || "",
|
|
74
|
+
compatibilityMode: computer.compatibilityMode === true,
|
|
75
|
+
chromium,
|
|
76
|
+
error: String(computer.error || chromium.error || "")
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
prepare() {
|
|
80
|
+
if (this.preparePromise) return this.preparePromise;
|
|
81
|
+
this.preparePromise = (async () => {
|
|
82
|
+
await this.computerResourceManager.prepare();
|
|
83
|
+
await this.chromiumInstaller.install();
|
|
84
|
+
return this.capability(true);
|
|
85
|
+
})().finally(() => {
|
|
86
|
+
this.preparePromise = null;
|
|
87
|
+
});
|
|
88
|
+
return this.preparePromise;
|
|
89
|
+
}
|
|
90
|
+
async recover() {
|
|
91
|
+
let listed;
|
|
92
|
+
try {
|
|
93
|
+
listed = await this.docker([
|
|
94
|
+
"ps",
|
|
95
|
+
"-aq",
|
|
96
|
+
"--filter",
|
|
97
|
+
"label=farming.dev/kind=isolated-browser",
|
|
98
|
+
"--filter",
|
|
99
|
+
`label=farming.dev/config=${this.configFingerprint}`,
|
|
100
|
+
"--filter",
|
|
101
|
+
`label=farming.dev/image-digest=${LEGACY_ISOLATED_BROWSER_IMAGE_DIGEST}`
|
|
102
|
+
], { timeoutMs: 1e4 });
|
|
103
|
+
} catch {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
for (const id of listed.stdout.split(/\s+/).filter(Boolean)) {
|
|
107
|
+
const inspected = await this.docker(["inspect", id], { timeoutMs: 1e4 });
|
|
108
|
+
const parsed = JSON.parse(inspected.stdout);
|
|
109
|
+
const value = Array.isArray(parsed) && parsed[0] && typeof parsed[0] === "object" ? parsed[0] : {};
|
|
110
|
+
const labels = value.Config && typeof value.Config === "object" ? value.Config.Labels : {};
|
|
111
|
+
if (labels["farming.dev/kind"] !== "isolated-browser" || labels["farming.dev/config"] !== this.configFingerprint || labels["farming.dev/image-digest"] !== LEGACY_ISOLATED_BROWSER_IMAGE_DIGEST) continue;
|
|
112
|
+
const state = value.State && typeof value.State === "object" ? value.State : {};
|
|
113
|
+
if (state.Running === true) {
|
|
114
|
+
await this.docker(["stop", "--time", "10", id], { timeoutMs: 3e4 });
|
|
115
|
+
}
|
|
116
|
+
await this.docker(["rm", id], { timeoutMs: 3e4 });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async acquire(owner) {
|
|
120
|
+
const ownerAgentId = String(owner.ownerAgentId || "").trim();
|
|
121
|
+
const projectRootId = String(owner.projectRootId || "").trim();
|
|
122
|
+
const workspace = String(owner.workspace || "").trim();
|
|
123
|
+
if (!ownerAgentId || !projectRootId || !workspace) {
|
|
124
|
+
throw isolatedBrowserError(
|
|
125
|
+
"An Agent-owned Browser requires an Agent and Project workspace",
|
|
126
|
+
"ISOLATED_BROWSER_AGENT_OWNER_REQUIRED",
|
|
127
|
+
400
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
const option = this.chromiumInstaller.browserOption();
|
|
131
|
+
const executablePath = String(option?.path || "").trim();
|
|
132
|
+
if (!executablePath) {
|
|
133
|
+
throw isolatedBrowserError(
|
|
134
|
+
"Prepare the isolated Browser runtime before starting this Browser",
|
|
135
|
+
"ISOLATED_BROWSER_IMAGE_NOT_READY",
|
|
136
|
+
503
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
return this.computerResourceManager.acquireBrowser({
|
|
140
|
+
ownerAgentId,
|
|
141
|
+
projectRootId,
|
|
142
|
+
workspace,
|
|
143
|
+
executablePath
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
release(leaseKey) {
|
|
147
|
+
return this.computerResourceManager.releaseBrowser(leaseKey);
|
|
148
|
+
}
|
|
149
|
+
deleteOwner(_ownerKey) {
|
|
150
|
+
return Promise.resolve();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
154
|
+
0 && (module.exports = {
|
|
155
|
+
IsolatedBrowserProvider,
|
|
156
|
+
LEGACY_ISOLATED_BROWSER_IMAGE_DIGEST
|
|
157
|
+
});
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { requestJson } = require('../backend/farming-computer-client.cjs');
|
|
3
|
+
const { rootIdForPath } = require('../../../backend/workspace-root-registry.cjs');
|
|
4
|
+
|
|
5
|
+
function usage() {
|
|
6
|
+
return `Usage: farming computer <command> [options]
|
|
7
|
+
|
|
8
|
+
Start here:
|
|
9
|
+
capability Check Docker and the pinned Computer runtime
|
|
10
|
+
list Show this Agent's Computer Resource
|
|
11
|
+
open [--name <name>] Create or start this Agent's isolated Computer
|
|
12
|
+
stop Stop it without deleting the owned container
|
|
13
|
+
help workflow Read the recommended Agent workflow
|
|
14
|
+
|
|
15
|
+
Advanced:
|
|
16
|
+
call <tool> [json] Call one pinned Cua Driver tool
|
|
17
|
+
mcp Serve the complete computer_* MCP catalog
|
|
18
|
+
|
|
19
|
+
The Computer is owned by the current Farming Agent. The user can observe the
|
|
20
|
+
same desktop in Farming and explicitly take control. Run \`farming computer
|
|
21
|
+
help workflow\` before the first terminal-driven task.
|
|
22
|
+
`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function workflowHelp() {
|
|
26
|
+
return `Recommended Computer workflow:
|
|
27
|
+
1. farming capabilities
|
|
28
|
+
2. farming computer list
|
|
29
|
+
3. farming computer open
|
|
30
|
+
4. Observe with get_desktop_state or get_window_state before each action
|
|
31
|
+
5. Act through a specific Cua Driver tool
|
|
32
|
+
6. Observe again and verify the result
|
|
33
|
+
|
|
34
|
+
If an action times out, its outcome is uncertain. Observe before any retry.
|
|
35
|
+
When a human returns control to the Agent, the next call must be an observation.
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function option(args, name) {
|
|
40
|
+
const index = args.indexOf(name);
|
|
41
|
+
return index >= 0 ? args[index + 1] : undefined;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function envBinding() {
|
|
45
|
+
const workspace = String(process.env.FARMING_PROJECT_WORKSPACE || '').trim();
|
|
46
|
+
const agentId = String(process.env.FARMING_AGENT_ID || '').trim();
|
|
47
|
+
if (!workspace || !agentId) {
|
|
48
|
+
throw new Error('farming computer must run inside a Farming Agent Project');
|
|
49
|
+
}
|
|
50
|
+
return { workspace, agentId };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function list() {
|
|
54
|
+
const snapshot = await requestJson('GET', '/api/computers', undefined, process.env);
|
|
55
|
+
return Array.isArray(snapshot.resources) ? snapshot.resources : [];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function open(args) {
|
|
59
|
+
const { workspace, agentId } = envBinding();
|
|
60
|
+
const existing = (await list())[0];
|
|
61
|
+
const resource = existing || await requestJson('POST', '/api/computers', {
|
|
62
|
+
rootId: rootIdForPath(workspace),
|
|
63
|
+
agentId,
|
|
64
|
+
name: option(args, '--name'),
|
|
65
|
+
}, process.env);
|
|
66
|
+
if (resource.status === 'running') return resource;
|
|
67
|
+
return requestJson(
|
|
68
|
+
'POST',
|
|
69
|
+
`/api/computers/${encodeURIComponent(resource.id)}/start`,
|
|
70
|
+
undefined,
|
|
71
|
+
process.env,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function run(argv = process.argv.slice(2)) {
|
|
76
|
+
const command = argv[0] || 'help';
|
|
77
|
+
if (command === 'help' || command === '--help' || command === '-h') {
|
|
78
|
+
console.log(argv[1] === 'workflow' ? workflowHelp() : usage());
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
if (command === 'mcp') {
|
|
82
|
+
const { runComputerMcpServer } = require('../backend/computer-mcp-server.cjs');
|
|
83
|
+
await runComputerMcpServer();
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
if (command === 'capability') {
|
|
87
|
+
console.log(JSON.stringify(await requestJson('GET', '/api/computers/capability', undefined, process.env), null, 2));
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
if (command === 'list') {
|
|
91
|
+
console.log(JSON.stringify({ resources: await list() }, null, 2));
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
if (command === 'open') {
|
|
95
|
+
console.log(JSON.stringify(await open(argv.slice(1)), null, 2));
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
if (command === 'stop') {
|
|
99
|
+
const resource = (await list())[0];
|
|
100
|
+
const result = resource
|
|
101
|
+
? await requestJson('POST', `/api/computers/${encodeURIComponent(resource.id)}/stop`, undefined, process.env)
|
|
102
|
+
: { stopped: true, resource: null };
|
|
103
|
+
console.log(JSON.stringify(result, null, 2));
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
if (command === 'call') {
|
|
107
|
+
const tool = String(argv[1] || '').trim().replace(/^computer_/, '');
|
|
108
|
+
if (!tool) throw new Error('Usage: farming computer call <tool> [json]');
|
|
109
|
+
const input = argv[2] ? JSON.parse(argv[2]) : {};
|
|
110
|
+
const resource = await open([]);
|
|
111
|
+
console.log(JSON.stringify(await requestJson(
|
|
112
|
+
'POST',
|
|
113
|
+
`/api/computers/${encodeURIComponent(resource.id)}/tool/${encodeURIComponent(tool)}`,
|
|
114
|
+
input,
|
|
115
|
+
process.env,
|
|
116
|
+
), null, 2));
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
throw new Error(`Unknown farming computer command: ${command}`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (require.main === module) {
|
|
123
|
+
run().then(code => {
|
|
124
|
+
if (code) process.exit(code);
|
|
125
|
+
}).catch(error => {
|
|
126
|
+
console.error(error?.message || error);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
module.exports = { run };
|