farming-code 2.2.29 → 2.2.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/README.md +25 -66
  2. package/README.zh_cn.md +15 -66
  3. package/THIRD_PARTY_NOTICES.md +7 -0
  4. package/backend/acp/{client-services.js → client-services.cjs} +132 -134
  5. package/backend/acp/packaged-claude-acp.cjs +37 -0
  6. package/backend/acp/packaged-codex-acp.cjs +37 -0
  7. package/backend/acp/patch-decisions.cjs +182 -0
  8. package/backend/acp/permission-security.cjs +131 -0
  9. package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
  10. package/backend/{acp-runtime.js → acp-runtime.cjs} +1219 -1125
  11. package/backend/acp-session-state.cjs +622 -0
  12. package/backend/acp-transcript.cjs +525 -0
  13. package/backend/agent-env.cjs +257 -0
  14. package/backend/agent-extension-discovery.cjs +452 -0
  15. package/backend/agent-extension-inventory.cjs +116 -0
  16. package/backend/agent-json-stream.cjs +283 -0
  17. package/backend/agent-lifecycle-journal.cjs +185 -0
  18. package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
  19. package/backend/agent-order-transaction.cjs +85 -0
  20. package/backend/agent-order.cjs +159 -0
  21. package/backend/agent-provider-session.cjs +98 -0
  22. package/backend/agent-runtime-binding.cjs +179 -0
  23. package/backend/agent-session-history.cjs +1022 -0
  24. package/backend/agent-session-inventory.cjs +291 -0
  25. package/backend/async-cache.cjs +104 -0
  26. package/backend/atomic-json-store.cjs +67 -0
  27. package/backend/auth.cjs +261 -0
  28. package/backend/authoritative-inventory-cache.cjs +383 -0
  29. package/backend/business-health.cjs +68 -0
  30. package/backend/chat-runtime.cjs +50 -0
  31. package/backend/claude-settings.cjs +132 -0
  32. package/backend/cli-agents.cjs +435 -0
  33. package/backend/codex-context-window.cjs +196 -0
  34. package/backend/codex-models.cjs +228 -0
  35. package/backend/codex-session-archive.cjs +82 -0
  36. package/backend/codex-session-history.cjs +590 -0
  37. package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
  38. package/backend/codex-transcript-sanitizer.cjs +130 -0
  39. package/backend/codex-transcript.cjs +2107 -0
  40. package/backend/command-runner-child.cjs +105 -0
  41. package/backend/config-manager.cjs +1263 -0
  42. package/backend/control-api.cjs +439 -0
  43. package/backend/data/LICENSE.cua +21 -0
  44. package/backend/executable-discovery.cjs +204 -0
  45. package/backend/farming-agent-bootstrap.cjs +81 -0
  46. package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
  47. package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
  48. package/backend/farming-cli.cjs +414 -0
  49. package/backend/farming-net-pass.cjs +319 -0
  50. package/backend/farming-net-registry.cjs +123 -0
  51. package/backend/farming-net-server.cjs +309 -0
  52. package/backend/farming-session-store.cjs +651 -0
  53. package/backend/git-worktree-info.cjs +181 -0
  54. package/backend/haiku-token.cjs +828 -0
  55. package/backend/index-html.cjs +96 -0
  56. package/backend/input-parts.cjs +68 -0
  57. package/backend/input-routing.cjs +40 -0
  58. package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
  59. package/backend/main-agent-skills.cjs +309 -0
  60. package/backend/main-page-session.cjs +132 -0
  61. package/backend/native-pty-controller-generation.cjs +139 -0
  62. package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
  63. package/backend/native-pty-host-identity.cjs +125 -0
  64. package/backend/native-pty-host-path.cjs +68 -0
  65. package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
  66. package/backend/native-session-engine.cjs +296 -0
  67. package/backend/network.cjs +57 -0
  68. package/backend/npm-update-helper.cjs +399 -0
  69. package/backend/packaged-node-pty.cjs +120 -0
  70. package/backend/preview-session-manager.cjs +89 -0
  71. package/backend/provider-adapters.cjs +492 -0
  72. package/backend/provider-home-configuration.cjs +211 -0
  73. package/backend/provider-session-id.cjs +79 -0
  74. package/backend/provider-session-service.cjs +333 -0
  75. package/backend/qr-share-tickets.cjs +119 -0
  76. package/backend/resource-broadcast-protocol.cjs +50 -0
  77. package/backend/review-diff-router.cjs +202 -0
  78. package/backend/review-diff-service.cjs +1267 -0
  79. package/backend/review-session-router.cjs +93 -0
  80. package/backend/review-session-service.cjs +470 -0
  81. package/backend/review-session-store.cjs +161 -0
  82. package/backend/review-state-router.cjs +132 -0
  83. package/backend/review-state-store.cjs +299 -0
  84. package/backend/run-history-store.cjs +97 -0
  85. package/backend/runtime-dependency-manager.cjs +893 -0
  86. package/backend/runtime-executable-invocation.cjs +37 -0
  87. package/backend/runtime-observation.cjs +96 -0
  88. package/backend/server-process-identity.cjs +70 -0
  89. package/backend/server.cjs +3356 -0
  90. package/backend/session-engine-bridge.cjs +144 -0
  91. package/backend/session-engine-router.cjs +105 -0
  92. package/backend/session-engine.cjs +64 -0
  93. package/backend/session-stream-protocol.cjs +181 -0
  94. package/backend/shell-busy-integration.cjs +442 -0
  95. package/backend/slash-command-discovery.cjs +423 -0
  96. package/backend/storage-layout.cjs +263 -0
  97. package/backend/system-monitor.cjs +96 -0
  98. package/backend/terminal-attach-checkpoint.cjs +73 -0
  99. package/backend/terminal-exit-quiescence.cjs +57 -0
  100. package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
  101. package/backend/terminal-runtime-cleanup.cjs +99 -0
  102. package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
  103. package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
  104. package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
  105. package/backend/terminal-screen-worker.cjs +352 -0
  106. package/backend/terminal-state-serialization.cjs +147 -0
  107. package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
  108. package/backend/theme-manager.cjs +185 -0
  109. package/backend/update-service.cjs +675 -0
  110. package/backend/usage-forecast.cjs +95 -0
  111. package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
  112. package/backend/usage-history-smoke.cjs +85 -0
  113. package/backend/usage-history-worker.cjs +60 -0
  114. package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
  115. package/backend/workspace-directory.cjs +239 -0
  116. package/backend/workspace-discovery.cjs +271 -0
  117. package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
  118. package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
  119. package/backend/workspace-root-registry.cjs +192 -0
  120. package/bin/farming +1 -1
  121. package/config/farming.deploy.env.example +1 -1
  122. package/config/farming.install.env.example +1 -1
  123. package/dist/acp/codex-acp-1.1.4.mjs +405 -8
  124. package/dist/assets/App-BCkdpWB6.css +1 -0
  125. package/dist/assets/App-CRjKpaGp.js +697 -0
  126. package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
  127. package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
  128. package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
  129. package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
  130. package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
  131. package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
  132. package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
  133. package/dist/assets/code-dark-B7eM_9G9.css +1 -0
  134. package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
  135. package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
  136. package/dist/assets/file-icons-BpeqWkIB.js +1 -0
  137. package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
  138. package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
  139. package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
  140. package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
  141. package/dist/assets/{index-CQNaZc3l.js → index-C8MchCem.js} +3 -3
  142. package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
  143. package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
  144. package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
  145. package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
  146. package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
  147. package/dist/assets/main-CLKXa6hf.css +1 -0
  148. package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
  149. package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
  150. package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
  151. package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
  152. package/dist/assets/review-C8-oPKXk.css +1 -0
  153. package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
  154. package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
  155. package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
  156. package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
  157. package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
  158. package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
  159. package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
  160. package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
  161. package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
  162. package/dist/index.html +2 -1
  163. package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
  164. package/extensions/browser/backend/agent-capability.cjs +85 -0
  165. package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
  166. package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
  167. package/extensions/browser/backend/browser-resource-store.cjs +228 -0
  168. package/extensions/browser/backend/browser-router.cjs +203 -0
  169. package/extensions/browser/backend/executable-discovery.cjs +248 -0
  170. package/extensions/browser/backend/farming-browser-client.cjs +116 -0
  171. package/extensions/browser/backend/index.cjs +32 -0
  172. package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
  173. package/extensions/browser/bin/farming-browser +16 -7
  174. package/extensions/computer/backend/agent-capability.cjs +72 -0
  175. package/extensions/computer/backend/computer-constants.cjs +59 -0
  176. package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
  177. package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
  178. package/extensions/computer/backend/computer-resource-store.cjs +190 -0
  179. package/extensions/computer/backend/computer-router.cjs +257 -0
  180. package/extensions/computer/backend/cua-tools.json +3067 -0
  181. package/extensions/computer/backend/farming-computer-client.cjs +84 -0
  182. package/extensions/computer/backend/index.cjs +35 -0
  183. package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
  184. package/extensions/computer/bin/farming-computer +131 -0
  185. package/frontend/farming-net/app.js +255 -262
  186. package/frontend/ghostty-loader.js +24 -20
  187. package/frontend/reading-anchor.js +210 -193
  188. package/frontend/runtime-paths.js +24 -26
  189. package/frontend/session-bridge.js +90 -111
  190. package/frontend/session-modal-bridge.js +184 -302
  191. package/frontend/skin-bridge.js +20 -23
  192. package/frontend/skins/crt/app.js +7686 -7901
  193. package/frontend/skins/crt/effects.js +7 -6
  194. package/frontend/skins/crt/index.html +6 -6
  195. package/frontend/skins/crt/styles/markdown.css +4 -4
  196. package/frontend/terminal-bridge.js +174 -181
  197. package/frontend/terminal-replay.js +320 -345
  198. package/frontend/theme-loader.js +55 -71
  199. package/index.html +1 -0
  200. package/package.json +64 -37
  201. package/shared/backend-connection-status.js +38 -69
  202. package/shared/browser-protocol.js +235 -110
  203. package/shared/websocket-liveness.js +40 -0
  204. package/backend/acp/packaged-claude-acp.js +0 -13
  205. package/backend/acp/packaged-codex-acp.js +0 -13
  206. package/backend/acp/patch-decisions.js +0 -153
  207. package/backend/acp/permission-security.js +0 -108
  208. package/backend/acp-session-state.js +0 -644
  209. package/backend/acp-transcript.js +0 -512
  210. package/backend/agent-env.js +0 -250
  211. package/backend/agent-json-stream.js +0 -268
  212. package/backend/agent-lifecycle-journal.js +0 -133
  213. package/backend/agent-memory-report.js +0 -583
  214. package/backend/agent-order.js +0 -166
  215. package/backend/agent-provider-session.js +0 -76
  216. package/backend/agent-runtime-binding.js +0 -174
  217. package/backend/agent-session-history.js +0 -953
  218. package/backend/async-cache.js +0 -94
  219. package/backend/atomic-json-store.js +0 -37
  220. package/backend/auth.js +0 -251
  221. package/backend/bundle-update-helper.js +0 -113
  222. package/backend/chat-runtime.js +0 -28
  223. package/backend/claude-settings.js +0 -121
  224. package/backend/cli-agents.js +0 -486
  225. package/backend/codex-context-window.js +0 -189
  226. package/backend/codex-models.js +0 -226
  227. package/backend/codex-rollout-follower.js +0 -326
  228. package/backend/codex-session-archive.js +0 -65
  229. package/backend/codex-session-history.js +0 -647
  230. package/backend/codex-transcript-sanitizer.js +0 -115
  231. package/backend/codex-transcript.js +0 -2564
  232. package/backend/command-runner-child.js +0 -67
  233. package/backend/config-manager.js +0 -1133
  234. package/backend/control-api.js +0 -455
  235. package/backend/executable-discovery.js +0 -216
  236. package/backend/farming-agent-bootstrap.js +0 -49
  237. package/backend/farming-cli.js +0 -457
  238. package/backend/farming-net-pass.js +0 -285
  239. package/backend/farming-net-registry.js +0 -112
  240. package/backend/farming-net-server.js +0 -298
  241. package/backend/farming-session-store.js +0 -677
  242. package/backend/git-worktree-info.js +0 -181
  243. package/backend/haiku-token.js +0 -772
  244. package/backend/index-html.js +0 -62
  245. package/backend/input-parts.js +0 -54
  246. package/backend/input-routing.js +0 -24
  247. package/backend/json-cli-runtime.js +0 -275
  248. package/backend/main-agent-skills.js +0 -305
  249. package/backend/main-page-session.js +0 -122
  250. package/backend/native-pty-controller-generation.js +0 -106
  251. package/backend/native-pty-host-identity.js +0 -86
  252. package/backend/native-pty-host-path.js +0 -42
  253. package/backend/native-session-engine.js +0 -268
  254. package/backend/network.js +0 -23
  255. package/backend/npm-update-helper.js +0 -374
  256. package/backend/packaged-node-pty.js +0 -99
  257. package/backend/preview-session-manager.js +0 -68
  258. package/backend/provider-adapters.js +0 -399
  259. package/backend/provider-session-id.js +0 -47
  260. package/backend/provider-session-service.js +0 -345
  261. package/backend/qr-share-tickets.js +0 -100
  262. package/backend/review-diff-router.js +0 -180
  263. package/backend/review-diff-service.js +0 -1270
  264. package/backend/review-session-router.js +0 -74
  265. package/backend/review-session-service.js +0 -446
  266. package/backend/review-session-store.js +0 -151
  267. package/backend/review-state-router.js +0 -116
  268. package/backend/review-state-store.js +0 -286
  269. package/backend/run-history-store.js +0 -67
  270. package/backend/runtime-dependency-manager.js +0 -759
  271. package/backend/runtime-executable-invocation.js +0 -20
  272. package/backend/runtime-observation.js +0 -81
  273. package/backend/server-process-identity.js +0 -47
  274. package/backend/server.js +0 -3267
  275. package/backend/session-engine-bridge.js +0 -129
  276. package/backend/session-engine-router.js +0 -66
  277. package/backend/session-engine.js +0 -39
  278. package/backend/session-stream-protocol.js +0 -185
  279. package/backend/shell-busy-integration.js +0 -472
  280. package/backend/slash-command-discovery.js +0 -433
  281. package/backend/storage-layout.js +0 -190
  282. package/backend/system-monitor.js +0 -77
  283. package/backend/terminal-attach-checkpoint.js +0 -74
  284. package/backend/terminal-exit-quiescence.js +0 -39
  285. package/backend/terminal-runtime-cleanup.js +0 -80
  286. package/backend/terminal-screen-worker.js +0 -337
  287. package/backend/terminal-state-serialization.js +0 -127
  288. package/backend/theme-manager.js +0 -163
  289. package/backend/update-service.js +0 -1545
  290. package/backend/usage-forecast.js +0 -86
  291. package/backend/usage-history-scanner.ts +0 -2718
  292. package/backend/usage-history-smoke.js +0 -64
  293. package/backend/usage-history-worker.js +0 -34
  294. package/backend/workspace-directory.js +0 -232
  295. package/backend/workspace-discovery.js +0 -311
  296. package/backend/workspace-root-registry.js +0 -166
  297. package/dist/assets/App-BKNUILuL.css +0 -1
  298. package/dist/assets/App-Ex2oVVXO.js +0 -693
  299. package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
  300. package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
  301. package/dist/assets/ProjectFilesSection-Cf2BEcAN.js +0 -12
  302. package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
  303. package/dist/assets/code-dark-BEZTQwYZ.css +0 -1
  304. package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
  305. package/dist/assets/main-DK9Sy7-c.css +0 -1
  306. package/dist/assets/review-BcnwQtJv.css +0 -1
  307. package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
  308. package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
  309. package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
  310. package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
  311. package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
  312. package/extensions/browser/backend/agent-capability.js +0 -55
  313. package/extensions/browser/backend/browser-mcp-server.js +0 -621
  314. package/extensions/browser/backend/browser-resource-manager.js +0 -1309
  315. package/extensions/browser/backend/browser-resource-store.js +0 -190
  316. package/extensions/browser/backend/browser-router.js +0 -133
  317. package/extensions/browser/backend/executable-discovery.js +0 -224
  318. package/extensions/browser/backend/farming-browser-client.js +0 -83
  319. package/extensions/browser/backend/index.js +0 -7
  320. package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
  321. package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
  322. package/extensions/browser/frontend/browser-resource-state.ts +0 -60
  323. package/extensions/browser/frontend/browser.css +0 -567
  324. package/extensions/browser/frontend/types.ts +0 -31
  325. package/extensions/browser/frontend/useBrowserResources.ts +0 -158
  326. package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
  327. package/shared/backend-connection-status.d.ts +0 -37
  328. package/shared/browser-protocol.d.ts +0 -5
  329. /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
  330. /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
  331. /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
  332. /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
  333. /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
  334. /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
  335. /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
  336. /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
  337. /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
  338. /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
  339. /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
  340. /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
  341. /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
  342. /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
  343. /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
  344. /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
  345. /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
  346. /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
  347. /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
  348. /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
  349. /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
  350. /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
  351. /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
  352. /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
  353. /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
  354. /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
  355. /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
  356. /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
  357. /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
  358. /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
  359. /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
  360. /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
  361. /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
  362. /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
  363. /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
  364. /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
  365. /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
  366. /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
  367. /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
  368. /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
  369. /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
  370. /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
  371. /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
  372. /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
  373. /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
  374. /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
  375. /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
  376. /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
  377. /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
  378. /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
  379. /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
  380. /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
  381. /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
  382. /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
  383. /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
  384. /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
  385. /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
