farming-code 2.2.30 → 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.
Files changed (377) hide show
  1. package/THIRD_PARTY_NOTICES.md +7 -0
  2. package/backend/acp/{client-services.js → client-services.cjs} +132 -134
  3. package/backend/acp/packaged-claude-acp.cjs +37 -0
  4. package/backend/acp/packaged-codex-acp.cjs +37 -0
  5. package/backend/acp/patch-decisions.cjs +182 -0
  6. package/backend/acp/permission-security.cjs +131 -0
  7. package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
  8. package/backend/{acp-runtime.js → acp-runtime.cjs} +1220 -1112
  9. package/backend/acp-session-state.cjs +622 -0
  10. package/backend/acp-transcript.cjs +525 -0
  11. package/backend/agent-env.cjs +257 -0
  12. package/backend/agent-extension-discovery.cjs +452 -0
  13. package/backend/agent-extension-inventory.cjs +116 -0
  14. package/backend/agent-json-stream.cjs +283 -0
  15. package/backend/agent-lifecycle-journal.cjs +185 -0
  16. package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
  17. package/backend/agent-order-transaction.cjs +85 -0
  18. package/backend/agent-order.cjs +159 -0
  19. package/backend/agent-provider-session.cjs +98 -0
  20. package/backend/agent-runtime-binding.cjs +179 -0
  21. package/backend/agent-session-history.cjs +1022 -0
  22. package/backend/agent-session-inventory.cjs +291 -0
  23. package/backend/async-cache.cjs +104 -0
  24. package/backend/atomic-json-store.cjs +67 -0
  25. package/backend/auth.cjs +261 -0
  26. package/backend/authoritative-inventory-cache.cjs +383 -0
  27. package/backend/business-health.cjs +68 -0
  28. package/backend/chat-runtime.cjs +50 -0
  29. package/backend/claude-settings.cjs +132 -0
  30. package/backend/cli-agents.cjs +435 -0
  31. package/backend/codex-context-window.cjs +196 -0
  32. package/backend/codex-models.cjs +228 -0
  33. package/backend/codex-session-archive.cjs +82 -0
  34. package/backend/codex-session-history.cjs +590 -0
  35. package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
  36. package/backend/codex-transcript-sanitizer.cjs +130 -0
  37. package/backend/codex-transcript.cjs +2107 -0
  38. package/backend/command-runner-child.cjs +105 -0
  39. package/backend/config-manager.cjs +1263 -0
  40. package/backend/control-api.cjs +439 -0
  41. package/backend/data/LICENSE.cua +21 -0
  42. package/backend/executable-discovery.cjs +204 -0
  43. package/backend/farming-agent-bootstrap.cjs +81 -0
  44. package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
  45. package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
  46. package/backend/farming-cli.cjs +414 -0
  47. package/backend/farming-net-pass.cjs +319 -0
  48. package/backend/farming-net-registry.cjs +123 -0
  49. package/backend/farming-net-server.cjs +309 -0
  50. package/backend/farming-session-store.cjs +651 -0
  51. package/backend/git-worktree-info.cjs +181 -0
  52. package/backend/haiku-token.cjs +828 -0
  53. package/backend/index-html.cjs +96 -0
  54. package/backend/input-parts.cjs +68 -0
  55. package/backend/input-routing.cjs +40 -0
  56. package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
  57. package/backend/main-agent-skills.cjs +309 -0
  58. package/backend/main-page-session.cjs +132 -0
  59. package/backend/native-pty-controller-generation.cjs +139 -0
  60. package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
  61. package/backend/native-pty-host-identity.cjs +125 -0
  62. package/backend/native-pty-host-path.cjs +68 -0
  63. package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
  64. package/backend/native-session-engine.cjs +296 -0
  65. package/backend/network.cjs +57 -0
  66. package/backend/npm-update-helper.cjs +399 -0
  67. package/backend/packaged-node-pty.cjs +120 -0
  68. package/backend/preview-session-manager.cjs +89 -0
  69. package/backend/provider-adapters.cjs +492 -0
  70. package/backend/provider-home-configuration.cjs +211 -0
  71. package/backend/provider-session-id.cjs +79 -0
  72. package/backend/provider-session-service.cjs +333 -0
  73. package/backend/qr-share-tickets.cjs +119 -0
  74. package/backend/resource-broadcast-protocol.cjs +50 -0
  75. package/backend/review-diff-router.cjs +202 -0
  76. package/backend/review-diff-service.cjs +1267 -0
  77. package/backend/review-session-router.cjs +93 -0
  78. package/backend/review-session-service.cjs +470 -0
  79. package/backend/review-session-store.cjs +161 -0
  80. package/backend/review-state-router.cjs +132 -0
  81. package/backend/review-state-store.cjs +299 -0
  82. package/backend/run-history-store.cjs +97 -0
  83. package/backend/runtime-dependency-manager.cjs +893 -0
  84. package/backend/runtime-executable-invocation.cjs +37 -0
  85. package/backend/runtime-observation.cjs +96 -0
  86. package/backend/server-process-identity.cjs +70 -0
  87. package/backend/server.cjs +3356 -0
  88. package/backend/session-engine-bridge.cjs +144 -0
  89. package/backend/session-engine-router.cjs +105 -0
  90. package/backend/session-engine.cjs +64 -0
  91. package/backend/session-stream-protocol.cjs +181 -0
  92. package/backend/shell-busy-integration.cjs +442 -0
  93. package/backend/slash-command-discovery.cjs +423 -0
  94. package/backend/storage-layout.cjs +263 -0
  95. package/backend/system-monitor.cjs +96 -0
  96. package/backend/terminal-attach-checkpoint.cjs +73 -0
  97. package/backend/terminal-exit-quiescence.cjs +57 -0
  98. package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
  99. package/backend/terminal-runtime-cleanup.cjs +99 -0
  100. package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
  101. package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
  102. package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
  103. package/backend/terminal-screen-worker.cjs +352 -0
  104. package/backend/terminal-state-serialization.cjs +147 -0
  105. package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
  106. package/backend/theme-manager.cjs +185 -0
  107. package/backend/{update-service.js → update-service.cjs} +258 -248
  108. package/backend/usage-forecast.cjs +95 -0
  109. package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
  110. package/backend/usage-history-smoke.cjs +85 -0
  111. package/backend/usage-history-worker.cjs +60 -0
  112. package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
  113. package/backend/workspace-directory.cjs +239 -0
  114. package/backend/workspace-discovery.cjs +271 -0
  115. package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
  116. package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
  117. package/backend/workspace-root-registry.cjs +192 -0
  118. package/bin/farming +1 -1
  119. package/dist/acp/codex-acp-1.1.4.mjs +18 -1
  120. package/dist/assets/App-BCkdpWB6.css +1 -0
  121. package/dist/assets/App-CRjKpaGp.js +697 -0
  122. package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
  123. package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
  124. package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
  125. package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
  126. package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
  127. package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
  128. package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
  129. package/dist/assets/code-dark-B7eM_9G9.css +1 -0
  130. package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
  131. package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
  132. package/dist/assets/file-icons-BpeqWkIB.js +1 -0
  133. package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
  134. package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
  135. package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
  136. package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
  137. package/dist/assets/{index-D-zetSol.js → index-C8MchCem.js} +3 -3
  138. package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
  139. package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
  140. package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
  141. package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
  142. package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
  143. package/dist/assets/main-CLKXa6hf.css +1 -0
  144. package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
  145. package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
  146. package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
  147. package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
  148. package/dist/assets/review-C8-oPKXk.css +1 -0
  149. package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
  150. package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
  151. package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
  152. package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
  153. package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
  154. package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
  155. package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
  156. package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
  157. package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
  158. package/dist/index.html +1 -1
  159. package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
  160. package/extensions/browser/backend/agent-capability.cjs +85 -0
  161. package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
  162. package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
  163. package/extensions/browser/backend/browser-resource-store.cjs +228 -0
  164. package/extensions/browser/backend/browser-router.cjs +203 -0
  165. package/extensions/browser/backend/executable-discovery.cjs +248 -0
  166. package/extensions/browser/backend/farming-browser-client.cjs +116 -0
  167. package/extensions/browser/backend/index.cjs +32 -0
  168. package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
  169. package/extensions/browser/bin/farming-browser +16 -7
  170. package/extensions/computer/backend/agent-capability.cjs +72 -0
  171. package/extensions/computer/backend/computer-constants.cjs +59 -0
  172. package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
  173. package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
  174. package/extensions/computer/backend/computer-resource-store.cjs +190 -0
  175. package/extensions/computer/backend/computer-router.cjs +257 -0
  176. package/extensions/computer/backend/cua-tools.json +3067 -0
  177. package/extensions/computer/backend/farming-computer-client.cjs +84 -0
  178. package/extensions/computer/backend/index.cjs +35 -0
  179. package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
  180. package/extensions/computer/bin/farming-computer +131 -0
  181. package/frontend/farming-net/app.js +255 -262
  182. package/frontend/ghostty-loader.js +24 -20
  183. package/frontend/reading-anchor.js +210 -193
  184. package/frontend/runtime-paths.js +24 -26
  185. package/frontend/session-bridge.js +90 -111
  186. package/frontend/session-modal-bridge.js +184 -302
  187. package/frontend/skin-bridge.js +20 -23
  188. package/frontend/skins/crt/app.js +7686 -7901
  189. package/frontend/skins/crt/effects.js +7 -6
  190. package/frontend/skins/crt/index.html +6 -6
  191. package/frontend/skins/crt/styles/markdown.css +4 -4
  192. package/frontend/terminal-bridge.js +174 -181
  193. package/frontend/terminal-replay.js +320 -345
  194. package/frontend/theme-loader.js +55 -71
  195. package/package.json +64 -37
  196. package/shared/backend-connection-status.js +38 -69
  197. package/shared/browser-protocol.js +235 -110
  198. package/shared/websocket-liveness.js +40 -0
  199. package/backend/acp/packaged-claude-acp.js +0 -13
  200. package/backend/acp/packaged-codex-acp.js +0 -13
  201. package/backend/acp/patch-decisions.js +0 -153
  202. package/backend/acp/permission-security.js +0 -108
  203. package/backend/acp-session-state.js +0 -634
  204. package/backend/acp-transcript.js +0 -512
  205. package/backend/agent-env.js +0 -250
  206. package/backend/agent-json-stream.js +0 -268
  207. package/backend/agent-lifecycle-journal.js +0 -133
  208. package/backend/agent-order.js +0 -166
  209. package/backend/agent-provider-session.js +0 -76
  210. package/backend/agent-runtime-binding.js +0 -174
  211. package/backend/agent-session-history.js +0 -986
  212. package/backend/async-cache.js +0 -94
  213. package/backend/atomic-json-store.js +0 -37
  214. package/backend/auth.js +0 -251
  215. package/backend/chat-runtime.js +0 -28
  216. package/backend/claude-settings.js +0 -121
  217. package/backend/cli-agents.js +0 -486
  218. package/backend/codex-context-window.js +0 -189
  219. package/backend/codex-models.js +0 -226
  220. package/backend/codex-session-archive.js +0 -65
  221. package/backend/codex-session-history.js +0 -647
  222. package/backend/codex-transcript-sanitizer.js +0 -115
  223. package/backend/codex-transcript.js +0 -2362
  224. package/backend/command-runner-child.js +0 -67
  225. package/backend/config-manager.js +0 -1117
  226. package/backend/control-api.js +0 -455
  227. package/backend/executable-discovery.js +0 -216
  228. package/backend/farming-agent-bootstrap.js +0 -49
  229. package/backend/farming-cli.js +0 -403
  230. package/backend/farming-net-pass.js +0 -285
  231. package/backend/farming-net-registry.js +0 -112
  232. package/backend/farming-net-server.js +0 -298
  233. package/backend/farming-session-store.js +0 -677
  234. package/backend/git-worktree-info.js +0 -181
  235. package/backend/haiku-token.js +0 -772
  236. package/backend/index-html.js +0 -80
  237. package/backend/input-parts.js +0 -54
  238. package/backend/input-routing.js +0 -24
  239. package/backend/json-cli-runtime.js +0 -275
  240. package/backend/main-agent-skills.js +0 -288
  241. package/backend/main-page-session.js +0 -122
  242. package/backend/native-pty-controller-generation.js +0 -106
  243. package/backend/native-pty-host-identity.js +0 -86
  244. package/backend/native-pty-host-path.js +0 -42
  245. package/backend/native-session-engine.js +0 -268
  246. package/backend/network.js +0 -23
  247. package/backend/npm-update-helper.js +0 -374
  248. package/backend/packaged-node-pty.js +0 -99
  249. package/backend/preview-session-manager.js +0 -68
  250. package/backend/provider-adapters.js +0 -399
  251. package/backend/provider-session-id.js +0 -47
  252. package/backend/provider-session-service.js +0 -345
  253. package/backend/qr-share-tickets.js +0 -100
  254. package/backend/review-diff-router.js +0 -180
  255. package/backend/review-diff-service.js +0 -1270
  256. package/backend/review-session-router.js +0 -74
  257. package/backend/review-session-service.js +0 -446
  258. package/backend/review-session-store.js +0 -151
  259. package/backend/review-state-router.js +0 -116
  260. package/backend/review-state-store.js +0 -286
  261. package/backend/run-history-store.js +0 -67
  262. package/backend/runtime-dependency-manager.js +0 -759
  263. package/backend/runtime-executable-invocation.js +0 -20
  264. package/backend/runtime-observation.js +0 -81
  265. package/backend/server-process-identity.js +0 -47
  266. package/backend/server.js +0 -3225
  267. package/backend/session-engine-bridge.js +0 -129
  268. package/backend/session-engine-router.js +0 -66
  269. package/backend/session-engine.js +0 -39
  270. package/backend/session-stream-protocol.js +0 -185
  271. package/backend/shell-busy-integration.js +0 -472
  272. package/backend/slash-command-discovery.js +0 -433
  273. package/backend/storage-layout.js +0 -205
  274. package/backend/system-monitor.js +0 -77
  275. package/backend/terminal-attach-checkpoint.js +0 -74
  276. package/backend/terminal-exit-quiescence.js +0 -39
  277. package/backend/terminal-runtime-cleanup.js +0 -80
  278. package/backend/terminal-screen-worker.js +0 -337
  279. package/backend/terminal-state-serialization.js +0 -127
  280. package/backend/theme-manager.js +0 -163
  281. package/backend/usage-forecast.js +0 -86
  282. package/backend/usage-history-scanner.ts +0 -2718
  283. package/backend/usage-history-smoke.js +0 -64
  284. package/backend/usage-history-worker.js +0 -34
  285. package/backend/workspace-directory.js +0 -232
  286. package/backend/workspace-discovery.js +0 -311
  287. package/backend/workspace-root-registry.js +0 -166
  288. package/dist/assets/App-BKNUILuL.css +0 -1
  289. package/dist/assets/App-Z1N7T0eM.js +0 -695
  290. package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
  291. package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
  292. package/dist/assets/ProjectFilesSection-K3GHuQ4U.js +0 -12
  293. package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
  294. package/dist/assets/code-dark-kLsQLvpf.css +0 -1
  295. package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
  296. package/dist/assets/main-DUTz-Rd2.css +0 -1
  297. package/dist/assets/review-BcnwQtJv.css +0 -1
  298. package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
  299. package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
  300. package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
  301. package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
  302. package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
  303. package/extensions/browser/backend/agent-capability.js +0 -55
  304. package/extensions/browser/backend/browser-mcp-server.js +0 -621
  305. package/extensions/browser/backend/browser-resource-manager.js +0 -1331
  306. package/extensions/browser/backend/browser-resource-store.js +0 -190
  307. package/extensions/browser/backend/browser-router.js +0 -141
  308. package/extensions/browser/backend/executable-discovery.js +0 -238
  309. package/extensions/browser/backend/farming-browser-client.js +0 -83
  310. package/extensions/browser/backend/index.js +0 -7
  311. package/extensions/browser/backend/managed-chromium-installer.js +0 -593
  312. package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
  313. package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
  314. package/extensions/browser/frontend/browser-resource-state.ts +0 -60
  315. package/extensions/browser/frontend/browser.css +0 -567
  316. package/extensions/browser/frontend/types.ts +0 -38
  317. package/extensions/browser/frontend/useBrowserResources.ts +0 -166
  318. package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
  319. package/shared/backend-connection-status.d.ts +0 -37
  320. package/shared/browser-protocol.d.ts +0 -5
  321. /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
  322. /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
  323. /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
  324. /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
  325. /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
  326. /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
  327. /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
  328. /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
  329. /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
  330. /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
  331. /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
  332. /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
  333. /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
  334. /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
  335. /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
  336. /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
  337. /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
  338. /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
  339. /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
  340. /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
  341. /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
  342. /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
  343. /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
  344. /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
  345. /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
  346. /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
  347. /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
  348. /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
  349. /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
  350. /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
  351. /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
  352. /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
  353. /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
  354. /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
  355. /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
  356. /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
  357. /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
  358. /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
  359. /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
  360. /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
  361. /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
  362. /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
  363. /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
  364. /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
  365. /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
  366. /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
  367. /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
  368. /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
  369. /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
  370. /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
  371. /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
  372. /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
  373. /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
  374. /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
  375. /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
  376. /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
  377. /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
