farming-code 2.2.29 → 2.2.32

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