farming-code 2.2.30 → 2.2.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/THIRD_PARTY_NOTICES.md +7 -0
  2. package/backend/acp/{client-services.js → client-services.cjs} +132 -134
  3. package/backend/acp/packaged-claude-acp.cjs +37 -0
  4. package/backend/acp/packaged-codex-acp.cjs +37 -0
  5. package/backend/acp/patch-decisions.cjs +182 -0
  6. package/backend/acp/permission-security.cjs +131 -0
  7. package/backend/{acp-checkpoint-store.js → acp-checkpoint-store.cjs} +90 -59
  8. package/backend/{acp-runtime.js → acp-runtime.cjs} +1220 -1112
  9. package/backend/acp-session-state.cjs +622 -0
  10. package/backend/acp-transcript.cjs +525 -0
  11. package/backend/agent-env.cjs +257 -0
  12. package/backend/agent-extension-discovery.cjs +452 -0
  13. package/backend/agent-extension-inventory.cjs +116 -0
  14. package/backend/agent-json-stream.cjs +283 -0
  15. package/backend/agent-lifecycle-journal.cjs +185 -0
  16. package/backend/{agent-manager.js → agent-manager.cjs} +3116 -4275
  17. package/backend/agent-order-transaction.cjs +85 -0
  18. package/backend/agent-order.cjs +159 -0
  19. package/backend/agent-provider-session.cjs +98 -0
  20. package/backend/agent-runtime-binding.cjs +179 -0
  21. package/backend/agent-session-history.cjs +1022 -0
  22. package/backend/agent-session-inventory.cjs +291 -0
  23. package/backend/async-cache.cjs +104 -0
  24. package/backend/atomic-json-store.cjs +67 -0
  25. package/backend/auth.cjs +261 -0
  26. package/backend/authoritative-inventory-cache.cjs +383 -0
  27. package/backend/business-health.cjs +68 -0
  28. package/backend/chat-runtime.cjs +50 -0
  29. package/backend/claude-settings.cjs +132 -0
  30. package/backend/cli-agents.cjs +435 -0
  31. package/backend/codex-context-window.cjs +196 -0
  32. package/backend/codex-models.cjs +228 -0
  33. package/backend/codex-session-archive.cjs +82 -0
  34. package/backend/codex-session-history.cjs +590 -0
  35. package/backend/{codex-terminal-profile.js → codex-terminal-profile.cjs} +149 -155
  36. package/backend/codex-transcript-sanitizer.cjs +130 -0
  37. package/backend/codex-transcript.cjs +2107 -0
  38. package/backend/command-runner-child.cjs +105 -0
  39. package/backend/config-manager.cjs +1263 -0
  40. package/backend/control-api.cjs +439 -0
  41. package/backend/data/LICENSE.cua +21 -0
  42. package/backend/executable-discovery.cjs +204 -0
  43. package/backend/farming-agent-bootstrap.cjs +81 -0
  44. package/backend/farming-agent-bootstrap.zh_cn.md +6 -2
  45. package/backend/{farming-app-cli.js → farming-app-cli.cjs} +441 -493
  46. package/backend/farming-cli.cjs +414 -0
  47. package/backend/farming-net-pass.cjs +319 -0
  48. package/backend/farming-net-registry.cjs +123 -0
  49. package/backend/farming-net-server.cjs +309 -0
  50. package/backend/farming-session-store.cjs +651 -0
  51. package/backend/git-worktree-info.cjs +181 -0
  52. package/backend/haiku-token.cjs +828 -0
  53. package/backend/index-html.cjs +96 -0
  54. package/backend/input-parts.cjs +68 -0
  55. package/backend/input-routing.cjs +40 -0
  56. package/backend/{local-session-engine.js → local-session-engine.cjs} +276 -282
  57. package/backend/main-agent-skills.cjs +309 -0
  58. package/backend/main-page-session.cjs +132 -0
  59. package/backend/native-pty-controller-generation.cjs +139 -0
  60. package/backend/{native-pty-host-client.js → native-pty-host-client.cjs} +338 -346
  61. package/backend/native-pty-host-identity.cjs +125 -0
  62. package/backend/native-pty-host-path.cjs +68 -0
  63. package/backend/{native-pty-host.js → native-pty-host.cjs} +480 -569
  64. package/backend/native-session-engine.cjs +296 -0
  65. package/backend/network.cjs +57 -0
  66. package/backend/npm-update-helper.cjs +399 -0
  67. package/backend/packaged-node-pty.cjs +120 -0
  68. package/backend/preview-session-manager.cjs +89 -0
  69. package/backend/provider-adapters.cjs +492 -0
  70. package/backend/provider-home-configuration.cjs +211 -0
  71. package/backend/provider-session-id.cjs +79 -0
  72. package/backend/provider-session-service.cjs +333 -0
  73. package/backend/qr-share-tickets.cjs +119 -0
  74. package/backend/resource-broadcast-protocol.cjs +50 -0
  75. package/backend/review-diff-router.cjs +202 -0
  76. package/backend/review-diff-service.cjs +1267 -0
  77. package/backend/review-session-router.cjs +93 -0
  78. package/backend/review-session-service.cjs +470 -0
  79. package/backend/review-session-store.cjs +161 -0
  80. package/backend/review-state-router.cjs +132 -0
  81. package/backend/review-state-store.cjs +299 -0
  82. package/backend/run-history-store.cjs +97 -0
  83. package/backend/runtime-dependency-manager.cjs +893 -0
  84. package/backend/runtime-executable-invocation.cjs +37 -0
  85. package/backend/runtime-observation.cjs +96 -0
  86. package/backend/server-process-identity.cjs +70 -0
  87. package/backend/server.cjs +3356 -0
  88. package/backend/session-engine-bridge.cjs +144 -0
  89. package/backend/session-engine-router.cjs +105 -0
  90. package/backend/session-engine.cjs +64 -0
  91. package/backend/session-stream-protocol.cjs +181 -0
  92. package/backend/shell-busy-integration.cjs +442 -0
  93. package/backend/slash-command-discovery.cjs +423 -0
  94. package/backend/storage-layout.cjs +263 -0
  95. package/backend/system-monitor.cjs +96 -0
  96. package/backend/terminal-attach-checkpoint.cjs +73 -0
  97. package/backend/terminal-exit-quiescence.cjs +57 -0
  98. package/backend/{terminal-reducer-flow-control.js → terminal-reducer-flow-control.cjs} +45 -22
  99. package/backend/terminal-runtime-cleanup.cjs +99 -0
  100. package/backend/{terminal-screen-state.js → terminal-screen-state.cjs} +100 -108
  101. package/backend/{terminal-screen-worker-pool.js → terminal-screen-worker-pool.cjs} +89 -79
  102. package/backend/{terminal-screen-worker-thread.js → terminal-screen-worker-thread.cjs} +64 -65
  103. package/backend/terminal-screen-worker.cjs +352 -0
  104. package/backend/terminal-state-serialization.cjs +147 -0
  105. package/backend/{terminal-status.js → terminal-status.cjs} +137 -187
  106. package/backend/theme-manager.cjs +185 -0
  107. package/backend/{update-service.js → update-service.cjs} +258 -248
  108. package/backend/usage-forecast.cjs +95 -0
  109. package/backend/{usage-history-client.js → usage-history-client.cjs} +144 -94
  110. package/backend/usage-history-smoke.cjs +85 -0
  111. package/backend/usage-history-worker.cjs +60 -0
  112. package/backend/{usage-monitor.js → usage-monitor.cjs} +363 -390
  113. package/backend/workspace-directory.cjs +239 -0
  114. package/backend/workspace-discovery.cjs +271 -0
  115. package/backend/{workspace-file-router.js → workspace-file-router.cjs} +213 -282
  116. package/backend/{workspace-file-service.js → workspace-file-service.cjs} +1139 -1318
  117. package/backend/workspace-root-registry.cjs +192 -0
  118. package/bin/farming +1 -1
  119. package/dist/acp/codex-acp-1.1.4.mjs +18 -1
  120. package/dist/assets/App-BCkdpWB6.css +1 -0
  121. package/dist/assets/App-CRjKpaGp.js +697 -0
  122. package/dist/assets/CodeSelect-Ci8sKZPU.js +1 -0
  123. package/dist/assets/CodeSelect-T2eNzrOc.css +1 -0
  124. package/dist/assets/{FileEditorMarkdownPreview-Cs9cLv8a.js → FileEditorMarkdownPreview-V06QHlAg.js} +55 -55
  125. package/dist/assets/FileEditorPane-BX-Wjg9U.js +2 -0
  126. package/dist/assets/IconGlyphs-YhV7tqd4.js +1 -0
  127. package/dist/assets/ProjectFilesSection-BDT2_r0o.js +12 -0
  128. package/dist/assets/ReviewPage-BqAs5sG1.js +3 -0
  129. package/dist/assets/code-dark-B7eM_9G9.css +1 -0
  130. package/dist/assets/{cssMode-Bdg5RpcJ.js → cssMode-ADdAlxTO.js} +1 -1
  131. package/dist/assets/{editor.api2-D74ufkbr.js → editor.api2-BFLAr0YF.js} +162 -162
  132. package/dist/assets/file-icons-BpeqWkIB.js +1 -0
  133. package/dist/assets/{freemarker2-DfMDJfnE.js → freemarker2-C90q5jrp.js} +1 -1
  134. package/dist/assets/{handlebars-BEdPtzMT.js → handlebars-BwUQcEDq.js} +1 -1
  135. package/dist/assets/{html-B1fPb1QD.js → html-1s3uPKfh.js} +1 -1
  136. package/dist/assets/{htmlMode-CY2ZjHxH.js → htmlMode-xtKD99de.js} +1 -1
  137. package/dist/assets/{index-D-zetSol.js → index-C8MchCem.js} +3 -3
  138. package/dist/assets/{javascript-BV2OsWA0.js → javascript-Ph7ijyny.js} +1 -1
  139. package/dist/assets/{jsonMode-zd07aeuX.js → jsonMode-D-jGAnFH.js} +1 -1
  140. package/dist/assets/linkComputer-CbGyI_qx.js +1 -0
  141. package/dist/assets/{liquid-BParI24X.js → liquid-0IamE_cI.js} +1 -1
  142. package/dist/assets/{lspLanguageFeatures-BzredkoV.js → lspLanguageFeatures-BxnQunWF.js} +1 -1
  143. package/dist/assets/main-CLKXa6hf.css +1 -0
  144. package/dist/assets/{mdx-vGzUJN98.js → mdx-DdNmfivn.js} +1 -1
  145. package/dist/assets/{monaco.contribution-BmaeBQEc.js → monaco.contribution-B43jsUs1.js} +2 -2
  146. package/dist/assets/{python-CUwdLgsI.js → python-IAt4X5TS.js} +1 -1
  147. package/dist/assets/{razor-BScebUxU.js → razor-DRkFYW0S.js} +1 -1
  148. package/dist/assets/review-C8-oPKXk.css +1 -0
  149. package/dist/assets/{tsMode-DzUAibXK.js → tsMode-_d_4U2gf.js} +1 -1
  150. package/dist/assets/{typescript-D9EOeM7N.js → typescript-C7zcMq9l.js} +1 -1
  151. package/dist/assets/{workers-DAiomYZM.js → workers-D0nOyJzf.js} +1 -1
  152. package/dist/assets/workspace-editor-model-DND_Y-Bj.js +1 -0
  153. package/dist/assets/workspace-editor-monaco-BPWhgcIB.js +4 -0
  154. package/dist/assets/workspace-editor-monaco-N641qPjX.js +1 -0
  155. package/dist/assets/workspace-view-state-k1bTlJ_Z.js +13 -0
  156. package/dist/assets/{xml-wWl1dhkQ.js → xml-BR-HvxT8.js} +1 -1
  157. package/dist/assets/{yaml-Dc2WDaOZ.js → yaml-YtFQwh4q.js} +1 -1
  158. package/dist/index.html +1 -1
  159. package/extensions/browser/backend/agent-browser-runtime.cjs +1040 -0
  160. package/extensions/browser/backend/agent-capability.cjs +85 -0
  161. package/extensions/browser/backend/browser-mcp-server.cjs +655 -0
  162. package/extensions/browser/backend/browser-resource-manager.cjs +1486 -0
  163. package/extensions/browser/backend/browser-resource-store.cjs +228 -0
  164. package/extensions/browser/backend/browser-router.cjs +203 -0
  165. package/extensions/browser/backend/executable-discovery.cjs +248 -0
  166. package/extensions/browser/backend/farming-browser-client.cjs +116 -0
  167. package/extensions/browser/backend/index.cjs +32 -0
  168. package/extensions/browser/backend/managed-chromium-installer.cjs +833 -0
  169. package/extensions/browser/bin/farming-browser +16 -7
  170. package/extensions/computer/backend/agent-capability.cjs +72 -0
  171. package/extensions/computer/backend/computer-constants.cjs +59 -0
  172. package/extensions/computer/backend/computer-mcp-server.cjs +182 -0
  173. package/extensions/computer/backend/computer-resource-manager.cjs +1219 -0
  174. package/extensions/computer/backend/computer-resource-store.cjs +190 -0
  175. package/extensions/computer/backend/computer-router.cjs +257 -0
  176. package/extensions/computer/backend/cua-tools.json +3067 -0
  177. package/extensions/computer/backend/farming-computer-client.cjs +84 -0
  178. package/extensions/computer/backend/index.cjs +35 -0
  179. package/extensions/computer/backend/isolated-browser-provider.cjs +157 -0
  180. package/extensions/computer/bin/farming-computer +131 -0
  181. package/frontend/farming-net/app.js +255 -262
  182. package/frontend/ghostty-loader.js +24 -20
  183. package/frontend/reading-anchor.js +210 -193
  184. package/frontend/runtime-paths.js +24 -26
  185. package/frontend/session-bridge.js +90 -111
  186. package/frontend/session-modal-bridge.js +184 -302
  187. package/frontend/skin-bridge.js +20 -23
  188. package/frontend/skins/crt/app.js +7686 -7901
  189. package/frontend/skins/crt/effects.js +7 -6
  190. package/frontend/skins/crt/index.html +6 -6
  191. package/frontend/skins/crt/styles/markdown.css +4 -4
  192. package/frontend/terminal-bridge.js +174 -181
  193. package/frontend/terminal-replay.js +320 -345
  194. package/frontend/theme-loader.js +55 -71
  195. package/package.json +64 -37
  196. package/shared/backend-connection-status.js +38 -69
  197. package/shared/browser-protocol.js +235 -110
  198. package/shared/websocket-liveness.js +40 -0
  199. package/backend/acp/packaged-claude-acp.js +0 -13
  200. package/backend/acp/packaged-codex-acp.js +0 -13
  201. package/backend/acp/patch-decisions.js +0 -153
  202. package/backend/acp/permission-security.js +0 -108
  203. package/backend/acp-session-state.js +0 -634
  204. package/backend/acp-transcript.js +0 -512
  205. package/backend/agent-env.js +0 -250
  206. package/backend/agent-json-stream.js +0 -268
  207. package/backend/agent-lifecycle-journal.js +0 -133
  208. package/backend/agent-order.js +0 -166
  209. package/backend/agent-provider-session.js +0 -76
  210. package/backend/agent-runtime-binding.js +0 -174
  211. package/backend/agent-session-history.js +0 -986
  212. package/backend/async-cache.js +0 -94
  213. package/backend/atomic-json-store.js +0 -37
  214. package/backend/auth.js +0 -251
  215. package/backend/chat-runtime.js +0 -28
  216. package/backend/claude-settings.js +0 -121
  217. package/backend/cli-agents.js +0 -486
  218. package/backend/codex-context-window.js +0 -189
  219. package/backend/codex-models.js +0 -226
  220. package/backend/codex-session-archive.js +0 -65
  221. package/backend/codex-session-history.js +0 -647
  222. package/backend/codex-transcript-sanitizer.js +0 -115
  223. package/backend/codex-transcript.js +0 -2362
  224. package/backend/command-runner-child.js +0 -67
  225. package/backend/config-manager.js +0 -1117
  226. package/backend/control-api.js +0 -455
  227. package/backend/executable-discovery.js +0 -216
  228. package/backend/farming-agent-bootstrap.js +0 -49
  229. package/backend/farming-cli.js +0 -403
  230. package/backend/farming-net-pass.js +0 -285
  231. package/backend/farming-net-registry.js +0 -112
  232. package/backend/farming-net-server.js +0 -298
  233. package/backend/farming-session-store.js +0 -677
  234. package/backend/git-worktree-info.js +0 -181
  235. package/backend/haiku-token.js +0 -772
  236. package/backend/index-html.js +0 -80
  237. package/backend/input-parts.js +0 -54
  238. package/backend/input-routing.js +0 -24
  239. package/backend/json-cli-runtime.js +0 -275
  240. package/backend/main-agent-skills.js +0 -288
  241. package/backend/main-page-session.js +0 -122
  242. package/backend/native-pty-controller-generation.js +0 -106
  243. package/backend/native-pty-host-identity.js +0 -86
  244. package/backend/native-pty-host-path.js +0 -42
  245. package/backend/native-session-engine.js +0 -268
  246. package/backend/network.js +0 -23
  247. package/backend/npm-update-helper.js +0 -374
  248. package/backend/packaged-node-pty.js +0 -99
  249. package/backend/preview-session-manager.js +0 -68
  250. package/backend/provider-adapters.js +0 -399
  251. package/backend/provider-session-id.js +0 -47
  252. package/backend/provider-session-service.js +0 -345
  253. package/backend/qr-share-tickets.js +0 -100
  254. package/backend/review-diff-router.js +0 -180
  255. package/backend/review-diff-service.js +0 -1270
  256. package/backend/review-session-router.js +0 -74
  257. package/backend/review-session-service.js +0 -446
  258. package/backend/review-session-store.js +0 -151
  259. package/backend/review-state-router.js +0 -116
  260. package/backend/review-state-store.js +0 -286
  261. package/backend/run-history-store.js +0 -67
  262. package/backend/runtime-dependency-manager.js +0 -759
  263. package/backend/runtime-executable-invocation.js +0 -20
  264. package/backend/runtime-observation.js +0 -81
  265. package/backend/server-process-identity.js +0 -47
  266. package/backend/server.js +0 -3225
  267. package/backend/session-engine-bridge.js +0 -129
  268. package/backend/session-engine-router.js +0 -66
  269. package/backend/session-engine.js +0 -39
  270. package/backend/session-stream-protocol.js +0 -185
  271. package/backend/shell-busy-integration.js +0 -472
  272. package/backend/slash-command-discovery.js +0 -433
  273. package/backend/storage-layout.js +0 -205
  274. package/backend/system-monitor.js +0 -77
  275. package/backend/terminal-attach-checkpoint.js +0 -74
  276. package/backend/terminal-exit-quiescence.js +0 -39
  277. package/backend/terminal-runtime-cleanup.js +0 -80
  278. package/backend/terminal-screen-worker.js +0 -337
  279. package/backend/terminal-state-serialization.js +0 -127
  280. package/backend/theme-manager.js +0 -163
  281. package/backend/usage-forecast.js +0 -86
  282. package/backend/usage-history-scanner.ts +0 -2718
  283. package/backend/usage-history-smoke.js +0 -64
  284. package/backend/usage-history-worker.js +0 -34
  285. package/backend/workspace-directory.js +0 -232
  286. package/backend/workspace-discovery.js +0 -311
  287. package/backend/workspace-root-registry.js +0 -166
  288. package/dist/assets/App-BKNUILuL.css +0 -1
  289. package/dist/assets/App-Z1N7T0eM.js +0 -695
  290. package/dist/assets/FileEditorPane-CNtuGjQ3.js +0 -2
  291. package/dist/assets/IconGlyphs-BClgag6E.js +0 -1
  292. package/dist/assets/ProjectFilesSection-K3GHuQ4U.js +0 -12
  293. package/dist/assets/ReviewPage-BRuxFaH5.js +0 -3
  294. package/dist/assets/code-dark-kLsQLvpf.css +0 -1
  295. package/dist/assets/file-icons-BOlcJ0ZF.js +0 -1
  296. package/dist/assets/main-DUTz-Rd2.css +0 -1
  297. package/dist/assets/review-BcnwQtJv.css +0 -1
  298. package/dist/assets/workspace-editor-model-CSGCl21x.js +0 -1
  299. package/dist/assets/workspace-editor-monaco-CJNwbpCy.js +0 -4
  300. package/dist/assets/workspace-editor-monaco-CO9w8YV0.js +0 -1
  301. package/dist/assets/workspace-view-state-BjKPYp0E.js +0 -7
  302. package/extensions/browser/backend/agent-browser-runtime.js +0 -1041
  303. package/extensions/browser/backend/agent-capability.js +0 -55
  304. package/extensions/browser/backend/browser-mcp-server.js +0 -621
  305. package/extensions/browser/backend/browser-resource-manager.js +0 -1331
  306. package/extensions/browser/backend/browser-resource-store.js +0 -190
  307. package/extensions/browser/backend/browser-router.js +0 -141
  308. package/extensions/browser/backend/executable-discovery.js +0 -238
  309. package/extensions/browser/backend/farming-browser-client.js +0 -83
  310. package/extensions/browser/backend/index.js +0 -7
  311. package/extensions/browser/backend/managed-chromium-installer.js +0 -593
  312. package/extensions/browser/frontend/BrowserSidebarPortals.tsx +0 -360
  313. package/extensions/browser/frontend/BrowserViewer.tsx +0 -500
  314. package/extensions/browser/frontend/browser-resource-state.ts +0 -60
  315. package/extensions/browser/frontend/browser.css +0 -567
  316. package/extensions/browser/frontend/types.ts +0 -38
  317. package/extensions/browser/frontend/useBrowserResources.ts +0 -166
  318. package/frontend/vendor/ghostty-web/index.d.ts +0 -1842
  319. package/shared/backend-connection-status.d.ts +0 -37
  320. package/shared/browser-protocol.d.ts +0 -5
  321. /package/dist/assets/{api-w2x5QfxB.js → api-ByCV9MEr.js} +0 -0
  322. /package/dist/assets/{core-vPkV8P_m.js → core-Czwdx12k.js} +0 -0
  323. /package/dist/assets/{fsharp-DNZNZyEE.js → fsharp-BjPpkoJe.js} +0 -0
  324. /package/dist/assets/{go-_kPJjNc_.js → go-BkIDmSUP.js} +0 -0
  325. /package/dist/assets/{graphql-4HCNVt5g.js → graphql-CCJTpqi1.js} +0 -0
  326. /package/dist/assets/{hcl-C87ymY0o.js → hcl-s4z8lUFg.js} +0 -0
  327. /package/dist/assets/{ini-BYrrGNTc.js → ini-CyUW1I7Z.js} +0 -0
  328. /package/dist/assets/{java-B211rJbk.js → java-CFCcGRiM.js} +0 -0
  329. /package/dist/assets/{julia-DVPsRtBm.js → julia-DQyH_EYb.js} +0 -0
  330. /package/dist/assets/{kotlin-BYyNerjp.js → kotlin-B8hA5O51.js} +0 -0
  331. /package/dist/assets/{less-EC9UblGE.js → less-DaVdaas0.js} +0 -0
  332. /package/dist/assets/{lexon-B1yuUdqW.js → lexon-DLBhPd3y.js} +0 -0
  333. /package/dist/assets/{lua-Bo6GFzxT.js → lua-gB1c_cif.js} +0 -0
  334. /package/dist/assets/{m3-C-Y9cBVI.js → m3-C2T3z3gB.js} +0 -0
  335. /package/dist/assets/{markdown-BHu-wLbe.js → markdown-CKq-Euj1.js} +0 -0
  336. /package/dist/assets/{mips-Dkds26rX.js → mips-Bcs5qIDX.js} +0 -0
  337. /package/dist/assets/{msdax-PU4g-8_g.js → msdax-CBP48FHF.js} +0 -0
  338. /package/dist/assets/{mysql-fPpuGpS7.js → mysql-c7tiPcFj.js} +0 -0
  339. /package/dist/assets/{objective-c-Wy1e5JUf.js → objective-c-D4BZkeEV.js} +0 -0
  340. /package/dist/assets/{pascal-BIXwvrqU.js → pascal-CJDZg0MN.js} +0 -0
  341. /package/dist/assets/{pascaligo-DwR0AtL_.js → pascaligo-Bygi8Ynl.js} +0 -0
  342. /package/dist/assets/{perl-CGHAl8my.js → perl-aS8bkf7E.js} +0 -0
  343. /package/dist/assets/{pgsql-B91M73E2.js → pgsql-CzNAYFYl.js} +0 -0
  344. /package/dist/assets/{php-C70ttrCx.js → php-DOtoEFTT.js} +0 -0
  345. /package/dist/assets/{pla-BNrXaRh0.js → pla-DugRnao1.js} +0 -0
  346. /package/dist/assets/{postiats-Dv2IAZR9.js → postiats-DsXwusKh.js} +0 -0
  347. /package/dist/assets/{powerquery-CkY5Wq7J.js → powerquery-DL3o72oD.js} +0 -0
  348. /package/dist/assets/{powershell-uGIYLU3C.js → powershell-C1qHekys.js} +0 -0
  349. /package/dist/assets/{protobuf-CavfmJu-.js → protobuf-DHgsc-cH.js} +0 -0
  350. /package/dist/assets/{pug-Drqnyitx.js → pug-FZXlE_Iu.js} +0 -0
  351. /package/dist/assets/{qrcode-7uGsTEmi.js → qrcode-DJDTdjL7.js} +0 -0
  352. /package/dist/assets/{qsharp-C7yF-Dti.js → qsharp-bLyhI3DT.js} +0 -0
  353. /package/dist/assets/{r-HXLGP0_-.js → r-DjFGXbAa.js} +0 -0
  354. /package/dist/assets/{redis-C4y6mf2p.js → redis-DSoZ_V6u.js} +0 -0
  355. /package/dist/assets/{redshift-DdQrFPrv.js → redshift-CzkdCsrg.js} +0 -0
  356. /package/dist/assets/{restructuredtext-CBrf2PNj.js → restructuredtext-B_XPrGCQ.js} +0 -0
  357. /package/dist/assets/{ruby-CVtMoX2B.js → ruby-Cry2RneJ.js} +0 -0
  358. /package/dist/assets/{rust-Ckq4sbMP.js → rust-CWzdbFq1.js} +0 -0
  359. /package/dist/assets/{sb-er66OpE3.js → sb-DmofU59h.js} +0 -0
  360. /package/dist/assets/{scala-BdWZz-hH.js → scala-BUC2l-vN.js} +0 -0
  361. /package/dist/assets/{scheme-kTV_s2kP.js → scheme-CNIB_72f.js} +0 -0
  362. /package/dist/assets/{scss-Bymy2VJQ.js → scss-DcL4-NbX.js} +0 -0
  363. /package/dist/assets/{shell-bwEP1LQ1.js → shell-CgAGvSSA.js} +0 -0
  364. /package/dist/assets/{solidity-DCddeBgL.js → solidity-DSkt6O_P.js} +0 -0
  365. /package/dist/assets/{sophia-BMN3AQig.js → sophia--5ytcjDN.js} +0 -0
  366. /package/dist/assets/{sparql-CSXOLjzi.js → sparql-C1Srr7cD.js} +0 -0
  367. /package/dist/assets/{sql-COg8ewmK.js → sql-2k_O5fj7.js} +0 -0
  368. /package/dist/assets/{st-CIaZtBS_.js → st-DCCCPqfz.js} +0 -0
  369. /package/dist/assets/{swift-DXiOhUHu.js → swift-Dd8mAfOt.js} +0 -0
  370. /package/dist/assets/{systemverilog-BTDE6Dr2.js → systemverilog-B0-aZYXu.js} +0 -0
  371. /package/dist/assets/{tcl-B0zy9NvV.js → tcl-CZAZwPVX.js} +0 -0
  372. /package/dist/assets/{twig-D594l4Z1.js → twig-D-Ag0tdS.js} +0 -0
  373. /package/dist/assets/{typespec-XKVjaPqo.js → typespec-B7kTFp0Z.js} +0 -0
  374. /package/dist/assets/{useWorkspaceMenuKeyboard-Bpy_s69Z.js → useWorkspaceMenuKeyboard-uYZpDxhU.js} +0 -0
  375. /package/dist/assets/{vb-B2wYoKRV.js → vb-20w1JPum.js} +0 -0
  376. /package/dist/assets/{wgsl-D0Yf2LbK.js → wgsl-CLJfqFt0.js} +0 -0
  377. /package/dist/assets/{workspace-working-copy-C3FSR3N6.js → workspace-working-copy-Cfz07cOd.js} +0 -0
@@ -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
- const crypto = require('crypto');
2
- const fs = require('fs/promises');
3
- const path = require('path');
4
- const { promisify } = require('util');
5
- const zlib = require('zlib');
6
- const storageLayout = require('./storage-layout');
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, 'w');
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, 'r');
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(value.provider || '').trim().toLowerCase(),
35
- providerHomeId: String(value.providerHomeId || 'default').trim() || 'default',
36
- sessionId: String(value.sessionId || '').trim(),
37
- cwd: path.resolve(String(value.cwd || process.cwd())),
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('sha256')
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
- ? Math.max(0, Math.floor(Number(options.writeDelayMs)))
56
- : DEFAULT_WRITE_DELAY_MS;
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(() => {}).then(operation);
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('utf8'));
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?.code !== 'ENOENT') {
103
- console.warn('Failed to read ACP checkpoint:', error && (error.message || error));
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()}\n`);
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()}\n`);
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
+ });