farming-code 2.2.30 → 2.2.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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} +1220 -1112
- 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.js → update-service.cjs} +258 -248
- 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/dist/acp/codex-acp-1.1.4.mjs +18 -1
- 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-D-zetSol.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 +1 -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/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 -634
- 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-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 -986
- package/backend/async-cache.js +0 -94
- package/backend/atomic-json-store.js +0 -37
- package/backend/auth.js +0 -251
- 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-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 -2362
- package/backend/command-runner-child.js +0 -67
- package/backend/config-manager.js +0 -1117
- 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 -403
- 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 -80
- 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 -288
- 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 -3225
- 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 -205
- 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/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-Z1N7T0eM.js +0 -695
- package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
- package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
- package/dist/assets/ProjectFilesSection-K3GHuQ4U.js +0 -12
- package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
- package/dist/assets/code-dark-kLsQLvpf.css +0 -1
- package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
- package/dist/assets/main-DUTz-Rd2.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 -1331
- package/extensions/browser/backend/browser-resource-store.js +0 -190
- package/extensions/browser/backend/browser-router.js +0 -141
- package/extensions/browser/backend/executable-discovery.js +0 -238
- package/extensions/browser/backend/farming-browser-client.js +0 -83
- package/extensions/browser/backend/index.js +0 -7
- package/extensions/browser/backend/managed-chromium-installer.js +0 -593
- 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 -38
- package/extensions/browser/frontend/useBrowserResources.ts +0 -166
- 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,182 @@
|
|
|
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 patch_decisions_exports = {};
|
|
21
|
+
__export(patch_decisions_exports, {
|
|
22
|
+
AcpPatchDecisionError: () => AcpPatchDecisionError,
|
|
23
|
+
logicalPatchPath: () => logicalPatchPath,
|
|
24
|
+
patchBlock: () => patchBlock,
|
|
25
|
+
rejectPatch: () => rejectPatch
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(patch_decisions_exports);
|
|
28
|
+
var import_client_services = require("./client-services.cjs");
|
|
29
|
+
const crypto = require("crypto");
|
|
30
|
+
const fs = require("fs");
|
|
31
|
+
const path = require("path");
|
|
32
|
+
const fsp = fs.promises;
|
|
33
|
+
class AcpPatchDecisionError extends Error {
|
|
34
|
+
statusCode;
|
|
35
|
+
constructor(message, statusCode = 409) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "AcpPatchDecisionError";
|
|
38
|
+
this.statusCode = statusCode;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function recordValue(value) {
|
|
42
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
43
|
+
}
|
|
44
|
+
function fileSystemErrorCode(error) {
|
|
45
|
+
return error && typeof error === "object" && "code" in error ? error.code : void 0;
|
|
46
|
+
}
|
|
47
|
+
function inside(root, target) {
|
|
48
|
+
const relative = path.relative(root, target);
|
|
49
|
+
return relative === "" || !relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative);
|
|
50
|
+
}
|
|
51
|
+
function logicalPatchPath(root, requestedPath) {
|
|
52
|
+
const workspace = path.resolve(root);
|
|
53
|
+
let realWorkspace = workspace;
|
|
54
|
+
try {
|
|
55
|
+
realWorkspace = fs.realpathSync.native(workspace);
|
|
56
|
+
} catch {
|
|
57
|
+
}
|
|
58
|
+
const value = String(requestedPath || "").trim();
|
|
59
|
+
if (!value || value.includes("\0")) throw new AcpPatchDecisionError("ACP patch path is invalid", 400);
|
|
60
|
+
const target = path.resolve(path.isAbsolute(value) ? value : path.join(workspace, value));
|
|
61
|
+
if (!inside(workspace, target) && !inside(realWorkspace, target)) {
|
|
62
|
+
throw new AcpPatchDecisionError("ACP patch is outside the Agent workspace", 403);
|
|
63
|
+
}
|
|
64
|
+
return target;
|
|
65
|
+
}
|
|
66
|
+
function relativeWorkspacePath(root, target) {
|
|
67
|
+
const workspace = path.resolve(root);
|
|
68
|
+
let realWorkspace = workspace;
|
|
69
|
+
try {
|
|
70
|
+
realWorkspace = fs.realpathSync.native(workspace);
|
|
71
|
+
} catch {
|
|
72
|
+
}
|
|
73
|
+
const base = inside(workspace, target) ? workspace : realWorkspace;
|
|
74
|
+
return path.relative(base, target);
|
|
75
|
+
}
|
|
76
|
+
function matchingDiffBlocks(entry, root, requestedPath) {
|
|
77
|
+
const requested = logicalPatchPath(root, requestedPath);
|
|
78
|
+
const content = recordValue(entry).content;
|
|
79
|
+
return (Array.isArray(content) ? content : []).filter(
|
|
80
|
+
(block) => {
|
|
81
|
+
if (!block || typeof block !== "object" || Array.isArray(block)) return false;
|
|
82
|
+
const blockRecord = block;
|
|
83
|
+
if (blockRecord.type !== "diff" || typeof blockRecord.path !== "string") return false;
|
|
84
|
+
try {
|
|
85
|
+
return logicalPatchPath(root, blockRecord.path) === requested;
|
|
86
|
+
} catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
function patchBlock(entry, root, requestedPath) {
|
|
93
|
+
const matches = matchingDiffBlocks(entry, root, requestedPath);
|
|
94
|
+
if (matches.length === 0) throw new AcpPatchDecisionError("ACP patch file was not found", 404);
|
|
95
|
+
if (matches.length > 1) throw new AcpPatchDecisionError("ACP patch file has multiple changes; open Review to resolve them", 409);
|
|
96
|
+
return matches[0];
|
|
97
|
+
}
|
|
98
|
+
function patchKind(block) {
|
|
99
|
+
return String(recordValue(block._meta).kind || "").trim().toLowerCase();
|
|
100
|
+
}
|
|
101
|
+
async function existingTarget(root, requestedPath) {
|
|
102
|
+
const logical = logicalPatchPath(root, requestedPath);
|
|
103
|
+
let stat;
|
|
104
|
+
try {
|
|
105
|
+
stat = await fsp.lstat(logical);
|
|
106
|
+
} catch (error) {
|
|
107
|
+
if (fileSystemErrorCode(error) === "ENOENT") {
|
|
108
|
+
return { exists: false, logical, target: null, stat: null };
|
|
109
|
+
}
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
if (stat.isSymbolicLink()) throw new AcpPatchDecisionError("ACP patch decision will not modify a symbolic link", 409);
|
|
113
|
+
if (!stat.isFile()) throw new AcpPatchDecisionError("ACP patch target is not a regular file", 409);
|
|
114
|
+
const target = await (0, import_client_services.resolveWorkspacePath)({ cwd: root }, logical);
|
|
115
|
+
return { exists: true, logical, target, stat };
|
|
116
|
+
}
|
|
117
|
+
async function missingTarget(root, requestedPath) {
|
|
118
|
+
const logical = logicalPatchPath(root, requestedPath);
|
|
119
|
+
const target = await (0, import_client_services.resolveWorkspacePath)({ cwd: root }, logical, { allowMissing: true });
|
|
120
|
+
return { logical, target };
|
|
121
|
+
}
|
|
122
|
+
async function atomicWrite(target, content, mode = 438) {
|
|
123
|
+
const temporary = path.join(
|
|
124
|
+
path.dirname(target),
|
|
125
|
+
`.${path.basename(target)}.farming-acp-revert-${process.pid}-${crypto.randomUUID()}.tmp`
|
|
126
|
+
);
|
|
127
|
+
try {
|
|
128
|
+
await fsp.writeFile(temporary, content, { mode });
|
|
129
|
+
await fsp.rename(temporary, target);
|
|
130
|
+
} catch (error) {
|
|
131
|
+
await fsp.rm(temporary, { force: true }).catch(() => {
|
|
132
|
+
});
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function rejectPatch({
|
|
137
|
+
entry,
|
|
138
|
+
root,
|
|
139
|
+
requestedPath
|
|
140
|
+
}) {
|
|
141
|
+
const block = patchBlock(entry, root, requestedPath);
|
|
142
|
+
const oldText = block.oldText == null ? "" : String(block.oldText);
|
|
143
|
+
const newText = block.newText == null ? "" : String(block.newText);
|
|
144
|
+
const kind = patchKind(block);
|
|
145
|
+
const added = block.oldText == null || ["add", "added", "create", "created"].includes(kind);
|
|
146
|
+
const deleted = ["delete", "deleted", "remove", "removed"].includes(kind);
|
|
147
|
+
const current = await existingTarget(root, requestedPath);
|
|
148
|
+
if (deleted) {
|
|
149
|
+
if (current.exists) {
|
|
150
|
+
const currentText2 = await fsp.readFile(current.target, "utf8");
|
|
151
|
+
if (currentText2 === oldText) {
|
|
152
|
+
return { action: "reverted", path: relativeWorkspacePath(root, current.logical) };
|
|
153
|
+
}
|
|
154
|
+
throw new AcpPatchDecisionError("File changed after this ACP patch; it was not reverted", 409);
|
|
155
|
+
}
|
|
156
|
+
const target = await missingTarget(root, requestedPath);
|
|
157
|
+
await atomicWrite(target.target, oldText);
|
|
158
|
+
return { action: "reverted", path: relativeWorkspacePath(root, target.logical) };
|
|
159
|
+
}
|
|
160
|
+
if (!current.exists) {
|
|
161
|
+
if (added) return { action: "reverted", path: relativeWorkspacePath(root, current.logical) };
|
|
162
|
+
throw new AcpPatchDecisionError("File changed after this ACP patch; it was not reverted", 409);
|
|
163
|
+
}
|
|
164
|
+
const currentText = await fsp.readFile(current.target, "utf8");
|
|
165
|
+
if (!added && currentText === oldText) {
|
|
166
|
+
return { action: "reverted", path: relativeWorkspacePath(root, current.logical) };
|
|
167
|
+
}
|
|
168
|
+
if (currentText !== newText) throw new AcpPatchDecisionError("File changed after this ACP patch; it was not reverted", 409);
|
|
169
|
+
if (added) {
|
|
170
|
+
await fsp.rm(current.target);
|
|
171
|
+
} else {
|
|
172
|
+
await atomicWrite(current.target, oldText, current.stat.mode);
|
|
173
|
+
}
|
|
174
|
+
return { action: "reverted", path: relativeWorkspacePath(root, current.logical) };
|
|
175
|
+
}
|
|
176
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
177
|
+
0 && (module.exports = {
|
|
178
|
+
AcpPatchDecisionError,
|
|
179
|
+
logicalPatchPath,
|
|
180
|
+
patchBlock,
|
|
181
|
+
rejectPatch
|
|
182
|
+
});
|
|
@@ -0,0 +1,131 @@
|
|
|
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 permission_security_exports = {};
|
|
21
|
+
__export(permission_security_exports, {
|
|
22
|
+
permissionSecurityWarnings: () => permissionSecurityWarnings,
|
|
23
|
+
scanUnicode: () => scanUnicode
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(permission_security_exports);
|
|
26
|
+
const { domainToUnicode } = require("url");
|
|
27
|
+
const BIDI_NAMES = /* @__PURE__ */ new Map([
|
|
28
|
+
[1564, "arabic letter mark"],
|
|
29
|
+
[8206, "left-to-right mark"],
|
|
30
|
+
[8207, "right-to-left mark"],
|
|
31
|
+
[8234, "left-to-right embedding"],
|
|
32
|
+
[8235, "right-to-left embedding"],
|
|
33
|
+
[8236, "pop directional formatting"],
|
|
34
|
+
[8237, "left-to-right override"],
|
|
35
|
+
[8238, "right-to-left override"],
|
|
36
|
+
[8294, "left-to-right isolate"],
|
|
37
|
+
[8295, "right-to-left isolate"],
|
|
38
|
+
[8296, "first strong isolate"],
|
|
39
|
+
[8297, "pop directional isolate"]
|
|
40
|
+
]);
|
|
41
|
+
const INVISIBLE_NAMES = /* @__PURE__ */ new Map([
|
|
42
|
+
[160, "no-break space"],
|
|
43
|
+
[173, "soft hyphen"],
|
|
44
|
+
[6158, "mongolian vowel separator"],
|
|
45
|
+
[8203, "zero-width space"],
|
|
46
|
+
[8204, "zero-width non-joiner"],
|
|
47
|
+
[8205, "zero-width joiner"],
|
|
48
|
+
[8288, "word joiner"],
|
|
49
|
+
[12288, "ideographic space"],
|
|
50
|
+
[65279, "zero-width no-break space"]
|
|
51
|
+
]);
|
|
52
|
+
function codePoint(character) {
|
|
53
|
+
const point = character.codePointAt(0);
|
|
54
|
+
if (point === void 0) throw new Error("Cannot classify an empty Unicode character");
|
|
55
|
+
return point;
|
|
56
|
+
}
|
|
57
|
+
function codePointLabel(character) {
|
|
58
|
+
return `U+${codePoint(character).toString(16).toUpperCase().padStart(4, "0")}`;
|
|
59
|
+
}
|
|
60
|
+
function scriptName(character) {
|
|
61
|
+
const scripts = [
|
|
62
|
+
["Cyrillic", new RegExp("\\p{Script=Cyrillic}", "u")],
|
|
63
|
+
["Greek", new RegExp("\\p{Script=Greek}", "u")],
|
|
64
|
+
["Arabic", new RegExp("\\p{Script=Arabic}", "u")],
|
|
65
|
+
["Hebrew", new RegExp("\\p{Script=Hebrew}", "u")],
|
|
66
|
+
["Han", new RegExp("\\p{Script=Han}", "u")],
|
|
67
|
+
["Hiragana", new RegExp("\\p{Script=Hiragana}", "u")],
|
|
68
|
+
["Katakana", new RegExp("\\p{Script=Katakana}", "u")],
|
|
69
|
+
["Latin", new RegExp("\\p{Script=Latin}", "u")]
|
|
70
|
+
];
|
|
71
|
+
return scripts.find(([, matcher]) => matcher instanceof RegExp && matcher.test(character))?.[0] || "Unicode";
|
|
72
|
+
}
|
|
73
|
+
function classifyCharacter(character) {
|
|
74
|
+
const point = codePoint(character);
|
|
75
|
+
if (BIDI_NAMES.has(point)) {
|
|
76
|
+
return {
|
|
77
|
+
character: "",
|
|
78
|
+
codePoint: codePointLabel(character),
|
|
79
|
+
kind: "bidi-control",
|
|
80
|
+
description: BIDI_NAMES.get(point) || "bidirectional control"
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (INVISIBLE_NAMES.has(point) || point >= 8289 && point <= 8292 || point >= 8192 && point <= 8202 || [5760, 8239, 8287].includes(point) || new RegExp("\\p{Control}|\\p{Format}", "u").test(character)) {
|
|
84
|
+
return {
|
|
85
|
+
character: "",
|
|
86
|
+
codePoint: codePointLabel(character),
|
|
87
|
+
kind: "invisible",
|
|
88
|
+
description: INVISIBLE_NAMES.get(point) || "invisible or formatting character"
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
character,
|
|
93
|
+
codePoint: codePointLabel(character),
|
|
94
|
+
kind: "confusable",
|
|
95
|
+
description: `${scriptName(character)} character`
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function scanUnicode(value) {
|
|
99
|
+
const seen = /* @__PURE__ */ new Set();
|
|
100
|
+
const findings = [];
|
|
101
|
+
for (const character of String(value || "")) {
|
|
102
|
+
if (codePoint(character) <= 127 || seen.has(character)) continue;
|
|
103
|
+
seen.add(character);
|
|
104
|
+
findings.push(classifyCharacter(character));
|
|
105
|
+
}
|
|
106
|
+
return findings;
|
|
107
|
+
}
|
|
108
|
+
function permissionSecurityWarnings(request) {
|
|
109
|
+
const meta = { ...request?._meta || {}, ...request?.toolCall?._meta || {} };
|
|
110
|
+
const sandbox = meta.sandbox_authorization;
|
|
111
|
+
if (!sandbox || typeof sandbox !== "object" || Array.isArray(sandbox)) return [];
|
|
112
|
+
const sandboxRecord = sandbox;
|
|
113
|
+
const warnings = [];
|
|
114
|
+
const add = (targetType, value, displayValue = value) => {
|
|
115
|
+
const characters = scanUnicode(displayValue);
|
|
116
|
+
if (characters.length > 0) warnings.push({ targetType, value, displayValue, characters });
|
|
117
|
+
};
|
|
118
|
+
for (const host of Array.isArray(sandboxRecord.network_hosts) ? sandboxRecord.network_hosts : []) {
|
|
119
|
+
const value = String(host || "");
|
|
120
|
+
add("host", value, domainToUnicode(value) || value);
|
|
121
|
+
}
|
|
122
|
+
for (const targetPath of Array.isArray(sandboxRecord.write_paths) ? sandboxRecord.write_paths : []) {
|
|
123
|
+
add("path", String(targetPath || ""));
|
|
124
|
+
}
|
|
125
|
+
return warnings;
|
|
126
|
+
}
|
|
127
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
128
|
+
0 && (module.exports = {
|
|
129
|
+
permissionSecurityWarnings,
|
|
130
|
+
scanUnicode
|
|
131
|
+
});
|
|
@@ -1,17 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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 acp_checkpoint_store_exports = {};
|
|
31
|
+
__export(acp_checkpoint_store_exports, {
|
|
32
|
+
AcpCheckpointStore: () => AcpCheckpointStore,
|
|
33
|
+
CHECKPOINT_VERSION: () => CHECKPOINT_VERSION,
|
|
34
|
+
checkpointKey: () => checkpointKey,
|
|
35
|
+
normalizeIdentity: () => normalizeIdentity
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(acp_checkpoint_store_exports);
|
|
38
|
+
var storageLayout = __toESM(require("./storage-layout.cjs"));
|
|
39
|
+
const crypto = require("crypto");
|
|
40
|
+
const fs = require("fs/promises");
|
|
41
|
+
const path = require("path");
|
|
42
|
+
const { promisify } = require("util");
|
|
43
|
+
const zlib = require("zlib");
|
|
8
44
|
const gzip = promisify(zlib.gzip);
|
|
9
45
|
const gunzip = promisify(zlib.gunzip);
|
|
10
46
|
const CHECKPOINT_VERSION = 1;
|
|
11
47
|
const DEFAULT_WRITE_DELAY_MS = 250;
|
|
12
|
-
|
|
48
|
+
function isObject(value) {
|
|
49
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
50
|
+
}
|
|
51
|
+
function errorCode(error) {
|
|
52
|
+
return error instanceof Error && "code" in error ? String(error.code) : "";
|
|
53
|
+
}
|
|
13
54
|
async function durableWrite(file, data) {
|
|
14
|
-
const handle = await fs.open(file,
|
|
55
|
+
const handle = await fs.open(file, "w");
|
|
15
56
|
try {
|
|
16
57
|
await handle.writeFile(data);
|
|
17
58
|
await handle.sync();
|
|
@@ -19,57 +60,52 @@ async function durableWrite(file, data) {
|
|
|
19
60
|
await handle.close();
|
|
20
61
|
}
|
|
21
62
|
}
|
|
22
|
-
|
|
23
63
|
async function syncDirectory(directory) {
|
|
24
|
-
const handle = await fs.open(directory,
|
|
64
|
+
const handle = await fs.open(directory, "r");
|
|
25
65
|
try {
|
|
26
66
|
await handle.sync();
|
|
27
67
|
} finally {
|
|
28
68
|
await handle.close();
|
|
29
69
|
}
|
|
30
70
|
}
|
|
31
|
-
|
|
32
71
|
function normalizeIdentity(value = {}) {
|
|
72
|
+
const candidate = isObject(value) ? value : {};
|
|
33
73
|
return {
|
|
34
|
-
provider: String(
|
|
35
|
-
providerHomeId: String(
|
|
36
|
-
sessionId: String(
|
|
37
|
-
cwd: path.resolve(String(
|
|
74
|
+
provider: String(candidate.provider || "").trim().toLowerCase(),
|
|
75
|
+
providerHomeId: String(candidate.providerHomeId || "default").trim() || "default",
|
|
76
|
+
sessionId: String(candidate.sessionId || "").trim(),
|
|
77
|
+
cwd: path.resolve(String(candidate.cwd || process.cwd()))
|
|
38
78
|
};
|
|
39
79
|
}
|
|
40
|
-
|
|
41
80
|
function checkpointKey(identity) {
|
|
42
|
-
return crypto.createHash(
|
|
43
|
-
.update(JSON.stringify(normalizeIdentity(identity)))
|
|
44
|
-
.digest('hex');
|
|
81
|
+
return crypto.createHash("sha256").update(JSON.stringify(normalizeIdentity(identity))).digest("hex");
|
|
45
82
|
}
|
|
46
|
-
|
|
47
83
|
function sameIdentity(left, right) {
|
|
48
84
|
return JSON.stringify(normalizeIdentity(left)) === JSON.stringify(normalizeIdentity(right));
|
|
49
85
|
}
|
|
50
|
-
|
|
51
86
|
class AcpCheckpointStore {
|
|
87
|
+
dir;
|
|
88
|
+
writeDelayMs;
|
|
89
|
+
pending;
|
|
90
|
+
writeChains;
|
|
52
91
|
constructor(configDir, options = {}) {
|
|
53
92
|
this.dir = storageLayout.acpCheckpointsDir(configDir);
|
|
54
|
-
this.writeDelayMs = Number.isFinite(Number(options.writeDelayMs))
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.pending = new Map();
|
|
58
|
-
this.writeChains = new Map();
|
|
93
|
+
this.writeDelayMs = Number.isFinite(Number(options.writeDelayMs)) ? Math.max(0, Math.floor(Number(options.writeDelayMs))) : DEFAULT_WRITE_DELAY_MS;
|
|
94
|
+
this.pending = /* @__PURE__ */ new Map();
|
|
95
|
+
this.writeChains = /* @__PURE__ */ new Map();
|
|
59
96
|
}
|
|
60
|
-
|
|
61
97
|
paths(identity) {
|
|
62
98
|
const key = checkpointKey(identity);
|
|
63
99
|
return {
|
|
64
100
|
key,
|
|
65
101
|
checkpoint: path.join(this.dir, `${key}.json.gz`),
|
|
66
|
-
dirty: path.join(this.dir, `${key}.dirty`)
|
|
102
|
+
dirty: path.join(this.dir, `${key}.dirty`)
|
|
67
103
|
};
|
|
68
104
|
}
|
|
69
|
-
|
|
70
105
|
enqueue(key, operation) {
|
|
71
106
|
const previous = this.writeChains.get(key) || Promise.resolve();
|
|
72
|
-
const next = previous.catch(() => {
|
|
107
|
+
const next = previous.catch(() => {
|
|
108
|
+
}).then(operation);
|
|
73
109
|
this.writeChains.set(key, next);
|
|
74
110
|
void next.then(() => {
|
|
75
111
|
if (this.writeChains.get(key) === next) this.writeChains.delete(key);
|
|
@@ -78,34 +114,29 @@ class AcpCheckpointStore {
|
|
|
78
114
|
});
|
|
79
115
|
return next;
|
|
80
116
|
}
|
|
81
|
-
|
|
82
117
|
async load(identity, options = {}) {
|
|
83
118
|
const normalized = normalizeIdentity(identity);
|
|
84
119
|
if (!normalized.provider || !normalized.sessionId) return null;
|
|
85
120
|
const files = this.paths(normalized);
|
|
86
121
|
const inFlight = this.writeChains.get(files.key);
|
|
87
|
-
if (inFlight) await inFlight.catch(() => {
|
|
122
|
+
if (inFlight) await inFlight.catch(() => {
|
|
123
|
+
});
|
|
88
124
|
try {
|
|
89
125
|
const [compressed, dirty] = await Promise.all([
|
|
90
126
|
fs.readFile(files.checkpoint),
|
|
91
|
-
fs.access(files.dirty).then(() => true).catch(() => false)
|
|
127
|
+
fs.access(files.dirty).then(() => true).catch(() => false)
|
|
92
128
|
]);
|
|
93
|
-
const payload = JSON.parse((await gunzip(compressed)).toString(
|
|
94
|
-
if (
|
|
95
|
-
payload?.version !== CHECKPOINT_VERSION
|
|
96
|
-
|| !sameIdentity(payload.identity, normalized)
|
|
97
|
-
|| !payload.state
|
|
98
|
-
) return null;
|
|
129
|
+
const payload = JSON.parse((await gunzip(compressed)).toString("utf8"));
|
|
130
|
+
if (!isObject(payload) || payload.version !== CHECKPOINT_VERSION || !sameIdentity(payload.identity, normalized) || !payload.state) return null;
|
|
99
131
|
if (dirty && options.allowDirty !== true) return null;
|
|
100
132
|
return { state: payload.state, exact: !dirty, savedAt: Number(payload.savedAt || 0) };
|
|
101
133
|
} catch (error) {
|
|
102
|
-
if (error
|
|
103
|
-
console.warn(
|
|
134
|
+
if (errorCode(error) !== "ENOENT") {
|
|
135
|
+
console.warn("Failed to read ACP checkpoint:", error instanceof Error ? error.message : error);
|
|
104
136
|
}
|
|
105
137
|
return null;
|
|
106
138
|
}
|
|
107
139
|
}
|
|
108
|
-
|
|
109
140
|
async markDirty(identity) {
|
|
110
141
|
const normalized = normalizeIdentity(identity);
|
|
111
142
|
if (!normalized.provider || !normalized.sessionId) return;
|
|
@@ -115,11 +146,11 @@ class AcpCheckpointStore {
|
|
|
115
146
|
this.pending.delete(files.key);
|
|
116
147
|
return this.enqueue(files.key, async () => {
|
|
117
148
|
await fs.mkdir(this.dir, { recursive: true });
|
|
118
|
-
await durableWrite(files.dirty, `${Date.now()}
|
|
149
|
+
await durableWrite(files.dirty, `${Date.now()}
|
|
150
|
+
`);
|
|
119
151
|
await syncDirectory(this.dir);
|
|
120
152
|
});
|
|
121
153
|
}
|
|
122
|
-
|
|
123
154
|
schedule(identity, state, options = {}) {
|
|
124
155
|
const normalized = normalizeIdentity(identity);
|
|
125
156
|
if (!normalized.provider || !normalized.sessionId || !state) return;
|
|
@@ -130,7 +161,7 @@ class AcpCheckpointStore {
|
|
|
130
161
|
identity: normalized,
|
|
131
162
|
state,
|
|
132
163
|
exact: options.exact === true,
|
|
133
|
-
timer: null
|
|
164
|
+
timer: null
|
|
134
165
|
};
|
|
135
166
|
pending.timer = setTimeout(() => {
|
|
136
167
|
this.pending.delete(files.key);
|
|
@@ -139,7 +170,6 @@ class AcpCheckpointStore {
|
|
|
139
170
|
pending.timer.unref?.();
|
|
140
171
|
this.pending.set(files.key, pending);
|
|
141
172
|
}
|
|
142
|
-
|
|
143
173
|
async write(identity, state, options = {}) {
|
|
144
174
|
const normalized = normalizeIdentity(identity);
|
|
145
175
|
if (!normalized.provider || !normalized.sessionId || !state) return;
|
|
@@ -152,12 +182,13 @@ class AcpCheckpointStore {
|
|
|
152
182
|
version: CHECKPOINT_VERSION,
|
|
153
183
|
savedAt: Date.now(),
|
|
154
184
|
identity: normalized,
|
|
155
|
-
state: state.exportCheckpoint()
|
|
185
|
+
state: state.exportCheckpoint()
|
|
156
186
|
};
|
|
157
187
|
const compressed = await gzip(Buffer.from(JSON.stringify(payload)), { level: zlib.constants.Z_BEST_SPEED });
|
|
158
188
|
await fs.mkdir(this.dir, { recursive: true });
|
|
159
189
|
if (options.exact !== true) {
|
|
160
|
-
await durableWrite(files.dirty, `${Date.now()}
|
|
190
|
+
await durableWrite(files.dirty, `${Date.now()}
|
|
191
|
+
`);
|
|
161
192
|
await syncDirectory(this.dir);
|
|
162
193
|
}
|
|
163
194
|
const temporary = `${files.checkpoint}.${process.pid}.${Date.now()}.tmp`;
|
|
@@ -166,7 +197,8 @@ class AcpCheckpointStore {
|
|
|
166
197
|
await fs.rename(temporary, files.checkpoint);
|
|
167
198
|
await syncDirectory(this.dir);
|
|
168
199
|
} finally {
|
|
169
|
-
await fs.rm(temporary, { force: true }).catch(() => {
|
|
200
|
+
await fs.rm(temporary, { force: true }).catch(() => {
|
|
201
|
+
});
|
|
170
202
|
}
|
|
171
203
|
if (options.exact === true) {
|
|
172
204
|
await fs.rm(files.dirty, { force: true });
|
|
@@ -174,25 +206,24 @@ class AcpCheckpointStore {
|
|
|
174
206
|
}
|
|
175
207
|
});
|
|
176
208
|
}
|
|
177
|
-
|
|
178
209
|
async flush() {
|
|
179
210
|
const pending = [...this.pending.values()];
|
|
180
211
|
this.pending.clear();
|
|
181
|
-
pending.forEach(item => {
|
|
212
|
+
pending.forEach((item) => {
|
|
182
213
|
if (item.timer) clearTimeout(item.timer);
|
|
183
214
|
});
|
|
184
|
-
await Promise.all(pending.map(item => this.write(item.identity, item.state, { exact: item.exact })));
|
|
185
|
-
await Promise.all([...this.writeChains.values()].map(write => write.catch(() => {
|
|
215
|
+
await Promise.all(pending.map((item) => this.write(item.identity, item.state, { exact: item.exact })));
|
|
216
|
+
await Promise.all([...this.writeChains.values()].map((write) => write.catch(() => {
|
|
217
|
+
})));
|
|
186
218
|
}
|
|
187
|
-
|
|
188
219
|
async dispose() {
|
|
189
220
|
await this.flush();
|
|
190
221
|
}
|
|
191
222
|
}
|
|
192
|
-
|
|
193
|
-
module.exports = {
|
|
223
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
224
|
+
0 && (module.exports = {
|
|
194
225
|
AcpCheckpointStore,
|
|
195
226
|
CHECKPOINT_VERSION,
|
|
196
227
|
checkpointKey,
|
|
197
|
-
normalizeIdentity
|
|
198
|
-
};
|
|
228
|
+
normalizeIdentity
|
|
229
|
+
});
|