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
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const fs = require('fs');
|
|
3
3
|
const path = require('path');
|
|
4
|
-
const { requestJson } = require('../backend/farming-browser-client');
|
|
5
|
-
const { rootIdForPath } = require('../../../backend/workspace-root-registry');
|
|
4
|
+
const { requestJson } = require('../backend/farming-browser-client.cjs');
|
|
5
|
+
const { rootIdForPath } = require('../../../backend/workspace-root-registry.cjs');
|
|
6
6
|
|
|
7
7
|
function usage() {
|
|
8
8
|
return `Usage: farming browser <command> [options]
|
|
9
9
|
|
|
10
10
|
Start here:
|
|
11
11
|
capability Check whether Farming Browser is available
|
|
12
|
-
list Discover this
|
|
12
|
+
list Discover this Agent's Browser Resources
|
|
13
13
|
create Create another independently visible Browser
|
|
14
14
|
help workflow Read the recommended Agent workflow
|
|
15
15
|
|
|
@@ -31,7 +31,7 @@ const TOPIC_HELP = Object.freeze({
|
|
|
31
31
|
workflow: `Recommended Agent workflow:
|
|
32
32
|
1. farming capabilities
|
|
33
33
|
2. farming browser list
|
|
34
|
-
3. Reuse a
|
|
34
|
+
3. Reuse a Browser owned by this Agent, or create and start one
|
|
35
35
|
4. Navigate, then take a snapshot
|
|
36
36
|
5. Act through snapshot refs; wait and snapshot again after page changes
|
|
37
37
|
6. Use inspection or debugging commands only when the normal flow is insufficient
|
|
@@ -230,16 +230,18 @@ function writeJson(value) {
|
|
|
230
230
|
|
|
231
231
|
async function requireProjectBrowser(id) {
|
|
232
232
|
const requestedWorkspace = String(process.env.FARMING_PROJECT_WORKSPACE || '').trim();
|
|
233
|
+
const requestedAgentId = String(process.env.FARMING_AGENT_ID || '').trim();
|
|
233
234
|
if (!requestedWorkspace) return;
|
|
234
235
|
const workspace = path.resolve(requestedWorkspace);
|
|
235
236
|
const result = await requestJson('GET', '/api/browsers');
|
|
236
237
|
const resource = (result.resources || []).find(item => (
|
|
237
238
|
item?.id === id
|
|
239
|
+
&& (!requestedAgentId || item.ownerAgentId === requestedAgentId)
|
|
238
240
|
&& item.workspace
|
|
239
241
|
&& path.resolve(item.workspace) === workspace
|
|
240
242
|
));
|
|
241
243
|
if (!resource) {
|
|
242
|
-
throw new Error(`Browser Resource ${id} is not
|
|
244
|
+
throw new Error(`Browser Resource ${id} is not owned by this Agent`);
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
247
|
|
|
@@ -258,7 +260,7 @@ async function run(argv = process.argv.slice(2)) {
|
|
|
258
260
|
return 0;
|
|
259
261
|
}
|
|
260
262
|
if (command === 'mcp') {
|
|
261
|
-
const { runBrowserMcpServer } = require('../backend/browser-mcp-server');
|
|
263
|
+
const { runBrowserMcpServer } = require('../backend/browser-mcp-server.cjs');
|
|
262
264
|
await runBrowserMcpServer();
|
|
263
265
|
return 0;
|
|
264
266
|
}
|
|
@@ -275,6 +277,7 @@ async function run(argv = process.argv.slice(2)) {
|
|
|
275
277
|
const workspace = path.resolve(requestedWorkspace);
|
|
276
278
|
const result = await requestJson('POST', '/api/browsers', {
|
|
277
279
|
rootId: rootIdForPath(workspace),
|
|
280
|
+
agentId: process.env.FARMING_AGENT_ID || undefined,
|
|
278
281
|
name: option(args, '--name') || undefined,
|
|
279
282
|
url: option(args, '--url') || undefined,
|
|
280
283
|
});
|
|
@@ -289,7 +292,13 @@ async function run(argv = process.argv.slice(2)) {
|
|
|
289
292
|
const workspace = requestedWorkspace ? path.resolve(requestedWorkspace) : '';
|
|
290
293
|
const result = await requestJson('GET', '/api/browsers');
|
|
291
294
|
const resources = workspace
|
|
292
|
-
? result.resources.filter(resource =>
|
|
295
|
+
? result.resources.filter(resource => (
|
|
296
|
+
path.resolve(resource.workspace) === workspace
|
|
297
|
+
&& (
|
|
298
|
+
!process.env.FARMING_AGENT_ID
|
|
299
|
+
|| resource.ownerAgentId === process.env.FARMING_AGENT_ID
|
|
300
|
+
)
|
|
301
|
+
))
|
|
293
302
|
: result.resources;
|
|
294
303
|
writeJson({ resources });
|
|
295
304
|
return 0;
|
|
@@ -0,0 +1,72 @@
|
|
|
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 agent_capability_exports = {};
|
|
21
|
+
__export(agent_capability_exports, {
|
|
22
|
+
FARMING_COMPUTER_MCP_SERVER_NAME: () => FARMING_COMPUTER_MCP_SERVER_NAME,
|
|
23
|
+
isFarmingComputerServer: () => isFarmingComputerServer,
|
|
24
|
+
mergeComputerMcpServer: () => mergeComputerMcpServer
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(agent_capability_exports);
|
|
27
|
+
const path = require("path");
|
|
28
|
+
const FARMING_COMPUTER_MCP_SERVER_NAME = "farming-computer";
|
|
29
|
+
const FARMING_COMPUTER_MCP_META_KEY = "farming.dev/extension";
|
|
30
|
+
function recordValue(value) {
|
|
31
|
+
return value && typeof value === "object" ? value : {};
|
|
32
|
+
}
|
|
33
|
+
function isFarmingComputerServer(server) {
|
|
34
|
+
const value = recordValue(server);
|
|
35
|
+
return recordValue(value._meta)[FARMING_COMPUTER_MCP_META_KEY] === "computer";
|
|
36
|
+
}
|
|
37
|
+
function computerMcpEnv(agentEnv) {
|
|
38
|
+
return [
|
|
39
|
+
"FARMING_AGENT_ID",
|
|
40
|
+
"FARMING_CONFIG_DIR",
|
|
41
|
+
"FARMING_CONTROL_URL",
|
|
42
|
+
"FARMING_DISABLE_AUTH",
|
|
43
|
+
"FARMING_PROJECT_WORKSPACE",
|
|
44
|
+
"FARMING_TOKEN_FILE"
|
|
45
|
+
].flatMap((name) => agentEnv[name] === void 0 || agentEnv[name] === "" ? [] : [{ name, value: String(agentEnv[name]) }]);
|
|
46
|
+
}
|
|
47
|
+
function mergeComputerMcpServer(mcpServers, options) {
|
|
48
|
+
const existing = Array.isArray(mcpServers) ? mcpServers : [];
|
|
49
|
+
const collision = existing.find((server) => recordValue(server).name === FARMING_COMPUTER_MCP_SERVER_NAME && !isFarmingComputerServer(server));
|
|
50
|
+
if (collision) {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`MCP server name "${FARMING_COMPUTER_MCP_SERVER_NAME}" is reserved by the Farming Computer Extension`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
const command = path.join(options.cliBinDir, process.platform === "win32" ? "farming.cmd" : "farming");
|
|
56
|
+
return [
|
|
57
|
+
...existing.filter((server) => !isFarmingComputerServer(server)),
|
|
58
|
+
{
|
|
59
|
+
name: FARMING_COMPUTER_MCP_SERVER_NAME,
|
|
60
|
+
command,
|
|
61
|
+
args: ["computer", "mcp"],
|
|
62
|
+
env: computerMcpEnv(options.agentEnv || {}),
|
|
63
|
+
_meta: { [FARMING_COMPUTER_MCP_META_KEY]: "computer" }
|
|
64
|
+
}
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
68
|
+
0 && (module.exports = {
|
|
69
|
+
FARMING_COMPUTER_MCP_SERVER_NAME,
|
|
70
|
+
isFarmingComputerServer,
|
|
71
|
+
mergeComputerMcpServer
|
|
72
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
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 computer_constants_exports = {};
|
|
21
|
+
__export(computer_constants_exports, {
|
|
22
|
+
COMPUTER_CONTAINER_CPUS: () => COMPUTER_CONTAINER_CPUS,
|
|
23
|
+
COMPUTER_CONTAINER_MEMORY: () => COMPUTER_CONTAINER_MEMORY,
|
|
24
|
+
COMPUTER_CONTAINER_PIDS: () => COMPUTER_CONTAINER_PIDS,
|
|
25
|
+
COMPUTER_CONTAINER_SHM_SIZE: () => COMPUTER_CONTAINER_SHM_SIZE,
|
|
26
|
+
COMPUTER_DRIVER_BIN: () => COMPUTER_DRIVER_BIN,
|
|
27
|
+
COMPUTER_DRIVER_VERSION: () => COMPUTER_DRIVER_VERSION,
|
|
28
|
+
COMPUTER_IMAGE: () => COMPUTER_IMAGE,
|
|
29
|
+
COMPUTER_IMAGE_INDEX_DIGEST: () => COMPUTER_IMAGE_INDEX_DIGEST,
|
|
30
|
+
COMPUTER_SCHEMA_SHA256: () => COMPUTER_SCHEMA_SHA256,
|
|
31
|
+
COMPUTER_TOOL_COUNT: () => COMPUTER_TOOL_COUNT,
|
|
32
|
+
COMPUTER_USER: () => COMPUTER_USER
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(computer_constants_exports);
|
|
35
|
+
const COMPUTER_DRIVER_VERSION = "0.12.4";
|
|
36
|
+
const COMPUTER_IMAGE_INDEX_DIGEST = "sha256:274eb636f5cf3fc58f705916ee72b7a701270b3877369d08533a385c5325be9b";
|
|
37
|
+
const COMPUTER_IMAGE = `trycua/xfce-cua@${COMPUTER_IMAGE_INDEX_DIGEST}`;
|
|
38
|
+
const COMPUTER_SCHEMA_SHA256 = "8c9bd7890cb3e1cfc2409c590b087d8313a80672eeed7ceae6beee19356c146c";
|
|
39
|
+
const COMPUTER_TOOL_COUNT = 53;
|
|
40
|
+
const COMPUTER_CONTAINER_MEMORY = "4g";
|
|
41
|
+
const COMPUTER_CONTAINER_CPUS = "2";
|
|
42
|
+
const COMPUTER_CONTAINER_SHM_SIZE = "1g";
|
|
43
|
+
const COMPUTER_CONTAINER_PIDS = "1024";
|
|
44
|
+
const COMPUTER_DRIVER_BIN = "/opt/venv/bin/cua-driver";
|
|
45
|
+
const COMPUTER_USER = "cua";
|
|
46
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
47
|
+
0 && (module.exports = {
|
|
48
|
+
COMPUTER_CONTAINER_CPUS,
|
|
49
|
+
COMPUTER_CONTAINER_MEMORY,
|
|
50
|
+
COMPUTER_CONTAINER_PIDS,
|
|
51
|
+
COMPUTER_CONTAINER_SHM_SIZE,
|
|
52
|
+
COMPUTER_DRIVER_BIN,
|
|
53
|
+
COMPUTER_DRIVER_VERSION,
|
|
54
|
+
COMPUTER_IMAGE,
|
|
55
|
+
COMPUTER_IMAGE_INDEX_DIGEST,
|
|
56
|
+
COMPUTER_SCHEMA_SHA256,
|
|
57
|
+
COMPUTER_TOOL_COUNT,
|
|
58
|
+
COMPUTER_USER
|
|
59
|
+
});
|
|
@@ -0,0 +1,182 @@
|
|
|
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 computer_mcp_server_exports = {};
|
|
21
|
+
__export(computer_mcp_server_exports, {
|
|
22
|
+
ScopedComputerClient: () => ScopedComputerClient,
|
|
23
|
+
createComputerMcpServer: () => createComputerMcpServer,
|
|
24
|
+
loadManifest: () => loadManifest,
|
|
25
|
+
runComputerMcpServer: () => runComputerMcpServer
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(computer_mcp_server_exports);
|
|
28
|
+
var import_server = require("@modelcontextprotocol/sdk/server/index.js");
|
|
29
|
+
var import_stdio = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
30
|
+
var import_types = require("@modelcontextprotocol/sdk/types.js");
|
|
31
|
+
var import_workspace_root_registry = require("../../../backend/workspace-root-registry.cjs");
|
|
32
|
+
var import_farming_computer_client = require("./farming-computer-client.cjs");
|
|
33
|
+
var import_computer_constants = require("./computer-constants.cjs");
|
|
34
|
+
const fs = require("fs");
|
|
35
|
+
const path = require("path");
|
|
36
|
+
const crypto = require("crypto");
|
|
37
|
+
function recordValue(value) {
|
|
38
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
39
|
+
}
|
|
40
|
+
function textResult(value) {
|
|
41
|
+
return {
|
|
42
|
+
content: [{ type: "text", text: JSON.stringify(value, null, 2) }],
|
|
43
|
+
structuredContent: recordValue(value)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function loadManifest() {
|
|
47
|
+
const file = path.join(__dirname, "cua-tools.json");
|
|
48
|
+
const bytes = fs.readFileSync(file);
|
|
49
|
+
const sha256 = crypto.createHash("sha256").update(bytes).digest("hex");
|
|
50
|
+
if (sha256 !== import_computer_constants.COMPUTER_SCHEMA_SHA256) {
|
|
51
|
+
throw new Error(`Farming Computer tool schema integrity mismatch: ${sha256}`);
|
|
52
|
+
}
|
|
53
|
+
const manifest = JSON.parse(bytes.toString("utf8"));
|
|
54
|
+
if (manifest.driverVersion !== import_computer_constants.COMPUTER_DRIVER_VERSION || manifest.toolCount !== import_computer_constants.COMPUTER_TOOL_COUNT || manifest.tools.length !== import_computer_constants.COMPUTER_TOOL_COUNT) {
|
|
55
|
+
throw new Error("Farming Computer tool schema does not match the pinned Cua Driver contract");
|
|
56
|
+
}
|
|
57
|
+
return manifest;
|
|
58
|
+
}
|
|
59
|
+
class ScopedComputerClient {
|
|
60
|
+
env;
|
|
61
|
+
workspace;
|
|
62
|
+
agentId;
|
|
63
|
+
constructor(env = process.env) {
|
|
64
|
+
this.env = env;
|
|
65
|
+
this.workspace = String(env.FARMING_PROJECT_WORKSPACE || "").trim();
|
|
66
|
+
this.agentId = String(env.FARMING_AGENT_ID || "").trim();
|
|
67
|
+
}
|
|
68
|
+
requireBinding() {
|
|
69
|
+
if (!this.workspace || !this.agentId) {
|
|
70
|
+
throw new Error("This Computer tool server is not bound to a Farming Agent Project");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async list() {
|
|
74
|
+
this.requireBinding();
|
|
75
|
+
const snapshot = recordValue(await (0, import_farming_computer_client.requestJson)("GET", "/api/computers", void 0, this.env));
|
|
76
|
+
return (Array.isArray(snapshot.resources) ? snapshot.resources : []).map(recordValue).filter((resource) => resource.ownerAgentId === this.agentId);
|
|
77
|
+
}
|
|
78
|
+
async open(input = {}) {
|
|
79
|
+
this.requireBinding();
|
|
80
|
+
const existing = (await this.list())[0];
|
|
81
|
+
const resource = existing || recordValue(await (0, import_farming_computer_client.requestJson)("POST", "/api/computers", {
|
|
82
|
+
rootId: (0, import_workspace_root_registry.rootIdForPath)(this.workspace),
|
|
83
|
+
agentId: this.agentId,
|
|
84
|
+
name: input.name
|
|
85
|
+
}, this.env));
|
|
86
|
+
if (resource.status === "running") return resource;
|
|
87
|
+
return recordValue(await (0, import_farming_computer_client.requestJson)(
|
|
88
|
+
"POST",
|
|
89
|
+
`/api/computers/${encodeURIComponent(String(resource.id))}/start`,
|
|
90
|
+
void 0,
|
|
91
|
+
this.env
|
|
92
|
+
));
|
|
93
|
+
}
|
|
94
|
+
async stop() {
|
|
95
|
+
const resource = (await this.list())[0];
|
|
96
|
+
if (!resource) return { stopped: true, resource: null };
|
|
97
|
+
return recordValue(await (0, import_farming_computer_client.requestJson)(
|
|
98
|
+
"POST",
|
|
99
|
+
`/api/computers/${encodeURIComponent(String(resource.id))}/stop`,
|
|
100
|
+
void 0,
|
|
101
|
+
this.env
|
|
102
|
+
));
|
|
103
|
+
}
|
|
104
|
+
async call(upstreamName, input) {
|
|
105
|
+
const resource = await this.open();
|
|
106
|
+
const result = recordValue(await (0, import_farming_computer_client.requestJson)(
|
|
107
|
+
"POST",
|
|
108
|
+
`/api/computers/${encodeURIComponent(String(resource.id))}/tool/${encodeURIComponent(upstreamName)}`,
|
|
109
|
+
input,
|
|
110
|
+
this.env
|
|
111
|
+
));
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function createComputerMcpServer(options = {}) {
|
|
116
|
+
const manifest = loadManifest();
|
|
117
|
+
const client = options.client || new ScopedComputerClient(options.env);
|
|
118
|
+
const server = new import_server.Server(
|
|
119
|
+
{ name: "farming-computer", version: "1.0.0" },
|
|
120
|
+
{ capabilities: { tools: {} } }
|
|
121
|
+
);
|
|
122
|
+
const lifecycleTools = [{
|
|
123
|
+
name: "computer_open",
|
|
124
|
+
title: "Open Farming Computer",
|
|
125
|
+
description: "Create or start the isolated Computer owned by this Farming Agent.",
|
|
126
|
+
inputSchema: {
|
|
127
|
+
type: "object",
|
|
128
|
+
additionalProperties: false,
|
|
129
|
+
properties: {
|
|
130
|
+
name: { type: "string", minLength: 1, maxLength: 120 }
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
annotations: {
|
|
134
|
+
readOnlyHint: false,
|
|
135
|
+
destructiveHint: false,
|
|
136
|
+
idempotentHint: true,
|
|
137
|
+
openWorldHint: true
|
|
138
|
+
}
|
|
139
|
+
}, {
|
|
140
|
+
name: "computer_list",
|
|
141
|
+
title: "List Farming Computer",
|
|
142
|
+
description: "List the isolated Computer owned by this Farming Agent.",
|
|
143
|
+
inputSchema: { type: "object", additionalProperties: false, properties: {} },
|
|
144
|
+
annotations: { readOnlyHint: true, openWorldHint: false }
|
|
145
|
+
}, {
|
|
146
|
+
name: "computer_stop",
|
|
147
|
+
title: "Stop Farming Computer",
|
|
148
|
+
description: "Stop this Agent Computer while retaining its resource row and container state.",
|
|
149
|
+
inputSchema: { type: "object", additionalProperties: false, properties: {} },
|
|
150
|
+
annotations: {
|
|
151
|
+
readOnlyHint: false,
|
|
152
|
+
destructiveHint: false,
|
|
153
|
+
idempotentHint: true,
|
|
154
|
+
openWorldHint: true
|
|
155
|
+
}
|
|
156
|
+
}];
|
|
157
|
+
server.setRequestHandler(import_types.ListToolsRequestSchema, async () => ({
|
|
158
|
+
tools: [...lifecycleTools, ...manifest.tools]
|
|
159
|
+
}));
|
|
160
|
+
server.setRequestHandler(import_types.CallToolRequestSchema, async (request) => {
|
|
161
|
+
const name = request.params.name;
|
|
162
|
+
const input = recordValue(request.params.arguments);
|
|
163
|
+
if (name === "computer_open") return textResult(await client.open(input));
|
|
164
|
+
if (name === "computer_list") return textResult({ resources: await client.list() });
|
|
165
|
+
if (name === "computer_stop") return textResult(await client.stop());
|
|
166
|
+
const tool = manifest.tools.find((candidate) => candidate.name === name);
|
|
167
|
+
if (!tool) throw new Error(`Unknown Computer tool: ${name}`);
|
|
168
|
+
return client.call(tool.upstreamName, input);
|
|
169
|
+
});
|
|
170
|
+
return server;
|
|
171
|
+
}
|
|
172
|
+
async function runComputerMcpServer(options = {}) {
|
|
173
|
+
const server = createComputerMcpServer(options);
|
|
174
|
+
await server.connect(new import_stdio.StdioServerTransport());
|
|
175
|
+
}
|
|
176
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
177
|
+
0 && (module.exports = {
|
|
178
|
+
ScopedComputerClient,
|
|
179
|
+
createComputerMcpServer,
|
|
180
|
+
loadManifest,
|
|
181
|
+
runComputerMcpServer
|
|
182
|
+
});
|