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
@@ -1,50 +1,73 @@
1
- const express = require('express');
2
- const fs = require('fs');
3
- const os = require('os');
4
- const path = require('path');
5
- const { inspectGitWorktree } = require('./git-worktree-info');
6
- const { WorkspaceFileError } = require('./workspace-file-service');
7
- const { PreviewSessionManager } = require('./preview-session-manager');
8
- const {
9
- GLOBAL_WORKSPACE_FILES_AGENT_ID,
10
- GLOBAL_WORKSPACE_FILES_ROOT,
11
- GLOBAL_WORKSPACE_ROOT_ID,
12
- PROJECT_FILES_WORKSPACE_PREFIX,
13
- WorkspaceRootRegistry,
14
- projectWorkspaceFromLegacyRef,
15
- } = require('./workspace-root-registry');
16
-
17
- const ROOT_REGISTRIES = new WeakMap();
18
-
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 workspace_file_router_exports = {};
21
+ __export(workspace_file_router_exports, {
22
+ GLOBAL_WORKSPACE_FILES_AGENT_ID: () => import_workspace_root_registry.GLOBAL_WORKSPACE_FILES_AGENT_ID,
23
+ GLOBAL_WORKSPACE_FILES_ROOT: () => import_workspace_root_registry.GLOBAL_WORKSPACE_FILES_ROOT,
24
+ PROJECT_FILES_WORKSPACE_PREFIX: () => import_workspace_root_registry.PROJECT_FILES_WORKSPACE_PREFIX,
25
+ assertExactExternalFileReadable: () => assertExactExternalFileReadable,
26
+ assertGlobalWorkspacePathAllowed: () => assertGlobalWorkspacePathAllowed,
27
+ createWorkspaceFileRouter: () => createWorkspaceFileRouter,
28
+ globalWorkspaceAllowedRoots: () => globalWorkspaceAllowedRoots,
29
+ isGlobalWorkspaceFilesAgentId: () => isGlobalWorkspaceFilesAgentId,
30
+ projectWorkspaceFromFilesId: () => projectWorkspaceFromFilesId,
31
+ resolveWorkspaceRoot: () => resolveWorkspaceRoot,
32
+ sendWorkspaceFileError: () => sendWorkspaceFileError
33
+ });
34
+ module.exports = __toCommonJS(workspace_file_router_exports);
35
+ var import_git_worktree_info = require("./git-worktree-info.cjs");
36
+ var import_workspace_file_service = require("./workspace-file-service.cjs");
37
+ var import_preview_session_manager = require("./preview-session-manager.cjs");
38
+ var import_workspace_root_registry = require("./workspace-root-registry.cjs");
39
+ const express = require("express");
40
+ const fs = require("fs");
41
+ const os = require("os");
42
+ const path = require("path");
43
+ const expressFactory = express;
44
+ const ROOT_REGISTRIES = /* @__PURE__ */ new WeakMap();
45
+ function isRecord(value) {
46
+ return typeof value === "object" && value !== null;
47
+ }
19
48
  function isGlobalWorkspaceFilesAgentId(agentId) {
20
- return agentId === GLOBAL_WORKSPACE_FILES_AGENT_ID || agentId === GLOBAL_WORKSPACE_ROOT_ID;
49
+ return agentId === import_workspace_root_registry.GLOBAL_WORKSPACE_FILES_AGENT_ID || agentId === import_workspace_root_registry.GLOBAL_WORKSPACE_ROOT_ID;
21
50
  }
22
-
23
51
  function projectWorkspaceFromFilesId(filesId) {
24
- return projectWorkspaceFromLegacyRef(filesId);
52
+ return (0, import_workspace_root_registry.projectWorkspaceFromLegacyRef)(filesId);
25
53
  }
26
-
27
54
  function workspaceRootRegistryFor(agentManager) {
28
55
  let registry = ROOT_REGISTRIES.get(agentManager);
29
56
  if (!registry) {
30
- registry = new WorkspaceRootRegistry(agentManager);
57
+ registry = new import_workspace_root_registry.WorkspaceRootRegistry(agentManager);
31
58
  ROOT_REGISTRIES.set(agentManager, registry);
32
59
  }
33
60
  return registry;
34
61
  }
35
-
36
62
  function workspaceRef(source) {
37
- return source && typeof source.rootId === 'string' && source.rootId.trim()
38
- ? source.rootId
39
- : source?.agentId;
63
+ if (!isRecord(source)) return void 0;
64
+ return typeof source.rootId === "string" && source.rootId.trim() ? source.rootId : source.agentId;
40
65
  }
41
-
42
66
  function normalizeAbsolutePath(value) {
43
- const raw = String(value || '').trim();
44
- if (!raw) return '';
67
+ const raw = String(value || "").trim();
68
+ if (!raw) return "";
45
69
  return path.resolve(raw.replace(/^~(?=$|[\\/])/, os.homedir()));
46
70
  }