@@ -1,160 +1,162 @@
1
- const { parentPort, workerData } = require('worker_threads');
2
- const TerminalScreenState = require('./terminal-screen-state');
3
-
1
+ // Generated by scripts/build-backend-runtime.ts. Do not edit.
2
+ "use strict";
3
+ var import_worker_threads = require("worker_threads");
4
+ var import_terminal_screen_state = require("./terminal-screen-state.cjs");
4
5
  const PREVIEW_FLUSH_INTERVAL_MS = 50;
5
-
6
- const screenState = new TerminalScreenState(workerData || {});
7
- let runtimeEpoch = typeof workerData.runtimeEpoch === 'string' ? workerData.runtimeEpoch : '';
6
+ function errorMessage(error) {
7
+ return error instanceof Error ? error.message : String(error);
8
+ }
9
+ const workerPort = import_worker_threads.parentPort;
10
+ const initialWorkerData = import_worker_threads.workerData && typeof import_worker_threads.workerData === "object" ? import_worker_threads.workerData : {};
11
+ const screenState = new import_terminal_screen_state.TerminalScreenState(initialWorkerData);
12
+ let runtimeEpoch = typeof initialWorkerData.runtimeEpoch === "string" ? initialWorkerData.runtimeEpoch : "";
8
13
  let appliedOutputSeq = 0;