@@ -25,8 +25,10 @@ preserved in bundled `node_modules` when bundled dependencies are enabled.
25
25
  | `@xterm/xterm` | 6.0.0 | MIT | Browser terminal renderer |
26
26
  | `ansi-to-html` | 0.7.2 | MIT | ANSI text rendering support |
27
27
  | `chokidar` | 5.0.0 | MIT | Filesystem watching |
28
+ | `compression` | 1.8.1 | MIT | HTTP response compression |
28
29
  | `diff` | 9.0.0 | BSD-3-Clause | Character-level diff ranges for code review |
29
30
  | `express` | 4.22.2 | MIT | HTTP API server |
31
+ | `extract-zip` | 2.0.1 | BSD-2-Clause | Managed Chromium archive extraction |
30
32
  | `ghostty-web` | 0.4.0 | MIT | Optional/debug terminal renderer assets |
31
33
  | `highlight.js` | 11.11.1 | BSD-3-Clause | Syntax highlighting |
32
34
  | `html2canvas` | 1.4.1 | MIT | Pet rest-scene snapshot capture |
@@ -71,6 +73,11 @@ Farming accepts only the version-locked sources and integrity values declared
71
73
  by its release manifest. The `agent-browser` license text is included at
72
74
  `backend/data/LICENSE.agent-browser`.