47
-
48
71
  function realPathIfPresent(value) {
49
72
  try {
50
73
  return fs.realpathSync(value);
@@ -52,27 +75,21 @@ function realPathIfPresent(value) {
52
75
  return value;
53
76
  }
54
77
  }
55
-
56
78
  function isSameOrDescendantPath(root, target) {
57
79
  const relative = path.relative(root, target);
58
- return relative === '' || Boolean(relative) && !relative.startsWith('..') && !path.isAbsolute(relative);
80
+ return relative === "" || Boolean(relative) && !relative.startsWith("..") && !path.isAbsolute(relative);
59
81
  }
60
-
61
82
  function previewAuthorizedRootForTarget(allowedRoots, target) {
62
- return allowedRoots
63
- .filter(root => isSameOrDescendantPath(root, target))
64
- .sort((left, right) => right.length - left.length)[0] || '';
83
+ return allowedRoots.filter((root) => isSameOrDescendantPath(root, target)).sort((left, right) => right.length - left.length)[0] || "";
65
84
  }
66
-
67
85
  function normalizePreviewAssetPath(value) {
68
- const normalized = path.posix.normalize(String(value || '').replace(/\\/g, '/').replace(/^\/+/, ''));
69
- if (!normalized || normalized === '.') return '';
70
- if (normalized === '..' || normalized.startsWith('../') || path.posix.isAbsolute(normalized)) {
71
- throw new WorkspaceFileError('preview path must stay inside the authorized root', 403);
86
+ const normalized = path.posix.normalize(String(value || "").replace(/\\/g, "/").replace(/^\/+/, ""));
87
+ if (!normalized || normalized === ".") return "";
88
+ if (normalized === ".." || normalized.startsWith("../") || path.posix.isAbsolute(normalized)) {
89
+ throw new import_workspace_file_service.WorkspaceFileError("preview path must stay inside the authorized root", 403);
72
90
  }
73
91
  return normalized;
74
92
  }
75
-
76
93
  function previewContentSecurityPolicy() {
77
94
  return [
78
95
  "default-src 'none'",
@@ -86,91 +103,65 @@ function previewContentSecurityPolicy() {
86
103
  "object-src 'none'",
87
104
  "base-uri 'none'",
88
105
  "form-action 'none'",
89
- "frame-ancestors 'self'",
90
- ].join('; ');
106
+ "frame-ancestors 'self'"
107
+ ].join("; ");
91
108
  }
92
-
93
109
  function escapeHtmlAttribute(value) {
94
- return String(value || '')
95
- .replace(/&/g, '&')
96
- .replace(/"/g, '"')
97
- .replace(/</g, '&lt;')
98
- .replace(/>/g, '&gt;');
110
+ return String(value || "").replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
99
111
  }
100
-
101
112
  function rewritePreviewHtmlRootReferences(source, rootUrl) {
102
113
  const safeRootUrl = escapeHtmlAttribute(rootUrl);
103
- return String(source || '')
104
- .replace(/(\b(?:href|src|poster)\s*=\s*["'])\/(?!\/)/gi, `$1${safeRootUrl}`)
105
- .replace(/(url\(\s*["']?)\/(?!\/)/gi, `$1${safeRootUrl}`);
114
+ return String(source || "").replace(/(\b(?:href|src|poster)\s*=\s*["'])\/(?!\/)/gi, `$1${safeRootUrl}`).replace(/(url\(\s*["']?)\/(?!\/)/gi, `$1${safeRootUrl}`);
106
115
  }
107
-
108
- function globalUserPathToAbsolute(userPath = '') {
109
- const normalized = String(userPath || '')
110
- .trim()
111
- .replace(/\\/g, '/')
112
- .replace(/^\/+/, '');
113
- return path.resolve(GLOBAL_WORKSPACE_FILES_ROOT, normalized || '.');
116
+ function globalUserPathToAbsolute(userPath = "") {
117
+ const normalized = String(userPath || "").trim().replace(/\\/g, "/").replace(/^\/+/, "");
118
+ return path.resolve(import_workspace_root_registry.GLOBAL_WORKSPACE_FILES_ROOT, normalized || ".");
114
119
  }
115
-
116
120
  function relativeGlobalPath(absolutePath) {
117
- const relative = path.relative(GLOBAL_WORKSPACE_FILES_ROOT, absolutePath);
118
- return relative === '' ? '' : relative.replace(/\\/g, '/');
121
+ const relative = path.relative(import_workspace_root_registry.GLOBAL_WORKSPACE_FILES_ROOT, absolutePath);
122
+ return relative === "" ? "" : relative.replace(/\\/g, "/");
119
123
  }
120
-
121
124
  function collectCandidateAllowedRoots(agentManager) {
122
125
  const roots = [os.homedir()];
123
- const state = agentManager && typeof agentManager.getState === 'function'
124
- ? agentManager.getState()
125
- : {};
126
+ const state = agentManager && typeof agentManager.getState === "function" ? agentManager.getState() : {};
126
127
  for (const agent of state.agents || []) {
128
+ const worktree = isRecord(agent.gitWorktree) ? agent.gitWorktree : {};
127
129
  roots.push(agent && agent.projectWorkspace);
128
130
  roots.push(agent && agent.cwd);
129
- roots.push(agent && agent.gitWorktree && agent.gitWorktree.workspace);
131
+ roots.push(worktree.workspace);
130
132
  }
131
133
  for (const entry of state.taskHistory || []) {
132
134
  roots.push(entry && entry.projectWorkspace);
133
135
  roots.push(entry && entry.cwd);
134
136
  }
135
-
136
137
  const configManager = agentManager && agentManager.configManager;
137
- const settings = configManager && typeof configManager.getSettings === 'function'
138
- ? configManager.getSettings()
139
- : null;
138
+ const settings = configManager && typeof configManager.getSettings === "function" ? configManager.getSettings() : null;
140
139
  if (settings) {
141
- roots.push(...(Array.isArray(settings.workspaceHistory) ? settings.workspaceHistory : []));
142
- roots.push(...(Array.isArray(settings.projectWorkspaces) ? settings.projectWorkspaces : []));
140
+ roots.push(...Array.isArray(settings.workspaceHistory) ? settings.workspaceHistory : []);
141
+ roots.push(...Array.isArray(settings.projectWorkspaces) ? settings.projectWorkspaces : []);
143
142
  }
144
143
  return roots;
145
144
  }
146
-
147
145
  function globalWorkspaceAllowedRoots(agentManager) {
148
- const seen = new Set();
149
- return collectCandidateAllowedRoots(agentManager)
150
- .map(normalizeAbsolutePath)
151
- .filter(Boolean)
152
- .map(realPathIfPresent)
153
- .filter(root => {
154
- if (root === path.parse(root).root) return false;
155
- if (seen.has(root)) return false;
156
- seen.add(root);
157
- return true;
158
- });
146
+ const seen = /* @__PURE__ */ new Set();
147
+ return collectCandidateAllowedRoots(agentManager).map(normalizeAbsolutePath).filter(Boolean).map(realPathIfPresent).filter((root) => {
148
+ if (root === path.parse(root).root) return false;
149
+ if (seen.has(root)) return false;
150
+ seen.add(root);
151
+ return true;
152
+ });
159
153
  }
160
-
161
154
  function assertGlobalWorkspacePathAllowed(agentManager, userPath, options = {}) {
162
155
  const allowedRoots = globalWorkspaceAllowedRoots(agentManager);
163
156
  const requestedTarget = globalUserPathToAbsolute(userPath);
164
157
  if (!allowedRoots.length) {
165
- throw new WorkspaceFileError('global files have no allowed roots', 403);
158
+ throw new import_workspace_file_service.WorkspaceFileError("global files have no allowed roots", 403);
166
159
  }
167
-
168
160
  if (options.allowAllowedRootAncestor === true) {
169
- const isAllowedRootAncestor = allowedRoots.some(root => isSameOrDescendantPath(requestedTarget, root));
161
+ const isAllowedRootAncestor = allowedRoots.some((root) => isSameOrDescendantPath(requestedTarget, root));
170
162
  if (isAllowedRootAncestor) return { target: requestedTarget, allowedRoots };
171
163
  }
172
-
173
- const allowed = allowedRoots.some(root => {
164
+ const allowed = allowedRoots.some((root) => {
174
165
  if (options.allowMissing === true) {
175
166
  const realParent = realPathIfPresent(path.dirname(requestedTarget));
176
167
  return isSameOrDescendantPath(root, requestedTarget) && isSameOrDescendantPath(root, realParent);
@@ -179,11 +170,10 @@ function assertGlobalWorkspacePathAllowed(agentManager, userPath, options = {})
179
170
  return isSameOrDescendantPath(root, realTarget);
180
171
  });
181
172
  if (!allowed) {
182
- throw new WorkspaceFileError('global file path is outside allowed workspaces', 403);
173
+ throw new import_workspace_file_service.WorkspaceFileError("global file path is outside allowed workspaces", 403);
183
174
  }
184
175
  return { target: requestedTarget, allowedRoots };
185
176
  }
186
-
187
177
  function assertExactExternalFileReadable(userPath) {
188
178
  const requestedTarget = globalUserPathToAbsolute(userPath);
189
179
  let target;
@@ -193,19 +183,18 @@ function assertExactExternalFileReadable(userPath) {
193
183
  stat = fs.statSync(target);
194
184
  fs.accessSync(target, fs.constants.R_OK);
195
185
  } catch {
196
- throw new WorkspaceFileError('external file is not readable', 403);
186
+ throw new import_workspace_file_service.WorkspaceFileError("external file is not readable", 403);
197
187
  }
198
188
  if (!stat.isFile()) {
199
- throw new WorkspaceFileError('external path must be a file', 400);
189
+ throw new import_workspace_file_service.WorkspaceFileError("external path must be a file", 400);
200
190
  }
201
191
  return relativeGlobalPath(target);
202
192
  }
203
-
204
- function globalSyntheticTree(agentManager, userPath = '') {
193
+ function globalSyntheticTree(agentManager, userPath = "") {
205
194
  const { target, allowedRoots } = assertGlobalWorkspacePathAllowed(agentManager, userPath, {
206
- allowAllowedRootAncestor: true,
195
+ allowAllowedRootAncestor: true
207
196
  });
208
- const children = new Map();
197
+ const children = /* @__PURE__ */ new Map();
209
198
  for (const root of allowedRoots) {
210
199
  if (!isSameOrDescendantPath(target, root) || target === root) continue;
211
200
  const relative = path.relative(target, root);
@@ -215,94 +204,80 @@ function globalSyntheticTree(agentManager, userPath = '') {
215
204
  children.set(first, {
216
205
  name: first,
217
206
  path: relativeGlobalPath(childAbsolute),
218
- type: 'directory',
207
+ type: "directory",
219
208
  size: 0,
220
- mtimeMs: 0,
209
+ mtimeMs: 0
221
210
  });
222
211
  }
223
212
  return {
224
213
  path: relativeGlobalPath(target),
225
214
  items: Array.from(children.values()).sort((a, b) => a.name.localeCompare(b.name)),
226
- gitStatusPending: false,
215
+ gitStatusPending: false
227
216
  };
228
217
  }
229
-
230
- async function listGlobalWorkspaceTree(agentManager, fileService, userPath = '') {
218
+ async function listGlobalWorkspaceTree(agentManager, fileService, userPath = "") {
231
219
  const { target, allowedRoots } = assertGlobalWorkspacePathAllowed(agentManager, userPath, {
232
- allowAllowedRootAncestor: true,
220
+ allowAllowedRootAncestor: true
233
221
  });
234
- const insideAllowedRoot = allowedRoots.some(root => isSameOrDescendantPath(root, realPathIfPresent(target)));
222
+ const insideAllowedRoot = allowedRoots.some((root) => isSameOrDescendantPath(root, realPathIfPresent(target)));
235
223
  if (!insideAllowedRoot) {
236
224
  return globalSyntheticTree(agentManager, userPath);
237
225
  }
238
- return fileService.listTree(GLOBAL_WORKSPACE_FILES_ROOT, userPath || '');
226
+ return fileService.listTree(import_workspace_root_registry.GLOBAL_WORKSPACE_FILES_ROOT, userPath || "");
239
227
  }
240
-
241
228
  function sendWorkspaceFileError(res, error) {
242
- if (error instanceof WorkspaceFileError) {
229
+ if (error instanceof import_workspace_file_service.WorkspaceFileError) {
243
230
  res.status(error.statusCode).json({
244
231
  error: error.message,
245
- ...(Object.keys(error.details || {}).length > 0 ? { details: error.details } : {}),
232
+ ...Object.keys(error.details || {}).length > 0 ? { details: error.details } : {}
246
233
  });
247
234
  return;
248
235
  }
249
-
250
- console.error('Workspace file API error:', error);
251
- res.status(500).json({ error: 'workspace file operation failed' });
236
+ console.error("Workspace file API error:", error);
237
+ res.status(500).json({ error: "workspace file operation failed" });
252
238
  }
253
-
254
239
  function resolveWorkspaceRoot(agentManager, rootRef) {
255
240
  return workspaceRootRegistryFor(agentManager).resolve(rootRef).canonicalPath;
256
241
  }
257
-
258
242
  function assertWritableWorkspaceAgent(agentId) {
259
243
  if (isGlobalWorkspaceFilesAgentId(agentId)) {
260
- throw new WorkspaceFileError('global files are read-only', 403);
244
+ throw new import_workspace_file_service.WorkspaceFileError("global files are read-only", 403);
261
245
  }
262
246
  }
263
-
264
247
  function readOptionsForAgent(agentManager, agentId) {
265
- return isGlobalWorkspaceFilesAgentId(agentId)
266
- ? {}
267
- : { allowedExternalRoots: globalWorkspaceAllowedRoots(agentManager) };
248
+ return isGlobalWorkspaceFilesAgentId(agentId) ? {} : { allowedExternalRoots: globalWorkspaceAllowedRoots(agentManager) };
268
249
  }
269
-
270
250
  function createWorkspaceFileRouter(agentManager, fileService, options = {}) {
271
- const router = express.Router();
251
+ const router = expressFactory.Router();
272
252
  const rootRegistry = options.rootRegistry || workspaceRootRegistryFor(agentManager);
273
- const previewSessions = options.previewSessionManager || new PreviewSessionManager();
274
-
275
- router.use(express.json({ limit: '3mb' }));
276
-
277
- router.get('/roots', (_req, res) => {
253
+ const previewSessions = options.previewSessionManager || new import_preview_session_manager.PreviewSessionManager();
254
+ router.use(expressFactory.json({ limit: "3mb" }));
255
+ router.get("/roots", (_req, res) => {
278
256
  res.json({ roots: rootRegistry.list() });
279
257
  });
280
-
281
- const resolveRequestRoot = source => {
258
+ const resolveRequestRoot = (source) => {
282
259
  const workspaceRoot = rootRegistry.resolve(workspaceRef(source));
283
- return { root: workspaceRoot.canonicalPath, rootId: workspaceRoot.rootId };
260
+ return {
261
+ kind: String(workspaceRoot.kind || ""),
262
+ root: workspaceRoot.canonicalPath,
263
+ rootId: workspaceRoot.rootId
264
+ };
284
265
  };
285
-
286
- router.get('/tree', async (req, res) => {
266
+ router.get("/tree", async (req, res) => {
287
267
  try {
288
268
  const rootRef = workspaceRef(req.query);
289
269
  const { root, rootId } = resolveRequestRoot(req.query);
290
- const tree = isGlobalWorkspaceFilesAgentId(rootRef)
291
- ? await listGlobalWorkspaceTree(agentManager, fileService, req.query.path || '')
292
- : await fileService.listTree(root, req.query.path || '', readOptionsForAgent(agentManager, rootRef));
270
+ const tree = isGlobalWorkspaceFilesAgentId(rootRef) ? await listGlobalWorkspaceTree(agentManager, fileService, req.query.path || "") : await fileService.listTree(root, req.query.path || "", readOptionsForAgent(agentManager, rootRef));
293
271
  res.json({ rootId, root, tree });
294
272
  } catch (error) {
295
273
  sendWorkspaceFileError(res, error);
296
274
  }
297
275
  });
298
-
299
- router.get('/file', async (req, res) => {
276
+ router.get("/file", async (req, res) => {
300
277
  try {
301
278
  const rootRef = workspaceRef(req.query);
302
- const requestPath = isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact === '1'
303
- ? assertExactExternalFileReadable(req.query.path || '')
304
- : req.query.path || '';
305
- if (isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact !== '1') {
279
+ const requestPath = isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact === "1" ? assertExactExternalFileReadable(req.query.path || "") : req.query.path || "";
280
+ if (isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact !== "1") {
306
281
  assertGlobalWorkspacePathAllowed(agentManager, requestPath);
307
282
  }
308
283
  const { root, rootId } = resolveRequestRoot(req.query);
@@ -312,54 +287,42 @@ function createWorkspaceFileRouter(agentManager, fileService, options = {}) {
312
287
  sendWorkspaceFileError(res, error);
313
288
  }
314
289
  });
315
-
316
- router.get('/raw', async (req, res) => {
290
+ router.get("/raw", async (req, res) => {
317
291
  try {
318
292
  const rootRef = workspaceRef(req.query);
319
- const requestPath = isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact === '1'
320
- ? assertExactExternalFileReadable(req.query.path || '')
321
- : req.query.path || '';
322
- if (isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact !== '1') {
293
+ const requestPath = isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact === "1" ? assertExactExternalFileReadable(req.query.path || "") : req.query.path || "";
294
+ if (isGlobalWorkspaceFilesAgentId(rootRef) && req.query.exact !== "1") {
323
295
  assertGlobalWorkspacePathAllowed(agentManager, requestPath);
324
296
  }
325
297
  const { root } = resolveRequestRoot(req.query);
326
298
  const file = await fileService.readPreviewFile(root, requestPath, readOptionsForAgent(agentManager, rootRef));
327
- res
328
- .status(200)
329
- .type(file.preview.mediaType)
330
- .set('Cache-Control', 'no-store')
331
- .set('X-Content-Type-Options', 'nosniff')
332
- .set('Content-Length', String(file.size))
333
- .send(file.buffer);
299
+ res.status(200).type(file.preview.mediaType).set("Cache-Control", "no-store").set("X-Content-Type-Options", "nosniff").set("Content-Length", String(file.size)).send(file.buffer);
334
300
  } catch (error) {
335
301
  sendWorkspaceFileError(res, error);
336
302
  }
337
303
  });
338
-
339
- router.post('/previews', async (req, res) => {
304
+ router.post("/previews", async (req, res) => {
340
305
  try {
341
306
  const body = req.body || {};
342
307
  const rootRef = workspaceRef(body);
343
- let entryPath = String(body.path || '').trim();
308
+ let entryPath = String(body.path || "").trim();
344
309
  if (!/\.html?$/i.test(entryPath)) {
345
- throw new WorkspaceFileError('HTML preview requires an .html or .htm file', 415);
310
+ throw new import_workspace_file_service.WorkspaceFileError("HTML preview requires an .html or .htm file", 415);
346
311
  }
347
-
348
312
  let authorizedRoot;
349
313
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
350
314
  if (body.exact === true) {
351
315
  entryPath = assertExactExternalFileReadable(entryPath);
352
316
  authorizedRoot = path.dirname(realPathIfPresent(globalUserPathToAbsolute(entryPath)));
353
317
  if (authorizedRoot === path.parse(authorizedRoot).root) {
354
- throw new WorkspaceFileError('external HTML preview directory cannot be the filesystem root', 403);
318
+ throw new import_workspace_file_service.WorkspaceFileError("external HTML preview directory cannot be the filesystem root", 403);
355
319
  }
356
320
  } else {
357
321
  const authorization = assertGlobalWorkspacePathAllowed(agentManager, entryPath);
358
322
  authorizedRoot = previewAuthorizedRootForTarget(authorization.allowedRoots, realPathIfPresent(authorization.target));
359
- if (!authorizedRoot) throw new WorkspaceFileError('global file path is outside allowed workspaces', 403);
323
+ if (!authorizedRoot) throw new import_workspace_file_service.WorkspaceFileError("global file path is outside allowed workspaces", 403);
360
324
  }
361
325
  }
362
-
363
326
  const { root, rootId } = resolveRequestRoot(body);
364
327
  await fileService.readFile(root, entryPath, { allowedExternalRoots: [] });
365
328
  const session = previewSessions.createStatic({
@@ -367,198 +330,177 @@ function createWorkspaceFileRouter(agentManager, fileService, options = {}) {
367
330
  workspaceRoot: root,
368
331
  authorizedRoot: realPathIfPresent(authorizedRoot || root),
369
332
  entryPath,
370
- baseDirectory: path.posix.dirname(entryPath) === '.' ? '' : path.posix.dirname(entryPath),
333
+ baseDirectory: path.posix.dirname(entryPath) === "." ? "" : path.posix.dirname(entryPath)
371
334
  });
372
335
  res.status(201).json({
373
336
  preview: {
374
337
  id: session.id,
375
338
  kind: session.kind,
376
- expiresAt: session.expiresAt,
377
- },
339
+ expiresAt: session.expiresAt
340
+ }
378
341
  });
379
342
  } catch (error) {
380
343
  sendWorkspaceFileError(res, error);
381
344
  }
382
345
  });
383
-
384
- router.get('/previews/:sessionId/:scope/*', async (req, res) => {
346
+ router.get("/previews/:sessionId/:scope/*", async (req, res) => {
385
347
  try {
386
348
  const session = previewSessions.get(req.params.sessionId);
387
- if (!session) throw new WorkspaceFileError('preview session not found or expired', 404);
349
+ if (!session) throw new import_workspace_file_service.WorkspaceFileError("preview session not found or expired", 404);
388
350
  const scope = req.params.scope;
389
- if (scope !== 'base' && scope !== 'root') {
390
- throw new WorkspaceFileError('preview scope is invalid', 400);
351
+ if (scope !== "base" && scope !== "root") {
352
+ throw new import_workspace_file_service.WorkspaceFileError("preview scope is invalid", 400);
391
353
  }
392
- const assetPath = normalizePreviewAssetPath(req.params[0] || '');
393
- const resourcePath = scope === 'base'
394
- ? path.posix.join(session.baseDirectory, assetPath)
395
- : assetPath;
396
- if (!resourcePath) throw new WorkspaceFileError('preview resource path is required', 400);
397
-
354
+ const assetPath = normalizePreviewAssetPath(req.params[0] || "");
355
+ const resourcePath = scope === "base" ? path.posix.join(session.baseDirectory, assetPath) : assetPath;
356
+ if (!resourcePath) throw new import_workspace_file_service.WorkspaceFileError("preview resource path is required", 400);
398
357
  const absoluteTarget = realPathIfPresent(path.resolve(session.workspaceRoot, resourcePath));
399
358
  if (!isSameOrDescendantPath(session.authorizedRoot, absoluteTarget)) {
400
- throw new WorkspaceFileError('preview path must stay inside the authorized root', 403);
359
+ throw new import_workspace_file_service.WorkspaceFileError("preview path must stay inside the authorized root", 403);
401
360
  }
402
-
403
361
  const file = await fileService.readResourceFile(session.workspaceRoot, resourcePath, {
404
- allowedExternalRoots: [],
362
+ allowedExternalRoots: []
405
363
  });
406
364
  const isHtml = /\.html?$/i.test(file.path);
407
- const body = isHtml
408
- ? Buffer.from(rewritePreviewHtmlRootReferences(
409
- file.buffer.toString('utf8'),
410
- `${req.baseUrl}/previews/${encodeURIComponent(session.id)}/root/`,
411
- ))
412
- : file.buffer;
413
- res
414
- .status(200)
415
- .type(path.extname(file.path) || 'application/octet-stream')
416
- .set('Cache-Control', 'no-store')
417
- .set('X-Content-Type-Options', 'nosniff')
418
- .set('Content-Length', String(body.length));
419
- if (isHtml) res.set('Content-Security-Policy', previewContentSecurityPolicy());
365
+ const body = isHtml ? Buffer.from(rewritePreviewHtmlRootReferences(
366
+ file.buffer.toString("utf8"),
367
+ `${req.baseUrl}/previews/${encodeURIComponent(session.id)}/root/`
368
+ )) : file.buffer;
369
+ res.status(200).type(path.extname(file.path) || "application/octet-stream").set("Cache-Control", "no-store").set("X-Content-Type-Options", "nosniff").set("Content-Length", String(body.length));
370
+ if (isHtml) res.set("Content-Security-Policy", previewContentSecurityPolicy());
420
371
  res.send(body);
421
372
  } catch (error) {
422
373
  sendWorkspaceFileError(res, error);
423
374
  }
424
375
  });
425
-
426
- router.delete('/previews/:sessionId', (req, res) => {
376
+ router.delete("/previews/:sessionId", (req, res) => {
427
377
  const deleted = previewSessions.delete(req.params.sessionId);
428
378
  res.status(deleted ? 204 : 404).end();
429
379
  });
430
-
431
- router.put('/file', async (req, res) => {
380
+ router.put("/file", async (req, res) => {
432
381
  try {
433
382
  const body = req.body || {};
434
383
  const rootRef = workspaceRef(body);
435
384
  assertWritableWorkspaceAgent(rootRef);
436
- const { root, rootId } = resolveRequestRoot(body);
437
- const file = await fileService.writeFile(root, body.path || '', body.content, {
385
+ const { kind, root, rootId } = resolveRequestRoot(body);
386
+ if (kind === "agent-home") await fs.promises.mkdir(root, { recursive: true });
387
+ const file = await fileService.writeFile(root, body.path || "", body.content, {
438
388
  baseSha1: body.baseSha1,
439
- overwrite: body.overwrite === true,
389
+ overwrite: body.overwrite === true
440
390
  });
441
391
  res.json({ rootId, root, file });
442
392
  } catch (error) {
443
393
  sendWorkspaceFileError(res, error);
444
394
  }
445
395
  });
446
-
447
- router.post('/move', async (req, res) => {
396
+ router.post("/move", async (req, res) => {
448
397
  try {
449
398
  const body = req.body || {};
450
399
  const rootRef = workspaceRef(body);
451
400
  assertWritableWorkspaceAgent(rootRef);
452
401
  const { root, rootId } = resolveRequestRoot(body);
453
- const move = await fileService.moveEntry(root, body.sourcePath || '', body.targetDirectory || '', {
454
- expectedVersion: body.expectedVersion,
402
+ const move = await fileService.moveEntry(root, body.sourcePath || "", body.targetDirectory || "", {
403
+ expectedVersion: body.expectedVersion
455
404
  });
456
405
  res.json({ rootId, root, move });
457
406
  } catch (error) {
458
407
  sendWorkspaceFileError(res, error);
459
408
  }
460
409
  });
461
-
462
- router.post('/entry', async (req, res) => {
410
+ router.post("/entry", async (req, res) => {
463
411
  try {
464
412
  const body = req.body || {};
465
413
  const rootRef = workspaceRef(body);
466
414
  assertWritableWorkspaceAgent(rootRef);
467
415
  const { root, rootId } = resolveRequestRoot(body);
468
- const created = await fileService.createEntry(root, body.parentPath || '', body.name || '', body.entryType || 'file', body.content || '');
416
+ const created = await fileService.createEntry(root, body.parentPath || "", body.name || "", body.entryType || "file", body.content || "");
469
417
  res.status(201).json({ rootId, root, ...created });
470
418
  } catch (error) {
471
419
  sendWorkspaceFileError(res, error);
472
420
  }
473
421
  });
474
-
475
- router.patch('/entry', async (req, res) => {
422
+ router.patch("/entry", async (req, res) => {
476
423
  try {
477
424
  const body = req.body || {};
478
425
  const rootRef = workspaceRef(body);
479
426
  assertWritableWorkspaceAgent(rootRef);
480
427
  const { root, rootId } = resolveRequestRoot(body);
481
- const move = await fileService.renameEntry(root, body.path || '', body.name || '', {
482
- expectedVersion: body.expectedVersion,
428
+ const move = await fileService.renameEntry(root, body.path || "", body.name || "", {
429
+ expectedVersion: body.expectedVersion
483
430
  });
484
431
  res.json({ rootId, root, move });
485
432
  } catch (error) {
486
433
  sendWorkspaceFileError(res, error);
487
434
  }
488
435
  });
489
-
490
- router.delete('/entry', async (req, res) => {
436
+ router.delete("/entry", async (req, res) => {
491
437
  try {
492
438
  const body = req.body || {};
493
439
  const rootRef = workspaceRef(body) || workspaceRef(req.query);
494
- const targetPath = body.path || req.query.path || '';
440
+ const targetPath = body.path || req.query.path || "";
495
441
  assertWritableWorkspaceAgent(rootRef);
496
442
  const workspaceRoot = rootRegistry.resolve(rootRef);
497
443
  const { canonicalPath: root, rootId } = workspaceRoot;
498
444
  const deleted = await fileService.deleteEntry(root, targetPath, {
499
- expectedVersion: body.expectedVersion || req.query.expectedVersion,
445
+ expectedVersion: body.expectedVersion || req.query.expectedVersion
500
446
  });
501
447
  res.json({ rootId, root, deleted });
502
448
  } catch (error) {
503
449
  sendWorkspaceFileError(res, error);
504
450
  }
505
451
  });
506
-
507
- router.get('/search', async (req, res) => {
452
+ router.get("/search", async (req, res) => {
508
453
  try {
509
454
  const rootRef = workspaceRef(req.query);
510
455
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
511
- assertGlobalWorkspacePathAllowed(agentManager, req.query.path || '');
456
+ assertGlobalWorkspacePathAllowed(agentManager, req.query.path || "");
512
457
  }
513
458
  const { root, rootId } = resolveRequestRoot(req.query);
514
459
  const settings = agentManager?.configManager?.getSettings?.() || {};
515
- const results = await fileService.search(root, req.query.q || '', {
516
- includeIgnored: req.query.includeIgnored === 'true',
517
- path: req.query.path || '',
460
+ const results = await fileService.search(root, req.query.q || "", {
461
+ includeIgnored: req.query.includeIgnored === "true",
462
+ path: req.query.path || "",
518
463
  limit: req.query.limit,
519
- timeoutMs: settings.searchTimeoutMs,
464
+ timeoutMs: settings.searchTimeoutMs
520
465
  });
521
466
  res.json({ rootId, root, results });
522
467
  } catch (error) {
523
468
  sendWorkspaceFileError(res, error);
524
469
  }
525
470
  });
526
-
527
- router.get('/diff', async (req, res) => {
471
+ router.get("/diff", async (req, res) => {
528
472
  try {
529
473
  const rootRef = workspaceRef(req.query);
530
474
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
531
- assertGlobalWorkspacePathAllowed(agentManager, req.query.path || '', { allowMissing: true });
475
+ assertGlobalWorkspacePathAllowed(agentManager, req.query.path || "", { allowMissing: true });
532
476
  }
533
477
  const { root, rootId } = resolveRequestRoot(req.query);
534
- const diff = await fileService.diff(root, req.query.path || '');
478
+ const diff = await fileService.diff(root, req.query.path || "");
535
479
  res.json({ rootId, root, diff });
536
480
  } catch (error) {
537
481
  sendWorkspaceFileError(res, error);
538
482
  }
539
483
  });
540
-
541
- router.get('/changes', async (req, res) => {
484
+ router.get("/changes", async (req, res) => {
542
485
  try {
543
486
  const rootRef = workspaceRef(req.query);
544
487
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
545
- throw new WorkspaceFileError('global files do not support workspace changes', 403);
488
+ throw new import_workspace_file_service.WorkspaceFileError("global files do not support workspace changes", 403);
546
489
  }
547
490
  const { root, rootId } = resolveRequestRoot(req.query);
548
491
  const changes = await fileService.changes(root, {
549
- limit: req.query.limit,
492
+ limit: req.query.limit
550
493
  });
551
494
  res.json({ rootId, root, changes });
552
495
  } catch (error) {
553
496
  sendWorkspaceFileError(res, error);
554
497
  }
555
498
  });
556
-
557
- router.get('/branch', async (req, res) => {
499
+ router.get("/branch", async (req, res) => {
558
500
  try {
559
501
  const rootRef = workspaceRef(req.query);
560
502
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
561
- throw new WorkspaceFileError('global files do not support git branches', 403);
503
+ throw new import_workspace_file_service.WorkspaceFileError("global files do not support git branches", 403);
562
504
  }
563
505
  const { root, rootId } = resolveRequestRoot(req.query);
564
506
  const branch = await fileService.gitBranch(root);
@@ -567,62 +509,57 @@ function createWorkspaceFileRouter(agentManager, fileService, options = {}) {
567
509
  sendWorkspaceFileError(res, error);
568
510
  }
569
511
  });
570
-
571
- router.get('/worktrees', async (req, res) => {
512
+ router.get("/worktrees", async (req, res) => {
572
513
  try {
573
514
  const rootRef = workspaceRef(req.query);
574
515
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
575
- throw new WorkspaceFileError('global files do not support git worktrees', 403);
516
+ throw new import_workspace_file_service.WorkspaceFileError("global files do not support git worktrees", 403);
576
517
  }
577
518
  const { root, rootId } = resolveRequestRoot(req.query);
578
- const info = await inspectGitWorktree(root, { cacheMs: 0 });
519
+ const info = await (0, import_git_worktree_info.inspectGitWorktree)(root, { cacheMs: 0 });
579
520
  res.json({
580
521
  rootId,
581
522
  root,
582
- worktrees: info
583
- ? {
584
- isGitRepo: true,
585
- commonDir: info.commonDir,
586
- currentWorkspace: info.workspace,
587
- mainWorkspace: info.mainWorkspace,
588
- items: info.worktrees,
589
- }
590
- : {
591
- isGitRepo: false,
592
- commonDir: '',
593
- currentWorkspace: root,
594
- mainWorkspace: '',
595
- items: [],
596
- },
523
+ worktrees: info ? {
524
+ isGitRepo: true,
525
+ commonDir: info.commonDir,
526
+ currentWorkspace: info.workspace,
527
+ mainWorkspace: info.mainWorkspace,
528
+ items: info.worktrees
529
+ } : {
530
+ isGitRepo: false,
531
+ commonDir: "",
532
+ currentWorkspace: root,
533
+ mainWorkspace: "",
534
+ items: []
535
+ }
597
536
  });
598
537
  } catch (error) {
599
538
  sendWorkspaceFileError(res, error);
600
539
  }
601
540
  });
602
-
603
- router.get('/history', async (req, res) => {
541
+ router.get("/history", async (req, res) => {
604
542
  try {
605
543
  const rootRef = workspaceRef(req.query);
606
544
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
607
- throw new WorkspaceFileError('global files do not support git history', 403);
545
+ throw new import_workspace_file_service.WorkspaceFileError("global files do not support git history", 403);
608
546
  }
609
547
  const { root, rootId } = resolveRequestRoot(req.query);
610
548
  const history = await fileService.gitHistory(root, {
611
549
  limit: req.query.limit,
612
550
  skip: req.query.skip,
613
- scope: req.query.scope,
551
+ scope: req.query.scope
614
552
  });
615
553
  res.json({ rootId, root, history });
616
554
  } catch (error) {
617
555
  sendWorkspaceFileError(res, error);
618
556
  }
619
557
  });
620
-
621
- router.get('/history/changes', async (req, res) => {
558
+ router.get("/history/changes", async (req, res) => {
622
559
  try {
623
560
  const rootRef = workspaceRef(req.query);
624
561
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
625
- throw new WorkspaceFileError('global files do not support git history', 403);
562
+ throw new import_workspace_file_service.WorkspaceFileError("global files do not support git history", 403);
626
563
  }
627
564
  const { root, rootId } = resolveRequestRoot(req.query);
628
565
  const changes = await fileService.gitHistoryChanges(
@@ -636,50 +573,47 @@ function createWorkspaceFileRouter(agentManager, fileService, options = {}) {
636
573
  sendWorkspaceFileError(res, error);
637
574
  }
638
575
  });
639
-
640
- router.get('/line-changes', async (req, res) => {
576
+ router.get("/line-changes", async (req, res) => {
641
577
  try {
642
578
  const rootRef = workspaceRef(req.query);
643
579
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
644
- assertGlobalWorkspacePathAllowed(agentManager, req.query.path || '');
580
+ assertGlobalWorkspacePathAllowed(agentManager, req.query.path || "");
645
581
  }
646
582
  const { root, rootId } = resolveRequestRoot(req.query);
647
583
  const changes = await fileService.lineChanges(
648
584
  root,
649
- req.query.path || '',
585
+ req.query.path || "",
650
586
  req.query.lineNumber,
651
- req.query.mode || 'working'
587
+ req.query.mode || "working"
652
588
  );
653
589
  res.json({ rootId, root, changes });
654
590
  } catch (error) {
655
591
  sendWorkspaceFileError(res, error);
656
592
  }
657
593
  });
658
-
659
- router.get('/blame', async (req, res) => {
594
+ router.get("/blame", async (req, res) => {
660
595
  try {
661
596
  const rootRef = workspaceRef(req.query);
662
597
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
663
- assertGlobalWorkspacePathAllowed(agentManager, req.query.path || '');
598
+ assertGlobalWorkspacePathAllowed(agentManager, req.query.path || "");
664
599
  }
665
600
  const { root, rootId } = resolveRequestRoot(req.query);
666
- const blame = await fileService.blame(root, req.query.path || '');
601
+ const blame = await fileService.blame(root, req.query.path || "");
667
602
  res.json({ rootId, root, blame });
668
603
  } catch (error) {
669
604
  sendWorkspaceFileError(res, error);
670
605
  }
671
606
  });
672
-
673
- router.get('/blame-capability', async (req, res) => {
607
+ router.get("/blame-capability", async (req, res) => {
674
608
  try {
675
609
  const rootRef = workspaceRef(req.query);
676
610
  if (isGlobalWorkspaceFilesAgentId(rootRef)) {
677
- assertGlobalWorkspacePathAllowed(agentManager, req.query.path || '');
611
+ assertGlobalWorkspacePathAllowed(agentManager, req.query.path || "");
678
612
  }
679
613
  const { root, rootId } = resolveRequestRoot(req.query);
680
614
  const capability = await fileService.blameCapability(
681
615
  root,
682
- req.query.path || '',
616
+ req.query.path || "",
683
617
  readOptionsForAgent(agentManager, rootRef)
684
618
  );
685
619
  res.json({ rootId, root, capability });
@@ -687,22 +621,19 @@ function createWorkspaceFileRouter(agentManager, fileService, options = {}) {
687
621
  sendWorkspaceFileError(res, error);
688
622
  }
689
623
  });
690
-
691
624
  return router;
692
625
  }
693
-
694
- module.exports = {
626
+ // Annotate the CommonJS export names for ESM import in node:
627
+ 0 && (module.exports = {
695
628
  GLOBAL_WORKSPACE_FILES_AGENT_ID,
696
629
  GLOBAL_WORKSPACE_FILES_ROOT,
697
630
  PROJECT_FILES_WORKSPACE_PREFIX,
698
- PROJECT_FILES_AGENT_PREFIX: PROJECT_FILES_WORKSPACE_PREFIX,
699
- assertGlobalWorkspacePathAllowed,
700
631
  assertExactExternalFileReadable,
632
+ assertGlobalWorkspacePathAllowed,
701
633
  createWorkspaceFileRouter,
702
634
  globalWorkspaceAllowedRoots,
703
635
  isGlobalWorkspaceFilesAgentId,
704
636
  projectWorkspaceFromFilesId,
705
- projectWorkspaceFromFilesAgentId: projectWorkspaceFromFilesId,
706
637
  resolveWorkspaceRoot,
707
- sendWorkspaceFileError,
708
- };
638
+ sendWorkspaceFileError
639
+ });