9
14
  let appliedStateRevision = 0;
10
- let lastPreviewText = '';
11
- let lastTitle = '';
12
- let lastSnapshotFingerprint = '';
15
+ let lastPreviewText = "";
16
+ let lastTitle = "";
17
+ let lastSnapshotFingerprint = "";
13
18
  let messageQueue = Promise.resolve();
14
19
  let previewFlushTimer = null;
15
-
16
20
  function postPreview(state) {
17
- const previewText = state.previewText || '';
18
- const title = state.title || '';
21
+ const previewText = state.previewText || "";
22
+ const title = state.title || "";
19
23
  const previewSnapshot = state.previewSnapshot || null;
20
- const snapshotFingerprint = previewSnapshot ? JSON.stringify(previewSnapshot) : '';
21
-
24
+ const snapshotFingerprint = previewSnapshot ? JSON.stringify(previewSnapshot) : "";
22
25
  if (previewText === lastPreviewText && title === lastTitle && snapshotFingerprint === lastSnapshotFingerprint) {
23
26
  return;
24
27
  }
25
-
26
28
  lastPreviewText = previewText;
27
29
  lastTitle = title;
28
30
  lastSnapshotFingerprint = snapshotFingerprint;
29
- parentPort.postMessage({
30
- type: 'preview',
31
+ workerPort?.postMessage({
32
+ type: "preview",
31
33
  previewText,
32
34
  title,
33
35
  cols: state.cols || 0,
34
36
  rows: state.rows || 0,
35
- previewSnapshot,
37
+ previewSnapshot
36
38
  });
37
39
  }
38
-
39
40
  function withOutputSeq(state) {
40
41
  return {
41
42
  ...state,
42
43
  runtimeEpoch,
43
44
  outputSeq: appliedOutputSeq,
44
- stateRevision: appliedStateRevision,
45
+ stateRevision: appliedStateRevision
45
46
  };
46
47
  }
47
-
48
48
  function currentState(options = {}) {
49
49
  const state = screenState.getState({
50
50
  includeRenderOutput: options.includeRenderOutput,
51
- refreshPreview: options.refreshPreview,
51
+ refreshPreview: options.refreshPreview
52
52
  });
53
53
  if (options.emitPreview) {
54
54
  postPreview(state);
55
55
  }
56
56
  return withOutputSeq(state);
57
57
  }
58
-
59
58
  function schedulePreview() {
60
59
  if (previewFlushTimer) return;
61
60
  previewFlushTimer = setTimeout(() => {
62
61
  previewFlushTimer = null;
63
62
  postPreview(currentState({
64
63
  includeRenderOutput: false,
65
- refreshPreview: true,
64
+ refreshPreview: true
66
65
  }));
67
66
  }, PREVIEW_FLUSH_INTERVAL_MS);
68
- if (typeof previewFlushTimer.unref === 'function') previewFlushTimer.unref();
67
+ if (typeof previewFlushTimer.unref === "function") previewFlushTimer.unref();
69
68
  }
70
-
71
69
  function assertNextRevision(stateRevision, transition) {
72
70
  if (!Number.isFinite(stateRevision) || stateRevision !== appliedStateRevision + 1) {
73
71
  throw new Error(
74
- `Terminal screen ${transition} revision gap: expected ${appliedStateRevision + 1}, received ${stateRevision}`,
72
+ `Terminal screen ${transition} revision gap: expected ${appliedStateRevision + 1}, received ${stateRevision}`
75
73
  );
76
74
  }
77
75
  }
78
-
76
+ function assertFiniteDimension(value, name) {
77
+ if (typeof value !== "number" || !Number.isFinite(value)) {
78
+ throw new Error(`Terminal screen ${name} must be finite`);
79
+ }
80
+ }
79
81
  async function appendEntries(rawEntries) {
80
82
  const entries = Array.isArray(rawEntries) ? rawEntries : [];
81
83
  if (entries.length === 0) return;
82
-
83
84
  let expectedRevision = appliedStateRevision + 1;
84
85
  let nextOutputSeq = appliedOutputSeq;
85
- let data = '';
86
- for (const entry of entries) {
87
- const stateRevision = Number(entry && entry.stateRevision);
86
+ let data = "";
87
+ for (const value of entries) {
88
+ const entry = value && typeof value === "object" ? value : {};
89
+ const stateRevision = Number(entry.stateRevision);
88
90
  if (!Number.isFinite(stateRevision) || stateRevision !== expectedRevision) {
89
91
  throw new Error(
90
- `Terminal screen append revision gap: expected ${expectedRevision}, received ${entry && entry.stateRevision}`,
92
+ `Terminal screen append revision gap: expected ${expectedRevision}, received ${entry.stateRevision}`
91
93
  );
92
94
  }
93
- const text = String((entry && entry.data) || '');
95
+ const text = String(entry.data || "");
94
96
  if (!text) {
95
97
  throw new Error(`Terminal screen append revision ${stateRevision} has no data`);
96
98
  }
97
- const outputSeq = Number(entry && entry.outputSeq);
99
+ const outputSeq = Number(entry.outputSeq);
98
100
  if (!Number.isFinite(outputSeq) || outputSeq !== nextOutputSeq + 1) {
99
101
  throw new Error(
100
- `Terminal screen output sequence gap: expected ${nextOutputSeq + 1}, received ${entry && entry.outputSeq}`,
102
+ `Terminal screen output sequence gap: expected ${nextOutputSeq + 1}, received ${entry.outputSeq}`
101
103
  );
102
104
  }
103
105
  data += text;
104
106
  nextOutputSeq = outputSeq;
105
107
  expectedRevision += 1;
106
108
  }
107
-
108
109
  const state = await screenState.write(data);
109
110
  appliedStateRevision = expectedRevision - 1;
110
111
  appliedOutputSeq = nextOutputSeq;
111
112
  schedulePreview();
112
113
  return state;
113
114
  }
114
-
115
115
  async function handleRequest(message) {
116
116
  switch (message.type) {
117
- case 'append':
117
+ case "append":
118
118
  await appendEntries(message.entries);
119
119
  return currentState({
120
120
  includeRenderOutput: false,
121
- refreshPreview: false,
121
+ refreshPreview: false
122
122
  });
123
- case 'set-runtime-epoch':
124
- runtimeEpoch = typeof message.runtimeEpoch === 'string' ? message.runtimeEpoch : '';
123
+ case "set-runtime-epoch":
124
+ runtimeEpoch = typeof message.runtimeEpoch === "string" ? message.runtimeEpoch : "";
125
125
  appliedOutputSeq = 0;
126
126
  appliedStateRevision = 0;
127
- if (Number.isFinite(message.cols) && Number.isFinite(message.rows)) {
127
+ if (typeof message.cols === "number" && Number.isFinite(message.cols) && typeof message.rows === "number" && Number.isFinite(message.rows)) {
128
128
  screenState.resize(message.cols, message.rows);
129
129
  }
130
130
  return currentState({ includeRenderOutput: false });
131
- case 'resize': {
132
- assertNextRevision(message.stateRevision, 'resize');
131
+ case "resize": {
132
+ assertNextRevision(message.stateRevision, "resize");
133
+ assertFiniteDimension(message.cols, "columns");
134
+ assertFiniteDimension(message.rows, "rows");
133
135
  screenState.resize(message.cols, message.rows);
134
136
  appliedStateRevision = message.stateRevision;
135
137
  const state = screenState.getState({ includeRenderOutput: true });
136
138
  postPreview(state);
137
139
  return withOutputSeq(state);
138
140
  }
139
- case 'clear': {
140
- assertNextRevision(message.stateRevision, 'clear');
141
+ case "clear": {
142
+ assertNextRevision(message.stateRevision, "clear");
141
143
  const state = await screenState.clearBuffer();
142
144
  const outputSeq = Number(message.outputSeq);
143
145
  if (!Number.isFinite(outputSeq) || outputSeq !== appliedOutputSeq) {
144
146
  throw new Error(
145
- `Terminal screen clear output sequence mismatch: expected ${appliedOutputSeq}, received ${message.outputSeq}`,
147
+ `Terminal screen clear output sequence mismatch: expected ${appliedOutputSeq}, received ${message.outputSeq}`
146
148
  );
147
149
  }
148
150
  appliedStateRevision = message.stateRevision;
149
151
  postPreview(state);
150
152
  return withOutputSeq(state);
151
153
  }
152
- case 'get-state':
154
+ case "get-state":
153
155
  return currentState({
154
156
  includeRenderOutput: message.includeRenderOutput !== false,
155
- emitPreview: false,
157
+ emitPreview: false
156
158
  });
157
- case 'dispose':
159
+ case "dispose":
158
160
  if (previewFlushTimer) {
159
161
  clearTimeout(previewFlushTimer);
160
162
  previewFlushTimer = null;
@@ -165,37 +167,34 @@ async function handleRequest(message) {
165
167
  throw new Error(`Unknown worker message type: ${message.type}`);
166
168
  }
167
169
  }
168
-
169
170
  async function processMessage(message) {
170
171
  try {
171
172
  const payload = await handleRequest(message);
172
173
  if (message.requestId) {
173
- parentPort.postMessage({
174
- type: 'response',
174
+ workerPort?.postMessage({
175
+ type: "response",
175
176
  requestId: message.requestId,
176
- payload,
177
+ payload
177
178
  });
178
179
  }
179
180
  } catch (error) {
180
181
  if (message.requestId) {
181
- parentPort.postMessage({
182
- type: 'response',
182
+ workerPort?.postMessage({
183
+ type: "response",
183
184
  requestId: message.requestId,
184
- error: error.message,
185
+ error: errorMessage(error)
185
186
  });
186
187
  return;
187
188
  }
188
-
189
- parentPort.postMessage({
190
- type: 'error',
191
- message: error.message,
189
+ workerPort?.postMessage({
190
+ type: "error",
191
+ message: errorMessage(error)
192
192
  });
193
193
  }
194
194
  }
195
-
196
- parentPort.on('message', (message) => {
195
+ workerPort?.on("message", (message) => {
197
196
  messageQueue = messageQueue.then(
198
197
  () => processMessage(message),
199
- () => processMessage(message),
198
+ () => processMessage(message)
200
199
  );
201
200
  });
@@ -0,0 +1,352 @@
1
+ // Generated by scripts/build-backend-runtime.ts. Do not edit.
2
+ "use strict";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var terminal_screen_worker_exports = {};
31
+ __export(terminal_screen_worker_exports, {
32
+ DEFAULT_REQUEST_TIMEOUT_MS: () => DEFAULT_REQUEST_TIMEOUT_MS,
33
+ DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS: () => DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS,
34
+ TerminalScreenWorker: () => TerminalScreenWorker,
35
+ resolveWorkerFile: () => resolveWorkerFile
36
+ });
37
+ module.exports = __toCommonJS(terminal_screen_worker_exports);
38
+ var path = __toESM(require("path"));
39
+ var fs = __toESM(require("fs"));
40
+ var import_events = require("events");
41
+ var import_worker_threads = require("worker_threads");
42
+ const APPEND_FLUSH_INTERVAL_MS = 16;
43
+ const MAX_PENDING_APPEND_BYTES = 128 * 1024;
44
+ const DEFAULT_REQUEST_TIMEOUT_MS = 3e4;
45
+ const DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS = 5e3;
46
+ const PACKAGED_WORKER_FILE = "terminal-screen-worker-thread.pkg.js";
47
+ const SOURCE_WORKER_FILE = "terminal-screen-worker-thread.cjs";
48
+ function errorCode(error) {
49
+ return error && typeof error === "object" && "code" in error ? String(error.code) : "";
50
+ }
51
+ function byteLength(value) {
52
+ return Buffer.byteLength(String(value || ""), "utf8");
53
+ }
54
+ function finiteNumber(value) {
55
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
56
+ }
57
+ function resolveWorkerFile() {
58
+ const wantsPackagedWorker = process.pkg || process.env.FARMING_PACKAGED_RUNTIME === "1";
59
+ if (!wantsPackagedWorker) return SOURCE_WORKER_FILE;
60
+ const packagedWorkerPath = path.join(__dirname, PACKAGED_WORKER_FILE);
61
+ return fs.existsSync(packagedWorkerPath) ? PACKAGED_WORKER_FILE : SOURCE_WORKER_FILE;
62
+ }
63
+ class TerminalScreenWorker extends import_events.EventEmitter {
64
+ static DEFAULT_REQUEST_TIMEOUT_MS = DEFAULT_REQUEST_TIMEOUT_MS;
65
+ static DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS = DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS;
66
+ static resolveWorkerFile = resolveWorkerFile;
67
+ worker;
68
+ pendingRequests = /* @__PURE__ */ new Map();
69
+ pendingAppendEntries = [];
70
+ pendingAppendWaiters = [];
71
+ pendingAppendBytes = 0;
72
+ appendFlushTimer = null;
73
+ stateRequestInFlight = null;
74
+ failed = false;
75
+ disposed = false;
76
+ nextRequestId = 1;
77
+ requestTimeoutMs;
78
+ stateRequestHardTimeoutMs;
79
+ constructor(options = {}) {
80
+ super();
81
+ const requestTimeoutMs = finiteNumber(options.requestTimeoutMs);
82
+ this.requestTimeoutMs = requestTimeoutMs !== null ? Math.max(1, Math.floor(requestTimeoutMs)) : DEFAULT_REQUEST_TIMEOUT_MS;
83
+ const stateRequestHardTimeoutMs = finiteNumber(options.stateRequestHardTimeoutMs);
84
+ this.stateRequestHardTimeoutMs = stateRequestHardTimeoutMs !== null ? Math.max(1, Math.floor(stateRequestHardTimeoutMs)) : Math.min(this.requestTimeoutMs, DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS);
85
+ const workerFile = resolveWorkerFile();
86
+ const WorkerClass = options.WorkerClass || import_worker_threads.Worker;
87
+ const workerData = { ...options };
88
+ delete workerData.WorkerClass;
89
+ delete workerData.requestTimeoutMs;
90
+ delete workerData.stateRequestHardTimeoutMs;
91
+ this.worker = new WorkerClass(path.join(__dirname, workerFile), {
92
+ workerData
93
+ });
94
+ this.worker.on("message", (value) => {
95
+ const message = value && typeof value === "object" ? value : null;
96
+ if (!message || typeof message !== "object") {
97
+ return;
98
+ }
99
+ if (message.type === "preview") {
100
+ this.emit("preview", {
101
+ previewText: message.previewText || "",
102
+ title: message.title || "",
103
+ cols: message.cols || 0,
104
+ rows: message.rows || 0,
105
+ previewSnapshot: message.previewSnapshot || null
106
+ });
107
+ return;
108
+ }
109
+ if (message.type === "response" && typeof message.requestId === "number") {
110
+ const pending = this.pendingRequests.get(message.requestId);
111
+ if (!pending) return;
112
+ this.pendingRequests.delete(message.requestId);
113
+ clearTimeout(pending.timer);
114
+ if (message.error) {
115
+ pending.reject(new Error(String(message.error)));
116
+ return;
117
+ }
118
+ pending.resolve(message.payload);
119
+ return;
120
+ }
121
+ if (message.type === "error") {
122
+ this.emit("error", new Error(String(message.message || "Unknown worker error")));
123
+ }
124
+ });
125
+ this.worker.on("error", (error) => {
126
+ this.handleWorkerFailure(error);
127
+ });
128
+ this.worker.on("exit", (code) => {
129
+ if (this.disposed) {
130
+ return;
131
+ }
132
+ this.handleWorkerFailure(new Error(`Terminal screen worker exited unexpectedly with code ${code}`));
133
+ });
134
+ }
135
+ handleWorkerFailure(error) {
136
+ if (this.disposed) return;
137
+ const failure = error instanceof Error ? error : new Error(String(error));
138
+ const shouldEmit = !this.failed;
139
+ this.failed = true;
140
+ if (this.appendFlushTimer) {
141
+ clearTimeout(this.appendFlushTimer);
142
+ this.appendFlushTimer = null;
143
+ }
144
+ this.pendingAppendEntries = [];
145
+ this.pendingAppendBytes = 0;
146
+ this.pendingAppendWaiters.splice(0).forEach(({ reject }) => reject(failure));
147
+ this.pendingRequests.forEach(({ reject, timer }) => {
148
+ clearTimeout(timer);
149
+ reject(failure);
150
+ });
151
+ this.pendingRequests.clear();
152
+ if (shouldEmit && this.listenerCount("error") > 0) {
153
+ this.emit("error", failure);
154
+ }
155
+ }
156
+ handlePostMessageFailure(error) {
157
+ this.handleWorkerFailure(error);
158
+ }
159
+ postWorkerMessage(message, options = {}) {
160
+ try {
161
+ this.worker.postMessage(message);
162
+ return true;
163
+ } catch (error) {
164
+ if (options.throwOnError) throw error;
165
+ this.handlePostMessageFailure(error);
166
+ return false;
167
+ }
168
+ }
169
+ flushAppend() {
170
+ if (this.appendFlushTimer) {
171
+ clearTimeout(this.appendFlushTimer);
172
+ this.appendFlushTimer = null;
173
+ }
174
+ if (this.disposed || this.failed || this.pendingAppendEntries.length === 0) {
175
+ this.pendingAppendEntries = [];
176
+ this.pendingAppendBytes = 0;
177
+ return;
178
+ }
179
+ const entries = this.pendingAppendEntries;
180
+ const waiters = this.pendingAppendWaiters;
181
+ this.pendingAppendEntries = [];
182
+ this.pendingAppendBytes = 0;
183
+ this.pendingAppendWaiters = [];
184
+ this.request("append", { entries }, { flushAppend: false }).then(
185
+ (state) => waiters.forEach(({ resolve }) => resolve(state)),
186
+ (error) => waiters.forEach(({ reject }) => reject(error))
187
+ );
188
+ }
189
+ request(type, payload = {}, options = {}) {
190
+ if (this.disposed) {
191
+ return Promise.reject(new Error("Terminal screen worker is disposed"));
192
+ }
193
+ if (this.failed) {
194
+ return Promise.reject(new Error("Terminal screen worker is not available"));
195
+ }
196
+ if (options.flushAppend !== false) {
197
+ this.flushAppend();
198
+ }
199
+ if (this.failed) {
200
+ return Promise.reject(new Error("Terminal screen worker is not available"));
201
+ }
202
+ const requestId = this.nextRequestId;
203
+ this.nextRequestId += 1;
204
+ return new Promise((resolve, reject) => {
205
+ const requestedTimeoutMs = finiteNumber(options.timeoutMs);
206
+ const requestTimeoutMs = requestedTimeoutMs !== null ? Math.max(1, Math.floor(requestedTimeoutMs)) : this.requestTimeoutMs;
207
+ const timer = setTimeout(() => {
208
+ this.pendingRequests.delete(requestId);
209
+ const error = Object.assign(
210
+ new Error(`Terminal screen worker request timed out: ${type}`),
211
+ { code: "ETIMEDOUT" }
212
+ );
213
+ reject(error);
214
+ }, requestTimeoutMs);
215
+ if (typeof timer.unref === "function") timer.unref();
216
+ this.pendingRequests.set(requestId, { resolve, reject, timer });
217
+ try {
218
+ this.postWorkerMessage({
219
+ requestId,
220
+ type,
221
+ ...payload
222
+ }, { throwOnError: true });
223
+ } catch (error) {
224
+ this.pendingRequests.delete(requestId);
225
+ clearTimeout(timer);
226
+ this.handlePostMessageFailure(error);
227
+ reject(error);
228
+ }
229
+ });
230
+ }
231
+ append(data, stateRevision, outputSeq = null) {
232
+ if (this.disposed || this.failed) {
233
+ return Promise.reject(new Error("Terminal screen worker is not available"));
234
+ }
235
+ const text = String(data || "");
236
+ if (!text) return;
237
+ if (!Number.isFinite(stateRevision)) {
238
+ this.handlePostMessageFailure(new Error("Terminal screen append requires a finite state revision"));
239
+ return Promise.reject(new Error("Terminal screen append requires a finite state revision"));
240
+ }
241
+ if (this.pendingAppendEntries.length > 0 && this.pendingAppendBytes + byteLength(text) > MAX_PENDING_APPEND_BYTES) {
242
+ this.flushAppend();
243
+ }
244
+ return new Promise((resolve, reject) => {
245
+ this.pendingAppendEntries.push({ data: text, stateRevision, outputSeq });
246
+ this.pendingAppendBytes += byteLength(text);
247
+ this.pendingAppendWaiters.push({ resolve, reject });
248
+ if (byteLength(text) > MAX_PENDING_APPEND_BYTES) {
249
+ this.flushAppend();
250
+ return;
251
+ }
252
+ if (this.appendFlushTimer) return;
253
+ this.appendFlushTimer = setTimeout(() => {
254
+ this.flushAppend();
255
+ }, APPEND_FLUSH_INTERVAL_MS);
256
+ });
257
+ }
258
+ resize(cols, rows, stateRevision) {
259
+ return this.request(
260
+ "resize",
261
+ { cols, rows, stateRevision }
262
+ );
263
+ }
264
+ setRuntimeEpoch(runtimeEpoch, cols, rows) {
265
+ return this.request("set-runtime-epoch", { runtimeEpoch, cols, rows });
266
+ }
267
+ clear(stateRevision, outputSeq = null) {
268
+ return this.request("clear", { stateRevision, outputSeq });
269
+ }
270
+ getState(options = {}) {
271
+ if (!this.stateRequestInFlight) {
272
+ const request = this.request("get-state", {
273
+ // A full checkpoint can satisfy callers that only need metadata too,
274
+ // while the reverse would make coalescing unsafe.
275
+ includeRenderOutput: true
276
+ }, {
277
+ // Caller deadlines are deliberately softer than this shared deadline.
278
+ // A timed-out caller may stop waiting, but the single-flight itself
279
+ // must never poison every later checkpoint for the generic 30s worker
280
+ // request timeout. Crossing this hard deadline means the authoritative
281
+ // reducer can no longer prove progress, so fail it closed.
282
+ timeoutMs: this.stateRequestHardTimeoutMs
283
+ });
284
+ const sharedRequest2 = request.catch((error) => {
285
+ if (errorCode(error) === "ETIMEDOUT") {
286
+ this.handleWorkerFailure(error);
287
+ }
288
+ throw error;
289
+ }).finally(() => {
290
+ if (this.stateRequestInFlight === sharedRequest2) {
291
+ this.stateRequestInFlight = null;
292
+ }
293
+ });
294
+ this.stateRequestInFlight = sharedRequest2;
295
+ }
296
+ const sharedRequest = this.stateRequestInFlight;
297
+ const timeoutMs = typeof options.timeoutMs === "number" && Number.isFinite(options.timeoutMs) ? Math.max(1, Math.floor(options.timeoutMs)) : null;
298
+ if (timeoutMs === null) return sharedRequest;
299
+ return new Promise((resolve, reject) => {
300
+ const timer = setTimeout(() => {
301
+ const error = Object.assign(
302
+ new Error("Terminal screen worker request timed out: get-state"),
303
+ { code: "ETIMEDOUT" }
304
+ );
305
+ reject(error);
306
+ }, timeoutMs);
307
+ if (typeof timer.unref === "function") timer.unref();
308
+ sharedRequest.then(
309
+ (state) => {
310
+ clearTimeout(timer);
311
+ resolve(state);
312
+ },
313
+ (error) => {
314
+ clearTimeout(timer);
315
+ reject(error);
316
+ }
317
+ );
318
+ });
319
+ }
320
+ async dispose() {
321
+ if (this.disposed) {
322
+ return;
323
+ }
324
+ try {
325
+ await this.request("dispose");
326
+ } catch {
327
+ }
328
+ if (this.appendFlushTimer) {
329
+ clearTimeout(this.appendFlushTimer);
330
+ this.appendFlushTimer = null;
331
+ }
332
+ this.pendingAppendEntries = [];
333
+ this.pendingAppendBytes = 0;
334
+ this.pendingAppendWaiters.splice(0).forEach(({ reject }) => {
335
+ reject(new Error("Terminal screen worker is disposed"));
336
+ });
337
+ this.disposed = true;
338
+ this.pendingRequests.forEach(({ reject, timer }) => {
339
+ clearTimeout(timer);
340
+ reject(new Error("Terminal screen worker disposed"));
341
+ });
342
+ this.pendingRequests.clear();
343
+ await this.worker.terminate();
344
+ }
345
+ }
346
+ // Annotate the CommonJS export names for ESM import in node:
347
+ 0 && (module.exports = {
348
+ DEFAULT_REQUEST_TIMEOUT_MS,
349
+ DEFAULT_STATE_REQUEST_HARD_TIMEOUT_MS,
350
+ TerminalScreenWorker,
351
+ resolveWorkerFile
352
+ });