farming-code 2.2.29 → 2.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -66
- package/README.zh_cn.md +15 -66
- package/THIRD_PARTY_NOTICES.md +7 -0
- package/backend/acp/{client-services.js → client-services.cjs} +132 -134
- package/backend/acp/packaged-claude-acp.cjs +37 -0
- package/backend/acp/packaged-codex-acp.cjs +37 -0
- package/backend/acp/patch-decisions.cjs +182 -0
- package/backend/acp/permission-security.cjs +131 -0
- package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
- package/backend/{acp-runtime.js → acp-runtime.cjs} +1219 -1125
- package/backend/acp-session-state.cjs +622 -0
- package/backend/acp-transcript.cjs +525 -0
- package/backend/agent-env.cjs +257 -0
- package/backend/agent-extension-discovery.cjs +452 -0
- package/backend/agent-extension-inventory.cjs +116 -0
- package/backend/agent-json-stream.cjs +283 -0
- package/backend/agent-lifecycle-journal.cjs +185 -0
- package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
- package/backend/agent-order-transaction.cjs +85 -0
- package/backend/agent-order.cjs +159 -0
- package/backend/agent-provider-session.cjs +98 -0
- package/backend/agent-runtime-binding.cjs +179 -0
- package/backend/agent-session-history.cjs +1022 -0
- package/backend/agent-session-inventory.cjs +291 -0
- package/backend/async-cache.cjs +104 -0
- package/backend/atomic-json-store.cjs +67 -0
- package/backend/auth.cjs +261 -0
- package/backend/authoritative-inventory-cache.cjs +383 -0
- package/backend/business-health.cjs +68 -0
- package/backend/chat-runtime.cjs +50 -0
- package/backend/claude-settings.cjs +132 -0
- package/backend/cli-agents.cjs +435 -0
- package/backend/codex-context-window.cjs +196 -0
- package/backend/codex-models.cjs +228 -0
- package/backend/codex-session-archive.cjs +82 -0
- package/backend/codex-session-history.cjs +590 -0
- package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
- package/backend/codex-transcript-sanitizer.cjs +130 -0
- package/backend/codex-transcript.cjs +2107 -0
- package/backend/command-runner-child.cjs +105 -0
- package/backend/config-manager.cjs +1263 -0
- package/backend/control-api.cjs +439 -0
- package/backend/data/LICENSE.cua +21 -0
- package/backend/executable-discovery.cjs +204 -0
- package/backend/farming-agent-bootstrap.cjs +81 -0
- package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
- package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
- package/backend/farming-cli.cjs +414 -0
- package/backend/farming-net-pass.cjs +319 -0
- package/backend/farming-net-registry.cjs +123 -0
- package/backend/farming-net-server.cjs +309 -0
- package/backend/farming-session-store.cjs +651 -0
- package/backend/git-worktree-info.cjs +181 -0
- package/backend/haiku-token.cjs +828 -0
- package/backend/index-html.cjs +96 -0
- package/backend/input-parts.cjs +68 -0
- package/backend/input-routing.cjs +40 -0
- package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
- package/backend/main-agent-skills.cjs +309 -0
- package/backend/main-page-session.cjs +132 -0
- package/backend/native-pty-controller-generation.cjs +139 -0
- package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
- package/backend/native-pty-host-identity.cjs +125 -0
- package/backend/native-pty-host-path.cjs +68 -0
- package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
- package/backend/native-session-engine.cjs +296 -0
- package/backend/network.cjs +57 -0
- package/backend/npm-update-helper.cjs +399 -0
- package/backend/packaged-node-pty.cjs +120 -0
- package/backend/preview-session-manager.cjs +89 -0
- package/backend/provider-adapters.cjs +492 -0
- package/backend/provider-home-configuration.cjs +211 -0
- package/backend/provider-session-id.cjs +79 -0
- package/backend/provider-session-service.cjs +333 -0
- package/backend/qr-share-tickets.cjs +119 -0
- package/backend/resource-broadcast-protocol.cjs +50 -0
- package/backend/review-diff-router.cjs +202 -0
- package/backend/review-diff-service.cjs +1267 -0
- package/backend/review-session-router.cjs +93 -0
- package/backend/review-session-service.cjs +470 -0
- package/backend/review-session-store.cjs +161 -0
- package/backend/review-state-router.cjs +132 -0
- package/backend/review-state-store.cjs +299 -0
- package/backend/run-history-store.cjs +97 -0
- package/backend/runtime-dependency-manager.cjs +893 -0
- package/backend/runtime-executable-invocation.cjs +37 -0
- package/backend/runtime-observation.cjs +96 -0
- package/backend/server-process-identity.cjs +70 -0
- package/backend/server.cjs +3356 -0
- package/backend/session-engine-bridge.cjs +144 -0
- package/backend/session-engine-router.cjs +105 -0
- package/backend/session-engine.cjs +64 -0
- package/backend/session-stream-protocol.cjs +181 -0
- package/backend/shell-busy-integration.cjs +442 -0
- package/backend/slash-command-discovery.cjs +423 -0
- package/backend/storage-layout.cjs +263 -0
- package/backend/system-monitor.cjs +96 -0
- package/backend/terminal-attach-checkpoint.cjs +73 -0
- package/backend/terminal-exit-quiescence.cjs +57 -0
- package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
- package/backend/terminal-runtime-cleanup.cjs +99 -0
- package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
- package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
- package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
- package/backend/terminal-screen-worker.cjs +352 -0
- package/backend/terminal-state-serialization.cjs +147 -0
- package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
- package/backend/theme-manager.cjs +185 -0
- package/backend/update-service.cjs +675 -0
- package/backend/usage-forecast.cjs +95 -0
- package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
- package/backend/usage-history-smoke.cjs +85 -0
- package/backend/usage-history-worker.cjs +60 -0
- package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
- package/backend/workspace-directory.cjs +239 -0
- package/backend/workspace-discovery.cjs +271 -0
- package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
- package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
- package/backend/workspace-root-registry.cjs +192 -0
- package/bin/farming +1 -1
- package/config/farming.deploy.env.example +1 -1
- package/config/farming.install.env.example +1 -1
- package/dist/acp/codex-acp-1.1.4.mjs +405 -8
- package/dist/assets/App-BCkdpWB6.css +1 -0
- package/dist/assets/App-CRjKpaGp.js +697 -0
- package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
- package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
- package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
- package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
- package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
- package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
- package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
- package/dist/assets/code-dark-B7eM_9G9.css +1 -0
- package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
- package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
- package/dist/assets/file-icons-BpeqWkIB.js +1 -0
- package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
- package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
- package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
- package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
- package/dist/assets/{index-CQNaZc3l.js → index-C8MchCem.js} +3 -3
- package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
- package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
- package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
- package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
- package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
- package/dist/assets/main-CLKXa6hf.css +1 -0
- package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
- package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
- package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
- package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
- package/dist/assets/review-C8-oPKXk.css +1 -0
- package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
- package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
- package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
- package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
- package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
- package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
- package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
- package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
- package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
- package/dist/index.html +2 -1
- package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
- package/extensions/browser/backend/agent-capability.cjs +85 -0
- package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
- package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
- package/extensions/browser/backend/browser-resource-store.cjs +228 -0
- package/extensions/browser/backend/browser-router.cjs +203 -0
- package/extensions/browser/backend/executable-discovery.cjs +248 -0
- package/extensions/browser/backend/farming-browser-client.cjs +116 -0
- package/extensions/browser/backend/index.cjs +32 -0
- package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
- package/extensions/browser/bin/farming-browser +16 -7
- package/extensions/computer/backend/agent-capability.cjs +72 -0
- package/extensions/computer/backend/computer-constants.cjs +59 -0
- package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
- package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
- package/extensions/computer/backend/computer-resource-store.cjs +190 -0
- package/extensions/computer/backend/computer-router.cjs +257 -0
- package/extensions/computer/backend/cua-tools.json +3067 -0
- package/extensions/computer/backend/farming-computer-client.cjs +84 -0
- package/extensions/computer/backend/index.cjs +35 -0
- package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
- package/extensions/computer/bin/farming-computer +131 -0
- package/frontend/farming-net/app.js +255 -262
- package/frontend/ghostty-loader.js +24 -20
- package/frontend/reading-anchor.js +210 -193
- package/frontend/runtime-paths.js +24 -26
- package/frontend/session-bridge.js +90 -111
- package/frontend/session-modal-bridge.js +184 -302
- package/frontend/skin-bridge.js +20 -23
- package/frontend/skins/crt/app.js +7686 -7901
- package/frontend/skins/crt/effects.js +7 -6
- package/frontend/skins/crt/index.html +6 -6
- package/frontend/skins/crt/styles/markdown.css +4 -4
- package/frontend/terminal-bridge.js +174 -181
- package/frontend/terminal-replay.js +320 -345
- package/frontend/theme-loader.js +55 -71
- package/index.html +1 -0
- package/package.json +64 -37
- package/shared/backend-connection-status.js +38 -69
- package/shared/browser-protocol.js +235 -110
- package/shared/websocket-liveness.js +40 -0
- package/backend/acp/packaged-claude-acp.js +0 -13
- package/backend/acp/packaged-codex-acp.js +0 -13
- package/backend/acp/patch-decisions.js +0 -153
- package/backend/acp/permission-security.js +0 -108
- package/backend/acp-session-state.js +0 -644
- package/backend/acp-transcript.js +0 -512
- package/backend/agent-env.js +0 -250
- package/backend/agent-json-stream.js +0 -268
- package/backend/agent-lifecycle-journal.js +0 -133
- package/backend/agent-memory-report.js +0 -583
- package/backend/agent-order.js +0 -166
- package/backend/agent-provider-session.js +0 -76
- package/backend/agent-runtime-binding.js +0 -174
- package/backend/agent-session-history.js +0 -953
- package/backend/async-cache.js +0 -94
- package/backend/atomic-json-store.js +0 -37
- package/backend/auth.js +0 -251
- package/backend/bundle-update-helper.js +0 -113
- package/backend/chat-runtime.js +0 -28
- package/backend/claude-settings.js +0 -121
- package/backend/cli-agents.js +0 -486
- package/backend/codex-context-window.js +0 -189
- package/backend/codex-models.js +0 -226
- package/backend/codex-rollout-follower.js +0 -326
- package/backend/codex-session-archive.js +0 -65
- package/backend/codex-session-history.js +0 -647
- package/backend/codex-transcript-sanitizer.js +0 -115
- package/backend/codex-transcript.js +0 -2564
- package/backend/command-runner-child.js +0 -67
- package/backend/config-manager.js +0 -1133
- package/backend/control-api.js +0 -455
- package/backend/executable-discovery.js +0 -216
- package/backend/farming-agent-bootstrap.js +0 -49
- package/backend/farming-cli.js +0 -457
- package/backend/farming-net-pass.js +0 -285
- package/backend/farming-net-registry.js +0 -112
- package/backend/farming-net-server.js +0 -298
- package/backend/farming-session-store.js +0 -677
- package/backend/git-worktree-info.js +0 -181
- package/backend/haiku-token.js +0 -772
- package/backend/index-html.js +0 -62
- package/backend/input-parts.js +0 -54
- package/backend/input-routing.js +0 -24
- package/backend/json-cli-runtime.js +0 -275
- package/backend/main-agent-skills.js +0 -305
- package/backend/main-page-session.js +0 -122
- package/backend/native-pty-controller-generation.js +0 -106
- package/backend/native-pty-host-identity.js +0 -86
- package/backend/native-pty-host-path.js +0 -42
- package/backend/native-session-engine.js +0 -268
- package/backend/network.js +0 -23
- package/backend/npm-update-helper.js +0 -374
- package/backend/packaged-node-pty.js +0 -99
- package/backend/preview-session-manager.js +0 -68
- package/backend/provider-adapters.js +0 -399
- package/backend/provider-session-id.js +0 -47
- package/backend/provider-session-service.js +0 -345
- package/backend/qr-share-tickets.js +0 -100
- package/backend/review-diff-router.js +0 -180
- package/backend/review-diff-service.js +0 -1270
- package/backend/review-session-router.js +0 -74
- package/backend/review-session-service.js +0 -446
- package/backend/review-session-store.js +0 -151
- package/backend/review-state-router.js +0 -116
- package/backend/review-state-store.js +0 -286
- package/backend/run-history-store.js +0 -67
- package/backend/runtime-dependency-manager.js +0 -759
- package/backend/runtime-executable-invocation.js +0 -20
- package/backend/runtime-observation.js +0 -81
- package/backend/server-process-identity.js +0 -47
- package/backend/server.js +0 -3267
- package/backend/session-engine-bridge.js +0 -129
- package/backend/session-engine-router.js +0 -66
- package/backend/session-engine.js +0 -39
- package/backend/session-stream-protocol.js +0 -185
- package/backend/shell-busy-integration.js +0 -472
- package/backend/slash-command-discovery.js +0 -433
- package/backend/storage-layout.js +0 -190
- package/backend/system-monitor.js +0 -77
- package/backend/terminal-attach-checkpoint.js +0 -74
- package/backend/terminal-exit-quiescence.js +0 -39
- package/backend/terminal-runtime-cleanup.js +0 -80
- package/backend/terminal-screen-worker.js +0 -337
- package/backend/terminal-state-serialization.js +0 -127
- package/backend/theme-manager.js +0 -163
- package/backend/update-service.js +0 -1545
- package/backend/usage-forecast.js +0 -86
- package/backend/usage-history-scanner.ts +0 -2718
- package/backend/usage-history-smoke.js +0 -64
- package/backend/usage-history-worker.js +0 -34
- package/backend/workspace-directory.js +0 -232
- package/backend/workspace-discovery.js +0 -311
- package/backend/workspace-root-registry.js +0 -166
- package/dist/assets/App-BKNUILuL.css +0 -1
- package/dist/assets/App-Ex2oVVXO.js +0 -693
- package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
- package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
- package/dist/assets/ProjectFilesSection-Cf2BEcAN.js +0 -12
- package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
- package/dist/assets/code-dark-BEZTQwYZ.css +0 -1
- package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
- package/dist/assets/main-DK9Sy7-c.css +0 -1
- package/dist/assets/review-BcnwQtJv.css +0 -1
- package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
- package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
- package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
- package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
- package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
- package/extensions/browser/backend/agent-capability.js +0 -55
- package/extensions/browser/backend/browser-mcp-server.js +0 -621
- package/extensions/browser/backend/browser-resource-manager.js +0 -1309
- package/extensions/browser/backend/browser-resource-store.js +0 -190
- package/extensions/browser/backend/browser-router.js +0 -133
- package/extensions/browser/backend/executable-discovery.js +0 -224
- package/extensions/browser/backend/farming-browser-client.js +0 -83
- package/extensions/browser/backend/index.js +0 -7
- package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
- package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
- package/extensions/browser/frontend/browser-resource-state.ts +0 -60
- package/extensions/browser/frontend/browser.css +0 -567
- package/extensions/browser/frontend/types.ts +0 -31
- package/extensions/browser/frontend/useBrowserResources.ts +0 -158
- package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
- package/shared/backend-connection-status.d.ts +0 -37
- package/shared/browser-protocol.d.ts +0 -5
- /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
- /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
- /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
- /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
- /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
- /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
- /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
- /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
- /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
- /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
- /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
- /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
- /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
- /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
- /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
- /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
- /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
- /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
- /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
- /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
- /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
- /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
- /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
- /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
- /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
- /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
- /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
- /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
- /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
- /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
- /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
- /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
- /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
- /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
- /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
- /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
- /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
- /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
- /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
- /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
- /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
- /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
- /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
- /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
- /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
- /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
- /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
- /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
- /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
- /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
- /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
- /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
- /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
- /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
- /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
- /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
- /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
|
@@ -1,160 +1,162 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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
|
-
|
|
7
|
-
|
|
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
|
-
|
|
30
|
-
type:
|
|
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 ===
|
|
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
|
|
87
|
-
const
|
|
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
|
|
92
|
+
`Terminal screen append revision gap: expected ${expectedRevision}, received ${entry.stateRevision}`
|
|
91
93
|
);
|
|
92
94
|
}
|
|
93
|
-
const text = String(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
124
|
-
runtimeEpoch = typeof 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
|
|
132
|
-
assertNextRevision(message.stateRevision,
|
|
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
|
|
140
|
-
assertNextRevision(message.stateRevision,
|
|
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
|
|
154
|
+
case "get-state":
|
|
153
155
|
return currentState({
|
|
154
156
|
includeRenderOutput: message.includeRenderOutput !== false,
|
|
155
|
-
emitPreview: false
|
|
157
|
+
emitPreview: false
|
|
156
158
|
});
|
|
157
|
-
case
|
|
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
|
-
|
|
174
|
-
type:
|
|
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
|
-
|
|
182
|
-
type:
|
|
182
|
+
workerPort?.postMessage({
|
|
183
|
+
type: "response",
|
|
183
184
|
requestId: message.requestId,
|
|
184
|
-
error: error
|
|
185
|
+
error: errorMessage(error)
|
|
185
186
|
});
|
|
186
187
|
return;
|
|
187
188
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
+
});
|