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
@@ -1,77 +0,0 @@
1
- const os = require('os');
2
- const path = require('path');
3
- const fsp = require('fs/promises');
4
-
5
- const DISK_STATS_TTL_MS = 30_000;
6
-
7
- class SystemMonitor {
8
- constructor(options = {}) {
9
- this.diskStatsTtlMs = Number.isFinite(options.diskStatsTtlMs) ? options.diskStatsTtlMs : DISK_STATS_TTL_MS;
10
- this.now = typeof options.now === 'function' ? options.now : () => Date.now();
11
- this.diskStatsCache = {
12
- sampledAt: 0,
13
- value: null,
14
- };
15
- }
16
-
17
- async getSystemStats() {
18
- const stats = this.getBasicStats();
19
- stats.disk = await this.getCachedDiskStats().catch(() => this.diskStatsCache.value || null);
20
- return stats;
21
- }
22
-
23
- getBasicStats() {
24
- const totalMem = os.totalmem();
25
- const freeMem = os.freemem();
26
- const usedMem = totalMem - freeMem;
27
- const cpuCount = Math.max(1, os.cpus().length);
28
- const oneMinuteLoad = os.loadavg()[0] || 0;
29
-
30
- return {
31
- cpu: Math.max(0, Math.min(100, Math.round((oneMinuteLoad / cpuCount) * 100))),
32
- memory: {
33
- used: Math.round(usedMem / 1024 / 1024),
34
- total: Math.round(totalMem / 1024 / 1024),
35
- percentage: Math.round((usedMem / totalMem) * 100)
36
- },
37
- disk: null,
38
- network: null,
39
- timestamp: Date.now()
40
- };
41
- }
42
-
43
- async getCachedDiskStats() {
44
- const now = this.now();
45
- if (this.diskStatsCache.value && now - this.diskStatsCache.sampledAt < this.diskStatsTtlMs) {
46
- return this.diskStatsCache.value;
47
- }
48
-
49
- const value = await this.getDiskStats();
50
- this.diskStatsCache = {
51
- sampledAt: now,
52
- value,
53
- };
54
- return value;
55
- }
56
-
57
- async getDiskStats() {
58
- if (typeof fsp.statfs !== 'function') return null;
59
-
60
- const root = path.parse(process.cwd()).root || '/';
61
- const stat = await fsp.statfs(root);
62
- const totalBytes = Number(stat.blocks) * Number(stat.bsize);
63
- const freeBytes = Number(stat.bfree) * Number(stat.bsize);
64
- const usedBytes = Math.max(0, totalBytes - freeBytes);
65
-
66
- if (!Number.isFinite(totalBytes) || totalBytes <= 0) return null;
67
-
68
- return {
69
- used: Math.round(usedBytes / 1024 / 1024 / 1024),
70
- total: Math.round(totalBytes / 1024 / 1024 / 1024),
71
- percentage: Math.round((usedBytes / totalBytes) * 100)
72
- };
73
- }
74
- }
75
-
76
- module.exports = SystemMonitor;
77
- module.exports.DISK_STATS_TTL_MS = DISK_STATS_TTL_MS;
@@ -1,74 +0,0 @@
1
- const DEFAULT_TERMINAL_ATTACH_CHECKPOINT_TIMEOUT_MS = 2000;
2
-
3
- function finiteNonNegativeInteger(value) {
4
- const parsed = Number(value);
5
- return Number.isFinite(parsed) && parsed >= 0 ? Math.floor(parsed) : null;
6
- }
7
-
8
- function finitePositiveInteger(value) {
9
- const parsed = Number(value);
10
- return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : null;
11
- }
12
-
13
- async function captureTerminalAttachCheckpoint(session, options = {}) {
14
- if (session?.finalCheckpoint) {
15
- return { ...session.finalCheckpoint };
16
- }
17
- if (
18
- !session
19
- || !session.screenWorker
20
- || session.stateProofAvailable === false
21
- || typeof session.runtimeEpoch !== 'string'
22
- || !session.runtimeEpoch
23
- ) {
24
- return null;
25
- }
26
-
27
- const timeoutMs = Number.isFinite(options.timeoutMs)
28
- ? Math.max(1, Math.floor(options.timeoutMs))
29
- : DEFAULT_TERMINAL_ATTACH_CHECKPOINT_TIMEOUT_MS;
30
- const state = await session.screenWorker.getState({ timeoutMs }).catch(() => null);
31
- const outputSeq = finiteNonNegativeInteger(state?.outputSeq);
32
- const stateRevision = finiteNonNegativeInteger(state?.stateRevision);
33
- const currentOutputSeq = finiteNonNegativeInteger(session.outputSeq);
34
- const currentStateRevision = finiteNonNegativeInteger(session.stateRevision);
35
- const cols = finitePositiveInteger(state?.cols);
36
- const rows = finitePositiveInteger(state?.rows);
37
- const requireCurrentCut = options.requireCurrentCut === true;
38
-
39
- if (
40
- !state
41
- || state.runtimeEpoch !== session.runtimeEpoch
42
- || outputSeq === null
43
- || stateRevision === null
44
- || currentOutputSeq === null
45
- || currentStateRevision === null
46
- || stateRevision < outputSeq
47
- || outputSeq > currentOutputSeq
48
- || stateRevision > currentStateRevision
49
- || (requireCurrentCut && outputSeq !== currentOutputSeq)
50
- || (requireCurrentCut && stateRevision !== currentStateRevision)
51
- || cols === null
52
- || rows === null
53
- || typeof state.renderOutput !== 'string'
54
- ) {
55
- return null;
56
- }
57
-
58
- return {
59
- runtimeEpoch: state.runtimeEpoch,
60
- renderOutput: state.renderOutput,
61
- outputSeq,
62
- stateRevision,
63
- cols,
64
- rows,
65
- previewText: typeof state.previewText === 'string' ? state.previewText : '',
66
- previewSnapshot: state.previewSnapshot || null,
67
- title: typeof state.title === 'string' ? state.title : '',
68
- };
69
- }
70
-
71
- module.exports = {
72
- DEFAULT_TERMINAL_ATTACH_CHECKPOINT_TIMEOUT_MS,
73
- captureTerminalAttachCheckpoint,
74
- };
@@ -1,39 +0,0 @@
1
- const DEFAULT_TERMINAL_EXIT_DATA_FLUSH_MS = 250;
2
-
3
- function delay(ms) {
4
- return new Promise(resolve => setTimeout(resolve, ms));
5
- }
6
-
7
- function acceptTerminalExitData(session) {
8
- if (!session || session.exitDataClosed === true) return false;
9
- if (session.exitFinalizing === true) {
10
- session.exitDataGeneration = (session.exitDataGeneration || 0) + 1;
11
- }
12
- return true;
13
- }
14
-
15
- async function waitForTerminalExitDataQuiescence(session, options = {}) {
16
- const isCurrent = typeof options.isCurrent === 'function' ? options.isCurrent : () => true;
17
- const flushMs = Number.isFinite(options.flushMs)
18
- ? Math.max(1, Math.floor(options.flushMs))
19
- : DEFAULT_TERMINAL_EXIT_DATA_FLUSH_MS;
20
- session.exitFinalizing = true;
21
- session.exitDataGeneration = session.exitDataGeneration || 0;
22
-
23
- for (;;) {
24
- const observedGeneration = session.exitDataGeneration;
25
- await delay(flushMs);
26
- if (!isCurrent()) return false;
27
- if (session.exitDataGeneration !== observedGeneration) continue;
28
- // This synchronous cut closes late-data admission before the reducer is
29
- // drained and its final checkpoint is captured.
30
- session.exitDataClosed = true;
31
- return true;
32
- }
33
- }
34
-
35
- module.exports = {
36
- DEFAULT_TERMINAL_EXIT_DATA_FLUSH_MS,
37
- acceptTerminalExitData,
38
- waitForTerminalExitDataQuiescence,
39
- };
@@ -1,80 +0,0 @@
1
- const fs = require('fs');
2
- const net = require('net');
3
- const os = require('os');
4
- const path = require('path');
5
- const { nativePtyHostSocketPath } = require('./native-pty-host-path');
6
-
7
- function canUseUnixSocket(socketPath) {
8
- return process.platform !== 'win32' && typeof socketPath === 'string' && socketPath.length > 0;
9
- }
10
-
11
- function socketExists(socketPath) {
12
- try {
13
- fs.accessSync(socketPath);
14
- return true;
15
- } catch {
16
- return false;
17
- }
18
- }
19
-
20
- function probeUnixSocket(socketPath, timeoutMs = 120) {
21
- if (!canUseUnixSocket(socketPath)) {
22
- return Promise.resolve({ active: false, code: 'unsupported' });
23
- }
24
-
25
- return new Promise(resolve => {
26
- const socket = net.createConnection(socketPath);
27
- let settled = false;
28
- const finish = result => {
29
- if (settled) return;
30
- settled = true;
31
- clearTimeout(timer);
32
- socket.destroy();
33
- resolve(result);
34
- };
35
- const timer = setTimeout(() => finish({ active: false, code: 'timeout' }), timeoutMs);
36
- if (typeof timer.unref === 'function') timer.unref();
37
- socket.once('connect', () => finish({ active: true }));
38
- socket.once('error', error => finish({ active: false, code: error && error.code ? error.code : 'error' }));
39
- });
40
- }
41
-
42
- async function cleanupStaleNativePtySocket(options = {}) {
43
- const socketPath = options.socketPath || nativePtyHostSocketPath(options.configDir);
44
- if (!canUseUnixSocket(socketPath) || !socketExists(socketPath)) {
45
- return { socketPath, removed: false, active: false };
46
- }
47
-
48
- const probe = await probeUnixSocket(socketPath, options.timeoutMs);
49
- if (probe.active) {
50
- return { socketPath, removed: false, active: true };
51
- }
52
-
53
- try {
54
- fs.unlinkSync(socketPath);
55
- return { socketPath, removed: true, active: false, code: probe.code };
56
- } catch (error) {
57
- if (error && error.code === 'ENOENT') {
58
- return { socketPath, removed: false, active: false, code: probe.code };
59
- }
60
- throw error;
61
- }
62
- }
63
-
64
- async function cleanupTerminalRuntime(options = {}) {
65
- if (process.env.FARMING_SKIP_TERMINAL_RUNTIME_CLEANUP === '1') {
66
- return { skipped: true };
67
- }
68
-
69
- const configDir = options.configDir || process.env.FARMING_CONFIG_DIR || path.join(os.homedir(), '.farming');
70
-
71
- return {
72
- nativeSocket: await cleanupStaleNativePtySocket({ ...options, configDir }),
73
- };
74
- }
75
-
76
- module.exports = {
77
- cleanupStaleNativePtySocket,
78
- cleanupTerminalRuntime,
79
- probeUnixSocket,
80
- };
@@ -1,337 +0,0 @@
1
- const path = require('path');
2
- const fs = require('fs');
3
- const EventEmitter = require('events');
4
- const { Worker } = require('worker_threads');
5
-
6
- const APPEND_FLUSH_INTERVAL_MS = 16;
7
- const MAX_PENDING_APPEND_BYTES = 128 * 1024;
8
- const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
9
- const DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS = 5000;
10
- const PACKAGED_WORKER_FILE = 'terminal-screen-worker-thread.pkg.js';
11
- const SOURCE_WORKER_FILE = 'terminal-screen-worker-thread.js';
12
-
13
- function byteLength(value) {
14
- return Buffer.byteLength(String(value || ''), 'utf8');
15
- }
16
-
17
- function resolveWorkerFile() {
18
- const wantsPackagedWorker = process.pkg || process.env.FARMING_PACKAGED_RUNTIME === '1';
19
- if (!wantsPackagedWorker) return SOURCE_WORKER_FILE;
20
-
21
- const packagedWorkerPath = path.join(__dirname, PACKAGED_WORKER_FILE);
22
- return fs.existsSync(packagedWorkerPath)
23
- ? PACKAGED_WORKER_FILE
24
- : SOURCE_WORKER_FILE;
25
- }
26
-
27
- class TerminalScreenWorker extends EventEmitter {
28
- constructor(options = {}) {
29
- super();
30
- this.nextRequestId = 1;
31
- this.pendingRequests = new Map();
32
- this.pendingAppendEntries = [];
33
- this.pendingAppendBytes = 0;
34
- this.pendingAppendWaiters = [];
35
- this.appendFlushTimer = null;
36
- this.stateRequestInFlight = null;
37
- this.requestTimeoutMs = Number.isFinite(options.requestTimeoutMs)
38
- ? Math.max(1, Math.floor(options.requestTimeoutMs))
39
- : DEFAULT_REQUEST_TIMEOUT_MS;
40
- this.stateRequestHardTimeoutMs = Number.isFinite(options.stateRequestHardTimeoutMs)
41
- ? Math.max(1, Math.floor(options.stateRequestHardTimeoutMs))
42
- : Math.min(this.requestTimeoutMs, DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS);
43
- this.failed = false;
44
- this.disposed = false;
45
- const workerFile = resolveWorkerFile();
46
- const WorkerClass = options.WorkerClass || Worker;
47
- const workerData = { ...options };
48
- delete workerData.WorkerClass;
49
- delete workerData.requestTimeoutMs;
50
- delete workerData.stateRequestHardTimeoutMs;
51
- this.worker = new WorkerClass(path.join(__dirname, workerFile), {
52
- workerData,
53
- });
54
-
55
- this.worker.on('message', (message) => {
56
- if (!message || typeof message !== 'object') {
57
- return;
58
- }
59
-
60
- if (message.type === 'preview') {
61
- this.emit('preview', {
62
- previewText: message.previewText || '',
63
- title: message.title || '',
64
- cols: message.cols || 0,
65
- rows: message.rows || 0,
66
- previewSnapshot: message.previewSnapshot || null,
67
- });
68
- return;
69
- }
70
-
71
- if (message.type === 'response' && message.requestId) {
72
- const pending = this.pendingRequests.get(message.requestId);
73
- if (!pending) return;
74
- this.pendingRequests.delete(message.requestId);
75
- clearTimeout(pending.timer);
76
- if (message.error) {
77
- pending.reject(new Error(message.error));
78
- return;
79
- }
80
- pending.resolve(message.payload);
81
- return;
82
- }
83
-
84
- if (message.type === 'error') {
85
- this.emit('error', new Error(message.message || 'Unknown worker error'));
86
- }
87
- });
88
-
89
- this.worker.on('error', (error) => {
90
- this.handleWorkerFailure(error);
91
- });
92
-
93
- this.worker.on('exit', (code) => {
94
- if (this.disposed) {
95
- return;
96
- }
97
-
98
- this.handleWorkerFailure(new Error(`Terminal screen worker exited unexpectedly with code ${code}`));
99
- });
100
- }
101
-
102
- handleWorkerFailure(error) {
103
- if (this.disposed) return;
104
- const failure = error instanceof Error ? error : new Error(String(error));
105
- const shouldEmit = !this.failed;
106
- this.failed = true;
107
- if (this.appendFlushTimer) {
108
- clearTimeout(this.appendFlushTimer);
109
- this.appendFlushTimer = null;
110
- }
111
- this.pendingAppendEntries = [];
112
- this.pendingAppendBytes = 0;
113
- this.pendingAppendWaiters.splice(0).forEach(({ reject }) => reject(failure));
114
- this.pendingRequests.forEach(({ reject, timer }) => {
115
- clearTimeout(timer);
116
- reject(failure);
117
- });
118
- this.pendingRequests.clear();
119
- if (shouldEmit && this.listenerCount('error') > 0) {
120
- this.emit('error', failure);
121
- }
122
- }
123
-
124
- handlePostMessageFailure(error) {
125
- this.handleWorkerFailure(error);
126
- }
127
-
128
- postWorkerMessage(message, options = {}) {
129
- try {
130
- this.worker.postMessage(message);
131
- return true;
132
- } catch (error) {
133
- if (options.throwOnError) throw error;
134
- this.handlePostMessageFailure(error);
135
- return false;
136
- }
137
- }
138
-
139
- flushAppend() {
140
- if (this.appendFlushTimer) {
141
- clearTimeout(this.appendFlushTimer);
142
- this.appendFlushTimer = null;
143
- }
144
- if (this.disposed || this.failed || this.pendingAppendEntries.length === 0) {
145
- this.pendingAppendEntries = [];
146
- this.pendingAppendBytes = 0;
147
- return;
148
- }
149
-
150
- const entries = this.pendingAppendEntries;
151
- const waiters = this.pendingAppendWaiters;
152
- this.pendingAppendEntries = [];
153
- this.pendingAppendBytes = 0;
154
- this.pendingAppendWaiters = [];
155
- this.request('append', { entries }, { flushAppend: false }).then(
156
- state => waiters.forEach(({ resolve }) => resolve(state)),
157
- error => waiters.forEach(({ reject }) => reject(error)),
158
- );
159
- }
160
-
161
- request(type, payload = {}, options = {}) {
162
- if (this.disposed) {
163
- return Promise.reject(new Error('Terminal screen worker is disposed'));
164
- }
165
- if (this.failed) {
166
- return Promise.reject(new Error('Terminal screen worker is not available'));
167
- }
168
-
169
- if (options.flushAppend !== false) {
170
- this.flushAppend();
171
- }
172
- if (this.failed) {
173
- return Promise.reject(new Error('Terminal screen worker is not available'));
174
- }
175
- const requestId = this.nextRequestId;
176
- this.nextRequestId += 1;
177
-
178
- return new Promise((resolve, reject) => {
179
- const requestTimeoutMs = Number.isFinite(options.timeoutMs)
180
- ? Math.max(1, Math.floor(options.timeoutMs))
181
- : this.requestTimeoutMs;
182
- const timer = setTimeout(() => {
183
- this.pendingRequests.delete(requestId);
184
- const error = new Error(`Terminal screen worker request timed out: ${type}`);
185
- error.code = 'ETIMEDOUT';
186
- reject(error);
187
- }, requestTimeoutMs);
188
- if (typeof timer.unref === 'function') timer.unref();
189
-
190
- this.pendingRequests.set(requestId, { resolve, reject, timer });
191
- try {
192
- this.postWorkerMessage({
193
- requestId,
194
- type,
195
- ...payload,
196
- }, { throwOnError: true });
197
- } catch (error) {
198
- this.pendingRequests.delete(requestId);
199
- clearTimeout(timer);
200
- this.handlePostMessageFailure(error);
201
- reject(error);
202
- }
203
- });
204
- }
205
-
206
- append(data, stateRevision, outputSeq = null) {
207
- if (this.disposed || this.failed) {
208
- return Promise.reject(new Error('Terminal screen worker is not available'));
209
- }
210
-
211
- const text = String(data || '');
212
- if (!text) return;
213
- if (!Number.isFinite(stateRevision)) {
214
- this.handlePostMessageFailure(new Error('Terminal screen append requires a finite state revision'));
215
- return Promise.reject(new Error('Terminal screen append requires a finite state revision'));
216
- }
217
-
218
- if (
219
- this.pendingAppendEntries.length > 0 &&
220
- this.pendingAppendBytes + byteLength(text) > MAX_PENDING_APPEND_BYTES
221
- ) {
222
- this.flushAppend();
223
- }
224
-
225
- return new Promise((resolve, reject) => {
226
- this.pendingAppendEntries.push({ data: text, stateRevision, outputSeq });
227
- this.pendingAppendBytes += byteLength(text);
228
- this.pendingAppendWaiters.push({ resolve, reject });
229
- if (byteLength(text) > MAX_PENDING_APPEND_BYTES) {
230
- this.flushAppend();
231
- return;
232
- }
233
- if (this.appendFlushTimer) return;
234
- this.appendFlushTimer = setTimeout(() => {
235
- this.flushAppend();
236
- }, APPEND_FLUSH_INTERVAL_MS);
237
- });
238
- }
239
-
240
- resize(cols, rows, stateRevision) {
241
- return this.request('resize', { cols, rows, stateRevision });
242
- }
243
-
244
- setRuntimeEpoch(runtimeEpoch, cols, rows) {
245
- return this.request('set-runtime-epoch', { runtimeEpoch, cols, rows });
246
- }
247
-
248
- clear(stateRevision, outputSeq = null) {
249
- return this.request('clear', { stateRevision, outputSeq });
250
- }
251
-
252
- getState(options = {}) {
253
- if (!this.stateRequestInFlight) {
254
- const request = this.request('get-state', {
255
- // A full checkpoint can satisfy callers that only need metadata too,
256
- // while the reverse would make coalescing unsafe.
257
- includeRenderOutput: true,
258
- }, {
259
- // Caller deadlines are deliberately softer than this shared deadline.
260
- // A timed-out caller may stop waiting, but the single-flight itself
261
- // must never poison every later checkpoint for the generic 30s worker
262
- // request timeout. Crossing this hard deadline means the authoritative
263
- // reducer can no longer prove progress, so fail it closed.
264
- timeoutMs: this.stateRequestHardTimeoutMs,
265
- });
266
- const sharedRequest = request.catch((error) => {
267
- if (error && error.code === 'ETIMEDOUT') {
268
- this.handleWorkerFailure(error);
269
- }
270
- throw error;
271
- }).finally(() => {
272
- if (this.stateRequestInFlight === sharedRequest) {
273
- this.stateRequestInFlight = null;
274
- }
275
- });
276
- this.stateRequestInFlight = sharedRequest;
277
- }
278
-
279
- const sharedRequest = this.stateRequestInFlight;
280
- const timeoutMs = Number.isFinite(options.timeoutMs)
281
- ? Math.max(1, Math.floor(options.timeoutMs))
282
- : null;
283
- if (timeoutMs === null) return sharedRequest;
284
-
285
- return new Promise((resolve, reject) => {
286
- const timer = setTimeout(() => {
287
- const error = new Error('Terminal screen worker request timed out: get-state');
288
- error.code = 'ETIMEDOUT';
289
- reject(error);
290
- }, timeoutMs);
291
- if (typeof timer.unref === 'function') timer.unref();
292
- sharedRequest.then(
293
- (state) => {
294
- clearTimeout(timer);
295
- resolve(state);
296
- },
297
- (error) => {
298
- clearTimeout(timer);
299
- reject(error);
300
- },
301
- );
302
- });
303
- }
304
-
305
- async dispose() {
306
- if (this.disposed) {
307
- return;
308
- }
309
-
310
- try {
311
- await this.request('dispose');
312
- } catch {
313
- // best effort
314
- }
315
- if (this.appendFlushTimer) {
316
- clearTimeout(this.appendFlushTimer);
317
- this.appendFlushTimer = null;
318
- }
319
- this.pendingAppendEntries = [];
320
- this.pendingAppendBytes = 0;
321
- this.pendingAppendWaiters.splice(0).forEach(({ reject }) => {
322
- reject(new Error('Terminal screen worker is disposed'));
323
- });
324
- this.disposed = true;
325
- this.pendingRequests.forEach(({ reject, timer }) => {
326
- clearTimeout(timer);
327
- reject(new Error('Terminal screen worker disposed'));
328
- });
329
- this.pendingRequests.clear();
330
- await this.worker.terminate();
331
- }
332
- }
333
-
334
- module.exports = TerminalScreenWorker;
335
- module.exports.resolveWorkerFile = resolveWorkerFile;
336
- module.exports.DEFAULT_REQUEST_TIMEOUT_MS = DEFAULT_REQUEST_TIMEOUT_MS;
337
- module.exports.DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS = DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS;