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,101 +1,116 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 client_services_exports = {};
|
|
21
|
+
__export(client_services_exports, {
|
|
22
|
+
AcpClientFileSystem: () => AcpClientFileSystem,
|
|
23
|
+
AcpClientTerminalManager: () => AcpClientTerminalManager,
|
|
24
|
+
resolveWorkspacePath: () => resolveWorkspacePath
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(client_services_exports);
|
|
27
|
+
var import_packaged_node_pty = require("../packaged-node-pty.cjs");
|
|
28
|
+
const crypto = require("crypto");
|
|
29
|
+
const fs = require("fs");
|
|
30
|
+
const path = require("path");
|
|
31
|
+
const { spawn } = require("child_process");
|
|
7
32
|
const fsp = fs.promises;
|
|
8
33
|
const DEFAULT_MAX_FILE_BYTES = 8 * 1024 * 1024;
|
|
9
34
|
const DEFAULT_TERMINAL_OUTPUT_BYTES = 1024 * 1024;
|
|
10
35
|
const MAX_TERMINAL_OUTPUT_BYTES = 16 * 1024 * 1024;
|
|
11
36
|
const MAX_ACTIVE_TERMINALS_PER_AGENT = 32;
|
|
12
|
-
|
|
13
37
|
function isInside(root, target) {
|
|
14
38
|
const relative = path.relative(root, target);
|
|
15
|
-
return relative ===
|
|
39
|
+
return relative === "" || !relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative);
|
|
16
40
|
}
|
|
17
|
-
|
|
18
41
|
function requireMatchingSession(binding, params) {
|
|
19
|
-
if (!binding?.sessionId || String(params?.sessionId ||
|
|
20
|
-
throw new Error(
|
|
42
|
+
if (!binding?.sessionId || String(params?.sessionId || "") !== binding.sessionId) {
|
|
43
|
+
throw new Error("ACP client request does not match the active session");
|
|
21
44
|
}
|
|
22
45
|
}
|
|
23
|
-
|
|
24
46
|
function requireOpenBinding(binding) {
|
|
25
|
-
if (binding?.exited === true) throw new Error(
|
|
47
|
+
if (binding?.exited === true) throw new Error("ACP Agent connection is closed");
|
|
26
48
|
}
|
|
27
|
-
|
|
28
49
|
async function resolveWorkspacePath(binding, requestedPath, options = {}) {
|
|
29
|
-
const value = String(requestedPath ||
|
|
30
|
-
if (!path.isAbsolute(value)) throw new Error(
|
|
50
|
+
const value = String(requestedPath || "");
|
|
51
|
+
if (!path.isAbsolute(value)) throw new Error("ACP file and terminal paths must be absolute");
|
|
31
52
|
const logicalRoot = path.resolve(binding.cwd);
|
|
32
53
|
const root = await fsp.realpath(binding.cwd);
|
|
33
54
|
const logicalTarget = path.resolve(value);
|
|
34
|
-
const target = isInside(logicalRoot, logicalTarget)
|
|
35
|
-
|
|
36
|
-
: isInside(root, logicalTarget)
|
|
37
|
-
? logicalTarget
|
|
38
|
-
: null;
|
|
39
|
-
if (!target) throw new Error('ACP path is outside the Agent workspace');
|
|
40
|
-
|
|
55
|
+
const target = isInside(logicalRoot, logicalTarget) ? path.resolve(root, path.relative(logicalRoot, logicalTarget)) : isInside(root, logicalTarget) ? logicalTarget : null;
|
|
56
|
+
if (!target) throw new Error("ACP path is outside the Agent workspace");
|
|
41
57
|
if (options.allowMissing === true) {
|
|
42
58
|
const parent = await fsp.realpath(path.dirname(target));
|
|
43
|
-
if (!isInside(root, parent)) throw new Error(
|
|
59
|
+
if (!isInside(root, parent)) throw new Error("ACP path resolves outside the Agent workspace");
|
|
44
60
|
return target;
|
|
45
61
|
}
|
|
46
|
-
|
|
47
62
|
const realTarget = await fsp.realpath(target);
|
|
48
|
-
if (!isInside(root, realTarget)) throw new Error(
|
|
63
|
+
if (!isInside(root, realTarget)) throw new Error("ACP path resolves outside the Agent workspace");
|
|
49
64
|
return realTarget;
|
|
50
65
|
}
|
|
51
|
-
|
|
52
66
|
class AcpClientFileSystem {
|
|
67
|
+
maxFileBytes;
|
|
53
68
|
constructor(options = {}) {
|
|
54
69
|
this.maxFileBytes = options.maxFileBytes || DEFAULT_MAX_FILE_BYTES;
|
|
55
70
|
}
|
|
56
|
-
|
|
57
71
|
async readTextFile(binding, params) {
|
|
58
72
|
requireMatchingSession(binding, params);
|
|
59
73
|
const target = await resolveWorkspacePath(binding, params.path);
|
|
60
74
|
const stat = await fsp.stat(target);
|
|
61
|
-
if (!stat.isFile()) throw new Error(
|
|
62
|
-
if (stat.size > this.maxFileBytes) throw new Error(
|
|
63
|
-
const content = await fsp.readFile(target,
|
|
75
|
+
if (!stat.isFile()) throw new Error("ACP read path must be a file");
|
|
76
|
+
if (stat.size > this.maxFileBytes) throw new Error("ACP text file is too large to read");
|
|
77
|
+
const content = await fsp.readFile(target, "utf8");
|
|
64
78
|
const requestedLine = params.line == null ? 1 : Number(params.line);
|
|
65
79
|
const requestedLimit = params.limit == null ? null : Number(params.limit);
|
|
66
|
-
if (!Number.isInteger(requestedLine) || requestedLine < 1) throw new Error(
|
|
80
|
+
if (!Number.isInteger(requestedLine) || requestedLine < 1) throw new Error("ACP read line must be a positive integer");
|
|
67
81
|
if (requestedLimit !== null && (!Number.isInteger(requestedLimit) || requestedLimit < 0)) {
|
|
68
|
-
throw new Error(
|
|
82
|
+
throw new Error("ACP read limit must be a non-negative integer");
|
|
69
83
|
}
|
|
70
84
|
if (requestedLine === 1 && requestedLimit === null) return { content };
|
|
71
|
-
const lines = content.split(
|
|
85
|
+
const lines = content.split("\n");
|
|
72
86
|
const start = requestedLine - 1;
|
|
73
87
|
const end = requestedLimit === null ? lines.length : start + requestedLimit;
|
|
74
|
-
return { content: lines.slice(start, end).join(
|
|
88
|
+
return { content: lines.slice(start, end).join("\n") };
|
|
75
89
|
}
|
|
76
|
-
|
|
77
90
|
async writeTextFile(binding, params) {
|
|
78
91
|
requireMatchingSession(binding, params);
|
|
79
|
-
const content = String(params.content ??
|
|
80
|
-
if (Buffer.byteLength(content,
|
|
81
|
-
throw new Error(
|
|
92
|
+
const content = String(params.content ?? "");
|
|
93
|
+
if (Buffer.byteLength(content, "utf8") > this.maxFileBytes) {
|
|
94
|
+
throw new Error("ACP text file is too large to write");
|
|
82
95
|
}
|
|
83
96
|
const target = await resolveWorkspacePath(binding, params.path, { allowMissing: true });
|
|
84
97
|
requireOpenBinding(binding);
|
|
85
|
-
let mode =
|
|
98
|
+
let mode = 438;
|
|
86
99
|
try {
|
|
87
100
|
const existing = await fsp.realpath(target);
|
|
88
101
|
const root = await fsp.realpath(binding.cwd);
|
|
89
|
-
if (!isInside(root, existing)) throw new Error(
|
|
102
|
+
if (!isInside(root, existing)) throw new Error("ACP path resolves outside the Agent workspace");
|
|
90
103
|
const stat = await fsp.stat(existing);
|
|
91
|
-
if (!stat.isFile()) throw new Error(
|
|
104
|
+
if (!stat.isFile()) throw new Error("ACP write path must be a file");
|
|
92
105
|
mode = stat.mode;
|
|
93
106
|
} catch (error) {
|
|
94
|
-
if (error
|
|
107
|
+
if (!error || typeof error !== "object" || !("code" in error) || error.code !== "ENOENT") {
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
95
110
|
}
|
|
96
111
|
const temporary = path.join(
|
|
97
112
|
path.dirname(target),
|
|
98
|
-
`.${path.basename(target)}.farming-acp-${process.pid}-${crypto.randomUUID()}.tmp
|
|
113
|
+
`.${path.basename(target)}.farming-acp-${process.pid}-${crypto.randomUUID()}.tmp`
|
|
99
114
|
);
|
|
100
115
|
try {
|
|
101
116
|
requireOpenBinding(binding);
|
|
@@ -103,38 +118,35 @@ class AcpClientFileSystem {
|
|
|
103
118
|
requireOpenBinding(binding);
|
|
104
119
|
await fsp.rename(temporary, target);
|
|
105
120
|
} catch (error) {
|
|
106
|
-
await fsp.rm(temporary, { force: true }).catch(() => {
|
|
121
|
+
await fsp.rm(temporary, { force: true }).catch(() => {
|
|
122
|
+
});
|
|
107
123
|
throw error;
|
|
108
124
|
}
|
|
109
125
|
return {};
|
|
110
126
|
}
|
|
111
127
|
}
|
|
112
|
-
|
|
113
128
|
function boundedOutputLimit(value) {
|
|
114
129
|
const parsed = Number(value);
|
|
115
130
|
if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_TERMINAL_OUTPUT_BYTES;
|
|
116
131
|
return Math.min(MAX_TERMINAL_OUTPUT_BYTES, Math.max(1, Math.floor(parsed)));
|
|
117
132
|
}
|
|
118
|
-
|
|
119
133
|
function trimUtf8Start(buffer, limit) {
|
|
120
134
|
if (buffer.length <= limit) return { buffer, truncated: false };
|
|
121
135
|
let start = buffer.length - limit;
|
|
122
|
-
while (start < buffer.length && (buffer[start] &
|
|
136
|
+
while (start < buffer.length && (buffer[start] & 192) === 128) start += 1;
|
|
123
137
|
return { buffer: buffer.subarray(start), truncated: true };
|
|
124
138
|
}
|
|
125
|
-
|
|
126
139
|
class AcpClientTerminalManager {
|
|
140
|
+
spawn;
|
|
141
|
+
ptySpawn;
|
|
142
|
+
terminals;
|
|
143
|
+
pendingCreates;
|
|
127
144
|
constructor(options = {}) {
|
|
128
|
-
this.spawn = options.spawn || spawn;
|
|
129
|
-
this.ptySpawn = typeof options.ptySpawn ===
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
? null
|
|
133
|
-
: nodePty.spawn;
|
|
134
|
-
this.terminals = new Map();
|
|
135
|
-
this.pendingCreates = new Map();
|
|
145
|
+
this.spawn = options.spawn || ((command, args, spawnOptions) => spawn(command, args, spawnOptions));
|
|
146
|
+
this.ptySpawn = typeof options.ptySpawn === "function" ? options.ptySpawn : typeof options.spawn === "function" ? null : import_packaged_node_pty.nodePty.spawn;
|
|
147
|
+
this.terminals = /* @__PURE__ */ new Map();
|
|
148
|
+
this.pendingCreates = /* @__PURE__ */ new Map();
|
|
136
149
|
}
|
|
137
|
-
|
|
138
150
|
activeCount(agentId) {
|
|
139
151
|
let count = 0;
|
|
140
152
|
for (const record of this.terminals.values()) {
|
|
@@ -142,21 +154,18 @@ class AcpClientTerminalManager {
|
|
|
142
154
|
}
|
|
143
155
|
return count;
|
|
144
156
|
}
|
|
145
|
-
|
|
146
157
|
reserveCreate(agentId) {
|
|
147
158
|
const pending = this.pendingCreates.get(agentId) || 0;
|
|
148
159
|
if (this.activeCount(agentId) + pending >= MAX_ACTIVE_TERMINALS_PER_AGENT) {
|
|
149
|
-
throw new Error(
|
|
160
|
+
throw new Error("ACP terminal limit reached for this Agent");
|
|
150
161
|
}
|
|
151
162
|
this.pendingCreates.set(agentId, pending + 1);
|
|
152
163
|
}
|
|
153
|
-
|
|
154
164
|
releaseCreate(agentId) {
|
|
155
165
|
const pending = this.pendingCreates.get(agentId) || 0;
|
|
156
166
|
if (pending <= 1) this.pendingCreates.delete(agentId);
|
|
157
167
|
else this.pendingCreates.set(agentId, pending - 1);
|
|
158
168
|
}
|
|
159
|
-
|
|
160
169
|
async create(binding, params) {
|
|
161
170
|
requireMatchingSession(binding, params);
|
|
162
171
|
this.reserveCreate(binding.agentId);
|
|
@@ -166,36 +175,20 @@ class AcpClientTerminalManager {
|
|
|
166
175
|
this.releaseCreate(binding.agentId);
|
|
167
176
|
}
|
|
168
177
|
}
|
|
169
|
-
|
|
170
178
|
async createReserved(binding, params) {
|
|
171
|
-
const command = String(params.command ||
|
|
172
|
-
if (!command) throw new Error(
|
|
173
|
-
const cwd = params.cwd
|
|
174
|
-
? await resolveWorkspacePath(binding, params.cwd)
|
|
175
|
-
: await fsp.realpath(binding.cwd);
|
|
179
|
+
const command = String(params.command || "").trim();
|
|
180
|
+
if (!command) throw new Error("ACP terminal command is required");
|
|
181
|
+
const cwd = params.cwd ? await resolveWorkspacePath(binding, params.cwd) : await fsp.realpath(binding.cwd);
|
|
176
182
|
requireOpenBinding(binding);
|
|
177
183
|
const env = { ...binding.env };
|
|
178
184
|
for (const item of Array.isArray(params.env) ? params.env : []) {
|
|
179
|
-
const name = String(item?.name ||
|
|
180
|
-
if (!name || name.includes(
|
|
181
|
-
env[name] = String(item?.value ??
|
|
185
|
+
const name = String(item?.name || "");
|
|
186
|
+
if (!name || name.includes("=") || name.includes("\0")) throw new Error("Invalid ACP terminal environment variable");
|
|
187
|
+
env[name] = String(item?.value ?? "");
|
|
182
188
|
}
|
|
183
189
|
const terminalId = `acp-terminal-${crypto.randomUUID()}`;
|
|
184
190
|
const args = Array.isArray(params.args) ? params.args.map(String) : [];
|
|
185
|
-
const
|
|
186
|
-
? this.ptySpawn(command, args, {
|
|
187
|
-
cwd,
|
|
188
|
-
env,
|
|
189
|
-
name: 'xterm-256color',
|
|
190
|
-
cols: 80,
|
|
191
|
-
rows: 24,
|
|
192
|
-
})
|
|
193
|
-
: this.spawn(command, args, {
|
|
194
|
-
cwd,
|
|
195
|
-
env,
|
|
196
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
197
|
-
});
|
|
198
|
-
const record = {
|
|
191
|
+
const baseRecord = {
|
|
199
192
|
terminalId,
|
|
200
193
|
agentId: binding.agentId,
|
|
201
194
|
sessionId: binding.sessionId,
|
|
@@ -204,141 +197,146 @@ class AcpClientTerminalManager {
|
|
|
204
197
|
cwd,
|
|
205
198
|
startedAt: Date.now(),
|
|
206
199
|
endedAt: null,
|
|
207
|
-
child,
|
|
208
200
|
output: Buffer.alloc(0),
|
|
209
201
|
outputLimit: boundedOutputLimit(params.outputByteLimit),
|
|
210
202
|
truncated: false,
|
|
211
203
|
exitStatus: null,
|
|
212
204
|
released: false,
|
|
213
|
-
waiters: []
|
|
214
|
-
interactive: Boolean(this.ptySpawn),
|
|
205
|
+
waiters: []
|
|
215
206
|
};
|
|
216
|
-
|
|
217
|
-
const append = chunk => {
|
|
207
|
+
let record;
|
|
208
|
+
const append = (chunk) => {
|
|
218
209
|
const next = Buffer.concat([record.output, Buffer.from(chunk)]);
|
|
219
210
|
const bounded = trimUtf8Start(next, record.outputLimit);
|
|
220
211
|
record.output = bounded.buffer;
|
|
221
212
|
record.truncated = record.truncated || bounded.truncated;
|
|
222
213
|
};
|
|
223
|
-
if (
|
|
214
|
+
if (this.ptySpawn) {
|
|
215
|
+
const child = this.ptySpawn(command, args, {
|
|
216
|
+
cwd,
|
|
217
|
+
env,
|
|
218
|
+
name: "xterm-256color",
|
|
219
|
+
cols: 80,
|
|
220
|
+
rows: 24
|
|
221
|
+
});
|
|
222
|
+
record = { ...baseRecord, child, interactive: true };
|
|
223
|
+
this.terminals.set(terminalId, record);
|
|
224
224
|
child.onData(append);
|
|
225
|
-
child.onExit(event => this.finish(record, {
|
|
225
|
+
child.onExit((event) => this.finish(record, {
|
|
226
226
|
exitCode: Number.isInteger(event?.exitCode) ? event.exitCode : null,
|
|
227
|
-
signal: Number.isInteger(event
|
|
227
|
+
signal: typeof event?.signal === "number" && Number.isInteger(event.signal) && event.signal > 0 ? String(event.signal) : null
|
|
228
228
|
}));
|
|
229
229
|
} else {
|
|
230
|
-
child.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
230
|
+
const child = this.spawn(command, args, {
|
|
231
|
+
cwd,
|
|
232
|
+
env,
|
|
233
|
+
stdio: ["ignore", "pipe", "pipe"]
|
|
234
|
+
});
|
|
235
|
+
record = { ...baseRecord, child, interactive: false };
|
|
236
|
+
this.terminals.set(terminalId, record);
|
|
237
|
+
child.stdout?.on("data", append);
|
|
238
|
+
child.stderr?.on("data", append);
|
|
239
|
+
child.on("error", (error) => {
|
|
240
|
+
append(`${error.message || error}
|
|
241
|
+
`);
|
|
242
|
+
this.finish(record, { exitCode: null, signal: "spawn-error" });
|
|
235
243
|
});
|
|
236
|
-
child.on(
|
|
244
|
+
child.on("close", (code, signal) => this.finish(record, {
|
|
237
245
|
exitCode: Number.isInteger(code) ? code : null,
|
|
238
|
-
signal: signal ? String(signal) : null
|
|
246
|
+
signal: signal ? String(signal) : null
|
|
239
247
|
}));
|
|
240
248
|
}
|
|
241
249
|
return { terminalId };
|
|
242
250
|
}
|
|
243
|
-
|
|
244
251
|
require(binding, params, options = {}) {
|
|
245
252
|
requireMatchingSession(binding, params);
|
|
246
|
-
const record = this.terminals.get(String(params.terminalId ||
|
|
253
|
+
const record = this.terminals.get(String(params.terminalId || ""));
|
|
247
254
|
if (!record || record.agentId !== binding.agentId || record.sessionId !== binding.sessionId) {
|
|
248
|
-
throw new Error(
|
|
255
|
+
throw new Error("Unknown ACP terminal");
|
|
249
256
|
}
|
|
250
|
-
if (record.released && options.allowReleased !== true) throw new Error(
|
|
257
|
+
if (record.released && options.allowReleased !== true) throw new Error("ACP terminal has been released");
|
|
251
258
|
return record;
|
|
252
259
|
}
|
|
253
|
-
|
|
254
260
|
finish(record, exitStatus) {
|
|
255
261
|
if (record.exitStatus) return;
|
|
256
262
|
record.exitStatus = exitStatus;
|
|
257
263
|
record.endedAt = Date.now();
|
|
258
264
|
const waiters = record.waiters.splice(0);
|
|
259
|
-
waiters.forEach(resolve => resolve({ ...exitStatus }));
|
|
265
|
+
waiters.forEach((resolve) => resolve({ ...exitStatus }));
|
|
260
266
|
}
|
|
261
|
-
|
|
262
267
|
output(binding, params) {
|
|
263
268
|
const record = this.require(binding, params);
|
|
264
269
|
return {
|
|
265
|
-
output: record.output.toString(
|
|
270
|
+
output: record.output.toString("utf8"),
|
|
266
271
|
truncated: record.truncated,
|
|
267
|
-
...
|
|
272
|
+
...record.exitStatus ? { exitStatus: { ...record.exitStatus } } : {}
|
|
268
273
|
};
|
|
269
274
|
}
|
|
270
|
-
|
|
271
275
|
waitForExit(binding, params) {
|
|
272
276
|
const record = this.require(binding, params);
|
|
273
277
|
if (record.exitStatus) return { ...record.exitStatus };
|
|
274
|
-
return new Promise(resolve => record.waiters.push(resolve));
|
|
278
|
+
return new Promise((resolve) => record.waiters.push(resolve));
|
|
275
279
|
}
|
|
276
|
-
|
|
277
280
|
input(binding, params) {
|
|
278
281
|
const record = this.require(binding, params);
|
|
279
|
-
if (!record.interactive) throw new Error(
|
|
280
|
-
if (record.exitStatus) throw new Error(
|
|
281
|
-
const input = String(params.input ??
|
|
282
|
-
if (Buffer.byteLength(input,
|
|
282
|
+
if (!record.interactive) throw new Error("ACP terminal does not accept interactive input");
|
|
283
|
+
if (record.exitStatus) throw new Error("ACP terminal has already exited");
|
|
284
|
+
const input = String(params.input ?? "");
|
|
285
|
+
if (Buffer.byteLength(input, "utf8") > 64 * 1024) throw new Error("ACP terminal input is too large");
|
|
283
286
|
record.child.write(input);
|
|
284
287
|
return {};
|
|
285
288
|
}
|
|
286
|
-
|
|
287
289
|
resize(binding, params) {
|
|
288
290
|
const record = this.require(binding, params);
|
|
289
291
|
if (!record.interactive) return {};
|
|
290
292
|
const cols = Number(params.cols);
|
|
291
293
|
const rows = Number(params.rows);
|
|
292
|
-
if (!Number.isInteger(cols) || cols < 2 || cols >
|
|
293
|
-
throw new Error(
|
|
294
|
+
if (!Number.isInteger(cols) || cols < 2 || cols > 1e3 || !Number.isInteger(rows) || rows < 1 || rows > 1e3) {
|
|
295
|
+
throw new Error("ACP terminal size is invalid");
|
|
294
296
|
}
|
|
295
297
|
if (!record.exitStatus) record.child.resize(cols, rows);
|
|
296
298
|
return {};
|
|
297
299
|
}
|
|
298
|
-
|
|
299
300
|
kill(binding, params) {
|
|
300
301
|
const record = this.require(binding, params);
|
|
301
|
-
if (!record.exitStatus && !record.child.killed) record.child.kill(
|
|
302
|
+
if (!record.exitStatus && !record.child.killed) record.child.kill("SIGTERM");
|
|
302
303
|
return {};
|
|
303
304
|
}
|
|
304
|
-
|
|
305
305
|
release(binding, params) {
|
|
306
306
|
const record = this.require(binding, params);
|
|
307
|
-
if (!record.exitStatus && !record.child.killed) record.child.kill(
|
|
307
|
+
if (!record.exitStatus && !record.child.killed) record.child.kill("SIGTERM");
|
|
308
308
|
record.released = true;
|
|
309
309
|
return {};
|
|
310
310
|
}
|
|
311
|
-
|
|
312
311
|
display(terminalId) {
|
|
313
|
-
const record = this.terminals.get(String(terminalId ||
|
|
312
|
+
const record = this.terminals.get(String(terminalId || ""));
|
|
314
313
|
if (!record) return null;
|
|
315
314
|
return {
|
|
316
315
|
command: record.command,
|
|
317
316
|
args: [...record.args],
|
|
318
317
|
cwd: record.cwd,
|
|
319
|
-
output: record.output.toString(
|
|
318
|
+
output: record.output.toString("utf8"),
|
|
320
319
|
truncated: record.truncated,
|
|
321
320
|
exitStatus: record.exitStatus ? { ...record.exitStatus } : null,
|
|
322
321
|
released: record.released,
|
|
323
322
|
startedAt: record.startedAt,
|
|
324
323
|
endedAt: record.endedAt,
|
|
325
324
|
durationMs: Math.max(0, (record.endedAt || Date.now()) - record.startedAt),
|
|
326
|
-
interactive: record.interactive
|
|
325
|
+
interactive: record.interactive
|
|
327
326
|
};
|
|
328
327
|
}
|
|
329
|
-
|
|
330
328
|
cleanupAgent(agentId) {
|
|
331
329
|
for (const [terminalId, record] of this.terminals) {
|
|
332
330
|
if (record.agentId !== agentId) continue;
|
|
333
|
-
if (!record.exitStatus && !record.child.killed) record.child.kill(
|
|
331
|
+
if (!record.exitStatus && !record.child.killed) record.child.kill("SIGTERM");
|
|
334
332
|
this.terminals.delete(terminalId);
|
|
335
|
-
this.finish(record, { exitCode: null, signal:
|
|
333
|
+
this.finish(record, { exitCode: null, signal: "SIGTERM" });
|
|
336
334
|
}
|
|
337
335
|
}
|
|
338
336
|
}
|
|
339
|
-
|
|
340
|
-
module.exports = {
|
|
337
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
338
|
+
0 && (module.exports = {
|
|
341
339
|
AcpClientFileSystem,
|
|
342
340
|
AcpClientTerminalManager,
|
|
343
|
-
resolveWorkspacePath
|
|
344
|
-
};
|
|
341
|
+
resolveWorkspacePath
|
|
342
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
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 packaged_claude_acp_exports = {};
|
|
21
|
+
__export(packaged_claude_acp_exports, {
|
|
22
|
+
PACKAGED_CLAUDE_ACP_ARG: () => PACKAGED_CLAUDE_ACP_ARG,
|
|
23
|
+
runPackagedClaudeAcp: () => runPackagedClaudeAcp
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(packaged_claude_acp_exports);
|
|
26
|
+
const PACKAGED_CLAUDE_ACP_ARG = "--farming-claude-acp";
|
|
27
|
+
async function runPackagedClaudeAcp() {
|
|
28
|
+
if (!process.pkg) {
|
|
29
|
+
throw new Error("The packaged Claude ACP entry is available only in a standalone Farming CLI");
|
|
30
|
+
}
|
|
31
|
+
throw new Error("The standalone Farming CLI omitted its embedded Claude ACP runtime");
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
PACKAGED_CLAUDE_ACP_ARG,
|
|
36
|
+
runPackagedClaudeAcp
|
|
37
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
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 packaged_codex_acp_exports = {};
|
|
21
|
+
__export(packaged_codex_acp_exports, {
|
|
22
|
+
PACKAGED_CODEX_ACP_ARG: () => PACKAGED_CODEX_ACP_ARG,
|
|
23
|
+
runPackagedCodexAcp: () => runPackagedCodexAcp
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(packaged_codex_acp_exports);
|
|
26
|
+
const PACKAGED_CODEX_ACP_ARG = "--farming-codex-acp";
|
|
27
|
+
async function runPackagedCodexAcp() {
|
|
28
|
+
if (!process.pkg) {
|
|
29
|
+
throw new Error("The packaged Codex ACP entry is available only in a standalone Farming CLI");
|
|
30
|
+
}
|
|
31
|
+
throw new Error("The standalone Farming CLI omitted its embedded Codex ACP runtime");
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
PACKAGED_CODEX_ACP_ARG,
|
|
36
|
+
runPackagedCodexAcp
|
|
37
|
+
});
|