73
75
 
76
+ The optional Computer plugin interoperates with the version-pinned Cua Driver
77
+ 0.12.4 and `trycua/xfce-cua` container image. Farming does not bundle that
78
+ container image in its release package. Cua is licensed under MIT; its license
79
+ text is included at `backend/data/LICENSE.cua`.
80
+
74
81
  Farming vendors `ghostty-web` distribution files under
75
82
  `frontend/vendor/ghostty-web` for the optional Ghostty debug renderer. The
76
83
  source package is `ghostty-web` 0.4.0, licensed under MIT. Its license is kept
@@ -1,101 +1,116 @@
1
- const crypto = require('crypto');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const { spawn } = require('child_process');
5
- const nodePty = require('../packaged-node-pty');
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 === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(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 || '') !== binding.sessionId) {
20
- throw new Error('ACP client request does not match the active session');
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('ACP Agent connection is closed');
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('ACP file and terminal paths must be absolute');
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
- ? path.resolve(root, path.relative(logicalRoot, logicalTarget))
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('ACP path resolves outside the Agent workspace');
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('ACP path resolves outside the Agent workspace');
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('ACP read path must be a file');
62
- if (stat.size > this.maxFileBytes) throw new Error('ACP text file is too large to read');
63
- const content = await fsp.readFile(target, 'utf8');
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('ACP read line must be a positive integer');
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('ACP read limit must be a non-negative integer');
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('\n');
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('\n') };
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, 'utf8') > this.maxFileBytes) {
81
- throw new Error('ACP text file is too large to write');
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 = 0o666;
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('ACP path resolves outside the Agent workspace');
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('ACP write path must be a file');
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?.code !== 'ENOENT') throw 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] & 0xc0) === 0x80) start += 1;
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 === 'function'
130
- ? options.ptySpawn
131
- : typeof options.spawn === 'function'
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('ACP terminal limit reached for this Agent');
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 || '').trim();
172
- if (!command) throw new Error('ACP terminal command is required');
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('=') || name.includes('\0')) throw new Error('Invalid ACP terminal environment variable');
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 child = this.ptySpawn
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
- this.terminals.set(terminalId, record);
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 (record.interactive) {
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?.signal) && event.signal > 0 ? String(event.signal) : null,
227
+ signal: typeof event?.signal === "number" && Number.isInteger(event.signal) && event.signal > 0 ? String(event.signal) : null
228
228
  }));
