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
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Generated by scripts/build-backend-runtime.ts. Do not edit.
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var usage_forecast_exports = {};
|
|
21
|
+
__export(usage_forecast_exports, {
|
|
22
|
+
attachQuotaForecast: () => attachQuotaForecast,
|
|
23
|
+
attachQuotaForecasts: () => attachQuotaForecasts,
|
|
24
|
+
buildQuotaForecast: () => buildQuotaForecast
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(usage_forecast_exports);
|
|
27
|
+
function numberOrNull(value) {
|
|
28
|
+
if (value === null || value === void 0 || value === "") return null;
|
|
29
|
+
const numberValue = Number(value);
|
|
30
|
+
return Number.isFinite(numberValue) ? numberValue : null;
|
|
31
|
+
}
|
|
32
|
+
function clamp(value, min, max) {
|
|
33
|
+
return Math.min(max, Math.max(min, value));
|
|
34
|
+
}
|
|
35
|
+
function buildQuotaForecast(limit, options = {}) {
|
|
36
|
+
if (!limit || typeof limit !== "object") return null;
|
|
37
|
+
const source = limit;
|
|
38
|
+
const now = numberOrNull(options.now) ?? Date.now();
|
|
39
|
+
const usedPercentRaw = numberOrNull(source.usedPercent);
|
|
40
|
+
const windowMinutes = numberOrNull(source.windowMinutes);
|
|
41
|
+
const resetsAt = numberOrNull(source.resetsAt);
|
|
42
|
+
if (usedPercentRaw === null || windowMinutes === null || windowMinutes <= 0) return null;
|
|
43
|
+
const usedPercent = clamp(usedPercentRaw, 0, 100);
|
|
44
|
+
const remainingPercent = Math.max(0, 100 - usedPercent);
|
|
45
|
+
const windowMs = windowMinutes * 6e4;
|
|
46
|
+
const resetInMs = resetsAt !== null && resetsAt > 0 ? Math.max(0, resetsAt - now) : null;
|
|
47
|
+
const elapsedMs = resetInMs === null ? windowMs / 2 : clamp(windowMs - resetInMs, 0, windowMs);
|
|
48
|
+
const elapsedMinutes = Math.max(1, elapsedMs / 6e4);
|
|
49
|
+
const remainingMinutes = resetInMs === null ? null : Math.max(0, resetInMs / 6e4);
|
|
50
|
+
const burnRatePercentPerMinute = usedPercent / elapsedMinutes;
|
|
51
|
+
const etaMinutes = burnRatePercentPerMinute > 0 ? remainingPercent / burnRatePercentPerMinute : null;
|
|
52
|
+
const etaMs = etaMinutes === null ? null : Math.max(0, etaMinutes * 6e4);
|
|
53
|
+
const projectedExhaustedAt = etaMs === null ? null : now + etaMs;
|
|
54
|
+
const projectedEndPercent = remainingMinutes === null ? null : clamp(usedPercent + burnRatePercentPerMinute * remainingMinutes, 0, Number.MAX_SAFE_INTEGER);
|
|
55
|
+
const totalTokens = numberOrNull(source.totalTokens);
|
|
56
|
+
const usedTokens = totalTokens !== null && totalTokens > 0 ? Math.round(totalTokens * usedPercent / 100) : null;
|
|
57
|
+
const remainingTokens = totalTokens !== null && totalTokens > 0 ? Math.max(0, totalTokens - (usedTokens ?? 0)) : null;
|
|
58
|
+
return {
|
|
59
|
+
source: "quota-window-average",
|
|
60
|
+
usedPercent,
|
|
61
|
+
remainingPercent,
|
|
62
|
+
burnRatePercentPerMinute,
|
|
63
|
+
etaMs,
|
|
64
|
+
projectedExhaustedAt,
|
|
65
|
+
projectedEndPercent,
|
|
66
|
+
resetInMs,
|
|
67
|
+
windowElapsedMs: elapsedMs,
|
|
68
|
+
totalTokens,
|
|
69
|
+
usedTokens,
|
|
70
|
+
remainingTokens
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function attachQuotaForecast(limit, options = {}) {
|
|
74
|
+
if (!limit || typeof limit !== "object") return limit;
|
|
75
|
+
return {
|
|
76
|
+
...limit,
|
|
77
|
+
forecast: buildQuotaForecast(limit, options)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function attachQuotaForecasts(quota, options = {}) {
|
|
81
|
+
if (!quota || typeof quota !== "object") return quota;
|
|
82
|
+
const source = quota;
|
|
83
|
+
if (source.available === false) return quota;
|
|
84
|
+
return {
|
|
85
|
+
...source,
|
|
86
|
+
primary: attachQuotaForecast(source.primary, options),
|
|
87
|
+
secondary: attachQuotaForecast(source.secondary, options)
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {
|
|
92
|
+
attachQuotaForecast,
|
|
93
|
+
attachQuotaForecasts,
|
|
94
|
+
buildQuotaForecast
|
|
95
|
+
});
|
|
@@ -1,27 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 usage_history_client_exports = {};
|
|
31
|
+
__export(usage_history_client_exports, {
|
|
32
|
+
DEFAULT_RECENT_RAW_MS: () => DEFAULT_RECENT_RAW_MS,
|
|
33
|
+
DEFAULT_RETENTION_DAYS: () => DEFAULT_RETENTION_DAYS,
|
|
34
|
+
DEFAULT_SCAN_BUDGET_MS: () => DEFAULT_SCAN_BUDGET_MS,
|
|
35
|
+
UsageHistoryClient: () => UsageHistoryClient,
|
|
36
|
+
resolveWorkerFile: () => resolveWorkerFile,
|
|
37
|
+
runUsageWorker: () => runUsageWorker
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(usage_history_client_exports);
|
|
40
|
+
var path = __toESM(require("path"));
|
|
41
|
+
var fs = __toESM(require("fs"));
|
|
42
|
+
var import_worker_threads = require("worker_threads");
|
|
43
|
+
var import_storage_layout = require("./storage-layout.cjs");
|
|
44
|
+
const DEFAULT_TIMEOUT_MS = 12e4;
|
|
7
45
|
const DEFAULT_RETENTION_DAYS = 52 * 7;
|
|
8
|
-
const DEFAULT_RECENT_RAW_MS = 24 * 60 * 60 *
|
|
9
|
-
const DEFAULT_SCAN_BUDGET_MS =
|
|
46
|
+
const DEFAULT_RECENT_RAW_MS = 24 * 60 * 60 * 1e3;
|
|
47
|
+
const DEFAULT_SCAN_BUDGET_MS = 5e3;
|
|
10
48
|
const BACKGROUND_SCAN_DELAY_MS = 100;
|
|
11
|
-
const RESULT_REUSE_MS =
|
|
12
|
-
const SOURCE_WORKER_FILE =
|
|
13
|
-
const PACKAGED_WORKER_FILE =
|
|
49
|
+
const RESULT_REUSE_MS = 2e3;
|
|
50
|
+
const SOURCE_WORKER_FILE = "usage-history-worker.cjs";
|
|
51
|
+
const PACKAGED_WORKER_FILE = "usage-history-worker.pkg.js";
|
|
14
52
|
let sharedWorkerSession = null;
|
|
15
53
|
let nextWorkerRequestId = 1;
|
|
16
|
-
|
|
54
|
+
function asRecord(value) {
|
|
55
|
+
return value !== null && typeof value === "object" ? value : null;
|
|
56
|
+
}
|
|
57
|
+
function workerError(value, fallbackMessage, fallbackCode) {
|
|
58
|
+
const payload = asRecord(value);
|
|
59
|
+
const error = new Error(
|
|
60
|
+
typeof payload?.message === "string" && payload.message ? payload.message : fallbackMessage
|
|
61
|
+
);
|
|
62
|
+
error.code = typeof payload?.code === "string" && payload.code ? payload.code : fallbackCode;
|
|
63
|
+
if (typeof payload?.stack === "string" && payload.stack) error.stack = payload.stack;
|
|
64
|
+
return error;
|
|
65
|
+
}
|
|
17
66
|
function resolveWorkerFile() {
|
|
18
|
-
if (!process.pkg && process.env.FARMING_PACKAGED_RUNTIME !==
|
|
67
|
+
if (!process.pkg && process.env.FARMING_PACKAGED_RUNTIME !== "1") {
|
|
19
68
|
return SOURCE_WORKER_FILE;
|
|
20
69
|
}
|
|
21
70
|
const packaged = path.join(__dirname, PACKAGED_WORKER_FILE);
|
|
22
71
|
return fs.existsSync(packaged) ? PACKAGED_WORKER_FILE : SOURCE_WORKER_FILE;
|
|
23
72
|
}
|
|
24
|
-
|
|
25
73
|
function runUsageWorker(request, options = {}) {
|
|
26
74
|
if (options.WorkerClass) {
|
|
27
75
|
return runOneShotUsageWorker(request, options);
|
|
@@ -29,62 +77,64 @@ function runUsageWorker(request, options = {}) {
|
|
|
29
77
|
const workerFile = path.join(__dirname, resolveWorkerFile());
|
|
30
78
|
if (!sharedWorkerSession || sharedWorkerSession.workerFile !== workerFile) {
|
|
31
79
|
sharedWorkerSession?.terminate();
|
|
32
|
-
sharedWorkerSession = createSharedWorkerSession(
|
|
80
|
+
sharedWorkerSession = createSharedWorkerSession(
|
|
81
|
+
workerFile,
|
|
82
|
+
options.WorkerClass || import_worker_threads.Worker
|
|
83
|
+
);
|
|
33
84
|
}
|
|
34
85
|
return sharedWorkerSession.run(request, options.timeoutMs || DEFAULT_TIMEOUT_MS);
|
|
35
86
|
}
|
|
36
|
-
|
|
37
87
|
function runOneShotUsageWorker(request, options = {}) {
|
|
38
88
|
return new Promise((resolve, reject) => {
|
|
39
|
-
const
|
|
89
|
+
const WorkerClass = options.WorkerClass || import_worker_threads.Worker;
|
|
90
|
+
const worker = new WorkerClass(
|
|
40
91
|
path.join(__dirname, resolveWorkerFile()),
|
|
41
|
-
{ workerData: { request } }
|
|
92
|
+
{ workerData: { request } }
|
|
42
93
|
);
|
|
43
94
|
let settled = false;
|
|
44
95
|
const finish = (error, value) => {
|
|
45
96
|
if (settled) return;
|
|
46
97
|
settled = true;
|
|
47
98
|
clearTimeout(timeout);
|
|
48
|
-
worker.terminate().catch(() => {
|
|
99
|
+
worker.terminate().catch(() => {
|
|
100
|
+
});
|
|
49
101
|
if (error) reject(error);
|
|
50
102
|
else resolve(value);
|
|
51
103
|
};
|
|
52
104
|
const timeout = setTimeout(() => {
|
|
53
105
|
const error = new Error(
|
|
54
|
-
`TypeScript usage scanner exceeded ${options.timeoutMs || DEFAULT_TIMEOUT_MS}ms
|
|
106
|
+
`TypeScript usage scanner exceeded ${options.timeoutMs || DEFAULT_TIMEOUT_MS}ms`
|
|
55
107
|
);
|
|
56
|
-
error.code =
|
|
108
|
+
error.code = "ETIMEDOUT";
|
|
57
109
|
finish(error);
|
|
58
110
|
}, options.timeoutMs || DEFAULT_TIMEOUT_MS);
|
|
59
111
|
timeout.unref?.();
|
|
60
|
-
worker.once(
|
|
61
|
-
|
|
112
|
+
worker.once("error", (value) => {
|
|
113
|
+
finish(value instanceof Error ? value : new Error(String(value)));
|
|
114
|
+
});
|
|
115
|
+
worker.once("exit", (value) => {
|
|
116
|
+
const code = typeof value === "number" ? value : null;
|
|
62
117
|
if (!settled) {
|
|
63
118
|
const error = new Error(
|
|
64
|
-
code === 0
|
|
65
|
-
? 'TypeScript usage scanner exited without returning a result'
|
|
66
|
-
: `TypeScript usage scanner exited with code ${code}`,
|
|
119
|
+
code === 0 ? "TypeScript usage scanner exited without returning a result" : `TypeScript usage scanner exited with code ${code}`
|
|
67
120
|
);
|
|
68
|
-
error.code =
|
|
121
|
+
error.code = "EUSAGEWORKER";
|
|
69
122
|
finish(error);
|
|
70
123
|
}
|
|
71
124
|
});
|
|
72
|
-
worker.once(
|
|
125
|
+
worker.once("message", (value) => {
|
|
126
|
+
const message = asRecord(value);
|
|
73
127
|
if (message?.error) {
|
|
74
|
-
|
|
75
|
-
error.code = message.error.code || 'EUSAGE';
|
|
76
|
-
error.stack = message.error.stack || error.stack;
|
|
77
|
-
finish(error);
|
|
128
|
+
finish(workerError(message.error, "Usage scanner failed", "EUSAGE"));
|
|
78
129
|
return;
|
|
79
130
|
}
|
|
80
131
|
finish(null, message?.result);
|
|
81
132
|
});
|
|
82
133
|
});
|
|
83
134
|
}
|
|
84
|
-
|
|
85
135
|
function createSharedWorkerSession(workerFile, WorkerClass) {
|
|
86
136
|
const worker = new WorkerClass(workerFile);
|
|
87
|
-
const pending = new Map();
|
|
137
|
+
const pending = /* @__PURE__ */ new Map();
|
|
88
138
|
const failAll = (error) => {
|
|
89
139
|
for (const request of pending.values()) {
|
|
90
140
|
clearTimeout(request.timeout);
|
|
@@ -93,30 +143,31 @@ function createSharedWorkerSession(workerFile, WorkerClass) {
|
|
|
93
143
|
pending.clear();
|
|
94
144
|
if (sharedWorkerSession?.worker === worker) sharedWorkerSession = null;
|
|
95
145
|
};
|
|
96
|
-
worker.on(
|
|
97
|
-
const
|
|
146
|
+
worker.on("message", (value) => {
|
|
147
|
+
const message = asRecord(value);
|
|
148
|
+
const requestId = typeof message?.requestId === "number" ? message.requestId : null;
|
|
149
|
+
if (requestId === null) return;
|
|
150
|
+
const request = pending.get(requestId);
|
|
98
151
|
if (!request) return;
|
|
99
|
-
pending.delete(
|
|
152
|
+
pending.delete(requestId);
|
|
100
153
|
clearTimeout(request.timeout);
|
|
101
154
|
if (message?.error) {
|
|
102
|
-
|
|
103
|
-
error.code = message.error.code || 'EUSAGE';
|
|
104
|
-
error.stack = message.error.stack || error.stack;
|
|
105
|
-
request.reject(error);
|
|
155
|
+
request.reject(workerError(message.error, "Usage scanner failed", "EUSAGE"));
|
|
106
156
|
} else {
|
|
107
157
|
request.resolve(message?.result);
|
|
108
158
|
}
|
|
109
159
|
if (pending.size === 0) worker.unref?.();
|
|
110
160
|
});
|
|
111
|
-
worker.once(
|
|
112
|
-
|
|
161
|
+
worker.once("error", (value) => {
|
|
162
|
+
failAll(value instanceof Error ? value : new Error(String(value)));
|
|
163
|
+
});
|
|
164
|
+
worker.once("exit", (value) => {
|
|
165
|
+
const code = typeof value === "number" ? value : null;
|
|
113
166
|
if (pending.size > 0) {
|
|
114
167
|
const error = new Error(
|
|
115
|
-
code === 0
|
|
116
|
-
? 'TypeScript usage scanner exited before returning all results'
|
|
117
|
-
: `TypeScript usage scanner exited with code ${code}`,
|
|
168
|
+
code === 0 ? "TypeScript usage scanner exited before returning all results" : `TypeScript usage scanner exited with code ${code}`
|
|
118
169
|
);
|
|
119
|
-
error.code =
|
|
170
|
+
error.code = "EUSAGEWORKER";
|
|
120
171
|
failAll(error);
|
|
121
172
|
} else if (sharedWorkerSession?.worker === worker) {
|
|
122
173
|
sharedWorkerSession = null;
|
|
@@ -132,9 +183,10 @@ function createSharedWorkerSession(workerFile, WorkerClass) {
|
|
|
132
183
|
const timeout = setTimeout(() => {
|
|
133
184
|
if (!pending.delete(requestId)) return;
|
|
134
185
|
const error = new Error(`TypeScript usage scanner exceeded ${timeoutMs}ms`);
|
|
135
|
-
error.code =
|
|
186
|
+
error.code = "ETIMEDOUT";
|
|
136
187
|
reject(error);
|
|
137
|
-
worker.terminate().catch(() => {
|
|
188
|
+
worker.terminate().catch(() => {
|
|
189
|
+
});
|
|
138
190
|
if (sharedWorkerSession?.worker === worker) sharedWorkerSession = null;
|
|
139
191
|
}, timeoutMs);
|
|
140
192
|
timeout.unref?.();
|
|
@@ -144,50 +196,60 @@ function createSharedWorkerSession(workerFile, WorkerClass) {
|
|
|
144
196
|
});
|
|
145
197
|
},
|
|
146
198
|
terminate() {
|
|
147
|
-
const error = new Error(
|
|
148
|
-
error.code =
|
|
199
|
+
const error = new Error("Usage scanner worker was replaced");
|
|
200
|
+
error.code = "EUSAGEWORKER";
|
|
149
201
|
failAll(error);
|
|
150
|
-
worker.terminate().catch(() => {
|
|
151
|
-
|
|
202
|
+
worker.terminate().catch(() => {
|
|
203
|
+
});
|
|
204
|
+
}
|
|
152
205
|
};
|
|
153
206
|
}
|
|
154
|
-
|
|
155
207
|
class UsageHistoryClient {
|
|
208
|
+
configDir;
|
|
209
|
+
timeoutMs;
|
|
210
|
+
runner;
|
|
211
|
+
pending;
|
|
212
|
+
pendingKey;
|
|
213
|
+
cached;
|
|
214
|
+
cachedAt;
|
|
215
|
+
cacheKey;
|
|
216
|
+
backgroundTimer;
|
|
217
|
+
backgroundGeneration;
|
|
218
|
+
backgroundDelayMs;
|
|
219
|
+
backgroundErrorDelayMs;
|
|
220
|
+
backgroundErrorRetries;
|
|
221
|
+
backgroundStalls;
|
|
222
|
+
backgroundProgressSignature;
|
|
156
223
|
constructor(options = {}) {
|
|
157
224
|
this.configDir = options.configDir;
|
|
158
225
|
this.timeoutMs = options.timeoutMs || DEFAULT_TIMEOUT_MS;
|
|
159
226
|
this.runner = options.runner || runUsageWorker;
|
|
160
227
|
this.pending = null;
|
|
161
|
-
this.pendingKey =
|
|
228
|
+
this.pendingKey = "";
|
|
162
229
|
this.cached = null;
|
|
163
230
|
this.cachedAt = 0;
|
|
164
|
-
this.cacheKey =
|
|
231
|
+
this.cacheKey = "";
|
|
165
232
|
this.backgroundTimer = null;
|
|
166
233
|
this.backgroundGeneration = 0;
|
|
167
234
|
this.backgroundDelayMs = options.backgroundDelayMs || BACKGROUND_SCAN_DELAY_MS;
|
|
168
|
-
this.backgroundErrorDelayMs = options.backgroundErrorDelayMs ||
|
|
235
|
+
this.backgroundErrorDelayMs = options.backgroundErrorDelayMs || 5e3;
|
|
169
236
|
this.backgroundErrorRetries = 0;
|
|
170
237
|
this.backgroundStalls = 0;
|
|
171
|
-
this.backgroundProgressSignature =
|
|
238
|
+
this.backgroundProgressSignature = "";
|
|
172
239
|
}
|
|
173
|
-
|
|
174
240
|
invoke(request) {
|
|
175
241
|
return this.runner(request, { timeoutMs: this.timeoutMs });
|
|
176
242
|
}
|
|
177
|
-
|
|
178
243
|
storeResult(result, cacheKey) {
|
|
179
244
|
if (cacheKey !== this.cacheKey) return;
|
|
180
245
|
this.cached = result;
|
|
181
|
-
this.cachedAt = Number.isFinite(result
|
|
182
|
-
? result.sampledAt
|
|
183
|
-
: Date.now();
|
|
246
|
+
this.cachedAt = typeof result.sampledAt === "number" && Number.isFinite(result.sampledAt) ? result.sampledAt : Date.now();
|
|
184
247
|
}
|
|
185
|
-
|
|
186
248
|
scheduleBackgroundScan(request, cacheKey, result) {
|
|
187
249
|
if (result?.cache?.scan_complete !== false || cacheKey !== this.cacheKey) {
|
|
188
250
|
this.backgroundErrorRetries = 0;
|
|
189
251
|
this.backgroundStalls = 0;
|
|
190
|
-
this.backgroundProgressSignature =
|
|
252
|
+
this.backgroundProgressSignature = "";
|
|
191
253
|
return;
|
|
192
254
|
}
|
|
193
255
|
if (this.backgroundTimer) return;
|
|
@@ -197,8 +259,8 @@ class UsageHistoryClient {
|
|
|
197
259
|
result?.cache?.pending_directories,
|
|
198
260
|
result?.cache?.pending_files,
|
|
199
261
|
result?.cache?.discovered_files,
|
|
200
|
-
result?.cache?.committed_bytes
|
|
201
|
-
].join(
|
|
262
|
+
result?.cache?.committed_bytes
|
|
263
|
+
].join(":");
|
|
202
264
|
if (Number(result?.cache?.enumerated_entries) > 0) {
|
|
203
265
|
this.backgroundProgressSignature = progressSignature;
|
|
204
266
|
this.backgroundStalls = 0;
|
|
@@ -210,9 +272,7 @@ class UsageHistoryClient {
|
|
|
210
272
|
}
|
|
211
273
|
if (this.backgroundErrorRetries >= 3 || this.backgroundStalls >= 3) return;
|
|
212
274
|
const generation = this.backgroundGeneration;
|
|
213
|
-
const retryDelayMs = hasErrors
|
|
214
|
-
? this.backgroundErrorDelayMs
|
|
215
|
-
: this.backgroundDelayMs;
|
|
275
|
+
const retryDelayMs = hasErrors ? this.backgroundErrorDelayMs : this.backgroundDelayMs;
|
|
216
276
|
this.backgroundTimer = setTimeout(() => {
|
|
217
277
|
this.backgroundTimer = null;
|
|
218
278
|
if (generation !== this.backgroundGeneration || cacheKey !== this.cacheKey) return;
|
|
@@ -222,11 +282,11 @@ class UsageHistoryClient {
|
|
|
222
282
|
this.scheduleBackgroundScan(backgroundRequest, cacheKey, nextResult);
|
|
223
283
|
return nextResult;
|
|
224
284
|
}).catch(() => {
|
|
225
|
-
|
|
285
|
+
return void 0;
|
|
226
286
|
}).finally(() => {
|
|
227
287
|
if (this.pending === pending) {
|
|
228
288
|
this.pending = null;
|
|
229
|
-
this.pendingKey =
|
|
289
|
+
this.pendingKey = "";
|
|
230
290
|
}
|
|
231
291
|
});
|
|
232
292
|
this.pending = pending;
|
|
@@ -234,13 +294,12 @@ class UsageHistoryClient {
|
|
|
234
294
|
}, retryDelayMs);
|
|
235
295
|
this.backgroundTimer.unref?.();
|
|
236
296
|
}
|
|
237
|
-
|
|
238
297
|
collect(options = {}) {
|
|
239
298
|
const now = options.now ?? Date.now();
|
|
240
299
|
const retentionDays = options.retentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
241
300
|
const roots = {
|
|
242
301
|
codex: Array.from(new Set(options.codexRoots || [])).sort(),
|
|
243
|
-
claude: Array.from(new Set(options.claudeRoots || [])).sort()
|
|
302
|
+
claude: Array.from(new Set(options.claudeRoots || [])).sort()
|
|
244
303
|
};
|
|
245
304
|
const recentRawMs = options.recentRawMs ?? DEFAULT_RECENT_RAW_MS;
|
|
246
305
|
const cacheKey = JSON.stringify({ roots, retentionDays, recentRawMs });
|
|
@@ -250,18 +309,9 @@ class UsageHistoryClient {
|
|
|
250
309
|
this.backgroundTimer = null;
|
|
251
310
|
this.backgroundErrorRetries = 0;
|
|
252
311
|
this.backgroundStalls = 0;
|
|
253
|
-
this.backgroundProgressSignature =
|
|
312
|
+
this.backgroundProgressSignature = "";
|
|
254
313
|
}
|
|
255
|
-
if (
|
|
256
|
-
options.fresh !== true
|
|
257
|
-
&& this.cached
|
|
258
|
-
&& this.cacheKey === cacheKey
|
|
259
|
-
&& (
|
|
260
|
-
now - this.cachedAt <= RESULT_REUSE_MS
|
|
261
|
-
|| this.backgroundTimer
|
|
262
|
-
|| (this.pending && this.pendingKey === cacheKey)
|
|
263
|
-
)
|
|
264
|
-
) {
|
|
314
|
+
if (options.fresh !== true && this.cached && this.cacheKey === cacheKey && (now - this.cachedAt <= RESULT_REUSE_MS || this.backgroundTimer || this.pending && this.pendingKey === cacheKey)) {
|
|
265
315
|
return Promise.resolve(this.cached);
|
|
266
316
|
}
|
|
267
317
|
if (this.pending && this.pendingKey === cacheKey) return this.pending;
|
|
@@ -269,15 +319,15 @@ class UsageHistoryClient {
|
|
|
269
319
|
this.cacheKey = cacheKey;
|
|
270
320
|
this.backgroundErrorRetries = 0;
|
|
271
321
|
this.backgroundStalls = 0;
|
|
272
|
-
this.backgroundProgressSignature =
|
|
322
|
+
this.backgroundProgressSignature = "";
|
|
273
323
|
const request = {
|
|
274
|
-
cacheFile: usageHistoryCacheFile(this.configDir),
|
|
324
|
+
cacheFile: (0, import_storage_layout.usageHistoryCacheFile)(this.configDir),
|
|
275
325
|
legacyCacheFile: options.legacyCacheFile,
|
|
276
326
|
nowMs: now,
|
|
277
327
|
retentionDays,
|
|
278
328
|
recentRawMs,
|
|
279
329
|
scanBudgetMs: options.scanBudgetMs ?? DEFAULT_SCAN_BUDGET_MS,
|
|
280
|
-
roots
|
|
330
|
+
roots
|
|
281
331
|
};
|
|
282
332
|
const pending = this.invoke(request).then((result) => {
|
|
283
333
|
this.storeResult(result, cacheKey);
|
|
@@ -286,7 +336,7 @@ class UsageHistoryClient {
|
|
|
286
336
|
}).finally(() => {
|
|
287
337
|
if (this.pending === pending) {
|
|
288
338
|
this.pending = null;
|
|
289
|
-
this.pendingKey =
|
|
339
|
+
this.pendingKey = "";
|
|
290
340
|
}
|
|
291
341
|
});
|
|
292
342
|
this.pending = pending;
|
|
@@ -294,12 +344,12 @@ class UsageHistoryClient {
|
|
|
294
344
|
return pending;
|
|
295
345
|
}
|
|
296
346
|
}
|
|
297
|
-
|
|
298
|
-
module.exports = {
|
|
299
|
-
UsageHistoryClient,
|
|
347
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
348
|
+
0 && (module.exports = {
|
|
300
349
|
DEFAULT_RECENT_RAW_MS,
|
|
301
350
|
DEFAULT_RETENTION_DAYS,
|
|
302
351
|
DEFAULT_SCAN_BUDGET_MS,
|
|
352
|
+
UsageHistoryClient,
|
|
303
353
|
resolveWorkerFile,
|
|
304
|
-
runUsageWorker
|
|
305
|
-
};
|
|
354
|
+
runUsageWorker
|
|
355
|
+
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Generated by scripts/build-backend-runtime.ts. Do not edit.
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var usage_history_smoke_exports = {};
|
|
21
|
+
__export(usage_history_smoke_exports, {
|
|
22
|
+
runUsageHistorySmoke: () => runUsageHistorySmoke
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(usage_history_smoke_exports);
|
|
25
|
+
var import_usage_history_client = require("./usage-history-client.cjs");
|
|
26
|
+
const fs = require("fs");
|
|
27
|
+
const os = require("os");
|
|
28
|
+
const path = require("path");
|
|
29
|
+
async function runUsageHistorySmoke() {
|
|
30
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "farming-usage-smoke-"));
|
|
31
|
+
try {
|
|
32
|
+
const sessions = path.join(root, "sessions");
|
|
33
|
+
fs.mkdirSync(sessions, { recursive: true });
|
|
34
|
+
fs.writeFileSync(path.join(sessions, "rollout.jsonl"), [
|
|
35
|
+
JSON.stringify({
|
|
36
|
+
timestamp: "2026-01-01T00:00:00.000Z",
|
|
37
|
+
type: "session_meta",
|
|
38
|
+
payload: {
|
|
39
|
+
id: "farming-usage-smoke",
|
|
40
|
+
timestamp: "2026-01-01T00:00:00.000Z",
|
|
41
|
+
cwd: root
|
|
42
|
+
}
|
|
43
|
+
}),
|
|
44
|
+
JSON.stringify({
|
|
45
|
+
timestamp: "2026-01-01T00:00:01.000Z",
|
|
46
|
+
type: "event_msg",
|
|
47
|
+
payload: {
|
|
48
|
+
type: "token_count",
|
|
49
|
+
info: {
|
|
50
|
+
total_token_usage: { input_tokens: 5, output_tokens: 2 },
|
|
51
|
+
last_token_usage: { input_tokens: 5, output_tokens: 2 }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}),
|
|
55
|
+
""
|
|
56
|
+
].join("\n"));
|
|
57
|
+
const result = await new import_usage_history_client.UsageHistoryClient({
|
|
58
|
+
configDir: path.join(root, "config")
|
|
59
|
+
}).collect({
|
|
60
|
+
now: Date.parse("2026-01-01T01:00:00.000Z"),
|
|
61
|
+
codexRoots: [sessions],
|
|
62
|
+
claudeRoots: [],
|
|
63
|
+
scanBudgetMs: 3e4,
|
|
64
|
+
fresh: true
|
|
65
|
+
});
|
|
66
|
+
const total = result.providers.codex.events.reduce(
|
|
67
|
+
(sum, event) => sum + (typeof event.totalTokens === "number" ? event.totalTokens : 0),
|
|
68
|
+
0
|
|
69
|
+
);
|
|
70
|
+
if (result.cache.scan_complete !== true || result.cache.discovery_ready !== true || total !== 7) {
|
|
71
|
+
throw new Error(`Usage history smoke returned an invalid result: ${JSON.stringify({
|
|
72
|
+
scanComplete: result.cache.scan_complete,
|
|
73
|
+
discoveryReady: result.cache.discovery_ready,
|
|
74
|
+
total
|
|
75
|
+
})}`);
|
|
76
|
+
}
|
|
77
|
+
return { schemaVersion: result.schemaVersion, total };
|
|
78
|
+
} finally {
|
|
79
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
83
|
+
0 && (module.exports = {
|
|
84
|
+
runUsageHistorySmoke
|
|
85
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Generated by scripts/build-backend-runtime.ts. Do not edit.
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
var usage_history_worker_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(usage_history_worker_exports);
|
|
18
|
+
var import_worker_threads = require("worker_threads");
|
|
19
|
+
function recordValue(value) {
|
|
20
|
+
return value !== null && typeof value === "object" ? value : null;
|
|
21
|
+
}
|
|
22
|
+
function errorCode(error) {
|
|
23
|
+
return recordValue(error)?.code;
|
|
24
|
+
}
|
|
25
|
+
async function collect(request) {
|
|
26
|
+
const { collectUsage } = require("./usage-history-scanner.generated.js");
|
|
27
|
+
return collectUsage(request);
|
|
28
|
+
}
|
|
29
|
+
let queue = Promise.resolve();
|
|
30
|
+
function enqueue(message) {
|
|
31
|
+
queue = queue.then(async () => {
|
|
32
|
+
try {
|
|
33
|
+
const result = await collect(message.request);
|
|
34
|
+
import_worker_threads.parentPort?.postMessage({ requestId: message.requestId, result });
|
|
35
|
+
} catch (error) {
|
|
36
|
+
import_worker_threads.parentPort?.postMessage({
|
|
37
|
+
requestId: message.requestId,
|
|
38
|
+
error: {
|
|
39
|
+
message: error instanceof Error ? error.message : String(error),
|
|
40
|
+
code: errorCode(error),
|
|
41
|
+
stack: error instanceof Error ? error.stack : void 0
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
import_worker_threads.parentPort?.on("message", (message) => {
|
|
48
|
+
const record = recordValue(message);
|
|
49
|
+
enqueue({
|
|
50
|
+
requestId: record?.requestId,
|
|
51
|
+
request: record?.request
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
const initialData = recordValue(import_worker_threads.workerData);
|
|
55
|
+
if (initialData?.request) {
|
|
56
|
+
enqueue({
|
|
57
|
+
requestId: initialData.requestId || "initial",
|
|
58
|
+
request: initialData.request
|
|
59
|
+
});
|
|
60
|
+
}
|