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,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
+ });