229
229
  } else {
230
- child.stdout?.on('data', append);
231
- child.stderr?.on('data', append);
232
- child.on('error', error => {
233
- append(`${error.message || error}\n`);
234
- this.finish(record, { exitCode: null, signal: 'spawn-error' });
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('close', (code, signal) => this.finish(record, {
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('Unknown ACP terminal');
255
+ throw new Error("Unknown ACP terminal");
249
256
  }
250
- if (record.released && options.allowReleased !== true) throw new Error('ACP terminal has been released');
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('utf8'),
270
+ output: record.output.toString("utf8"),
266
271
  truncated: record.truncated,
267
- ...(record.exitStatus ? { exitStatus: { ...record.exitStatus } } : {}),
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('ACP terminal does not accept interactive input');
280
- if (record.exitStatus) throw new Error('ACP terminal has already exited');
281
- const input = String(params.input ?? '');
282
- if (Buffer.byteLength(input, 'utf8') > 64 * 1024) throw new Error('ACP terminal input is too large');
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 > 1000 || !Number.isInteger(rows) || rows < 1 || rows > 1000) {
293
- throw new Error('ACP terminal size is invalid');
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('SIGTERM');
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('SIGTERM');
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('utf8'),
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('SIGTERM');
331
+ if (!record.exitStatus && !record.child.killed) record.child.kill("SIGTERM");
334
332
  this.terminals.delete(terminalId);
335
- this.finish(record, { exitCode: null, signal: 'SIGTERM' });
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
+ });