vibedoc 1.5.0 → 1.6.0

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 (405) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +4 -4
  3. package/.next/prerender-manifest.json +11 -11
  4. package/.next/required-server-files.json +0 -4
  5. package/.next/server/app/(app)/activity/page/build-manifest.json +1 -1
  6. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/board/page/build-manifest.json +1 -1
  9. package/.next/server/app/(app)/board/page.js.nft.json +1 -1
  10. package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/(app)/docs/page/build-manifest.json +1 -1
  12. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/explorer/page/build-manifest.json +1 -1
  15. package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
  16. package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/(app)/memory/page/build-manifest.json +1 -1
  18. package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
  19. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  20. package/.next/server/app/(app)/roadmap/page/build-manifest.json +1 -1
  21. package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
  22. package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
  23. package/.next/server/app/(app)/settings/page/build-manifest.json +1 -1
  24. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  25. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/(app)/setup/page/build-manifest.json +1 -1
  27. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/_global-error/page/build-manifest.json +1 -1
  30. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  31. package/.next/server/app/_global-error.html +1 -1
  32. package/.next/server/app/_global-error.rsc +1 -1
  33. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  34. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  35. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  36. package/.next/server/app/_not-found/page/build-manifest.json +1 -1
  37. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  38. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/_not-found.html +1 -1
  40. package/.next/server/app/_not-found.rsc +2 -2
  41. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  42. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  43. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  44. package/.next/server/app/activity.html +1 -1
  45. package/.next/server/app/activity.rsc +23 -22
  46. package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +5 -5
  47. package/.next/server/app/activity.segments/_full.segment.rsc +23 -22
  48. package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
  49. package/.next/server/app/api/activity/route.js +3 -3
  50. package/.next/server/app/api/activity/route.js.nft.json +1 -1
  51. package/.next/server/app/api/backlinks/route.js +3 -3
  52. package/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  53. package/.next/server/app/api/chat/route.js +3 -3
  54. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  55. package/.next/server/app/api/context/route.js +3 -3
  56. package/.next/server/app/api/context/route.js.nft.json +1 -1
  57. package/.next/server/app/api/decisions/route.js +3 -3
  58. package/.next/server/app/api/decisions/route.js.nft.json +1 -1
  59. package/.next/server/app/api/docs/route.js +3 -3
  60. package/.next/server/app/api/docs/route.js.nft.json +1 -1
  61. package/.next/server/app/api/events/route.js.nft.json +1 -1
  62. package/.next/server/app/api/explorer/route.js +4 -3
  63. package/.next/server/app/api/explorer/route.js.nft.json +1 -1
  64. package/.next/server/app/api/mcp/route.js +4 -4
  65. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  66. package/.next/server/app/api/memory/route.js +3 -3
  67. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  68. package/.next/server/app/api/plan/apply/route.js +4 -4
  69. package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
  70. package/.next/server/app/api/projects/route.js +3 -3
  71. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  72. package/.next/server/app/api/registry/route.js +3 -3
  73. package/.next/server/app/api/registry/route.js.nft.json +1 -1
  74. package/.next/server/app/api/roadmap/create/route.js +4 -4
  75. package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
  76. package/.next/server/app/api/roadmap/delete/route.js +4 -4
  77. package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
  78. package/.next/server/app/api/roadmap/generate/route.js +4 -4
  79. package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
  80. package/.next/server/app/api/roadmap/layout/route.js +4 -4
  81. package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
  82. package/.next/server/app/api/roadmap/route.js +3 -3
  83. package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
  84. package/.next/server/app/api/roadmap/update/route.js +4 -4
  85. package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
  86. package/.next/server/app/api/sessions/route.js +3 -3
  87. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  88. package/.next/server/app/api/settings/route.js +4 -4
  89. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  90. package/.next/server/app/api/setup/generate/route.js +2 -2
  91. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  92. package/.next/server/app/api/setup/write/route.js +3 -3
  93. package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
  94. package/.next/server/app/api/summary/route.js +3 -3
  95. package/.next/server/app/api/summary/route.js.nft.json +1 -1
  96. package/.next/server/app/api/tasks/create/route.js +3 -3
  97. package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
  98. package/.next/server/app/api/tasks/route.js +3 -3
  99. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  100. package/.next/server/app/board.html +1 -1
  101. package/.next/server/app/board.rsc +23 -21
  102. package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +5 -5
  103. package/.next/server/app/board.segments/_full.segment.rsc +23 -21
  104. package/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  105. package/.next/server/app/docs.html +1 -1
  106. package/.next/server/app/docs.rsc +27 -25
  107. package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +9 -10
  108. package/.next/server/app/docs.segments/_full.segment.rsc +27 -25
  109. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  110. package/.next/server/app/explorer.html +1 -1
  111. package/.next/server/app/explorer.rsc +23 -22
  112. package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +5 -5
  113. package/.next/server/app/explorer.segments/_full.segment.rsc +23 -22
  114. package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
  115. package/.next/server/app/index.html +1 -1
  116. package/.next/server/app/index.rsc +2 -2
  117. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  118. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  119. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  120. package/.next/server/app/memory.html +1 -1
  121. package/.next/server/app/memory.rsc +23 -22
  122. package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +5 -5
  123. package/.next/server/app/memory.segments/_full.segment.rsc +23 -22
  124. package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  125. package/.next/server/app/page/build-manifest.json +1 -1
  126. package/.next/server/app/page.js.nft.json +1 -1
  127. package/.next/server/app/page_client-reference-manifest.js +1 -1
  128. package/.next/server/app/roadmap.html +1 -1
  129. package/.next/server/app/roadmap.rsc +26 -25
  130. package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +11 -9
  131. package/.next/server/app/roadmap.segments/_full.segment.rsc +26 -25
  132. package/.next/server/app/roadmap.segments/_tree.segment.rsc +2 -2
  133. package/.next/server/app/settings.html +1 -1
  134. package/.next/server/app/settings.rsc +23 -22
  135. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +5 -5
  136. package/.next/server/app/settings.segments/_full.segment.rsc +23 -22
  137. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  138. package/.next/server/app/setup.html +1 -1
  139. package/.next/server/app/setup.rsc +23 -21
  140. package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +5 -5
  141. package/.next/server/app/setup.segments/_full.segment.rsc +23 -21
  142. package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  143. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-q4v32._.js → 11mp_@anthropic-ai_sdk_0-5bkpj._.js} +2 -2
  144. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05hfnhc._.js → 11mp_@anthropic-ai_sdk_00psb_y._.js} +2 -2
  145. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05dmim9._.js → 11mp_@anthropic-ai_sdk_01l5h3i._.js} +2 -2
  146. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07xtb0h._.js → 11mp_@anthropic-ai_sdk_072r2bd._.js} +2 -2
  147. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0am8bw2._.js +3 -0
  148. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0enefn6._.js +3 -0
  149. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0k3n_5f._.js +3 -0
  150. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lcfjm4._.js +3 -0
  151. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lfx9av._.js +3 -0
  152. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qau3qw._.js +3 -0
  153. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r1pmvm._.js +3 -0
  154. package/.next/server/chunks/11mp_@anthropic-ai_sdk_11t-z2t._.js +3 -0
  155. package/.next/server/chunks/11mp_@anthropic-ai_sdk_15hyn79._.js +3 -0
  156. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_qk07x._.js +3 -0
  157. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b2929e._.js +3 -0
  158. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1e72c89._.js +3 -0
  159. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1eq7asn._.js +3 -0
  160. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fhdojs._.js +3 -0
  161. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lh_vwq._.js +3 -0
  162. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ludf-o._.js +3 -0
  163. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1m3luz3._.js +3 -0
  164. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x1iz3d._.js +3 -0
  165. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xsmwlh._.js +3 -0
  166. package/.next/server/chunks/11mp_@anthropic-ai_sdk_202spah._.js +3 -0
  167. package/.next/server/chunks/11mp_@anthropic-ai_sdk_215hw9u._.js +3 -0
  168. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n-i0pd._.js +3 -0
  169. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13pos4j._.js +3 -0
  170. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_17b4pqr._.js +3 -0
  171. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1bkcmom._.js +3 -0
  172. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hlj_3l._.js +3 -0
  173. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ip-sor._.js +3 -0
  174. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1pex5o1._.js +3 -0
  175. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1s8lc8_._.js +3 -0
  176. package/.next/server/chunks/[root-of-the-server]__03upgv8._.js +3 -0
  177. package/.next/server/chunks/[root-of-the-server]__03upgv8._.js.map +1 -0
  178. package/.next/server/chunks/[root-of-the-server]__05l6129._.js +3 -0
  179. package/.next/server/chunks/{[root-of-the-server]__0u2rl0m._.js.map → [root-of-the-server]__05l6129._.js.map} +1 -1
  180. package/.next/server/chunks/[root-of-the-server]__06zf_sh._.js +3 -0
  181. package/.next/server/chunks/{[root-of-the-server]__01yk8oi._.js.map → [root-of-the-server]__06zf_sh._.js.map} +1 -1
  182. package/.next/server/chunks/[root-of-the-server]__093hlkh._.js +3 -0
  183. package/.next/server/chunks/{[root-of-the-server]__1337jpl._.js.map → [root-of-the-server]__093hlkh._.js.map} +1 -1
  184. package/.next/server/chunks/[root-of-the-server]__0aynzrb._.js +3 -0
  185. package/.next/server/chunks/{[root-of-the-server]__0b49g9i._.js.map → [root-of-the-server]__0aynzrb._.js.map} +1 -1
  186. package/.next/server/chunks/[root-of-the-server]__0e59y5j._.js +3 -0
  187. package/.next/server/chunks/[root-of-the-server]__0eqd-tw._.js +3 -0
  188. package/.next/server/chunks/{[root-of-the-server]__0yd6wlm._.js.map → [root-of-the-server]__0eqd-tw._.js.map} +1 -1
  189. package/.next/server/chunks/[root-of-the-server]__0nfvvy9._.js +3 -0
  190. package/.next/server/chunks/{[root-of-the-server]__0j-xjbf._.js.map → [root-of-the-server]__0nfvvy9._.js.map} +1 -1
  191. package/.next/server/chunks/{[root-of-the-server]__03t5uqz._.js → [root-of-the-server]__0qac4k0._.js} +2 -2
  192. package/.next/server/chunks/{[root-of-the-server]__03t5uqz._.js.map → [root-of-the-server]__0qac4k0._.js.map} +1 -1
  193. package/.next/server/chunks/[root-of-the-server]__106gpvh._.js +3 -0
  194. package/.next/server/chunks/{[root-of-the-server]__0kaegk7._.js.map → [root-of-the-server]__106gpvh._.js.map} +1 -1
  195. package/.next/server/chunks/[root-of-the-server]__11s-8eg._.js +3 -0
  196. package/.next/server/chunks/{[root-of-the-server]__02k1gkk._.js.map → [root-of-the-server]__11s-8eg._.js.map} +1 -1
  197. package/.next/server/chunks/[root-of-the-server]__11s76m8._.js +3 -0
  198. package/.next/server/chunks/[root-of-the-server]__11s76m8._.js.map +1 -0
  199. package/.next/server/chunks/[root-of-the-server]__142icjb._.js +3 -0
  200. package/.next/server/chunks/{[root-of-the-server]__1yow6hw._.js.map → [root-of-the-server]__142icjb._.js.map} +1 -1
  201. package/.next/server/chunks/[root-of-the-server]__14aeqoi._.js +3 -0
  202. package/.next/server/chunks/[root-of-the-server]__14aeqoi._.js.map +1 -0
  203. package/.next/server/chunks/[root-of-the-server]__1613hjb._.js +88 -0
  204. package/.next/server/chunks/[root-of-the-server]__1613hjb._.js.map +1 -0
  205. package/.next/server/chunks/[root-of-the-server]__169hmq_._.js +10 -0
  206. package/.next/server/chunks/{[root-of-the-server]__0d4jkve._.js.map → [root-of-the-server]__169hmq_._.js.map} +1 -1
  207. package/.next/server/chunks/[root-of-the-server]__17p0rkn._.js +3 -0
  208. package/.next/server/chunks/{[root-of-the-server]__0v8x64y._.js.map → [root-of-the-server]__17p0rkn._.js.map} +1 -1
  209. package/.next/server/chunks/[root-of-the-server]__17xb02p._.js +3 -0
  210. package/.next/server/chunks/{[root-of-the-server]__0zybyuh._.js.map → [root-of-the-server]__17xb02p._.js.map} +1 -1
  211. package/.next/server/chunks/[root-of-the-server]__18kxo4a._.js +3 -0
  212. package/.next/server/chunks/{[root-of-the-server]__1znbm9i._.js.map → [root-of-the-server]__18kxo4a._.js.map} +1 -1
  213. package/.next/server/chunks/[root-of-the-server]__1c55c2q._.js +3 -0
  214. package/.next/server/chunks/{[root-of-the-server]__0l3voov._.js.map → [root-of-the-server]__1c55c2q._.js.map} +1 -1
  215. package/.next/server/chunks/[root-of-the-server]__1j0rrps._.js +3 -0
  216. package/.next/server/chunks/{[root-of-the-server]__0635d15._.js.map → [root-of-the-server]__1j0rrps._.js.map} +1 -1
  217. package/.next/server/chunks/[root-of-the-server]__1lj_2cv._.js +3 -0
  218. package/.next/server/chunks/{[root-of-the-server]__0qsx33x._.js.map → [root-of-the-server]__1lj_2cv._.js.map} +1 -1
  219. package/.next/server/chunks/[root-of-the-server]__1o4a-4j._.js +3 -0
  220. package/.next/server/chunks/{[root-of-the-server]__1vaownn._.js.map → [root-of-the-server]__1o4a-4j._.js.map} +1 -1
  221. package/.next/server/chunks/[root-of-the-server]__1q4ahvz._.js +3 -0
  222. package/.next/server/chunks/{[root-of-the-server]__1hsybai._.js.map → [root-of-the-server]__1q4ahvz._.js.map} +1 -1
  223. package/.next/server/chunks/{[root-of-the-server]__1337jpl._.js → [root-of-the-server]__1u_q61h._.js} +2 -2
  224. package/.next/server/chunks/{[root-of-the-server]__0kkefbq._.js.map → [root-of-the-server]__1u_q61h._.js.map} +1 -1
  225. package/.next/server/chunks/[root-of-the-server]__1wr0m-s._.js +3 -0
  226. package/.next/server/chunks/{[root-of-the-server]__0-rjzmv._.js.map → [root-of-the-server]__1wr0m-s._.js.map} +1 -1
  227. package/.next/server/chunks/[root-of-the-server]__1xb0fmp._.js +3 -0
  228. package/.next/server/chunks/{[root-of-the-server]__15suc44._.js.map → [root-of-the-server]__1xb0fmp._.js.map} +1 -1
  229. package/.next/server/chunks/{[root-of-the-server]__1hsybai._.js → [root-of-the-server]__1y-tt29._.js} +2 -2
  230. package/.next/server/chunks/{[root-of-the-server]__0af0ma6._.js.map → [root-of-the-server]__1y-tt29._.js.map} +1 -1
  231. package/.next/server/chunks/[root-of-the-server]__1y3u5ud._.js +3 -0
  232. package/.next/server/chunks/{[root-of-the-server]__0xqsv4h._.js.map → [root-of-the-server]__1y3u5ud._.js.map} +1 -1
  233. package/.next/server/chunks/[turbopack]_runtime.js +0 -132
  234. package/.next/server/chunks/[turbopack]_runtime.js.map +4 -5
  235. package/.next/server/chunks/_04byth9._.js +34 -0
  236. package/.next/server/chunks/_04byth9._.js.map +1 -0
  237. package/.next/server/chunks/_1au4syj._.js +1 -1
  238. package/.next/server/chunks/_1au4syj._.js.map +1 -1
  239. package/.next/server/chunks/_1b5fqxy._.js +3 -0
  240. package/.next/server/chunks/_1b5fqxy._.js.map +1 -0
  241. package/.next/server/chunks/_1si7nb_._.js +8 -8
  242. package/.next/server/chunks/_1si7nb_._.js.map +1 -1
  243. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_08ca0b4._.js +3 -0
  244. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_08ca0b4._.js.map +1 -0
  245. package/.next/server/chunks/ssr/[turbopack]_runtime.js +0 -132
  246. package/.next/server/chunks/ssr/[turbopack]_runtime.js.map +4 -5
  247. package/.next/server/chunks/ssr/_01suk2m._.js +3 -0
  248. package/.next/server/chunks/ssr/_01suk2m._.js.map +1 -0
  249. package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
  250. package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
  251. package/.next/server/chunks/ssr/_0qyglif._.js +2 -2
  252. package/.next/server/chunks/ssr/_0qyglif._.js.map +1 -1
  253. package/.next/server/chunks/ssr/_0skuoxv._.js +3 -1
  254. package/.next/server/chunks/ssr/_0skuoxv._.js.map +1 -1
  255. package/.next/server/chunks/ssr/{_1alz6n5._.js → _14i_6yb._.js} +2 -2
  256. package/.next/server/chunks/ssr/_14i_6yb._.js.map +1 -0
  257. package/.next/server/chunks/ssr/{_1s08bv8._.js → _1cbhuz4._.js} +2 -2
  258. package/.next/server/chunks/ssr/_1cbhuz4._.js.map +1 -0
  259. package/.next/server/chunks/ssr/_1ewk_mn._.js +3 -0
  260. package/.next/server/chunks/ssr/_1ewk_mn._.js.map +1 -0
  261. package/.next/server/chunks/ssr/node_modules__pnpm_1dcmsrg._.js +3 -0
  262. package/.next/server/chunks/ssr/node_modules__pnpm_1dcmsrg._.js.map +1 -0
  263. package/.next/server/chunks/ssr/src_components_008q3v8._.js +3 -0
  264. package/.next/server/chunks/ssr/src_components_008q3v8._.js.map +1 -0
  265. package/.next/server/middleware-build-manifest.js +4 -4
  266. package/.next/server/pages/404.html +1 -1
  267. package/.next/server/pages/500.html +1 -1
  268. package/.next/server/server-reference-manifest.js +1 -1
  269. package/.next/server/server-reference-manifest.json +1 -1
  270. package/.next/static/chunks/0eggcu0ovk8sd.js +68 -0
  271. package/.next/static/chunks/{145g20k60txhc.js → 0iva6rdtfqpbz.js} +1 -1
  272. package/.next/static/chunks/0qm101bdsxdyh.css +10 -0
  273. package/.next/static/chunks/0wg9n5zb8mo2p.js +1 -0
  274. package/.next/static/chunks/{2-faknwci76np.js → 0wjw1laqwg-cr.js} +1 -1
  275. package/.next/static/chunks/0z_y7el6m76yk.js +1 -0
  276. package/.next/static/chunks/1-ekntoveuxzd.js +4 -0
  277. package/.next/static/chunks/1r7z33e9jk3vp.js +1 -0
  278. package/.next/static/chunks/{2f7yju8yks2m9.js → 1xyepk9227yej.js} +6 -73
  279. package/.next/static/chunks/{1lfr973ckp6by.js → 1ytqu-ra-fylk.js} +2 -2
  280. package/.next/static/chunks/3dlnlsyyysw5m.js +1 -0
  281. package/.next/static/chunks/{0aiy7o5bsiixt.js → 3kkg030rcpz7l.js} +1 -1
  282. package/.next/static/chunks/3pf_4ye6ju8gt.js +1 -0
  283. package/.next/static/chunks/turbopack-2qsbj8zx38t0j.js +1 -0
  284. package/README.md +2 -0
  285. package/next.config.js +4 -7
  286. package/package.json +1 -1
  287. package/skills/epic-breakdown/SKILL.md +11 -1
  288. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0fw_tls._.js +0 -3
  289. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0q6tm_c._.js +0 -3
  290. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qyh79u._.js +0 -3
  291. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0rfkb6q._.js +0 -3
  292. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0x1yqfb._.js +0 -3
  293. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yt3ewg._.js +0 -3
  294. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-kttjy._.js +0 -3
  295. package/.next/server/chunks/11mp_@anthropic-ai_sdk_12h8gza._.js +0 -3
  296. package/.next/server/chunks/11mp_@anthropic-ai_sdk_18c2w1i._.js +0 -3
  297. package/.next/server/chunks/11mp_@anthropic-ai_sdk_18fnlqa._.js +0 -3
  298. package/.next/server/chunks/11mp_@anthropic-ai_sdk_19on0yg._.js +0 -3
  299. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1alh48t._.js +0 -3
  300. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ck56ir._.js +0 -3
  301. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1daia98._.js +0 -3
  302. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1f6snvo._.js +0 -3
  303. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1p6s626._.js +0 -3
  304. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ps921l._.js +0 -3
  305. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rqxfdf._.js +0 -3
  306. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1s7maye._.js +0 -3
  307. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vuy6_x._.js +0 -3
  308. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xv39eu._.js +0 -3
  309. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_078qkb6._.js +0 -3
  310. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0q7-hjh._.js +0 -3
  311. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_165bzk6._.js +0 -3
  312. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hfbfb5._.js +0 -3
  313. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1sa-8tw._.js +0 -3
  314. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1xq_gof._.js +0 -3
  315. package/.next/server/chunks/[root-of-the-server]__0-rjzmv._.js +0 -3
  316. package/.next/server/chunks/[root-of-the-server]__01yk8oi._.js +0 -3
  317. package/.next/server/chunks/[root-of-the-server]__02k1gkk._.js +0 -3
  318. package/.next/server/chunks/[root-of-the-server]__0635d15._.js +0 -3
  319. package/.next/server/chunks/[root-of-the-server]__0af0ma6._.js +0 -3
  320. package/.next/server/chunks/[root-of-the-server]__0b49g9i._.js +0 -3
  321. package/.next/server/chunks/[root-of-the-server]__0d4jkve._.js +0 -10
  322. package/.next/server/chunks/[root-of-the-server]__0j-xjbf._.js +0 -3
  323. package/.next/server/chunks/[root-of-the-server]__0kaegk7._.js +0 -3
  324. package/.next/server/chunks/[root-of-the-server]__0kkefbq._.js +0 -3
  325. package/.next/server/chunks/[root-of-the-server]__0l3voov._.js +0 -3
  326. package/.next/server/chunks/[root-of-the-server]__0qsx33x._.js +0 -3
  327. package/.next/server/chunks/[root-of-the-server]__0sc44r6._.js +0 -86
  328. package/.next/server/chunks/[root-of-the-server]__0sc44r6._.js.map +0 -1
  329. package/.next/server/chunks/[root-of-the-server]__0u2rl0m._.js +0 -3
  330. package/.next/server/chunks/[root-of-the-server]__0uk0tga._.js +0 -3
  331. package/.next/server/chunks/[root-of-the-server]__0v8x64y._.js +0 -3
  332. package/.next/server/chunks/[root-of-the-server]__0xqsv4h._.js +0 -3
  333. package/.next/server/chunks/[root-of-the-server]__0yd6wlm._.js +0 -3
  334. package/.next/server/chunks/[root-of-the-server]__0zybyuh._.js +0 -3
  335. package/.next/server/chunks/[root-of-the-server]__134sb3d._.js +0 -3
  336. package/.next/server/chunks/[root-of-the-server]__134sb3d._.js.map +0 -1
  337. package/.next/server/chunks/[root-of-the-server]__15suc44._.js +0 -3
  338. package/.next/server/chunks/[root-of-the-server]__1jeqjz6._.js +0 -3
  339. package/.next/server/chunks/[root-of-the-server]__1kfohrq._.js +0 -3
  340. package/.next/server/chunks/[root-of-the-server]__1mz21a2._.js +0 -3
  341. package/.next/server/chunks/[root-of-the-server]__1mz21a2._.js.map +0 -1
  342. package/.next/server/chunks/[root-of-the-server]__1vaownn._.js +0 -3
  343. package/.next/server/chunks/[root-of-the-server]__1yow6hw._.js +0 -3
  344. package/.next/server/chunks/[root-of-the-server]__1znbm9i._.js +0 -3
  345. package/.next/server/chunks/_0csymdc._.js +0 -34
  346. package/.next/server/chunks/_0csymdc._.js.map +0 -1
  347. package/.next/server/chunks/_1f1rssd._.js +0 -3
  348. package/.next/server/chunks/_1f1rssd._.js.map +0 -1
  349. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1v0h3_3._.js +0 -3
  350. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1v0h3_3._.js.map +0 -1
  351. package/.next/server/chunks/ssr/_0v7muti._.js +0 -3
  352. package/.next/server/chunks/ssr/_0v7muti._.js.map +0 -1
  353. package/.next/server/chunks/ssr/_1a9mqm1._.js +0 -3
  354. package/.next/server/chunks/ssr/_1a9mqm1._.js.map +0 -1
  355. package/.next/server/chunks/ssr/_1alz6n5._.js.map +0 -1
  356. package/.next/server/chunks/ssr/_1s08bv8._.js.map +0 -1
  357. package/.next/server/chunks/ssr/node_modules__pnpm_051nq8c._.js +0 -3
  358. package/.next/server/chunks/ssr/node_modules__pnpm_051nq8c._.js.map +0 -1
  359. package/.next/server/chunks/ssr/src_components_0wg3bi2._.js +0 -3
  360. package/.next/server/chunks/ssr/src_components_0wg3bi2._.js.map +0 -1
  361. package/.next/static/chunks/05qw7-fs1exlt.js +0 -1
  362. package/.next/static/chunks/0_vu3y1bvg843.js +0 -1
  363. package/.next/static/chunks/0fvzbdfwiu4a2.js +0 -1
  364. package/.next/static/chunks/14ewdzt8piprq.js +0 -1
  365. package/.next/static/chunks/2g08tblvdp0t_.js +0 -2
  366. package/.next/static/chunks/2gdlf-xhbpc75.css +0 -10
  367. package/.next/static/chunks/2xu8bb_0152j-.js +0 -1
  368. package/.next/static/chunks/turbopack-181pehyg9iyaw.js +0 -1
  369. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-q4v32._.js.map → 11mp_@anthropic-ai_sdk_0-5bkpj._.js.map} +0 -0
  370. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05dmim9._.js.map → 11mp_@anthropic-ai_sdk_00psb_y._.js.map} +0 -0
  371. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05hfnhc._.js.map → 11mp_@anthropic-ai_sdk_01l5h3i._.js.map} +0 -0
  372. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07xtb0h._.js.map → 11mp_@anthropic-ai_sdk_072r2bd._.js.map} +0 -0
  373. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0fw_tls._.js.map → 11mp_@anthropic-ai_sdk_0am8bw2._.js.map} +0 -0
  374. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0q6tm_c._.js.map → 11mp_@anthropic-ai_sdk_0enefn6._.js.map} +0 -0
  375. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0qyh79u._.js.map → 11mp_@anthropic-ai_sdk_0k3n_5f._.js.map} +0 -0
  376. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0rfkb6q._.js.map → 11mp_@anthropic-ai_sdk_0lcfjm4._.js.map} +0 -0
  377. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0x1yqfb._.js.map → 11mp_@anthropic-ai_sdk_0lfx9av._.js.map} +0 -0
  378. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0yt3ewg._.js.map → 11mp_@anthropic-ai_sdk_0qau3qw._.js.map} +0 -0
  379. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1-kttjy._.js.map → 11mp_@anthropic-ai_sdk_0r1pmvm._.js.map} +0 -0
  380. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_12h8gza._.js.map → 11mp_@anthropic-ai_sdk_11t-z2t._.js.map} +0 -0
  381. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_18c2w1i._.js.map → 11mp_@anthropic-ai_sdk_15hyn79._.js.map} +0 -0
  382. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_18fnlqa._.js.map → 11mp_@anthropic-ai_sdk_1_qk07x._.js.map} +0 -0
  383. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_19on0yg._.js.map → 11mp_@anthropic-ai_sdk_1b2929e._.js.map} +0 -0
  384. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1alh48t._.js.map → 11mp_@anthropic-ai_sdk_1e72c89._.js.map} +0 -0
  385. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ck56ir._.js.map → 11mp_@anthropic-ai_sdk_1eq7asn._.js.map} +0 -0
  386. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1daia98._.js.map → 11mp_@anthropic-ai_sdk_1fhdojs._.js.map} +0 -0
  387. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1f6snvo._.js.map → 11mp_@anthropic-ai_sdk_1lh_vwq._.js.map} +0 -0
  388. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1p6s626._.js.map → 11mp_@anthropic-ai_sdk_1ludf-o._.js.map} +0 -0
  389. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ps921l._.js.map → 11mp_@anthropic-ai_sdk_1m3luz3._.js.map} +0 -0
  390. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rqxfdf._.js.map → 11mp_@anthropic-ai_sdk_1x1iz3d._.js.map} +0 -0
  391. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1s7maye._.js.map → 11mp_@anthropic-ai_sdk_1xsmwlh._.js.map} +0 -0
  392. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1vuy6_x._.js.map → 11mp_@anthropic-ai_sdk_202spah._.js.map} +0 -0
  393. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1xv39eu._.js.map → 11mp_@anthropic-ai_sdk_215hw9u._.js.map} +0 -0
  394. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_078qkb6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0n-i0pd._.js.map} +0 -0
  395. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0q7-hjh._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13pos4j._.js.map} +0 -0
  396. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_165bzk6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_17b4pqr._.js.map} +0 -0
  397. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1hfbfb5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1bkcmom._.js.map} +0 -0
  398. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1sa-8tw._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1hlj_3l._.js.map} +0 -0
  399. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1xq_gof._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ip-sor._.js.map} +0 -0
  400. /package/.next/server/chunks/{[root-of-the-server]__0uk0tga._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1pex5o1._.js.map} +0 -0
  401. /package/.next/server/chunks/{[root-of-the-server]__1jeqjz6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1s8lc8_._.js.map} +0 -0
  402. /package/.next/server/chunks/{[root-of-the-server]__1kfohrq._.js.map → [root-of-the-server]__0e59y5j._.js.map} +0 -0
  403. /package/.next/static/{cmDLf8WOU5PVmUOcSPh2H → ICaoXcRMmgrIFWk8C_Z6D}/_buildManifest.js +0 -0
  404. /package/.next/static/{cmDLf8WOU5PVmUOcSPh2H → ICaoXcRMmgrIFWk8C_Z6D}/_clientMiddlewareManifest.js +0 -0
  405. /package/.next/static/{cmDLf8WOU5PVmUOcSPh2H → ICaoXcRMmgrIFWk8C_Z6D}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/internal/file-store.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/fs-util.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/helpers/beta/json-schema.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/skills.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/memories.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/node.ts"],"sourcesContent":["/**\n * `FileStore` — one confined folder; a relative path cannot escape it.\n *\n * Beta scope: symlinks are refused or skipped wherever the store meets them,\n * but there is no hardening against a process racing the store's own\n * syscalls; fsync durability, non-POSIX hosts, and read-size caps are out of\n * scope.\n */\n\nimport type { BigIntStats, Dirent } from 'node:fs';\nimport type { FileHandle } from 'node:fs/promises';\nimport type * as util from 'node:util';\nimport { crypto, fs, path } from './node';\nimport { encodeUTF8 } from './utils/bytes';\n\nconst fsp = fs.promises;\nconst C = fs.constants;\n\n// Owner-only regardless of umask: the store holds downloaded user/model content.\nconst OWNER_ONLY_DIR_MODE = 0o700;\nconst OWNER_ONLY_FILE_MODE = 0o600;\nconst OWNER_ONLY_EXEC_MODE = 0o700;\n\n// 0 where the platform lacks them; `open` refuses such platforms.\nconst O_NOFOLLOW: number = (C as { O_NOFOLLOW?: number }).O_NOFOLLOW ?? 0;\nconst O_NONBLOCK: number = (C as { O_NONBLOCK?: number }).O_NONBLOCK ?? 0;\n\n/** A refused operation — input the store will not act on. OS errors propagate with their `.code`. */\nexport class FileStoreError extends Error {\n static readonly ESCAPES_ROOT = 'escapes the store root';\n static readonly IS_A_SYMLINK = 'is a symlink';\n static readonly NOT_A_FILE = 'is not a regular file';\n static readonly NOT_A_DIRECTORY = 'is not a directory';\n static readonly NOT_UTF8 = 'is not valid utf-8';\n static readonly MOVE_DESTINATION_EXISTS = 'already exists';\n\n readonly reason: string;\n readonly relPath: string;\n\n constructor(reason: string, relPath: string) {\n super(`path ${JSON.stringify(relPath)} ${reason}`);\n this.name = 'FileStoreError';\n this.reason = reason;\n this.relPath = relPath;\n }\n}\n\n/**\n * The store's resolved root, and what {@link FileStore.dispose} will do to it.\n *\n * `removedOnDispose` is true when `open` found no root, so `dispose` removes\n * it. A root that was already there is someone else's — a pre-seeded mount, a\n * caller's workdir — and is kept.\n */\nexport type Root = { path: string; removedOnDispose: boolean };\n\n/** Options for {@link FileStore.open} / {@link openFileStore}. */\nexport interface OpenFileStoreOptions {\n /**\n * Restrict the store to valid UTF-8 (default `false`): a `put` of binary\n * bytes and a `get` of a binary file are refused with\n * {@link FileStoreError}, so a caller that decodes what `get` returns can\n * never hit a decode error.\n */\n utf8?: boolean;\n}\n\n/** Resolve `root`; creates nothing — only {@link FileStore.createRoot} makes the folder. */\nexport async function openFileStore(root: string, opts?: OpenFileStoreOptions): Promise<FileStore> {\n return FileStore.open(root, opts);\n}\n\n/**\n * True for a path usable verbatim as a store location: absolute, with no `..`\n * components. Paths are judged in POSIX terms — they are wire values naming\n * locations inside a POSIX container, not host-native paths.\n */\nexport function isPathLegal(p: string): boolean {\n return p.startsWith('/') && !p.split('/').includes('..');\n}\n\n/** One hashed file version: the stat identity it had, and its sha. */\ntype Hashed = {\n mtimeNs: bigint;\n // Userspace cannot set ctime, so writers that preserve mtimes\n // (`rsync -t`, `cp -p`) still miss the cache.\n ctimeNs: bigint;\n size: bigint;\n sha: string;\n};\n\n/**\n * One confined folder of regular files.\n *\n * Every `relPath` is relative to the root (a leading `/` also means the root)\n * and refused with {@link FileStoreError} when it escapes. The store holds\n * regular files only: symlinks are refused on read and skipped by listings —\n * {@link findSymlinks} reports them. A `relPath` resolving to the root itself\n * is banned by this interface: `put` and `get` refuse it, `move` and `remove`\n * do nothing. A store opened with `utf8: true` refuses binary content the\n * same way — on `put` of such bytes and on `get` of such a file. Only\n * {@link createRoot} makes the root: writes create directories below it,\n * never the root itself, so a root removed while the store is open stays\n * removed and the write fails with `ENOENT`.\n */\nexport class FileStore {\n private readonly rootPath: string;\n /** True ⇒ this open created the root, so {@link dispose} removes it. */\n private readonly removedOnDispose: boolean;\n /** Set iff the store refuses non-UTF-8 content; {@link requireUtf8} decodes against it, on both put and get. */\n private readonly decoder: util.TextDecoder | undefined;\n /** `hashtree`'s advisory cache; every hit re-validates against a fresh stat. */\n private readonly hashes = new Map<string, Hashed>();\n\n static isPathLegal = isPathLegal;\n\n /** @internal — use {@link FileStore.open} / {@link openFileStore}. */\n constructor(root: string, removedOnDispose: boolean, utf8Only: boolean = false) {\n this.rootPath = root;\n this.removedOnDispose = removedOnDispose;\n this.decoder = utf8Only ? new TextDecoder('utf-8', { fatal: true }) : undefined;\n }\n\n /** Resolve `root`; creates nothing — only {@link createRoot} makes the folder. */\n static async open(root: string, opts?: OpenFileStoreOptions): Promise<FileStore> {\n // A deployment condition, not refused caller input — hence not FileStoreError.\n if (!platformSupported()) {\n throw new Error('FileStore requires O_NOFOLLOW support on this platform');\n }\n let removedOnDispose = false;\n try {\n // lstat, not a follow-and-swallow existence check: following symlinks or\n // swallowing permission errors would mark a real directory ours to\n // delete on dispose.\n await fsp.lstat(root);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'ENOENT') throw e;\n removedOnDispose = true;\n }\n return new FileStore(path.resolve(root), removedOnDispose, opts?.utf8 ?? false);\n }\n\n /** Create the root directory and any missing ancestors; already existing is fine. */\n async createRoot(): Promise<void> {\n await makeDirAndAncestors(this.rootPath);\n }\n\n /** The resolved root, and what {@link dispose} will do to it. */\n root(): Root {\n return { path: this.rootPath, removedOnDispose: this.removedOnDispose };\n }\n\n /**\n * Remove the root iff `open` created it; pre-existing roots are kept.\n *\n * Wired to `Symbol.asyncDispose` at runtime when the host provides it, so\n * `await using` works on engines with explicit resource management.\n */\n async dispose(): Promise<void> {\n if (!this.removedOnDispose) return;\n await fsp.rm(this.rootPath, { recursive: true, force: true });\n }\n\n /**\n * Write `data` (`string` UTF-8 or bytes) atomically to the file at `relPath`.\n *\n * Missing directories below the root are created; a missing root is not —\n * the write fails with `ENOENT`.\n */\n async put(relPath: string, data: string | Uint8Array, opts?: { executable?: boolean }): Promise<void> {\n // \"dir/.\" names a directory just like a trailing \"/\".\n const tail = relPath.replace(/\\\\/g, '/');\n if (tail.endsWith('/') || tail.endsWith('/.') || tail === '' || tail === '.') {\n throw new FileStoreError(FileStoreError.NOT_A_FILE, relPath);\n }\n const dest = this.resolveUnderRoot(relPath);\n const payload = typeof data === 'string' ? encodeUTF8(data) : data;\n this.requireUtf8(relPath, payload);\n await makeDirsBelowRoot(this.rootPath, path.dirname(dest));\n await replaceViaTemp(dest, payload, opts?.executable ?? false);\n }\n\n /** The file's bytes; `null` when absent. */\n async get(relPath: string): Promise<Uint8Array | null> {\n const dest = this.resolveUnderRoot(relPath);\n let handle: FileHandle;\n try {\n handle = await openRegularFile(relPath, dest);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw e;\n }\n let data: Uint8Array;\n try {\n const buf = await handle.readFile();\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n } finally {\n await handle.close();\n }\n this.requireUtf8(relPath, data);\n return data;\n }\n\n /** The relative path of every file under the directory `under`. */\n async ls(under: string = '/'): Promise<Set<string>> {\n const base = this.resolveUnderRoot(under);\n return new Set((await filenamesInDir(this.rootPath, under, base)).map(([rel]) => rel));\n }\n\n /**\n * Every symlink under `under` — listings skip them and reads refuse them,\n * so a caller that must know they exist asks here.\n */\n async findSymlinks(under: string = '/'): Promise<Set<string>> {\n const base = this.resolveUnderRoot(under);\n return symlinksInDir(this.rootPath, under, base);\n }\n\n /**\n * `{relPath: sha256Hex}` of every file under the directory `under`.\n *\n * Unchanged files — same size, mtime, and ctime since the last call —\n * reuse their recorded hash instead of being re-read.\n */\n async hashtree(under: string = '/'): Promise<Record<string, string>> {\n const base = this.resolveUnderRoot(under);\n const walkStartNs = _internals.nowNs();\n // Null prototype so a file named `__proto__` (or `constructor`) is an\n // ordinary own key instead of a silent prototype write / inherited read.\n const out: Record<string, string> = Object.create(null);\n for (const [rel, full] of await filenamesInDir(this.rootPath, under, base)) {\n const sha = await this.hashViaCache(rel, full, walkStartNs);\n if (sha !== null) out[rel] = sha;\n }\n return out;\n }\n\n /** One file's sha256; `null` when absent. Shares {@link hashtree}'s cache. */\n async hashFile(relPath: string): Promise<string | null> {\n const dest = this.resolveUnderRoot(relPath);\n let st: BigIntStats;\n try {\n st = await fsp.lstat(dest, { bigint: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw e;\n }\n if (st.isSymbolicLink()) throw new FileStoreError(FileStoreError.IS_A_SYMLINK, relPath);\n if (!st.isFile()) throw new FileStoreError(FileStoreError.NOT_A_FILE, relPath);\n const rel = path.relative(this.rootPath, dest).split(path.sep).join('/');\n return this.hashViaCache(rel, dest, _internals.nowNs());\n }\n\n /**\n * Rename `src` to `dst`; an existing `dst` is refused. The banned store\n * root as either end does nothing.\n */\n async move(src: string, dst: string): Promise<void> {\n const s = this.resolveUnderRoot(src);\n const d = this.resolveUnderRoot(dst);\n if (s === this.rootPath || d === this.rootPath) return;\n // stat, not lstat: a dangling symlink at dst reads as absent and is\n // atomically replaced by the rename, like any other rename target.\n const dstExists = await fsp.stat(d).then(\n () => true,\n () => false,\n );\n if (dstExists) throw new FileStoreError(FileStoreError.MOVE_DESTINATION_EXISTS, dst);\n await makeDirsBelowRoot(this.rootPath, path.dirname(d));\n await fsp.rename(s, d);\n }\n\n /** Delete a file or subtree; absent — and the banned store root — do nothing. */\n async remove(relPath: string): Promise<void> {\n const dest = this.resolveUnderRoot(relPath);\n if (dest === this.rootPath) return;\n let st: BigIntStats;\n try {\n // lstat: a dangling symlink must still be unlinked.\n st = await fsp.lstat(dest, { bigint: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return;\n throw e;\n }\n if (st.isDirectory()) {\n await fsp.rm(dest, { recursive: true, force: true });\n } else {\n try {\n await fsp.unlink(dest);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'ENOENT') throw e;\n }\n }\n }\n\n private resolveUnderRoot(relPath: string): string {\n const norm = relPath.replace(/\\\\/g, '/').replace(/^\\/+/, '');\n const parts = norm.split('/').filter((p) => p !== '' && p !== '.');\n if (path.posix.isAbsolute(norm) || parts.includes('..')) {\n throw new FileStoreError(FileStoreError.ESCAPES_ROOT, relPath);\n }\n return parts.length === 0 ? this.rootPath : path.join(this.rootPath, ...parts);\n }\n\n private requireUtf8(relPath: string, data: Uint8Array): void {\n if (!this.decoder) return;\n try {\n this.decoder.decode(data);\n } catch {\n throw new FileStoreError(FileStoreError.NOT_UTF8, relPath);\n }\n }\n\n private async hashViaCache(rel: string, full: string, walkStartNs: bigint): Promise<string | null> {\n let st: BigIntStats;\n try {\n st = await fsp.lstat(full, { bigint: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null; // vanished since the walk: not in this snapshot\n throw e;\n }\n if (!st.isFile()) return null;\n const cached = this.hashes.get(rel);\n let sha: string;\n if (cached !== undefined && unchangedSinceHashed(cached, st)) {\n sha = cached.sha;\n } else {\n try {\n sha = await _internals.hashFile(full);\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || e instanceof FileStoreError) return null;\n // FreeBSD reports EMLINK rather than ELOOP for O_NOFOLLOW.\n if (code === 'ELOOP' || code === 'EMLINK') return null;\n throw e;\n }\n }\n if (oldEnoughToCache(st, walkStartNs)) {\n this.hashes.set(rel, { mtimeNs: st.mtimeNs, ctimeNs: st.ctimeNs, size: st.size, sha });\n }\n return sha;\n }\n}\n\nfunction platformSupported(): boolean {\n return O_NOFOLLOW !== 0;\n}\n\nasync function makeDirAndAncestors(dir: string): Promise<void> {\n const missing: string[] = [];\n let current = dir;\n for (;;) {\n try {\n await fsp.stat(current);\n break;\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code !== 'ENOENT' && code !== 'ENOTDIR' && code !== 'ELOOP') throw e;\n }\n missing.push(current);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n for (const directory of missing.reverse()) {\n try {\n await fsp.mkdir(directory, { mode: OWNER_ONLY_DIR_MODE });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'EEXIST') throw e;\n }\n }\n}\n\nasync function makeDirsBelowRoot(root: string, dir: string): Promise<void> {\n // Never the root itself: only createRoot() makes it, so a write racing an\n // rm -rf of the folder fails with ENOENT instead of re-creating it.\n const below = path.relative(root, dir);\n if (below === '') return;\n let current = root;\n for (const part of below.split(path.sep)) {\n current = path.join(current, part);\n try {\n await fsp.mkdir(current, { mode: OWNER_ONLY_DIR_MODE });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'EEXIST') throw e;\n }\n }\n}\n\nasync function replaceViaTemp(dest: string, data: Uint8Array, isExecutable: boolean): Promise<void> {\n const mode = isExecutable ? OWNER_ONLY_EXEC_MODE : OWNER_ONLY_FILE_MODE;\n const tmp = path.join(path.dirname(dest), `.fs-${crypto.randomBytes(8).toString('hex')}.tmp`);\n let handle: FileHandle | undefined;\n try {\n handle = await fsp.open(tmp, C.O_WRONLY | C.O_CREAT | C.O_EXCL | O_NOFOLLOW, mode);\n await handle.writeFile(data);\n await handle.close();\n handle = undefined;\n await fsp.rename(tmp, dest);\n } catch (err) {\n // Best-effort temp cleanup; never mask the original error.\n if (handle) await handle.close().catch(() => {});\n await fsp.unlink(tmp).catch(() => {});\n throw err;\n }\n}\n\nasync function openRegularFile(relPath: string, dest: string): Promise<FileHandle> {\n // O_NONBLOCK: a FIFO fails the fstat check below instead of blocking the open.\n let handle: FileHandle;\n try {\n handle = await fsp.open(dest, C.O_RDONLY | O_NOFOLLOW | O_NONBLOCK);\n } catch (e) {\n // FreeBSD reports EMLINK rather than ELOOP for O_NOFOLLOW.\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ELOOP' || code === 'EMLINK') {\n throw new FileStoreError(FileStoreError.IS_A_SYMLINK, relPath);\n }\n throw e;\n }\n try {\n const st = await handle.stat();\n if (!st.isFile()) throw new FileStoreError(FileStoreError.NOT_A_FILE, relPath);\n } catch (e) {\n await handle.close().catch(() => {});\n throw e;\n }\n return handle;\n}\n\n/** sha256 of a file's contents, streamed — constant memory on any file size. */\nasync function hashFile(full: string): Promise<string> {\n const digest = crypto.createHash('sha256');\n const handle = await openRegularFile(path.basename(full), full);\n const buf = new Uint8Array(1024 * 1024);\n try {\n for (;;) {\n const { bytesRead } = await handle.read(buf, 0, buf.length);\n if (bytesRead === 0) break;\n digest.update(buf.subarray(0, bytesRead));\n }\n } finally {\n await handle.close();\n }\n return digest.digest('hex');\n}\n\n/**\n * `[rel, path]` for every regular file under the directory `base`; an absent\n * `base` is empty, a present non-directory is refused. The walk never\n * descends symlinked directories.\n */\nasync function filenamesInDir(root: string, under: string, base: string): Promise<[string, string][]> {\n if (!(await requireDir(under, base))) return [];\n const out: [string, string][] = [];\n await walk(base, (full, entry) => {\n if (entry.isFile()) out.push([path.relative(root, full).split(path.sep).join('/'), full]);\n });\n out.sort();\n return out;\n}\n\nasync function symlinksInDir(root: string, under: string, base: string): Promise<Set<string>> {\n const relOf = (full: string) => path.relative(root, full).split(path.sep).join('/');\n let st: BigIntStats;\n try {\n st = await fsp.lstat(base, { bigint: true });\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || code === 'ENOTDIR') return new Set();\n throw e;\n }\n if (st.isSymbolicLink()) return new Set([relOf(base)]);\n if (!st.isDirectory()) throw new FileStoreError(FileStoreError.NOT_A_DIRECTORY, under);\n const out = new Set<string>();\n // Symlinks to directories are reported, never descended, like the rest.\n await walk(base, (full, entry) => {\n if (entry.isSymbolicLink()) out.add(relOf(full));\n });\n return out;\n}\n\n/** `false` when `base` is absent, refused when present but not a directory. */\nasync function requireDir(under: string, base: string): Promise<boolean> {\n let st: BigIntStats;\n try {\n st = await fsp.lstat(base, { bigint: true });\n } catch (e) {\n // Absent — including \"under a file\" (ENOTDIR) — is an empty listing.\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || code === 'ENOTDIR') return false;\n throw e;\n }\n if (!st.isDirectory()) throw new FileStoreError(FileStoreError.NOT_A_DIRECTORY, under);\n return true;\n}\n\n/** Visit every entry under `base` without descending symlinked directories. */\nasync function walk(base: string, visit: (full: string, entry: Dirent) => void): Promise<void> {\n const stack: string[] = [base];\n while (stack.length) {\n const dir = stack.pop()!;\n let entries: Dirent[];\n try {\n entries = await fsp.readdir(dir, { withFileTypes: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') continue; // a listing is a snapshot, not a lock\n throw e;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n visit(full, entry);\n if (entry.isDirectory() && !entry.isSymbolicLink()) stack.push(full);\n }\n }\n}\n\nfunction unchangedSinceHashed(cached: Hashed, st: BigIntStats): boolean {\n return st.mtimeNs === cached.mtimeNs && st.ctimeNs === cached.ctimeNs && st.size === cached.size;\n}\n\nfunction oldEnoughToCache(st: BigIntStats, walkStartNs: bigint): boolean {\n const newestNs = st.mtimeNs > st.ctimeNs ? st.mtimeNs : st.ctimeNs;\n return newestNs < walkStartNs - _internals.timestampTrustMarginNs;\n}\n\n// Filesystems stamp times with coarse clocks, so a rewrite shortly after a\n// hashed write can reuse the exact stamps. Files younger than the margin are\n// simply re-hashed next walk.\nconst TIMESTAMP_TRUST_MARGIN_NS = 2_000_000_000n;\n\n/** Test seam — the hasher, the trust margin, and the walk clock. @internal */\nexport const _internals = {\n hashFile,\n timestampTrustMarginNs: TIMESTAMP_TRUST_MARGIN_NS,\n nowNs: (): bigint => BigInt(Date.now()) * 1_000_000n,\n};\n\nexport const LocalFileStore = FileStore;\n\n// Wire `Symbol.asyncDispose` at runtime when the host provides it — the\n// repo's tsconfig targets ES2020 so the type-level `AsyncDisposable` lib is\n// not available, but `await using` callers on newer engines still work.\nconst asyncDispose = (Symbol as { asyncDispose?: symbol }).asyncDispose;\nif (asyncDispose) {\n Object.defineProperty(FileStore.prototype, asyncDispose, {\n value: FileStore.prototype.dispose,\n configurable: true,\n writable: true,\n });\n}\n","/**\n * Shared, Node-only filesystem helpers for the agent toolset's file tools:\n * path confinement (symlink-aware), an atomic write, and language-independent\n * error messages. Kept out of `node.ts` so the tool implementations stay focused\n * and these helpers can be reused by every file tool.\n */\n\nimport type { FileHandle } from 'node:fs/promises';\nimport { crypto, fs as nodefs, path } from '../../internal/node';\nimport { ToolError } from '../../lib/tools/ToolError';\n\nconst fs = nodefs.promises;\n\n/** Mode for directories the file tools create: owner-only under any umask, like the memory tool. */\nexport const DIR_CREATE_MODE = 0o700;\n/**\n * Mode for files the file tools create: owner-only, so other local users can't\n * read what an agent wrote. A file that already exists keeps its own mode.\n */\nexport const FILE_CREATE_MODE = 0o600;\n\n/** True when `p` is `root` itself or lexically contained within it. */\nexport function isWithin(root: string, p: string): boolean {\n const rel = path.relative(root, p);\n return rel === '' || (!rel.startsWith('..' + path.sep) && rel !== '..' && !path.isAbsolute(rel));\n}\n\n/**\n * The first entry of `roots` whose canonical form contains the\n * already-canonical `target`, returned as configured; `undefined` when none\n * does. Each root goes through {@link canonicalize} at check time, exactly like\n * the workdir in {@link confineToRoot}, so granting access (`allowedRoots`)\n * and refusing writes (`readOnlyRoots`) can never resolve the same entry two\n * different ways.\n */\nexport async function containingRoot(roots: readonly string[], target: string): Promise<string | undefined> {\n for (const root of roots) {\n if (isWithin(await canonicalize(path.resolve(root)), target)) return root;\n }\n return undefined;\n}\n\n/** Matches Linux MAXSYMLINKS, the threshold at which `realpath` itself reports ELOOP. */\nconst MAX_SYMLINK_HOPS = 40;\n\n/** The `code` of a Node system error, or `undefined` for anything else. */\nexport function errnoCode(err: unknown): string | undefined {\n const code = (err as { code?: unknown } | null)?.code;\n return typeof code === 'string' ? code : undefined;\n}\n\n/**\n * Fully resolve `abs`: `realpath` the longest existing ancestor and re-append\n * the rest, but never re-append a component that is itself a symlink — read the\n * link and continue from its target instead. This handles paths being created\n * (write/edit) without letting a symlink leaf (e.g. a dangling one pointing\n * outside a confinement root) slip through unresolved.\n *\n * Returns a symlink-free path or throws an errno-carrying error (`ELOOP` for a\n * cycle or more than {@link MAX_SYMLINK_HOPS} links, the `lstat`/`realpath`\n * error for an unreadable component); it never returns `abs` unresolved. Only\n * symlink hops count against the cap, so any depth of not-yet-existing\n * directories still resolves.\n */\nexport async function canonicalize(abs: string): Promise<string> {\n const tail: string[] = [];\n let prefix = abs;\n let hops = 0;\n for (;;) {\n let real: string;\n try {\n real = await fs.realpath(prefix);\n } catch (realpathErr) {\n let isLink: boolean;\n try {\n isLink = (await fs.lstat(prefix)).isSymbolicLink();\n } catch (lstatErr) {\n const code = errnoCode(lstatErr);\n if (code !== 'ENOENT' && code !== 'ENOTDIR') throw lstatErr;\n const parent = path.dirname(prefix);\n if (parent === prefix) throw lstatErr;\n tail.push(path.basename(prefix));\n prefix = parent;\n continue;\n }\n if (!isLink) throw realpathErr;\n if (++hops > MAX_SYMLINK_HOPS) {\n throw Object.assign(new Error('too many levels of symbolic links'), { code: 'ELOOP' });\n }\n prefix = path.resolve(path.dirname(prefix), await fs.readlink(prefix));\n continue;\n }\n return tail.length ? path.join(real, ...tail.reverse()) : real;\n }\n}\n\n/**\n * Resolve `p` against `root` and confine it to `root` or one of `allowedRoots`\n * (absolute paths, resolved at check time exactly like `root`).\n *\n * Absolute and relative inputs go through the same canonicalise-then-contain\n * check — an absolute path that lands inside a permitted root is accepted,\n * only paths that resolve *outside* all of them are rejected. Every symlink in\n * `p` (including the leaf, even a dangling one) is resolved before the\n * confinement check, and the resolved path is what the caller then operates\n * on, so a symlink inside `root` that points outside it can neither pass the\n * check nor be followed afterwards. `..` is collapsed lexically before any\n * symlink is followed. A path that cannot be resolved (symlink loop, unreadable\n * component) is rejected with a `ToolError` naming `p`, never the host's\n * absolute path.\n *\n * Residual TOCTOU: a component could still be swapped for a symlink between this\n * call and the eventual `fs` operation. Closing that fully needs per-component\n * `O_NOFOLLOW`/`openat`, which Node does not expose ergonomically; this is why a\n * sandbox is still recommended for the toolset as a whole.\n */\nexport async function confineToRoot(\n root: string,\n p: string,\n opts?: { allowedRoots?: readonly string[] },\n): Promise<string> {\n const allowedRoots = opts?.allowedRoots ?? [];\n const realRoot = await canonicalize(path.resolve(root));\n let real: string;\n try {\n real = await canonicalize(path.resolve(realRoot, p));\n } catch (err) {\n throw new ToolError(fsErrorMessage(err, `path ${JSON.stringify(p)}`));\n }\n if (isWithin(realRoot, real) || (await containingRoot(allowedRoots, real)) !== undefined) {\n return real;\n }\n const permitted =\n allowedRoots.length ?\n \"the session's working directory and its other permitted directories\"\n : \"the session's working directory\";\n throw new ToolError(`path ${JSON.stringify(p)} is outside ${permitted}`);\n}\n\n/**\n * Atomically write `content` to `targetPath`: write a sibling temp file, fsync\n * it, then rename over the target. The rename is atomic on most filesystems, so\n * a crash mid-write never leaves the target half-written.\n *\n * A new file is created {@link FILE_CREATE_MODE}; an existing one keeps its\n * permission bits (the rename replaces the inode, so they are copied onto the\n * temp file first) — an edit must not strip `+x` or sharing the owner chose.\n */\nexport async function atomicWriteFile(targetPath: string, content: string): Promise<void> {\n const dir = path.dirname(targetPath);\n const tempPath = path.join(dir, `.tmp-${process.pid}-${crypto.randomUUID()}`);\n const existingMode = await fs.stat(targetPath).then(\n (st) => st.mode & 0o777,\n () => undefined,\n );\n let handle: FileHandle | undefined;\n try {\n handle = await fs.open(tempPath, 'wx', FILE_CREATE_MODE);\n if (existingMode !== undefined) await handle.chmod(existingMode);\n await handle.writeFile(content, 'utf-8');\n await handle.sync();\n await handle.close();\n handle = undefined;\n await fs.rename(tempPath, targetPath);\n } catch (err) {\n if (handle) await handle.close().catch(() => {});\n await fs.unlink(tempPath).catch(() => {});\n throw err;\n }\n}\n\n/**\n * Map a thrown filesystem error to a consistent, language-independent message,\n * so the model sees the same wording regardless of the runtime (Node's raw\n * `ENOENT: no such file...` text would otherwise leak through). Codes we don't\n * special-case render as the bare code, never Node's message, which embeds the\n * host's absolute path.\n */\nexport function fsErrorMessage(err: unknown, file: string): string {\n const code = errnoCode(err);\n switch (code) {\n case 'ENOENT':\n return `${file}: no such file or directory`;\n case 'EACCES':\n case 'EPERM':\n return `${file}: permission denied`;\n case 'ENOTDIR':\n return `${file}: not a directory`;\n case 'EISDIR':\n return `${file}: is a directory`;\n case 'ELOOP':\n return `${file}: too many levels of symbolic links`;\n case 'ENAMETOOLONG':\n return `${file}: file name too long`;\n case 'ENOSPC':\n return `${file}: no space left on device`;\n case 'EMFILE':\n case 'ENFILE':\n return `${file}: too many open files`;\n default:\n return `${file}: ${code !== undefined ? `i/o error (${code})` : 'i/o error'}`;\n }\n}\n","import { FromSchema, JSONSchema } from 'json-schema-to-ts';\nimport { Promisable, BetaRunnableTool, BetaToolRunContext } from '../../lib/tools/BetaRunnableTool';\nimport { BetaToolResultContentBlockParam } from '../../resources/beta';\nimport { AutoParseableBetaOutputFormat } from '../../lib/beta-parser';\nimport { AnthropicError } from '../..';\nimport { transformJSONSchema } from '../../lib/transform-json-schema';\n\ntype NoInfer<T> = T extends infer R ? R : never;\n\n/**\n * Creates a Tool with a provided JSON schema that can be passed\n * to the `.toolRunner()` method. The schema is used to automatically validate\n * the input arguments for the tool.\n */\nexport function betaTool<const Schema extends Exclude<JSONSchema, boolean> & { type: 'object' }>(options: {\n name: string;\n inputSchema: Schema;\n description: string;\n run: (\n args: NoInfer<FromSchema<Schema>>,\n context?: BetaToolRunContext,\n ) => Promisable<string | Array<BetaToolResultContentBlockParam>>;\n /**\n * Optional cleanup hook for tools that hold process-level resources (e.g. a\n * persistent shell). `client.beta.sessions.events.toolRunner` calls it once\n * when iteration ends.\n */\n close?: () => void | Promise<void>;\n}): BetaRunnableTool<NoInfer<FromSchema<Schema>>> {\n if (options.inputSchema.type !== 'object') {\n throw new Error(\n `JSON schema for tool \"${options.name}\" must be an object, but got ${options.inputSchema.type}`,\n );\n }\n\n return {\n type: 'custom',\n name: options.name,\n input_schema: options.inputSchema,\n description: options.description,\n run: options.run,\n parse: (content: unknown) => content as FromSchema<Schema>,\n ...(options.close ? { close: options.close } : {}),\n } as any;\n}\n\n/**\n * Creates a JSON schema output format object from the given JSON schema.\n * If this is passed to the `.parse()` method then the response message will contain a\n * `.parsed_output` property that is the result of parsing the content with the given JSON schema.\n *\n */\nexport function betaJSONSchemaOutputFormat<\n const Schema extends Exclude<JSONSchema, boolean> & { type: 'object' },\n>(\n jsonSchema: Schema,\n options?: {\n transform?: boolean;\n },\n): AutoParseableBetaOutputFormat<NoInfer<FromSchema<Schema>>> {\n if (jsonSchema.type !== 'object') {\n throw new Error(`JSON schema for tool must be an object, but got ${jsonSchema.type}`);\n }\n\n const transform = options?.transform ?? true;\n if (transform) {\n // todo: doing this is arguably necessary, but it does change the schema the user passed in\n // so I'm not sure how we should handle that\n jsonSchema = transformJSONSchema(jsonSchema) as Schema;\n }\n\n return {\n type: 'json_schema',\n schema: {\n ...jsonSchema,\n },\n parse: (content) => {\n try {\n return JSON.parse(content);\n } catch (error) {\n throw new AnthropicError(`Failed to parse structured output: ${error}`);\n }\n },\n };\n}\n","/**\n * Node-only skill plumbing for the agent toolset: downloading a session\n * agent's skills into the workdir and extracting the archives. Kept in its own\n * file because it is a distinct concern from the tool implementations in\n * `node.ts` — distinct enough, and large enough, to review on its own.\n */\n\nimport { child_process, fs as fssync, path, stream, util } from '../../internal/node';\nimport { AnthropicError } from '../../core/error';\nimport { loggerFor } from '../../internal/utils/log';\nimport { DIR_CREATE_MODE, errnoCode } from './fs-util';\nimport type { AgentToolContext } from './node';\n\nconst fs = fssync.promises;\nconst execFileAsync = util.promisify(child_process.execFile);\n\n/**\n * Download the session agent's skills into `{ctx.workdir}/skills/<name>/`.\n *\n * No-op (returns a no-op cleanup) unless `ctx.client` is set together with\n * `ctx.session` (or the deprecated `ctx.sessionId`). Reads the resolved agent\n * off the session and, for each skill, fetches its files via\n * `client.beta.skills.versions.download` and extracts the archive (a zip or\n * tar.* archive) into a directory named after the skill. A failure on one skill\n * is logged and does not block the others. Call this before starting the\n * session tool runner (e.g. right after the bash session / workdir is ready).\n *\n * Pass `ctx.session`. A session's resources cannot change while it runs, so the\n * caller fetches it once and shares that snapshot with the memory-store\n * download — the two can then never disagree about the attached resources.\n *\n * `ctx.sessionId` is deprecated: it costs an extra `sessions.retrieve` round\n * trip on every call, and a caller that uses it for both this and the\n * memory-store download fetches the session twice. It remains supported for\n * callers written before `session` existed.\n *\n * Returns a cleanup function that removes the skill directories this call\n * created — call it once the work item is done so downloaded skills do not\n * accumulate in the workdir across sessions.\n */\nexport async function setupSkills(ctx: AgentToolContext): Promise<() => Promise<void>> {\n const { client, sessionId } = ctx;\n if (!client) return async () => {};\n const log = loggerFor(client);\n let session = ctx.session;\n if (!session) {\n if (sessionId === undefined) return async () => {};\n log.warn(\n 'AgentToolContext.sessionId is deprecated and costs an extra session fetch; ' +\n 'fetch the session once and set `session` instead',\n { component: 'agent-tool-context' },\n );\n // The sessions/skills resources inject their anthropic-beta headers\n // (managed-agents / skills) themselves — no need to pass `betas` here.\n session = await client.beta.sessions.retrieve(sessionId);\n }\n const skillsRoot = path.resolve(ctx.workdir, 'skills');\n const created: string[] = [];\n for (const skill of session.agent.skills) {\n try {\n const version = await client.beta.skills.versions.retrieve(skill.version, { skill_id: skill.skill_id });\n // The directory is the skill's name, reduced to a single safe path\n // component so a hostile name can't escape `skillsRoot`.\n let dirname = path.basename(version.name.trim());\n if (dirname === '' || dirname === '.' || dirname === '..') dirname = skill.skill_id;\n const dest = path.resolve(skillsRoot, dirname);\n if (dest !== skillsRoot && !dest.startsWith(skillsRoot + path.sep)) {\n log.warn('skill name escapes the skills dir; skipping', {\n component: 'agent-tool-context',\n name: version.name,\n });\n continue;\n }\n // `skill.version` may be the alias `\"latest\"`, which only the retrieve\n // endpoint resolves; download by the concrete id it returned.\n const resp = await client.beta.skills.versions.download(version.id, { skill_id: skill.skill_id });\n await fs.rm(dest, { recursive: true, force: true });\n await fs.mkdir(dest, { recursive: true, mode: DIR_CREATE_MODE });\n created.push(dest);\n await extractSkillArchive(resp, dest);\n log.info('downloaded skill', {\n component: 'agent-tool-context',\n skill_id: skill.skill_id,\n version: version.id,\n dest,\n });\n } catch (e) {\n log.warn('failed to download skill', {\n component: 'agent-tool-context',\n skill_id: skill.skill_id,\n error: String(e),\n });\n }\n }\n return async () => {\n for (const dest of created) {\n await fs.rm(dest, { recursive: true, force: true }).catch((e) => {\n log.warn('failed to clean up skill', { component: 'agent-tool-context', dest, error: String(e) });\n });\n }\n };\n}\n\n/** Reject archive members that are absolute or contain a `..` component. */\nfunction assertSafeMemberNames(names: string[]): void {\n for (const raw of names) {\n const entry = raw.trim();\n if (!entry) continue;\n if (path.isAbsolute(entry) || entry.split(/[\\\\/]/).includes('..')) {\n throw new AnthropicError(`refusing to extract unsafe archive member: ${entry}`);\n }\n }\n}\n\nconst INCONSISTENT_LISTING = 'skill archive listing is inconsistent; refusing to extract';\n\n/**\n * Type chars (first byte of each `ls`-style line from `unzip -Z` / `tar -tvf`)\n * that denote a regular file or directory. `zipinfo` prints `?` for entries\n * with no Unix type bits, which `unzip` extracts as regular files; GNU tar\n * prints `C` for contiguous files. Everything else — `l` symlink, `h`\n * hardlink, `b`/`c` device, `p` fifo, `s` socket, unknown tar types — is a\n * special member.\n */\nconst PLAIN_TYPE_CHARS = { unzip: new Set(['-', 'd', '?']), tar: new Set(['-', 'd', 'C']) };\n\nfunction listingLines(listing: string): string[] {\n const lines = listing.split('\\n');\n if (lines[lines.length - 1] === '') lines.pop();\n return lines;\n}\n\n/**\n * A special member is excluded by handing its listed name back to the CLI as\n * a pattern, so the name must be byte-identical to what is stored. `tar`,\n * `bsdtar` and `unzip` print bytes they cannot show literally as `\\ooo`, `^X`\n * or `#U` escapes, or as raw non-ASCII; any such name cannot be excluded\n * reliably. A leading `-` would let `unzip` parse the pattern as an option.\n */\nfunction canExcludeVerbatim(cmd: 'unzip' | 'tar', name: string): boolean {\n return /^[\\x20-\\x7E]+$/.test(name) && !/[\\\\^#]/.test(name) && !(cmd === 'unzip' && name.startsWith('-'));\n}\n\n/**\n * Pair an archive's name listing (`unzip -Z1` / `tar -tf`) with its typed\n * listing (`unzip -Z --h --t` / `tar -tvf`) and split the members into plain\n * (regular file or directory) and special (everything else). Special members\n * are excluded from extraction rather than rejected; the archive is refused\n * only when the two listings disagree in length or a special member's name\n * cannot be passed back to the CLI verbatim (see {@link canExcludeVerbatim}).\n */\nexport function classifyArchiveListing(\n cmd: 'unzip' | 'tar',\n names: string,\n typed: string,\n): { plain: string[]; special: string[] } {\n const nameLines = listingLines(names);\n const typedLines = listingLines(typed);\n if (nameLines.length !== typedLines.length) throw new AnthropicError(INCONSISTENT_LISTING);\n const plain: string[] = [];\n const special: string[] = [];\n nameLines.forEach((name, i) => {\n if (PLAIN_TYPE_CHARS[cmd].has(typedLines[i]!.charAt(0))) {\n plain.push(name);\n return;\n }\n if (!canExcludeVerbatim(cmd, name)) {\n throw new AnthropicError(\n `refusing to extract archive: cannot safely exclude member ${JSON.stringify(name)}`,\n );\n }\n special.push(name);\n });\n return { plain, special };\n}\n\n/**\n * Walk `dir` with `lstat` semantics and reject anything that is not a regular\n * file or directory. Never follows a link and never descends into anything\n * but a real directory.\n */\nexport async function assertOnlyPlainEntries(dir: string): Promise<void> {\n for (const entry of await fs.readdir(dir, { withFileTypes: true })) {\n if (entry.isDirectory()) await assertOnlyPlainEntries(path.join(dir, entry.name));\n else if (!entry.isFile()) throw new AnthropicError(INCONSISTENT_LISTING);\n }\n}\n\n/**\n * Run an archive CLI (`unzip` for zip archives, `tar` for everything else),\n * returning its stdout. Both binaries must be on `PATH`; a missing one would\n * otherwise surface as an opaque `ENOENT` spawn failure, so it is turned into a\n * clear, specific error naming the missing command.\n */\nasync function runArchiveTool(cmd: 'unzip' | 'tar', args: string[]): Promise<string> {\n try {\n const { stdout } = await execFileAsync(cmd, args);\n return stdout;\n } catch (e) {\n if (errnoCode(e) === 'ENOENT') {\n throw new AnthropicError(\n `skill extraction requires the \\`${cmd}\\` command, but it was not found on PATH`,\n );\n }\n throw e;\n }\n}\n\n/**\n * The single top-level directory shared by every entry in an archive listing,\n * or `''` if entries don't all live under one common directory. Skill bundles\n * are packaged wrapped in one directory named after the skill (e.g.\n * `pdf/SKILL.md`, `pdf/scripts/...`); the extractor strips it so contents land\n * directly in the skill's dir instead of a redundant nested `<skill>/<skill>/`\n * level. A flat or multi-root archive yields `''`.\n */\nfunction archiveTopDir(names: string[]): string {\n let top: string | undefined;\n let nested = false;\n for (const raw of names) {\n // Drop `.` / empty segments so a `./pdf/...`-style listing (e.g. from\n // `tar -C dir .`) is treated the same as `pdf/...`.\n const parts = raw\n .trim()\n .split('/')\n .filter((p) => p !== '' && p !== '.');\n if (parts.length === 0) continue;\n const first = parts[0]!;\n if (top === undefined) top = first;\n else if (first !== top) return '';\n if (parts.length > 1) nested = true;\n }\n return top !== undefined && nested ? top : '';\n}\n\n/**\n * Extract a skill download (a zip or tar.* archive) into `dest`. Streams the\n * response body straight to a temp file beside `dest` (so the whole archive is\n * never buffered in memory — skills can contain large binaries), then shells out\n * to `unzip`/`tar` — consistent with the rest of the toolset, which already\n * invokes `bash` and `rg`. Both `unzip` and `tar` must be available on `PATH`; a\n * missing binary surfaces as a clear error (see {@link runArchiveTool}). Refuses\n * any member that would escape `dest` (zip-slip / tar-slip): skill archives\n * come from the API, but skills can be third-party. Members that are not a\n * regular file or directory (symlink, hardlink, device, fifo) are excluded\n * from extraction rather than rejected; an archive whose special members\n * cannot be excluded reliably is refused (see {@link classifyArchiveListing}).\n * `tar` matches exclusions unanchored, so a plain member sharing a special\n * member's name may be dropped too. The staging tree is verified to hold only\n * regular files and directories before anything is promoted into `dest`.\n *\n * The skill bundle's single wrapper directory is stripped: the archive is\n * extracted into a staging dir and the wrapper's contents are promoted into\n * `dest`, so files land at `dest/SKILL.md` rather than a doubled\n * `dest/<skill>/SKILL.md` (`unzip` has no `--strip-components`, so this is\n * done uniformly by staging + promote rather than per-tool flags).\n */\nexport async function extractSkillArchive(resp: Response, dest: string): Promise<void> {\n const tmp = path.join(dest, `.skill-archive-${process.pid}-${Date.now()}`);\n if (!resp.body) {\n throw new AnthropicError('skill download response had no body');\n }\n await stream.promises.pipeline(\n stream.Readable.fromWeb(resp.body as Parameters<typeof stream.Readable.fromWeb>[0]),\n fssync.createWriteStream(tmp),\n );\n const stage = path.join(path.dirname(dest), `.skill-stage-${process.pid}-${Date.now()}`);\n const excludeFile = path.join(path.dirname(dest), `.skill-exclude-${process.pid}-${Date.now()}`);\n try {\n // Sniff the first bytes: zip archives start with \"PK\\x03\\x04\"; treat\n // anything else as a tar.* archive (`tar -xf` autodetects gzip/bzip2/xz).\n const head = await readHead(tmp, 4);\n const isZip =\n head.length >= 4 && head[0] === 0x50 && head[1] === 0x4b && head[2] === 0x03 && head[3] === 0x04;\n const archiveCmd = isZip ? 'unzip' : 'tar';\n // List first, validate, then extract — `tar`/`unzip` will happily write a\n // `../` member (or follow a symlink member) outside `-C`/`-d` otherwise.\n const names = await runArchiveTool(archiveCmd, isZip ? ['-Z1', tmp] : ['-tf', tmp]);\n const typed = await runArchiveTool(archiveCmd, isZip ? ['-Z', '--h', '--t', tmp] : ['-tvf', tmp]);\n const { plain, special } = classifyArchiveListing(archiveCmd, names, typed);\n assertSafeMemberNames([...plain, ...special]);\n const top = archiveTopDir(plain);\n await fs.mkdir(stage, { recursive: true, mode: DIR_CREATE_MODE });\n // `unzip` exits non-zero when every member is excluded, so only run the\n // extractor when there is something to extract.\n if (plain.length > 0) {\n await runArchiveTool(archiveCmd, await extractArgs(archiveCmd, tmp, stage, special, excludeFile));\n }\n await assertOnlyPlainEntries(stage);\n // Promote the wrapper's contents (or the staged tree itself, if the\n // archive wasn't wrapped) into the already-created empty `dest`. `stage`\n // is a sibling of `dest`, so each rename stays on one filesystem.\n const srcRoot = top ? path.join(stage, top) : stage;\n const entries = await fs.readdir(srcRoot).catch((e: unknown) => {\n throw errnoCode(e) === 'ENOENT' ? new AnthropicError(INCONSISTENT_LISTING) : e;\n });\n for (const entry of entries) {\n await fs.rename(path.join(srcRoot, entry), path.join(dest, entry));\n }\n } finally {\n await fs.rm(tmp, { force: true });\n await fs.rm(excludeFile, { force: true });\n await fs.rm(stage, { recursive: true, force: true });\n }\n}\n\n/**\n * Arguments that extract `archive` into `stage` while excluding every member\n * in `special`. Names are glob-escaped because both CLIs treat exclusions as\n * patterns; `tar` reads them from `excludeFile`, `unzip` takes them after\n * `-x`, which must follow `-d` so no pattern is parsed as an option.\n */\nasync function extractArgs(\n cmd: 'unzip' | 'tar',\n archive: string,\n stage: string,\n special: string[],\n excludeFile: string,\n): Promise<string[]> {\n const patterns = special.map((name) => name.replace(/[*?[\\\\]/g, '\\\\$&'));\n if (cmd === 'unzip') {\n return ['-oq', archive, '-d', stage, ...(patterns.length > 0 ? ['-x', ...patterns] : [])];\n }\n if (patterns.length === 0) return ['-xf', archive, '-C', stage];\n await fs.writeFile(excludeFile, patterns.join('\\n') + '\\n', { flag: 'wx', mode: 0o600 });\n return ['-xf', archive, '-C', stage, '-X', excludeFile];\n}\n\n/** Read the first `n` bytes of `file`. */\nasync function readHead(file: string, n: number): Promise<Buffer> {\n const handle = await fs.open(file, 'r');\n try {\n const buf = Buffer.alloc(n);\n const { bytesRead } = await handle.read(buf, 0, n, 0);\n return buf.subarray(0, bytesRead);\n } finally {\n await handle.close();\n }\n}\n","/**\n * Session-level memory-store download and sync.\n *\n * A session may have several memory stores attached. This module resolves\n * where each store's folder goes on disk, opens a {@link LocalFileStore}\n * there, and reconciles each folder with its remote store — the merge rules\n * live on {@link SessionMemoryStores}.\n *\n * Node-only (it sits on the filesystem-backed FileStore); like `skills.ts`,\n * it is reachable through the shimmed `node.ts` entry point.\n */\n\nimport { crypto, path } from '../../internal/node';\nimport type { Anthropic } from '../../client';\nimport { AnthropicError } from '../../core/error';\nimport { loggerFor, type Logger } from '../../internal/utils/log';\nimport { decodeUTF8 } from '../../internal/utils/bytes';\nimport { isStatus } from '../../internal/utils/backoff';\nimport { isPathLegal, FileStoreError, LocalFileStore, type FileStore } from '../../internal/file-store';\nimport type { BetaManagedAgentsSession } from '../../resources/beta/sessions/sessions';\nimport type { BetaManagedAgentsMemoryStoreResource } from '../../resources/beta/sessions/resources';\nimport type {\n BetaManagedAgentsMemory,\n BetaManagedAgentsMemoryView,\n} from '../../resources/beta/memory-stores/memories';\nimport { DEFAULT_MEMORY_SYNC_INTERVAL_MS, checkMemorySyncInterval } from './sync-interval';\n\nexport { DEFAULT_MEMORY_SYNC_INTERVAL_MS, MIN_MEMORY_SYNC_INTERVAL_MS } from './sync-interval';\n\n/**\n * Whether a locally deleted file may delete its memory on the server:\n * `\"enabled\"` sends the delete, `\"log_only\"` runs the checks but only logs,\n * `\"disabled\"` never deletes.\n */\nexport type MemoryDeleteMode = 'enabled' | 'log_only' | 'disabled';\n\n/**\n * Time bound the worker puts on each teardown pass — the final\n * {@link SessionMemoryStores.finish}, then {@link SessionMemoryStores.flushWrites} —\n * so a slow server cannot stall teardown.\n */\nexport const MEMORY_FLUSH_TIMEOUT_MS = 30_000;\n\n/**\n * Marker file stamped into every store folder; a sync trusts the folder only\n * when it matches. Never itself syncs.\n */\nexport const MARKER_PATH = '.anthropic-memory-store';\n\nconst MARKER_VERSION = 1;\n\nfunction markerSha(memoryStoreId: string): string {\n return crypto\n .createHash('sha256')\n .update(`version ${MARKER_VERSION}\\n${memoryStoreId}`, 'utf-8')\n .digest('hex');\n}\n\n/** How long a file must stay missing locally before its server delete goes out. */\nexport const DELETE_CORROBORATION_MS = 30_000;\n\n/**\n * Page sizes for memory listings — the API's maximum per view: `basic` pages\n * carry up to 100 items, `full` pages are capped by the server.\n */\nconst LIST_PAGE_SIZE = 100;\nconst FULL_LIST_PAGE_SIZE = 20;\n\n/**\n * How many single-memory content fetches may be in flight at once during one\n * store's pull pass. A sync rarely pulls more than a handful of memories, so\n * a higher cap buys nothing in the common case.\n */\nconst FETCH_CONCURRENCY = 16;\n\n/**\n * How many uploads one store's flush keeps in flight. At ~0.3s per upload,\n * 32 clears the server's 2000-memories-per-store cap inside\n * {@link MEMORY_FLUSH_TIMEOUT_MS}.\n */\nexport const UPLOAD_CONCURRENCY = 32;\n\n/**\n * Per-sync remote-delete cap bounds. The floor lets a small store's\n * deletes clear in one pass; the ceiling caps damage on large ones.\n */\nconst DELETE_CAP_FLOOR = 8;\nconst DELETE_CAP_CEILING = 50;\n\n/**\n * One directory scan: the marker check and the file listing come from the\n * same read, so a folder wiped mid-sync cannot pass the check and then look\n * empty.\n */\ntype MarkerScan = {\n files: Record<string, string>;\n markerOk: boolean;\n distrustReason: string | null;\n};\n\n/**\n * A session's memory stores could not be mounted.\n *\n * Thrown by {@link SessionMemoryStores.download} when a store cannot be\n * materialised on disk, and by the environment worker when a work item for a\n * session that has memory stores carried no sessions token to reach them with.\n */\nexport class SessionMemoryError extends AnthropicError {\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'SessionMemoryError';\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause !== undefined) this.cause = cause;\n }\n}\n\n/** One attached store: its {@link FileStore} on disk plus the sync baseline. */\ntype AttachedStore = {\n memoryStoreId: string;\n files: FileStore;\n readOnly: boolean;\n /** `{rel → content sha}` as of the last download or successful sync. */\n baseline: Map<string, string>;\n /** `{rel → sha}` the server refused; retried only after the file changes. */\n refusedShas: Map<string, string>;\n /** `{rel → Date.now()}` when first seen missing locally. */\n pendingDeletes: Map<string, number>;\n};\n\n/** One sync's remote-delete gate and counters. */\nclass DeletePass {\n attempted = 0;\n capped = 0;\n suppressed = 0;\n\n constructor(\n readonly mode: MemoryDeleteMode,\n readonly cap: number,\n /** Skip the delete wait — set on the session's last sync. */\n readonly waiveWindow: boolean,\n ) {}\n\n takeSlot(): boolean {\n if (this.attempted >= this.cap) {\n this.capped++;\n return false;\n }\n this.attempted++;\n return true;\n }\n}\n\nexport interface SessionMemoryStoresOptions {\n /** Base directory for the `{workdir}/memory/<name>` fallback store location. */\n workdir: string;\n /**\n * How often (milliseconds) {@link SessionMemoryStores.syncIfDue} actually\n * syncs. Defaults to {@link DEFAULT_MEMORY_SYNC_INTERVAL_MS} (15s); values\n * below {@link MIN_MEMORY_SYNC_INTERVAL_MS} (5s) are rejected.\n */\n syncIntervalMs?: number;\n /** See {@link MemoryDeleteMode}. Defaults to `\"enabled\"`. */\n syncDeletions?: MemoryDeleteMode;\n}\n\n/**\n * The memory stores attached to one session, materialised on disk.\n *\n * {@link SessionMemoryStores.download} opens a {@link LocalFileStore} at each\n * attached store's directory (its `mount_path`, or a workdir fallback — see\n * {@link SessionMemoryStores.download}), pulls its memories, and records each\n * one's `content_sha256` as the sync baseline. Each sync\n * ({@link SessionMemoryStores.syncIfDue} on the worker's cadence,\n * {@link SessionMemoryStores.finish} once at the end) reconciles disk against\n * server, per store and per path:\n *\n * - a memory changed only remotely is written to disk;\n * - a file changed only locally is uploaded — an update with a\n * `content_sha256` precondition, or a create for a new file;\n * - a file changed on both sides logs a warning and takes the server version;\n * - a file the server refuses (too large, invalid content) is skipped —\n * warned once and retried only after the file changes; other files keep\n * syncing;\n * - a file deleted locally is deleted on the server after a delay and a\n * re-check — never on the first sync that notices, and only up to a\n * per-sync cap. `syncDeletions` gates it;\n * - a memory deleted on the server is deleted on disk — unless the local\n * file holds un-pushed edits: a writable store re-creates the memory\n * from the file, a read-only one keeps the file unsynced;\n * - a store attached read-only pulls but never pushes.\n *\n * A download pulls the whole store, so it lists with content included. The\n * recurring syncs instead run two phases: a content-free listing (paths and\n * shas) drives the merge decisions, then only the memories actually being\n * written to disk are fetched, a bounded number at a time. A sync that finds\n * nothing changed moves no content at all.\n *\n * A file whose write to disk failed is never in the baseline, so its absence\n * reads as a failed download — it is pulled again, never deleted. A write\n * never re-creates a store folder that vanished mid-sync: it fails, and the\n * next sync's scan finds whatever is at the path by then — nothing\n * (re-downloaded) or someone else's files (left alone) — under the rules\n * below.\n *\n * A store folder that loses its {@link MARKER_PATH} marker, is emptied,\n * or vanishes is re-downloaded rather than treated as a mass local\n * delete; a folder whose marker names another store is left as found —\n * nothing pushed, nothing deleted.\n *\n * Two things about the store's directory make\n * {@link SessionMemoryStores.download} refuse the session outright, with\n * {@link SessionMemoryError}: a `mount_path` that is not a clean absolute\n * path, and a directory already sitting at that path.\n *\n * {@link SessionMemoryStores.download} throws on the first store it cannot\n * materialise. The syncs never throw: mid-session, one bad store or one bad\n * file is logged and the rest continue. Instances are not safe for concurrent\n * use. The worker builds one on its token-scoped sub-client (the memory\n * endpoints reject the environment key): `syncIfDue` after each tool call,\n * `finish` once at a clean end, a bounded {@link SessionMemoryStores.flushWrites}\n * in every teardown, `dispose` last.\n */\nexport class SessionMemoryStores {\n readonly #client: Anthropic;\n readonly #workdir: string;\n readonly #syncIntervalMs: number;\n readonly #syncDeletions: MemoryDeleteMode;\n readonly #log: Logger;\n #lastSyncAt: number;\n #finished = false;\n readonly #stores: AttachedStore[] = [];\n\n constructor(client: Anthropic, opts: SessionMemoryStoresOptions) {\n this.#client = client;\n this.#workdir = opts.workdir;\n this.#syncIntervalMs = opts.syncIntervalMs ?? DEFAULT_MEMORY_SYNC_INTERVAL_MS;\n checkMemorySyncInterval(this.#syncIntervalMs, 'syncIntervalMs');\n this.#syncDeletions = opts.syncDeletions ?? 'enabled';\n this.#log = loggerFor(client);\n this.#lastSyncAt = Date.now();\n }\n\n /**\n * Every attached store's root directory.\n *\n * The worker lists these as the file tools' allowed roots so a store\n * mounted outside the workdir stays reachable.\n */\n get roots(): string[] {\n return this.#stores.map((s) => s.files.root().path);\n }\n\n /**\n * Root directories of stores attached read-only.\n *\n * The file tools consult this to refuse writes into read-only stores.\n */\n get readOnlyRoots(): string[] {\n return this.#stores.filter((s) => s.readOnly).map((s) => s.files.root().path);\n }\n\n /**\n * Where one store's files land on disk.\n *\n * The store's files land at its `mount_path` — the very location the agent's\n * system prompt tells it to read. A `mount_path` we cannot use verbatim is\n * refused rather than quietly relocated: the agent would read an empty\n * folder at the path it was told about, and write notes somewhere the next\n * session looks for nothing.\n */\n #storeRoot(resource: BetaManagedAgentsMemoryStoreResource): string {\n if (resource.mount_path) {\n if (!isPathLegal(resource.mount_path)) {\n throw new SessionMemoryError(\n `memory store mount_path is not a clean absolute path: ${JSON.stringify(resource.mount_path)} ` +\n `(memory_store_id=${resource.memory_store_id})`,\n );\n }\n return resource.mount_path;\n }\n // No mount_path at all: nothing points the agent anywhere, so the workdir\n // is as good a home as any.\n return path.join(this.#workdir, 'memory', resource.name || resource.memory_store_id);\n }\n\n /**\n * Download every attached store's memories to disk.\n *\n * `session` arrives already fetched — one snapshot shared with the skills\n * download, so the two cannot disagree about the resources.\n */\n async download(session: BetaManagedAgentsSession): Promise<void> {\n for (const resource of session.resources) {\n if (resource.type !== 'memory_store') continue;\n const root = this.#storeRoot(resource);\n let store: AttachedStore | undefined;\n try {\n store = {\n memoryStoreId: resource.memory_store_id,\n // utf8: a binary file is refused at put/get, not mid-sync.\n files: await LocalFileStore.open(root, { utf8: true }),\n readOnly: resource.access === 'read_only',\n baseline: new Map(),\n refusedShas: new Map(),\n pendingDeletes: new Map(),\n };\n // A root `open` did not create is a dead run's leftovers; the first\n // sync would upload them into the customer's store.\n if (!store.files.root().removedOnDispose) {\n // The configured path, not root().path — that one is resolved and\n // would name a symlinked mount's target.\n throw new SessionMemoryError(\n `something already exists at the memory store's path: ${root} ` +\n `(memory_store_id=${resource.memory_store_id}); ` +\n 'it must not exist when the session starts',\n );\n }\n try {\n await store.files.createRoot();\n } catch (e) {\n if (!isErrno(e)) throw e;\n // An unmountable root fails the item, not just one file.\n throw new SessionMemoryError(\n `cannot create the memory store's folder: ${root} ` +\n `(memory_store_id=${resource.memory_store_id}): ${e}; ` +\n 'the worker host must make this mount path writable',\n e,\n );\n }\n await this.#stampAndPull(store);\n this.#log.info('downloaded memories', {\n count: store.baseline.size,\n memory_store_id: store.memoryStoreId,\n dest: store.files.root().path,\n });\n this.#stores.push(store);\n } catch (e) {\n // A half-downloaded folder self-destructs; `dispose` leaves a refused\n // pre-existing directory exactly as found.\n if (store) await store.files.dispose().catch(() => {});\n // Every store must land: a session missing a folder its system prompt\n // names runs with amnesia and syncs nothing back.\n if (e instanceof SessionMemoryError) throw e;\n throw new SessionMemoryError(\n `failed to download memory store memory_store_id=${resource.memory_store_id}: ${e}`,\n e,\n );\n }\n }\n this.#lastSyncAt = Date.now();\n }\n\n /**\n * The session's last sync — skips the delete wait, so calling it twice\n * would undo the protection; it throws instead.\n */\n async finish(): Promise<void> {\n if (this.#finished) {\n throw new AnthropicError(\"finish() was already called: it is the session's last sync and runs once\");\n }\n this.#finished = true;\n await this.syncAll(true);\n }\n\n /** @internal — reconcile every store once; the tests' deterministic driver */\n async syncAll(final: boolean): Promise<void> {\n await Promise.all(this.#stores.map((store) => this.#syncStore(store, final)));\n this.#lastSyncAt = Date.now();\n }\n\n async #scanMarker(store: AttachedStore): Promise<MarkerScan> {\n const local = await store.files.hashtree();\n const marker = local[MARKER_PATH];\n delete local[MARKER_PATH];\n if (marker === markerSha(store.memoryStoreId)) {\n return { files: local, markerOk: true, distrustReason: null };\n }\n return {\n files: local,\n markerOk: false,\n distrustReason:\n marker !== undefined ? 'the marker file does not match this store' : 'the marker file is gone',\n };\n }\n\n async #syncStore(store: AttachedStore, final: boolean): Promise<void> {\n try {\n const scan = await this.#scanMarker(store);\n const local = scan.files;\n if (!scan.markerOk) {\n if (Object.keys(local).length > 0) {\n this.#log.warn(`${scan.distrustReason}; leaving the memory store folder as found and not syncing`, {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n });\n return;\n }\n await this.#recover(store, 'the folder or its marker is gone');\n return;\n }\n // A lone file vanishing is an ordinary deletion; two or more at\n // once with nothing left is a wiped folder.\n if (Object.keys(local).length === 0 && store.baseline.size > 1) {\n await this.#recover(store, 'every memory file is gone at once');\n return;\n }\n\n const remote = new Map<string, BetaManagedAgentsMemory>();\n for await (const [rel, item] of this.#listMemories(store.memoryStoreId)) {\n remote.set(rel, item);\n }\n\n const deletes = new DeletePass(\n this.#syncDeletions,\n Math.max(DELETE_CAP_FLOOR, Math.min(DELETE_CAP_CEILING, Math.floor(store.baseline.size / 4))),\n final,\n );\n const pulls: Array<[rel: string, item: BetaManagedAgentsMemory]> = [];\n const baseline = new Map<string, string>();\n const paths = [...new Set([...remote.keys(), ...Object.keys(local), ...store.baseline.keys()])].sort();\n for (const rel of paths) {\n const remoteItem = remote.get(rel);\n const localSha = local[rel];\n const baseSha = store.baseline.get(rel);\n let sha: string | undefined;\n if (\n localSha === undefined &&\n baseSha !== undefined &&\n remoteItem !== undefined &&\n remoteItem.content_sha256 === baseSha &&\n !store.readOnly\n ) {\n sha = await this.#corroboratedDelete(store, rel, remoteItem, baseSha, deletes);\n } else {\n sha = await this.#syncPath(store, rel, remoteItem, localSha, pulls);\n }\n if (sha !== undefined) baseline.set(rel, sha);\n }\n store.baseline = baseline;\n // The content pass: everything above moved only shas.\n await this.#pullAll(store, pulls);\n if (deletes.suppressed > 0) {\n this.#log.debug('remote deletes are disabled; locally deleted memories stay on the server', {\n count: deletes.suppressed,\n memory_store_id: store.memoryStoreId,\n });\n }\n if (deletes.capped > 0) {\n this.#log.warn(\n `delete cap reached: ${deletes.mode === 'log_only' ? 'would send' : 'sent'} ` +\n `${deletes.attempted} deletes, held ${deletes.capped} for later syncs`,\n { memory_store_id: store.memoryStoreId },\n );\n }\n } catch (e) {\n this.#log.warn('memory sync failed', { memory_store_id: store.memoryStoreId, error: String(e) });\n }\n }\n\n /** Sync when `syncIntervalMs` has elapsed since the last one. Never throws. */\n async syncIfDue(): Promise<void> {\n if (Date.now() - this.#lastSyncAt < this.#syncIntervalMs) return;\n await this.syncAll(false);\n }\n\n /**\n * Upload new and changed files; send no deletes and pull nothing.\n *\n * The push-only rescue pass for a session ending on an error or\n * cancel — best-effort, bounded by the caller: once `signal` aborts no\n * further upload starts, each store cut off part-way logs how many\n * changed files it had not finished uploading, and this resolves without\n * waiting for requests already in flight. Each store uploads up to\n * {@link UPLOAD_CONCURRENCY} files at a time. Skips read-only stores,\n * refused files, files the server already holds, and folders that fail\n * the marker check. Never throws.\n */\n async flushWrites(signal?: AbortSignal): Promise<void> {\n await Promise.all(this.#stores.map((store) => this.#flushStore(store, signal)));\n }\n\n async #flushStore(store: AttachedStore, signal: AbortSignal | undefined): Promise<void> {\n const dirty = new Map<string, string>();\n const unsent = new Set<string>();\n const push = async (): Promise<void> => {\n if (store.readOnly) return;\n const scan = await this.#scanMarker(store);\n if (!scan.markerOk) {\n this.#log.warn(`${scan.distrustReason}; not uploading anything from the memory store folder`, {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n });\n return;\n }\n for (const [rel, sha] of Object.entries(scan.files)) {\n if (sha !== store.baseline.get(rel) && store.refusedShas.get(rel) !== sha) {\n dirty.set(rel, sha);\n unsent.add(rel);\n }\n }\n if (dirty.size === 0 || signal?.aborted) return;\n const remote = new Map<string, BetaManagedAgentsMemory>();\n for await (const [rel, item] of this.#listMemories(store.memoryStoreId)) {\n if (signal?.aborted) return;\n remote.set(rel, item);\n }\n const uploads: Array<\n [rel: string, localSha: string | undefined, existing: BetaManagedAgentsMemory | undefined]\n > = [];\n for (const rel of [...dirty.keys()].sort()) {\n const localSha = dirty.get(rel);\n const baseSha = store.baseline.get(rel);\n const existing = remote.get(rel);\n if (existing !== undefined && existing.content_sha256 === localSha) {\n store.baseline.set(rel, existing.content_sha256);\n unsent.delete(rel);\n continue;\n }\n if (existing !== undefined && existing.content_sha256 !== baseSha) {\n this.#log.warn('memory changed both locally and remotely; the flush leaves the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n unsent.delete(rel);\n continue;\n }\n uploads.push([rel, localSha, existing]);\n }\n await this.#uploadAll(store, uploads, unsent, signal);\n };\n try {\n await settledOrAborted(push(), signal);\n if (signal?.aborted && unsent.size > 0) {\n this.#log.warn(\n `memory flush cut off part-way; ${unsent.size} of ${dirty.size} changed files had not finished uploading`,\n { memory_store_id: store.memoryStoreId },\n );\n }\n } catch (e) {\n this.#log.warn('memory flush failed', { memory_store_id: store.memoryStoreId, error: String(e) });\n }\n }\n\n /**\n * Remove every store directory that {@link SessionMemoryStores.download}\n * created. Pre-existing directories are left alone — that is\n * {@link FileStore.dispose}'s own rule. A folder that fails the marker\n * check is kept too — sync left it as found, so must dispose.\n */\n async dispose(): Promise<void> {\n for (const store of this.#stores) {\n const root = store.files.root();\n try {\n const scan = await this.#scanMarker(store);\n if (!scan.markerOk && Object.keys(scan.files).length > 0) {\n this.#log.warn(`${scan.distrustReason}; leaving the memory store folder on disk`, {\n root: root.path,\n memory_store_id: store.memoryStoreId,\n });\n continue;\n }\n await store.files.dispose();\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n this.#log.warn('failed to remove the memory store folder', {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n continue;\n }\n if (root.removedOnDispose) {\n this.#log.info('removed memory store dir', {\n dest: root.path,\n memory_store_id: store.memoryStoreId,\n });\n }\n }\n }\n\n /** Rebuild a destroyed folder from the server; sends no deletes, no uploads. */\n async #recover(store: AttachedStore, reason: string): Promise<void> {\n this.#log.warn(`${reason}; re-downloading the memory store folder instead of syncing`, {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n });\n await store.files.createRoot();\n await this.#stampAndPull(store);\n }\n\n /**\n * Write the marker, then pull every remote memory. Baseline is cleared\n * first so a failed write never leaves an entry whose file is not on disk.\n * Every memory is needed here, so the listing carries the content — pages\n * cost far fewer round-trips than a request per memory.\n */\n async #stampAndPull(store: AttachedStore): Promise<void> {\n store.baseline = new Map();\n store.pendingDeletes.clear();\n await store.files.put(MARKER_PATH, `version ${MARKER_VERSION}\\n${store.memoryStoreId}`);\n for await (const [rel, item] of this.#listMemories(store.memoryStoreId, 'full')) {\n if (await this.#write(store, rel, item.content ?? '')) {\n store.baseline.set(rel, item.content_sha256);\n }\n }\n }\n\n /**\n * Reconcile one path. Returns the sha to record in the baseline, or\n * `undefined` to drop the path from it.\n *\n * `pulls` is an output: when the remote version should be written to disk,\n * this appends `[rel, remote]` to it instead of writing — `rel` is the\n * file to write, `remote` the listed memory whose content `#pullAll` will\n * fetch and write there.\n */\n async #syncPath(\n store: AttachedStore,\n rel: string,\n remote: BetaManagedAgentsMemory | undefined,\n localSha: string | undefined,\n pulls: Array<[rel: string, item: BetaManagedAgentsMemory]>,\n ): Promise<string | undefined> {\n const baseSha = store.baseline.get(rel);\n if (localSha !== undefined) {\n store.pendingDeletes.delete(rel);\n }\n\n if (!remote) {\n if (localSha === undefined) {\n store.pendingDeletes.delete(rel);\n return undefined;\n }\n if (baseSha !== undefined) {\n if (localSha === baseSha) {\n const fresh = await this.#removeLocal(store, rel, baseSha);\n if (fresh === undefined) return undefined;\n if (fresh === baseSha) return baseSha;\n localSha = fresh;\n }\n // The file holds an un-pushed edit — the only copy; falling\n // through re-creates or keeps it.\n if (store.readOnly) {\n this.#log.warn(\n 'memory deleted remotely but edited locally; keeping the file, ' +\n 'which a read-only store cannot push',\n { path: rel, memory_store_id: store.memoryStoreId },\n );\n } else if (store.refusedShas.get(rel) !== localSha) {\n this.#log.info('memory deleted remotely but edited locally; re-creating it from the file', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n }\n }\n if (store.readOnly) return undefined;\n if (store.refusedShas.get(rel) === localSha) return undefined;\n return await this.#upload(store, rel, localSha, undefined);\n }\n\n const remoteSha = remote.content_sha256;\n const remoteChanged = remoteSha !== baseSha;\n const locallyEdited = localSha !== undefined && localSha !== baseSha && localSha !== remoteSha;\n // Read-only stores never push, so their local edits don't count.\n const localChanged = !store.readOnly && locallyEdited;\n\n if (localSha === undefined && baseSha !== undefined) {\n // Only successful writes enter the baseline, so this file was verifiably\n // on disk and is now gone: a real local deletion. The unchanged-remote\n // case went to #corroboratedDelete.\n if (remoteChanged) {\n this.#log.warn('memory deleted locally but changed remotely; restoring the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n store.pendingDeletes.delete(rel);\n pulls.push([rel, remote]);\n }\n return baseSha;\n }\n\n if (remoteChanged) {\n // The file already holds the remote bytes — adopt without a fetch.\n if (localSha === remoteSha) return remoteSha;\n // locallyEdited, not localChanged: warn on read-only overwrites too.\n if (locallyEdited) {\n this.#log.warn('memory changed both locally and remotely; keeping the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n }\n pulls.push([rel, remote]);\n return baseSha;\n }\n if (localChanged) {\n if (store.refusedShas.get(rel) === localSha) return remoteSha;\n return (await this.#upload(store, rel, localSha, remote)) ?? remoteSha;\n }\n return remoteSha;\n }\n\n /**\n * Remove the file for a memory the server no longer has, if it still holds\n * `expectSha`. Returns `undefined` when the file is gone from disk,\n * `expectSha` when it must stay in the baseline (I/O error), or the file's\n * fresh sha when it was edited since the scan.\n */\n async #removeLocal(store: AttachedStore, rel: string, expectSha: string): Promise<string | undefined> {\n // Re-read: an edit since the scan makes this file the only copy.\n let freshSha: string | null;\n try {\n freshSha = await store.files.hashFile(rel);\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n return expectSha;\n }\n if (freshSha === null) return undefined;\n if (freshSha !== expectSha) return freshSha;\n try {\n await store.files.remove(rel);\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n this.#log.warn('failed to remove memory deleted remotely', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n return expectSha;\n }\n return undefined;\n }\n\n /**\n * Write a memory's content to disk; `false` (and a warning) on failure.\n *\n * A `..` component in the wire path reaches here as {@link FileStoreError} —\n * that is the escape guard.\n */\n async #write(store: AttachedStore, rel: string, content: string): Promise<boolean> {\n try {\n await store.files.put(rel, content);\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n this.#log.warn('failed to write memory', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n return false;\n }\n return true;\n }\n\n /**\n * Fetch and write the given memories, {@link FETCH_CONCURRENCY} at a time.\n *\n * The sync's content pass: the listing carried no content, so each memory\n * is fetched individually and written as it arrives. On success the path's\n * baseline advances; on a failed fetch or write the old entry stays and the\n * next sync retries. A 404 means the memory was deleted after the listing —\n * the next sync reconciles it.\n */\n async #pullAll(store: AttachedStore, pulls: Array<[rel: string, item: BetaManagedAgentsMemory]>) {\n if (pulls.length === 0) return;\n const pullOne = async (rel: string, listed: BetaManagedAgentsMemory): Promise<void> => {\n let item: BetaManagedAgentsMemory;\n try {\n item = await this.#client.beta.memoryStores.memories.retrieve(listed.id, {\n memory_store_id: store.memoryStoreId,\n view: 'full',\n });\n } catch (e) {\n if (isStatus(e, 404)) return;\n this.#log.warn('failed to fetch memory content', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n return;\n }\n if (await this.#write(store, rel, item.content ?? '')) {\n store.baseline.set(rel, item.content_sha256);\n }\n };\n // A fixed pool of workers drains the queue; the write stays inside the\n // worker so a slow disk cannot let fetched bodies pile up beyond the bound.\n const queue = pulls[Symbol.iterator]();\n const worker = async (): Promise<void> => {\n for (const [rel, listed] of queue) await pullOne(rel, listed);\n };\n await Promise.all(Array.from({ length: Math.min(FETCH_CONCURRENCY, pulls.length) }, worker));\n }\n\n /**\n * Upload the given files, {@link UPLOAD_CONCURRENCY} at a time, taking each\n * path off `unsent` as its upload returns. No upload starts once `signal`\n * aborts; the ones already in flight run to completion.\n */\n async #uploadAll(\n store: AttachedStore,\n uploads: Array<\n [rel: string, localSha: string | undefined, existing: BetaManagedAgentsMemory | undefined]\n >,\n unsent: Set<string>,\n signal: AbortSignal | undefined,\n ): Promise<void> {\n const queue = uploads[Symbol.iterator]();\n const worker = async (): Promise<void> => {\n for (const [rel, localSha, existing] of queue) {\n if (signal?.aborted) return;\n const sha = await this.#upload(store, rel, localSha, existing);\n unsent.delete(rel);\n if (sha !== undefined) store.baseline.set(rel, sha);\n }\n };\n await Promise.all(Array.from({ length: Math.min(UPLOAD_CONCURRENCY, uploads.length) }, worker));\n }\n\n /**\n * The store's memories keyed by relative path (the wire path's leading `/`\n * stripped — `#upload` re-prefixes it) — `basic` view (shas, no content) at\n * {@link LIST_PAGE_SIZE} per page unless the caller needs `full` pages.\n * `memory_prefix` rollups and the reserved marker path are skipped.\n */\n async *#listMemories(\n memoryStoreId: string,\n view: BetaManagedAgentsMemoryView = 'basic',\n ): AsyncGenerator<[rel: string, item: BetaManagedAgentsMemory]> {\n const limit = view === 'basic' ? LIST_PAGE_SIZE : FULL_LIST_PAGE_SIZE;\n for await (const item of this.#client.beta.memoryStores.memories.list(memoryStoreId, { view, limit })) {\n if (item.type !== 'memory') continue;\n const rel = item.path.replace(/^\\/+/, '');\n if (rel === MARKER_PATH) {\n this.#log.warn('the server listed the reserved marker path; skipping', {\n path: item.path,\n memory_store_id: memoryStoreId,\n });\n continue;\n }\n yield [rel, item];\n }\n }\n\n /**\n * Push one local file; `undefined` keeps the old baseline so the next pass retries.\n *\n * A refusal the server would repeat (400/413, the utf-8 gate) enters\n * `refusedShas`: warned once, retried only after the file changes.\n */\n async #upload(\n store: AttachedStore,\n rel: string,\n localSha: string | undefined,\n existing: BetaManagedAgentsMemory | undefined,\n ): Promise<string | undefined> {\n try {\n const data = await store.files.get(rel);\n if (data === null) return undefined;\n const content = decodeUTF8(data);\n const item =\n existing ?\n await this.#client.beta.memoryStores.memories.update(existing.id, {\n memory_store_id: store.memoryStoreId,\n content,\n precondition: { type: 'content_sha256', content_sha256: existing.content_sha256 },\n })\n : await this.#client.beta.memoryStores.memories.create(store.memoryStoreId, {\n path: '/' + rel,\n content,\n });\n store.refusedShas.delete(rel);\n return item.content_sha256;\n } catch (e) {\n if (existing && isStatus(e, 404)) {\n // Deleted remotely since the listing, so this file is now the only copy.\n return await this.#upload(store, rel, localSha, undefined);\n }\n const permanent = e instanceof FileStoreError || isStatus(e, 400) || isStatus(e, 413);\n if (existing && isStatus(e, 409)) {\n // The precondition lost a race: the remote moved under us, so the push\n // is dropped. The local file is now stale — the next sync sees\n // remoteChanged and pulls the winner over it.\n this.#log.warn(\n 'memory changed both locally and remotely; the upload was refused and the local edit loses',\n {\n path: rel,\n memory_store_id: store.memoryStoreId,\n },\n );\n } else if (permanent && localSha !== undefined) {\n store.refusedShas.set(rel, localSha);\n this.#log.warn(\n 'the server rejected this memory file, so it stays un-synced until its content changes',\n { path: rel, memory_store_id: store.memoryStoreId, rejection: String(e) },\n );\n } else {\n this.#log.warn('failed to upload memory', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n }\n return undefined;\n }\n }\n\n /** Send the server delete only after the wait, the cap, and a fresh re-check all clear. */\n async #corroboratedDelete(\n store: AttachedStore,\n rel: string,\n remote: BetaManagedAgentsMemory,\n baseSha: string,\n deletes: DeletePass,\n ): Promise<string | undefined> {\n if (deletes.mode === 'disabled') {\n deletes.suppressed++;\n return baseSha;\n }\n let firstAbsent = store.pendingDeletes.get(rel);\n if (firstAbsent === undefined) {\n firstAbsent = Date.now();\n store.pendingDeletes.set(rel, firstAbsent);\n }\n if (!deletes.waiveWindow && Date.now() - firstAbsent < DELETE_CORROBORATION_MS) {\n return baseSha;\n }\n let markerOk: boolean;\n let stillAbsent: boolean;\n try {\n // Re-check: the folder may have been wiped mid-sync.\n markerOk = (await store.files.hashFile(MARKER_PATH)) === markerSha(store.memoryStoreId);\n stillAbsent = (await store.files.hashFile(rel)) === null;\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n markerOk = stillAbsent = false;\n }\n if (!markerOk) return baseSha;\n if (!stillAbsent) {\n store.pendingDeletes.delete(rel);\n return baseSha;\n }\n if (!deletes.takeSlot()) return baseSha;\n if (deletes.mode === 'log_only') {\n // Repeats each sync — the log is the dry run.\n this.#log.info('log-only: sync would delete this memory on the server', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n return baseSha;\n }\n const sha = await this.#deleteRemote(store, rel, remote, baseSha);\n if (sha === undefined) {\n store.pendingDeletes.delete(rel);\n }\n return sha;\n }\n\n async #deleteRemote(\n store: AttachedStore,\n rel: string,\n remote: BetaManagedAgentsMemory,\n baseSha: string,\n ): Promise<string | undefined> {\n try {\n await this.#client.beta.memoryStores.memories.delete(remote.id, {\n memory_store_id: store.memoryStoreId,\n expected_content_sha256: baseSha,\n });\n } catch (e) {\n if (isStatus(e, 404)) return undefined; // already gone remotely too\n if (isStatus(e, 409) || isStatus(e, 412)) {\n this.#log.warn('memory deleted locally but changed remotely; keeping the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n } else {\n this.#log.warn('failed to delete memory', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n }\n return baseSha;\n }\n this.#log.info('propagated local deletion', { path: rel, memory_store_id: store.memoryStoreId });\n return undefined;\n }\n}\n\n/**\n * True for a thrown value shaped like a Node filesystem error. Shape-checked,\n * not `instanceof Error` — fs errors can come from another realm.\n */\nfunction isErrno(e: unknown): boolean {\n return typeof e === 'object' && e !== null && typeof (e as NodeJS.ErrnoException).code === 'string';\n}\n\n/**\n * Resolve when `p` settles, or as soon as `signal` aborts. A rejection from\n * `p` before the abort propagates; one after it is dropped.\n */\nasync function settledOrAborted(p: Promise<unknown>, signal: AbortSignal | undefined): Promise<void> {\n if (!signal) {\n await p;\n return;\n }\n let onAbort!: () => void;\n const aborted = new Promise<void>((resolve) => {\n onAbort = resolve;\n if (signal.aborted) resolve();\n });\n signal.addEventListener('abort', onAbort, { once: true });\n try {\n await Promise.race([p, aborted]);\n } finally {\n signal.removeEventListener('abort', onAbort);\n }\n}\n","/**\n * Node implementation of the `agent_toolset_20260401` tools — `bash`, `read`,\n * `write`, `edit`, `glob`, `grep` — plus the workdir/skills\n * {@link AgentToolContext}.\n *\n * This mirrors `@anthropic-ai/sdk/tools/memory/node`: it is the explicit,\n * Node-only entry point for these implementations. Importing it pulls in\n * `node:child_process`, `node:fs`, etc., so it is kept separate from the rest of\n * the SDK — depending on it is an opt-in.\n *\n * **Node 22+ is required** for this module: the `glob` tool uses the native\n * `fs.glob`, added in Node 22. The rest of the SDK still supports Node 18+; only\n * the agent toolset has this requirement.\n *\n * The result of {@link betaAgentToolset20260401} is a plain `BetaRunnableTool[]`;\n * hand it to any tool runner — `client.beta.messages.toolRunner({ …, tools })`\n * for the Messages API, or `client.beta.sessions.events.toolRunner({ …, tools })`\n * for a managed-agents session:\n *\n * ```ts\n * import { betaAgentToolset20260401 } from '@anthropic-ai/sdk/tools/agent-toolset/node';\n *\n * const tools = betaAgentToolset20260401({ workdir: '/work' });\n * const tools2 = betaAgentToolset20260401({ workdir: '/work' }).filter((t) => t.name !== 'bash');\n * ```\n *\n * Trust model: the file tools confine to `workdir` plus any `allowedRoots`\n * (symlink-aware) and are safe without a sandbox; `bash` is unrestricted and\n * should run inside one. See {@link AgentToolContext}.\n */\n\nimport * as fs from 'node:fs/promises';\nimport * as fssync from 'node:fs';\nimport * as path from 'node:path';\nimport * as cp from 'node:child_process';\nimport * as crypto from 'node:crypto';\nimport * as readline from 'node:readline';\nimport type { Anthropic } from '../../client';\nimport type { BetaManagedAgentsSession } from '../../resources/beta/sessions/sessions';\nimport { AnthropicError } from '../../core/error';\nimport type { BetaRunnableTool } from '../../lib/tools/BetaRunnableTool';\nimport { ToolError } from '../../lib/tools/ToolError';\nimport { betaTool } from '../../helpers/beta/json-schema';\nimport { promiseWithResolvers } from '../../internal/utils/promise';\nimport {\n atomicWriteFile,\n canonicalize,\n confineToRoot,\n containingRoot,\n DIR_CREATE_MODE,\n fsErrorMessage,\n isWithin,\n} from './fs-util';\n\nexport { setupSkills, extractSkillArchive } from './skills';\nexport {\n SessionMemoryStores,\n SessionMemoryError,\n DEFAULT_MEMORY_SYNC_INTERVAL_MS,\n MIN_MEMORY_SYNC_INTERVAL_MS,\n MEMORY_FLUSH_TIMEOUT_MS,\n MARKER_PATH,\n type MemoryDeleteMode,\n type SessionMemoryStoresOptions,\n} from './memories';\n\nconst BASH_OUTPUT_LIMIT = 100 * 1024;\nconst BASH_DEFAULT_TIMEOUT_MS = 120_000;\n// Default size cap for the read/edit tools (both load the whole file into\n// memory) when AgentToolContext.maxFileBytes is unset. The reject-vs-truncate\n// behaviour remains a separate question pending CMA validation.\nconst DEFAULT_MAX_FILE_BYTES = 256 * 1024;\nconst READ_STREAM_CHUNK_BYTES = 64 * 1024;\nconst NEWLINE = Buffer.from('\\n');\nconst GREP_OUTPUT_LIMIT = 100 * 1024;\nconst GREP_MAX_LINE_LENGTH = 2000;\nconst GLOB_RESULT_LIMIT = 200;\n\n/**\n * A bash command exceeded its `timeoutMs`. Carries the timeout so a caller can\n * tell it apart from an abort without matching on the message text.\n */\nexport class BashTimeoutError extends AnthropicError {\n readonly timeoutMs: number;\n\n constructor(timeoutMs: number) {\n super(`bash command timed out after ${timeoutMs}ms`);\n this.name = 'BashTimeoutError';\n this.timeoutMs = timeoutMs;\n }\n}\n\nconst ANSI_RE = /\\x1b\\[[0-9;?]*[ -/]*[@-~]/g;\n\n// `fs.glob` is Node 22+. `@types/node` may still target an older line, so the\n// surface this module uses is typed locally rather than relying on the ambient\n// declaration. At runtime this module requires Node 22 (see the file header).\ntype GlobFn = (\n pattern: string,\n options: {\n cwd?: string;\n withFileTypes?: boolean;\n exclude?: (entry: fssync.Dirent) => boolean;\n },\n) => AsyncIterable<fssync.Dirent>;\nconst fsGlob = (fs as unknown as { glob: GlobFn }).glob;\n\nfunction resolveMaxBytes(configured: number | null | undefined): number | null {\n return configured === undefined ? DEFAULT_MAX_FILE_BYTES : configured;\n}\n\n/**\n * Throw when the deprecated {@link AgentToolContext.unrestrictedPaths} was\n * passed at all. Nothing else reads that property.\n */\nfunction rejectUnrestrictedPaths(value: boolean | undefined): void {\n if (value === undefined) return;\n throw new AnthropicError(\n 'The `unrestrictedPaths` option you passed to the agent toolset (AgentToolContext) is no longer ' +\n \"supported. The toolset's file tools (read, write, edit, glob, grep) are now always confined to \" +\n 'the working directory plus the directories listed in `allowedRoots`. Remove `unrestrictedPaths` ' +\n 'from your context; to let the file tools reach any other directory, add it to `allowedRoots`.',\n );\n}\n\n/**\n * Workdir + path-policy for the agent toolset.\n *\n * Trust model — two tiers:\n *\n * - The file tools ({@link betaReadTool}, {@link betaWriteTool},\n * {@link betaEditTool}, {@link betaGlobTool}, {@link betaGrepTool}) confine to\n * `workdir` plus any `allowedRoots`. {@link resolvePath} canonicalizes the\n * target (resolving every symlink, including the leaf) before the check\n * *and* returns that canonical path for the operation, so a symlink inside\n * the workdir that points outside it neither passes the check nor gets\n * followed afterwards — this is a real boundary, not a lexical hint (modulo\n * the residual TOCTOU noted on {@link resolvePath}).\n * - {@link betaBashTool} runs an unrestricted `/bin/bash` and cannot be\n * confined. Run it — and, for defense in depth, the whole toolset — inside a\n * sandbox the host controls (e.g. a self-hosted environment runner).\n */\nexport interface AgentToolContext {\n /** Base directory for resolving relative tool paths. */\n workdir: string;\n /**\n * @deprecated No longer accepted: the file tools are always confined to\n * `workdir` plus `allowedRoots`, which is neither behavior this flag used to\n * select, so passing either value throws. Remove it; list extra directories\n * in {@link AgentToolContext.allowedRoots}. The property is removed in a\n * future release.\n */\n unrestrictedPaths?: boolean;\n /**\n * Absolute directories outside `workdir` the file tools may also reach,\n * resolved at check time. The environment worker sets this to the session's\n * memory-store folders. Does **not** constrain {@link betaBashTool}.\n */\n allowedRoots?: string[];\n /**\n * Anthropic client. Optional — the bare toolset needs no client; it is only\n * used by `setupSkills`, which (together with {@link AgentToolContext.session},\n * or the deprecated {@link AgentToolContext.sessionId}) downloads each of the\n * session agent's skills into `{workdir}/skills/<name>/`.\n */\n client?: Anthropic;\n /**\n * The already-fetched session whose agent's skills `setupSkills` downloads.\n * A session's resources cannot change while it runs, so the caller fetches it\n * once and shares that snapshot with the memory-store download; the two can\n * then never disagree about them.\n */\n session?: BetaManagedAgentsSession;\n /**\n * @deprecated `setupSkills` fetches the session itself when given only an id,\n * one extra round trip per context. Prefer {@link AgentToolContext.session}.\n * Kept for callers written before `session` existed; ignored when `session`\n * is set.\n */\n sessionId?: string;\n /**\n * Directories the write and edit tools refuse to modify, resolved at check\n * time exactly like `allowedRoots`. The worker sets this to the roots of\n * read-only memory stores so the agent sees the error at write time instead\n * of the change silently never syncing; the mechanism is generic to any\n * directory.\n */\n readOnlyRoots?: string[];\n /**\n * Optional environment for the bash subprocess. When unset, the bash tool\n * inherits the process environment with the runner's `ANTHROPIC_*`\n * credentials scrubbed. When provided, it FULLY REPLACES that default\n * environment — the mapping is used verbatim and is NOT merged with or added\n * to the scrubbed process environment. To keep the defaults plus extra vars,\n * build the combined mapping yourself before passing it.\n */\n env?: Record<string, string | undefined>;\n /**\n * Size cap for a whole-file `read` and for `edit`, which both load the whole\n * file into memory. A `read` with `view_range` on a larger file streams it and\n * applies the cap to the selected lines instead. `undefined` (default) uses the\n * built-in 256 KiB cap; a positive number sets a custom cap; `null` disables the\n * cap entirely. Disabling it reintroduces the OOM risk on a model-controlled\n * path, so pass `null` only when the sandbox can absorb arbitrarily large files.\n * The non-regular-file (FIFO/device) guard always applies regardless of this\n * value.\n */\n maxFileBytes?: number | null;\n}\n\n/**\n * Returns the `agent_toolset_20260401` implementations bound to `ctx`. The\n * result is a plain array of `BetaRunnableTool`; filter or extend it before\n * handing it to a tool runner:\n *\n * ```ts\n * const tools = [...betaAgentToolset20260401(ctx), myCustomTool];\n * const tools = betaAgentToolset20260401(ctx).filter((t) => t.name !== 'grep');\n * ```\n *\n * Concurrency note: `client.beta.sessions.events.toolRunner` dispatches a\n * session's tool calls serially (the sessions API delivers one `agent.tool_use`\n * at a time). `client.beta.messages.toolRunner` runs a turn's `tool.run` calls\n * via `Promise.all`. The toolset below is safe under either model —\n * {@link betaBashTool} serializes its persistent shell internally and the FS\n * tools are independent per call — but {@link betaEditTool}/{@link betaWriteTool}\n * cannot synchronize concurrent writes to the *same* file across processes, so a\n * multi-edit turn touching one path is still subject to inherent FS lost-update\n * races. Custom tools that close over mutable state should do their own queueing.\n */\nexport function betaAgentToolset20260401(ctx: AgentToolContext): BetaRunnableTool[] {\n return [\n betaBashTool(ctx),\n betaReadTool(ctx),\n betaWriteTool(ctx),\n betaEditTool(ctx),\n betaGlobTool(ctx),\n betaGrepTool(ctx),\n ];\n}\n\n/**\n * Resolve `p` against `ctx.workdir`; reject results outside `ctx.workdir` and\n * `ctx.allowedRoots`. Absolute and relative inputs go through the same\n * canonicalise-then-contain check — an absolute path that lands inside a\n * permitted root is accepted, only paths that resolve *outside* all of them\n * are rejected. Every symlink in `p` (including the leaf, even a dangling one)\n * is resolved before the check, and the resolved path is what the tool then\n * operates on, so a symlink inside the workdir that points outside it can\n * neither pass the check nor be followed afterwards. See the trust model on\n * {@link AgentToolContext}.\n *\n * Residual TOCTOU: a component could still be swapped for a symlink between this\n * call and the eventual `fs` operation. Closing that fully needs per-component\n * `O_NOFOLLOW`/`openat`, which Node does not expose ergonomically; the same\n * residual exposure exists in `tools/memory/node` and is why a sandbox is still\n * recommended for the toolset as a whole.\n */\nexport async function resolvePath(ctx: AgentToolContext, p: string): Promise<string> {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return confineToRoot(ctx.workdir, p, { allowedRoots: ctx.allowedRoots ?? [] });\n}\n\n/**\n * The read-only root `target` falls under, or `undefined`. `target` arrives\n * fully canonicalized (from {@link resolvePath}), so each root is\n * canonicalized too — a root recorded through a symlinked workdir must still\n * match the resolved write target.\n */\nfunction readOnlyRootFor(ctx: AgentToolContext, target: string): Promise<string | undefined> {\n return containingRoot(ctx.readOnlyRoots ?? [], target);\n}\n\n// ---- bash ----------------------------------------------------------------\n\n/**\n * Build the environment for the spawned bash shell. The runner process holds\n * Anthropic credentials in `ANTHROPIC_*` env vars — the API key, the auth token,\n * and the per-work session token among them. `bash` runs an unrestricted shell,\n * so any command the agent runs could read those straight out of `process.env`;\n * strip the whole `ANTHROPIC_*` namespace from the child's environment.\n * Everything else (PATH, HOME, locale, …) is passed through unchanged.\n *\n * Passing an explicit `env` to {@link AgentToolContext} does NOT add to this\n * default — it FULLY REPLACES it. The provided mapping becomes the entire bash\n * environment verbatim; nothing here is merged in, so callers who want the\n * scrubbed process environment plus extras must build that mapping themselves.\n */\nfunction scrubbedShellEnv(): Record<string, string | undefined> {\n const env: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith('ANTHROPIC_')) continue;\n env[key] = value;\n }\n return env;\n}\n\n/**\n * A persistent /bin/bash process. State (cwd, env, background jobs) survives\n * across exec() calls. Uses pipes rather than a PTY so input is never echoed.\n */\nexport class BashSession {\n #proc: cp.ChildProcessWithoutNullStreams;\n #buf = '';\n #truncated = false;\n #closed = false;\n // While a command is in flight, the resolver to fire once its sentinel lands\n // in `#buf` (or once the shell dies). Event-driven: no polling loop.\n #waiting: { sentinel: string; resolve: () => void } | null = null;\n\n constructor(dir: string, env: Record<string, string | undefined> = scrubbedShellEnv()) {\n this.#proc = cp.spawn('/bin/bash', ['--noprofile', '--norc'], {\n cwd: dir,\n // `env` is the full base environment (the scrubbed process env by\n // default, or the verbatim replacement from `AgentToolContext.env`).\n // PS1/PS2/TERM are shell-control settings BashSession always applies so\n // the pipe-based sentinel exec parsing works — not part of the\n // user-facing environment.\n env: { ...env, PS1: '', PS2: '', TERM: 'dumb' },\n stdio: ['pipe', 'pipe', 'pipe'],\n detached: true,\n });\n this.#proc.stdout.setEncoding('utf8');\n this.#proc.stderr.setEncoding('utf8');\n this.#proc.stdout.on('data', (d: string) => this.#append(d));\n this.#proc.stderr.on('data', (d: string) => this.#append(d));\n this.#proc.once('close', () => {\n this.#closed = true;\n // Wake any in-flight exec so it fails fast instead of waiting for its deadline.\n const w = this.#waiting;\n this.#waiting = null;\n w?.resolve();\n });\n }\n\n /** Whether the underlying shell process has exited. */\n get closed(): boolean {\n return this.#closed;\n }\n\n // Cap the buffer during accumulation so a command that streams unboundedly\n // can't OOM the runner. Keeps the tail so the sentinel stays detectable.\n // Also resolves the in-flight exec the instant its sentinel is buffered.\n #append(d: string): void {\n this.#buf += d;\n if (this.#buf.length > BASH_OUTPUT_LIMIT) {\n this.#buf = this.#buf.slice(this.#buf.length - BASH_OUTPUT_LIMIT);\n this.#truncated = true;\n }\n if (this.#waiting && this.#buf.indexOf(this.#waiting.sentinel) >= 0) {\n const w = this.#waiting;\n this.#waiting = null;\n w.resolve();\n }\n }\n\n async exec(\n command: string,\n opts: { timeoutMs?: number; signal?: AbortSignal | null | undefined } = {},\n ): Promise<{ output: string; exitCode: number }> {\n if (this.#closed) {\n throw new AnthropicError('bash session terminated');\n }\n const timeoutMs = opts.timeoutMs ?? BASH_DEFAULT_TIMEOUT_MS;\n const signal = opts.signal;\n // Reject with the signal's own reason, so a caller telling a user cancel\n // apart from an `AbortSignal.timeout()` sees the platform's name intact.\n signal?.throwIfAborted();\n this.#buf = '';\n this.#truncated = false;\n // Per-call nonce so a command that prints a fixed marker can't spoof the\n // exit-code framing. The `''` split keeps the literal out of what we write\n // to stdin — only the shell's printf reassembles it.\n const sentinel = `__ANT_CMD_${crypto.randomUUID()}_DONE__`;\n const sentinelSplit = `${sentinel.slice(0, 8)}''${sentinel.slice(8)}`;\n // </dev/null: a stdin-reading command (`cat`, `read`) gets EOF instead of\n // blocking on the shared pipe until the timeout.\n const wrapped = `{ ${command}\\n} </dev/null 2>&1; printf '\\\\n${sentinelSplit}%d\\\\n' $?\\n`;\n this.#proc.stdin.write(wrapped);\n\n if (this.#buf.indexOf(sentinel) < 0) {\n // Park until the sentinel lands, the deadline passes, the caller aborts,\n // or the shell dies — whichever comes first. `#append` (and the `close`\n // handler) resolve `sentinelSeen`; the deadline / abort reject.\n const { promise: sentinelSeen, resolve } = promiseWithResolvers<void>();\n this.#waiting = { sentinel, resolve };\n let timer: ReturnType<typeof setTimeout> | undefined;\n let onAbort: (() => void) | undefined;\n try {\n await Promise.race([\n sentinelSeen,\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new BashTimeoutError(timeoutMs)), timeoutMs);\n }),\n new Promise<never>((_, reject) => {\n if (!signal) return;\n onAbort = () => reject(signal.reason);\n signal.addEventListener('abort', onAbort, { once: true });\n }),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n if (onAbort && signal) signal.removeEventListener('abort', onAbort);\n this.#waiting = null;\n }\n }\n\n const idx = this.#buf.indexOf(sentinel);\n if (idx < 0) {\n // The shell closed (or was killed) before emitting the sentinel.\n throw new AnthropicError('bash session terminated');\n }\n const tail = this.#buf.slice(idx + sentinel.length);\n const m = tail.match(/^(-?\\d+)/);\n const exitCode = m ? parseInt(m[1]!, 10) : -1;\n let out = this.#buf.slice(0, idx).replace(ANSI_RE, '').replace(/\\n+$/, '');\n if (this.#truncated) {\n out = `[output truncated]\\n${out}`;\n }\n return { output: out, exitCode };\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n const w = this.#waiting;\n this.#waiting = null;\n w?.resolve();\n this.#proc.stdout.destroy();\n this.#proc.stderr.destroy();\n this.#proc.stdin.destroy();\n try {\n // Negative PID targets the process group so foreground jobs (e.g. a\n // hung sleep) die with the shell.\n process.kill(-this.#proc.pid!, 'SIGKILL');\n } catch {\n this.#proc.kill('SIGKILL');\n }\n this.#proc.unref();\n }\n}\n\nexport function betaBashTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n let session: BashSession | undefined;\n // Concurrent run() callers chain onto this promise so writes to the shared\n // shell's stdin can't interleave (which would corrupt the sentinel-match\n // exit-code parsing in BashSession.exec). Each call replaces `tail` with a\n // promise that resolves only after its own exec settles.\n let tail: Promise<unknown> = Promise.resolve();\n return betaTool({\n name: 'bash',\n description: 'Run a bash command in a persistent shell. State (cwd, env vars) persists across calls.',\n inputSchema: {\n type: 'object',\n properties: {\n command: { type: 'string', description: 'The command to run' },\n restart: { type: 'boolean', description: 'Restart the persistent shell before running' },\n timeout_ms: { type: 'integer', description: 'Per-call timeout in milliseconds' },\n },\n },\n run: async ({ command, restart, timeout_ms }, context) => {\n const prev = tail;\n const gate = promiseWithResolvers<void>();\n tail = gate.promise;\n // Swallow prior rejections — earlier callers got their own error path;\n // we just need to wait for the shell to be free.\n try {\n await prev;\n } catch {\n // ignore\n }\n try {\n if (restart) {\n session?.close();\n session = undefined;\n }\n if (!command) {\n if (restart) return 'bash session restarted';\n throw new ToolError('bash: command is required');\n }\n session ??= new BashSession(ctx.workdir, ctx.env);\n try {\n const { output, exitCode } = await session.exec(command, {\n timeoutMs: timeout_ms ?? BASH_DEFAULT_TIMEOUT_MS,\n signal: context?.signal,\n });\n if (exitCode !== 0) throw new ToolError(output || `exit ${exitCode}`);\n return output;\n } catch (e) {\n if (e instanceof ToolError) throw e;\n // Timeout, abort, or terminated: the still-running command will emit\n // a stale sentinel, so discard this session and let the next call\n // start fresh.\n session.close();\n session = undefined;\n throw new ToolError(`bash: ${e instanceof Error ? e.message : String(e)}`);\n }\n } finally {\n gate.resolve();\n }\n },\n close: () => {\n session?.close();\n session = undefined;\n },\n });\n}\n\n// ---- fs ------------------------------------------------------------------\n\nexport function betaReadTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'read',\n description: 'Read a UTF-8 text file relative to the workdir.',\n inputSchema: {\n type: 'object',\n properties: {\n file_path: { type: 'string' },\n view_range: {\n type: 'array',\n items: { type: 'integer' },\n description: '[start_line, end_line] 1-indexed inclusive',\n },\n },\n required: ['file_path'],\n },\n run: async ({ file_path, view_range }) => {\n if (!file_path) throw new ToolError('read: file_path is required');\n const abs = await resolvePath(ctx, file_path);\n if (view_range?.length && view_range.length !== 2) {\n throw new ToolError('read: view_range must be [start_line, end_line]');\n }\n let data: string;\n try {\n // stat() before any open(): the size cap stops a multi-GB file from\n // OOM'ing the runner, and isFile() rejects FIFOs/devices/dirs without\n // opening them (open() on an unconnected FIFO blocks indefinitely).\n const st = await fs.stat(abs);\n if (!st.isFile()) {\n throw new ToolError(`read: ${file_path} is not a regular file`);\n }\n const limit = resolveMaxBytes(ctx.maxFileBytes);\n if (limit !== null && st.size > limit) {\n if (!view_range?.length) {\n throw new ToolError(\n `read: ${file_path} is ${st.size} bytes, exceeds ${limit}-byte limit. ` +\n 'Use the view_range parameter to read specific line ranges, e.g. view_range: [1, 500].',\n );\n }\n const [startLine, endLine] = view_range as [number, number];\n return await readRangeStreaming(abs, file_path, startLine, endLine, limit);\n }\n data = await fs.readFile(abs, 'utf8');\n } catch (e) {\n if (e instanceof ToolError) throw e;\n throw new ToolError(`read: ${fsErrorMessage(e, file_path)}`);\n }\n if (!view_range?.length) return data;\n const [startLine, endLine] = view_range as [number, number];\n const lines = data.split('\\n');\n const start = Math.max(0, startLine - 1);\n const end = endLine > 0 ? endLine : lines.length;\n return lines.slice(start, end).join('\\n');\n },\n });\n}\n\n/** Returns lines `[startLine, endLine]` of the file at `abs`, capping the selected bytes at `limit`. */\nasync function readRangeStreaming(\n abs: string,\n filePath: string,\n startLine: number,\n endLine: number,\n limit: number,\n): Promise<string> {\n const lines = new LineRangeCollector(filePath, startLine, endLine, limit);\n if (lines.rangeIsEmpty()) return '';\n // Byte chunks rather than readline: a single huge line must never be buffered\n // whole, so memory stays bounded by `limit` plus one chunk.\n const stream = fssync.createReadStream(abs, { highWaterMark: READ_STREAM_CHUNK_BYTES });\n try {\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n lines.collectFrom(chunk);\n if (lines.rangeIsCollected()) break;\n }\n } finally {\n stream.destroy();\n }\n return lines.text();\n}\n\n/** Collects the bytes of lines `[startLine, endLine]` from consecutive file chunks, capped at `limit`. */\nclass LineRangeCollector {\n readonly #filePath: string;\n readonly #startLine: number;\n readonly #endLine: number;\n readonly #start: number;\n readonly #end: number;\n readonly #limit: number;\n #line = 0;\n #collected: Buffer[] = [];\n #collectedBytes = 0;\n\n constructor(filePath: string, startLine: number, endLine: number, limit: number) {\n this.#filePath = filePath;\n this.#startLine = startLine;\n this.#endLine = endLine;\n this.#start = Math.max(0, startLine - 1);\n this.#end = endLine > 0 ? endLine : Infinity;\n this.#limit = limit;\n }\n\n rangeIsEmpty(): boolean {\n return this.#end <= this.#start;\n }\n\n rangeIsCollected(): boolean {\n return this.#line >= this.#end;\n }\n\n collectFrom(chunk: Buffer): void {\n let lineStart = 0;\n while (lineStart < chunk.length && !this.rangeIsCollected()) {\n const newline = chunk.indexOf(0x0a, lineStart);\n const lineEnd = newline < 0 ? chunk.length : newline;\n if (this.#line >= this.#start) {\n this.#collect(chunk.subarray(lineStart, lineEnd), newline >= 0);\n }\n if (newline < 0) break;\n this.#line++;\n lineStart = newline + 1;\n }\n }\n\n #collect(lineBytes: Buffer, newlineTerminated: boolean): void {\n this.#collected.push(lineBytes);\n this.#collectedBytes += lineBytes.length;\n if (newlineTerminated && this.#line + 1 < this.#end) {\n this.#collected.push(NEWLINE);\n this.#collectedBytes += NEWLINE.length;\n }\n if (this.#collectedBytes > this.#limit) throw this.#overLimitError();\n }\n\n #overLimitError(): ToolError {\n if (this.#end - this.#start === 1) {\n return new ToolError(\n `read: line ${this.#start + 1} of ${this.#filePath} alone exceeds ${this.#limit}-byte limit. ` +\n 'The read tool cannot return part of a line, so view_range cannot narrow this further.',\n );\n }\n return new ToolError(\n `read: view_range [${this.#startLine}, ${this.#endLine}] of ${this.#filePath} exceeds ${this.#limit}-byte limit. ` +\n 'Narrow the view_range to read a smaller portion.',\n );\n }\n\n text(): string {\n return Buffer.concat(this.#collected, this.#collectedBytes).toString('utf8');\n }\n}\n\nexport function betaWriteTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'write',\n description: 'Write a UTF-8 text file relative to the workdir, creating parent directories as needed.',\n inputSchema: {\n type: 'object',\n properties: { file_path: { type: 'string' }, content: { type: 'string' } },\n required: ['file_path', 'content'],\n },\n run: async ({ file_path, content }) => {\n if (!file_path) throw new ToolError('write: file_path is required');\n const abs = await resolvePath(ctx, file_path);\n const ro = await readOnlyRootFor(ctx, abs);\n if (ro !== undefined) {\n throw new ToolError(`write: ${file_path} is inside read-only directory ${ro}`);\n }\n try {\n await fs.mkdir(path.dirname(abs), { recursive: true, mode: DIR_CREATE_MODE });\n await atomicWriteFile(abs, content ?? '');\n } catch (e) {\n throw new ToolError(`write: ${fsErrorMessage(e, file_path)}`);\n }\n return `wrote ${Buffer.byteLength(content ?? '')} bytes to ${file_path}`;\n },\n });\n}\n\nexport function betaEditTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'edit',\n description:\n 'Replace old_string with new_string in a file. old_string must be unique unless replace_all.',\n inputSchema: {\n type: 'object',\n properties: {\n file_path: { type: 'string' },\n old_string: { type: 'string' },\n new_string: { type: 'string' },\n replace_all: { type: 'boolean' },\n },\n required: ['file_path', 'old_string', 'new_string'],\n },\n run: async ({ file_path, old_string, new_string, replace_all }) => {\n if (!file_path) throw new ToolError('edit: file_path is required');\n if (!old_string) throw new ToolError('edit: old_string is required');\n const abs = await resolvePath(ctx, file_path);\n const ro = await readOnlyRootFor(ctx, abs);\n if (ro !== undefined) {\n throw new ToolError(`edit: ${file_path} is inside read-only directory ${ro}`);\n }\n let data: string;\n try {\n // stat() before any open() — same guard as `read`: the size cap stops a\n // multi-GB file from OOM'ing the runner, and isFile() rejects\n // FIFOs/devices/dirs without opening them (open() on an unconnected FIFO\n // blocks indefinitely). The edit path is model-controlled, so it needs\n // the same bound `read` already has.\n const st = await fs.stat(abs);\n if (!st.isFile()) {\n throw new ToolError(`edit: ${file_path} is not a regular file`);\n }\n const limit = resolveMaxBytes(ctx.maxFileBytes);\n if (limit !== null && st.size > limit) {\n throw new ToolError(\n `edit: ${file_path} is ${st.size} bytes, exceeds ${limit}-byte limit. ` +\n 'The edit tool loads the whole file and cannot modify a file this large.',\n );\n }\n data = await fs.readFile(abs, 'utf8');\n } catch (e) {\n if (e instanceof ToolError) throw e;\n throw new ToolError(`edit: ${fsErrorMessage(e, file_path)}`);\n }\n const count = data.split(old_string).length - 1;\n if (count === 0) throw new ToolError(`edit: old_string not found in ${file_path}`);\n let updated: string;\n if (replace_all) {\n updated = data.split(old_string).join(new_string);\n } else {\n if (count > 1)\n throw new ToolError(`edit: old_string appears ${count} times in ${file_path} (must be unique)`);\n // Callback form so `$&`/`$1`/`` $` `` in new_string are inserted\n // literally instead of expanded as replacement patterns.\n updated = data.replace(old_string, () => new_string);\n }\n try {\n await atomicWriteFile(abs, updated);\n } catch (e) {\n throw new ToolError(`edit: write: ${fsErrorMessage(e, file_path)}`);\n }\n return `edited ${file_path} (${replace_all ? count : 1} replacement(s))`;\n },\n });\n}\n\n// ---- search --------------------------------------------------------------\n\n/**\n * Best-effort: stops `fs.glob` from walking out of the root via a literal or\n * brace-expanded `..`. The realpath post-filter in {@link betaGlobTool} is the\n * boundary; this only avoids the walk.\n */\nfunction patternCanAscend(pattern: string): boolean {\n return pattern.split(/[\\\\/{},]/).includes('..');\n}\n\nexport function betaGlobTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'glob',\n description:\n 'Match files under the workdir against a glob pattern. Results are mtime-sorted, newest first.',\n inputSchema: {\n type: 'object',\n properties: {\n pattern: { type: 'string' },\n path: { type: 'string', description: 'Directory to search in. Defaults to the workdir.' },\n },\n required: ['pattern'],\n },\n run: async ({ pattern, path: searchPath }) => {\n if (!pattern) throw new ToolError('glob: pattern is required');\n if (path.isAbsolute(pattern)) {\n throw new ToolError(\n 'glob: absolute pattern not permitted; pass a relative pattern (and optionally path)',\n );\n }\n if (patternCanAscend(pattern)) {\n throw new ToolError('glob: \"..\" is not permitted in the pattern');\n }\n const root = searchPath ? await resolvePath(ctx, searchPath) : path.resolve(ctx.workdir);\n // Compare canonical against canonical: a workdir that is itself a\n // symlink would otherwise falsely reject every realpath'd match below.\n const realRoot = searchPath ? root : await canonicalize(root);\n const matches: { path: string; mtime: number }[] = [];\n // Bounds the walk for patterns that match, or brace-expand into,\n // enormous trees.\n let remaining = WALK_MAX_ENTRIES;\n try {\n // Native `fs.glob` (Node 22+). `exclude` prunes the noisy dirs the\n // legacy walker skipped; only regular files are collected.\n for await (const entry of fsGlob(pattern, {\n cwd: root,\n withFileTypes: true,\n exclude: (d) => d.name === '.git' || d.name === 'node_modules',\n })) {\n if (remaining-- <= 0) break;\n if (!entry.isFile()) continue;\n const full = path.join(entry.parentPath, entry.name);\n // Drop any match that resolves outside the search root. A pattern\n // that *names* a symlinked directory (the model controls the\n // pattern, and the bash tool in the same session can plant the\n // link) makes `fs.glob` descend through it and report entries with\n // the raw parent path, so a lexical check on `full` alone would\n // pass `root/link_out/secret` even though it lives outside the\n // jail. Resolve-failure (ELOOP, EACCES, a racing unlink) is a deny.\n let real: string;\n try {\n real = await fs.realpath(full);\n } catch {\n continue;\n }\n if (!isWithin(realRoot, real)) continue;\n let mtime = 0;\n try {\n mtime = (await fs.stat(full)).mtimeMs;\n } catch {\n // unreadable — keep it in the list with mtime 0\n }\n matches.push({ path: full, mtime });\n }\n } catch (e) {\n throw new ToolError(`glob: ${e instanceof Error ? e.message : String(e)}`);\n }\n if (matches.length === 0) return 'no matches';\n matches.sort((a, b) => b.mtime - a.mtime);\n return matches\n .slice(0, GLOB_RESULT_LIMIT)\n .map((m) => m.path)\n .join('\\n');\n },\n });\n}\n\nexport function betaGrepTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'grep',\n description: 'Search file contents for a regex. Uses ripgrep if available, otherwise a built-in walker.',\n inputSchema: {\n type: 'object',\n properties: { pattern: { type: 'string' }, path: { type: 'string' } },\n required: ['pattern'],\n },\n run: async ({ pattern, path: p }, context) => {\n if (!pattern) throw new ToolError('grep: pattern is required');\n let searchPath = path.resolve(ctx.workdir);\n if (p) searchPath = await resolvePath(ctx, p);\n const rg = await findRg();\n return rg ?\n runRipgrep(rg, pattern, searchPath, context?.signal)\n : runWalkGrep(pattern, searchPath, context?.signal);\n },\n });\n}\n\nfunction runRipgrep(\n rg: string,\n pattern: string,\n searchPath: string,\n signal?: AbortSignal | null | undefined,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const proc = cp.spawn(rg, ['-n', '--no-heading', '-e', pattern, '--', searchPath], {\n ...(signal ? { signal } : {}),\n });\n let out = '';\n let errOut = '';\n let truncated = false;\n proc.stdout.on('data', (d) => {\n if (truncated) return;\n out += d;\n if (out.length > GREP_OUTPUT_LIMIT) {\n truncated = true;\n out = out.slice(0, GREP_OUTPUT_LIMIT);\n proc.kill('SIGKILL');\n }\n });\n proc.stderr.on('data', (d) => (errOut += d));\n proc.on('close', (code) => {\n if (signal?.aborted) return reject(new ToolError('grep: aborted'));\n if (truncated) return resolve(out + `\\n[output truncated at ${GREP_OUTPUT_LIMIT} bytes]`);\n if (code === 0) return resolve(out);\n if (code === 1) return resolve('no matches');\n reject(new ToolError(`grep: rg failed: ${errOut || `exit ${code}`}`));\n });\n proc.on('error', (e) => {\n if (signal?.aborted) return reject(new ToolError('grep: aborted'));\n reject(new ToolError(`grep: rg failed: ${e.message}`));\n });\n });\n}\n\nasync function runWalkGrep(\n pattern: string,\n root: string,\n signal?: AbortSignal | null | undefined,\n): Promise<string> {\n let re: RegExp;\n try {\n re = new RegExp(pattern);\n } catch (e) {\n throw new ToolError(`grep: invalid regex: ${e instanceof Error ? e.message : String(e)}`);\n }\n const hits: string[] = [];\n let budget = GREP_OUTPUT_LIMIT;\n const push = (line: string): boolean => {\n budget -= line.length + 1;\n if (budget < 0) {\n hits.push(`[output truncated at ${GREP_OUTPUT_LIMIT} bytes]`);\n return false;\n }\n hits.push(line);\n return true;\n };\n const stat = await fs.stat(root).catch(() => null);\n if (stat?.isFile()) {\n await grepFile(root, re, push);\n } else {\n await walk(root, '', (rel) => grepFile(path.join(root, rel), re, push), signal);\n }\n if (signal?.aborted) throw new ToolError('grep: aborted');\n if (hits.length === 0) return 'no matches';\n return hits.join('\\n');\n}\n\nasync function grepFile(file: string, re: RegExp, push: (line: string) => boolean): Promise<boolean> {\n const stream = fssync.createReadStream(file, { encoding: 'utf8' });\n const rl = readline.createInterface({ input: stream, crlfDelay: Infinity });\n let i = 0;\n try {\n for await (const line of rl) {\n i++;\n // Cap line length: `pattern` is model-supplied and JS regexes backtrack,\n // so a pathological pattern against a very long line is a ReDoS.\n if (line.length > GREP_MAX_LINE_LENGTH) continue;\n if (re.test(line) && !push(`${file}:${i}:${line}`)) return false;\n }\n } catch {\n // unreadable / binary\n } finally {\n stream.destroy();\n }\n return true;\n}\n\n// ---- utils ---------------------------------------------------------------\n\nconst WALK_MAX_DEPTH = 40;\nconst WALK_MAX_ENTRIES = 50_000;\n\n/**\n * Bounded recursive walk. `fn` may return `false` to abort. Only real\n * directories are descended into and only real files are handed to `fn` —\n * symlinks (and devices/fifos/sockets) are skipped entirely so a symlink inside\n * the root cannot be followed out of it.\n */\nasync function walk(\n root: string,\n rel: string,\n fn: (rel: string) => boolean | void | Promise<boolean | void>,\n signal?: AbortSignal | null | undefined,\n): Promise<void> {\n let remaining = WALK_MAX_ENTRIES;\n async function inner(rel: string, depth: number): Promise<boolean> {\n if (depth > WALK_MAX_DEPTH) return true;\n if (signal?.aborted) return false;\n let entries: fssync.Dirent[];\n try {\n entries = await fs.readdir(path.join(root, rel), { withFileTypes: true });\n } catch {\n return true;\n }\n for (const e of entries) {\n if (e.name === '.git' || e.name === 'node_modules') continue;\n if (remaining-- <= 0) return false;\n if (signal?.aborted) return false;\n const childRel = rel ? path.join(rel, e.name) : e.name;\n if (e.isDirectory()) {\n if (!(await inner(childRel, depth + 1))) return false;\n } else if (e.isFile()) {\n if ((await fn(childRel)) === false) return false;\n }\n // Symlinks, devices, fifos and sockets are intentionally skipped.\n }\n return true;\n }\n await inner(rel, 0);\n}\n\nasync function findRg(): Promise<string | null> {\n const dirs = (process.env['PATH'] ?? '').split(path.delimiter);\n for (const d of dirs) {\n const candidate = path.join(d, 'rg');\n try {\n await fs.access(candidate, fssync.constants.X_OK);\n return candidate;\n } catch {\n // not here\n }\n }\n return null;\n}\n"],"names":[],"mappings":"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","ignoreList":[0,1,2,3,4,5]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/internal/file-store.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/fs-util.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/helpers/beta/json-schema.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/skills.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/memories.ts","../../../node_modules/.pnpm/%40anthropic-ai%2Bsdk%400.128.0_zod%403.25.76/node_modules/%40anthropic-ai/sdk/src/tools/agent-toolset/node.ts"],"sourcesContent":["/**\n * `FileStore` — one confined folder; a relative path cannot escape it.\n *\n * Beta scope: symlinks are refused or skipped wherever the store meets them,\n * but there is no hardening against a process racing the store's own\n * syscalls; fsync durability, non-POSIX hosts, and read-size caps are out of\n * scope.\n */\n\nimport type { BigIntStats, Dirent } from 'node:fs';\nimport type { FileHandle } from 'node:fs/promises';\nimport type * as util from 'node:util';\nimport { crypto, fs, path } from './node';\nimport { encodeUTF8 } from './utils/bytes';\n\nconst fsp = fs.promises;\nconst C = fs.constants;\n\n// Owner-only regardless of umask: the store holds downloaded user/model content.\nconst OWNER_ONLY_DIR_MODE = 0o700;\nconst OWNER_ONLY_FILE_MODE = 0o600;\nconst OWNER_ONLY_EXEC_MODE = 0o700;\n\n// 0 where the platform lacks them; `open` refuses such platforms.\nconst O_NOFOLLOW: number = (C as { O_NOFOLLOW?: number }).O_NOFOLLOW ?? 0;\nconst O_NONBLOCK: number = (C as { O_NONBLOCK?: number }).O_NONBLOCK ?? 0;\n\n/** A refused operation — input the store will not act on. OS errors propagate with their `.code`. */\nexport class FileStoreError extends Error {\n static readonly ESCAPES_ROOT = 'escapes the store root';\n static readonly IS_A_SYMLINK = 'is a symlink';\n static readonly NOT_A_FILE = 'is not a regular file';\n static readonly NOT_A_DIRECTORY = 'is not a directory';\n static readonly NOT_UTF8 = 'is not valid utf-8';\n static readonly MOVE_DESTINATION_EXISTS = 'already exists';\n\n readonly reason: string;\n readonly relPath: string;\n\n constructor(reason: string, relPath: string) {\n super(`path ${JSON.stringify(relPath)} ${reason}`);\n this.name = 'FileStoreError';\n this.reason = reason;\n this.relPath = relPath;\n }\n}\n\n/**\n * The store's resolved root, and what {@link FileStore.dispose} will do to it.\n *\n * `removedOnDispose` is true when `open` found no root, so `dispose` removes\n * it. A root that was already there is someone else's — a pre-seeded mount, a\n * caller's workdir — and is kept.\n */\nexport type Root = { path: string; removedOnDispose: boolean };\n\n/** Options for {@link FileStore.open} / {@link openFileStore}. */\nexport interface OpenFileStoreOptions {\n /**\n * Restrict the store to valid UTF-8 (default `false`): a `put` of binary\n * bytes and a `get` of a binary file are refused with\n * {@link FileStoreError}, so a caller that decodes what `get` returns can\n * never hit a decode error.\n */\n utf8?: boolean;\n}\n\n/** Resolve `root`; creates nothing — only {@link FileStore.createRoot} makes the folder. */\nexport async function openFileStore(root: string, opts?: OpenFileStoreOptions): Promise<FileStore> {\n return FileStore.open(root, opts);\n}\n\n/**\n * True for a path usable verbatim as a store location: absolute, with no `..`\n * components. Paths are judged in POSIX terms — they are wire values naming\n * locations inside a POSIX container, not host-native paths.\n */\nexport function isPathLegal(p: string): boolean {\n return p.startsWith('/') && !p.split('/').includes('..');\n}\n\n/** One hashed file version: the stat identity it had, and its sha. */\ntype Hashed = {\n mtimeNs: bigint;\n // Userspace cannot set ctime, so writers that preserve mtimes\n // (`rsync -t`, `cp -p`) still miss the cache.\n ctimeNs: bigint;\n size: bigint;\n sha: string;\n};\n\n/**\n * One confined folder of regular files.\n *\n * Every `relPath` is relative to the root (a leading `/` also means the root)\n * and refused with {@link FileStoreError} when it escapes. The store holds\n * regular files only: symlinks are refused on read and skipped by listings —\n * {@link findSymlinks} reports them. A `relPath` resolving to the root itself\n * is banned by this interface: `put` and `get` refuse it, `move` and `remove`\n * do nothing. A store opened with `utf8: true` refuses binary content the\n * same way — on `put` of such bytes and on `get` of such a file. Only\n * {@link createRoot} makes the root: writes create directories below it,\n * never the root itself, so a root removed while the store is open stays\n * removed and the write fails with `ENOENT`.\n */\nexport class FileStore {\n private readonly rootPath: string;\n /** True ⇒ this open created the root, so {@link dispose} removes it. */\n private readonly removedOnDispose: boolean;\n /** Set iff the store refuses non-UTF-8 content; {@link requireUtf8} decodes against it, on both put and get. */\n private readonly decoder: util.TextDecoder | undefined;\n /** `hashtree`'s advisory cache; every hit re-validates against a fresh stat. */\n private readonly hashes = new Map<string, Hashed>();\n\n static isPathLegal = isPathLegal;\n\n /** @internal — use {@link FileStore.open} / {@link openFileStore}. */\n constructor(root: string, removedOnDispose: boolean, utf8Only: boolean = false) {\n this.rootPath = root;\n this.removedOnDispose = removedOnDispose;\n this.decoder = utf8Only ? new TextDecoder('utf-8', { fatal: true }) : undefined;\n }\n\n /** Resolve `root`; creates nothing — only {@link createRoot} makes the folder. */\n static async open(root: string, opts?: OpenFileStoreOptions): Promise<FileStore> {\n // A deployment condition, not refused caller input — hence not FileStoreError.\n if (!platformSupported()) {\n throw new Error('FileStore requires O_NOFOLLOW support on this platform');\n }\n let removedOnDispose = false;\n try {\n // lstat, not a follow-and-swallow existence check: following symlinks or\n // swallowing permission errors would mark a real directory ours to\n // delete on dispose.\n await fsp.lstat(root);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'ENOENT') throw e;\n removedOnDispose = true;\n }\n return new FileStore(path.resolve(root), removedOnDispose, opts?.utf8 ?? false);\n }\n\n /** Create the root directory and any missing ancestors; already existing is fine. */\n async createRoot(): Promise<void> {\n await makeDirAndAncestors(this.rootPath);\n }\n\n /** The resolved root, and what {@link dispose} will do to it. */\n root(): Root {\n return { path: this.rootPath, removedOnDispose: this.removedOnDispose };\n }\n\n /**\n * Remove the root iff `open` created it; pre-existing roots are kept.\n *\n * Wired to `Symbol.asyncDispose` at runtime when the host provides it, so\n * `await using` works on engines with explicit resource management.\n */\n async dispose(): Promise<void> {\n if (!this.removedOnDispose) return;\n await fsp.rm(this.rootPath, { recursive: true, force: true });\n }\n\n /**\n * Write `data` (`string` UTF-8 or bytes) atomically to the file at `relPath`.\n *\n * Missing directories below the root are created; a missing root is not —\n * the write fails with `ENOENT`.\n */\n async put(relPath: string, data: string | Uint8Array, opts?: { executable?: boolean }): Promise<void> {\n // \"dir/.\" names a directory just like a trailing \"/\".\n const tail = relPath.replace(/\\\\/g, '/');\n if (tail.endsWith('/') || tail.endsWith('/.') || tail === '' || tail === '.') {\n throw new FileStoreError(FileStoreError.NOT_A_FILE, relPath);\n }\n const dest = this.resolveUnderRoot(relPath);\n const payload = typeof data === 'string' ? encodeUTF8(data) : data;\n this.requireUtf8(relPath, payload);\n await makeDirsBelowRoot(this.rootPath, path.dirname(dest));\n await replaceViaTemp(dest, payload, opts?.executable ?? false);\n }\n\n /** The file's bytes; `null` when absent. */\n async get(relPath: string): Promise<Uint8Array | null> {\n const dest = this.resolveUnderRoot(relPath);\n let handle: FileHandle;\n try {\n handle = await openRegularFile(relPath, dest);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw e;\n }\n let data: Uint8Array;\n try {\n const buf = await handle.readFile();\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n } finally {\n await handle.close();\n }\n this.requireUtf8(relPath, data);\n return data;\n }\n\n /** The relative path of every file under the directory `under`. */\n async ls(under: string = '/'): Promise<Set<string>> {\n const base = this.resolveUnderRoot(under);\n return new Set((await filenamesInDir(this.rootPath, under, base)).map(([rel]) => rel));\n }\n\n /**\n * Every symlink under `under` — listings skip them and reads refuse them,\n * so a caller that must know they exist asks here.\n */\n async findSymlinks(under: string = '/'): Promise<Set<string>> {\n const base = this.resolveUnderRoot(under);\n return symlinksInDir(this.rootPath, under, base);\n }\n\n /**\n * `{relPath: sha256Hex}` of every file under the directory `under`.\n *\n * Unchanged files — same size, mtime, and ctime since the last call —\n * reuse their recorded hash instead of being re-read.\n */\n async hashtree(under: string = '/'): Promise<Record<string, string>> {\n const base = this.resolveUnderRoot(under);\n const walkStartNs = _internals.nowNs();\n // Null prototype so a file named `__proto__` (or `constructor`) is an\n // ordinary own key instead of a silent prototype write / inherited read.\n const out: Record<string, string> = Object.create(null);\n for (const [rel, full] of await filenamesInDir(this.rootPath, under, base)) {\n const sha = await this.hashViaCache(rel, full, walkStartNs);\n if (sha !== null) out[rel] = sha;\n }\n return out;\n }\n\n /** One file's sha256; `null` when absent. Shares {@link hashtree}'s cache. */\n async hashFile(relPath: string): Promise<string | null> {\n const dest = this.resolveUnderRoot(relPath);\n let st: BigIntStats;\n try {\n st = await fsp.lstat(dest, { bigint: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null;\n throw e;\n }\n if (st.isSymbolicLink()) throw new FileStoreError(FileStoreError.IS_A_SYMLINK, relPath);\n if (!st.isFile()) throw new FileStoreError(FileStoreError.NOT_A_FILE, relPath);\n const rel = path.relative(this.rootPath, dest).split(path.sep).join('/');\n return this.hashViaCache(rel, dest, _internals.nowNs());\n }\n\n /**\n * Rename `src` to `dst`; an existing `dst` is refused. The banned store\n * root as either end does nothing.\n */\n async move(src: string, dst: string): Promise<void> {\n const s = this.resolveUnderRoot(src);\n const d = this.resolveUnderRoot(dst);\n if (s === this.rootPath || d === this.rootPath) return;\n // stat, not lstat: a dangling symlink at dst reads as absent and is\n // atomically replaced by the rename, like any other rename target.\n const dstExists = await fsp.stat(d).then(\n () => true,\n () => false,\n );\n if (dstExists) throw new FileStoreError(FileStoreError.MOVE_DESTINATION_EXISTS, dst);\n await makeDirsBelowRoot(this.rootPath, path.dirname(d));\n await fsp.rename(s, d);\n }\n\n /** Delete a file or subtree; absent — and the banned store root — do nothing. */\n async remove(relPath: string): Promise<void> {\n const dest = this.resolveUnderRoot(relPath);\n if (dest === this.rootPath) return;\n let st: BigIntStats;\n try {\n // lstat: a dangling symlink must still be unlinked.\n st = await fsp.lstat(dest, { bigint: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return;\n throw e;\n }\n if (st.isDirectory()) {\n await fsp.rm(dest, { recursive: true, force: true });\n } else {\n try {\n await fsp.unlink(dest);\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'ENOENT') throw e;\n }\n }\n }\n\n private resolveUnderRoot(relPath: string): string {\n const norm = relPath.replace(/\\\\/g, '/').replace(/^\\/+/, '');\n const parts = norm.split('/').filter((p) => p !== '' && p !== '.');\n if (path.posix.isAbsolute(norm) || parts.includes('..')) {\n throw new FileStoreError(FileStoreError.ESCAPES_ROOT, relPath);\n }\n return parts.length === 0 ? this.rootPath : path.join(this.rootPath, ...parts);\n }\n\n private requireUtf8(relPath: string, data: Uint8Array): void {\n if (!this.decoder) return;\n try {\n this.decoder.decode(data);\n } catch {\n throw new FileStoreError(FileStoreError.NOT_UTF8, relPath);\n }\n }\n\n private async hashViaCache(rel: string, full: string, walkStartNs: bigint): Promise<string | null> {\n let st: BigIntStats;\n try {\n st = await fsp.lstat(full, { bigint: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') return null; // vanished since the walk: not in this snapshot\n throw e;\n }\n if (!st.isFile()) return null;\n const cached = this.hashes.get(rel);\n let sha: string;\n if (cached !== undefined && unchangedSinceHashed(cached, st)) {\n sha = cached.sha;\n } else {\n try {\n sha = await _internals.hashFile(full);\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || e instanceof FileStoreError) return null;\n // FreeBSD reports EMLINK rather than ELOOP for O_NOFOLLOW.\n if (code === 'ELOOP' || code === 'EMLINK') return null;\n throw e;\n }\n }\n if (oldEnoughToCache(st, walkStartNs)) {\n this.hashes.set(rel, { mtimeNs: st.mtimeNs, ctimeNs: st.ctimeNs, size: st.size, sha });\n }\n return sha;\n }\n}\n\nfunction platformSupported(): boolean {\n return O_NOFOLLOW !== 0;\n}\n\nasync function makeDirAndAncestors(dir: string): Promise<void> {\n const missing: string[] = [];\n let current = dir;\n for (;;) {\n try {\n await fsp.stat(current);\n break;\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code !== 'ENOENT' && code !== 'ENOTDIR' && code !== 'ELOOP') throw e;\n }\n missing.push(current);\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n for (const directory of missing.reverse()) {\n try {\n await fsp.mkdir(directory, { mode: OWNER_ONLY_DIR_MODE });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'EEXIST') throw e;\n }\n }\n}\n\nasync function makeDirsBelowRoot(root: string, dir: string): Promise<void> {\n // Never the root itself: only createRoot() makes it, so a write racing an\n // rm -rf of the folder fails with ENOENT instead of re-creating it.\n const below = path.relative(root, dir);\n if (below === '') return;\n let current = root;\n for (const part of below.split(path.sep)) {\n current = path.join(current, part);\n try {\n await fsp.mkdir(current, { mode: OWNER_ONLY_DIR_MODE });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'EEXIST') throw e;\n }\n }\n}\n\nasync function replaceViaTemp(dest: string, data: Uint8Array, isExecutable: boolean): Promise<void> {\n const mode = isExecutable ? OWNER_ONLY_EXEC_MODE : OWNER_ONLY_FILE_MODE;\n const tmp = path.join(path.dirname(dest), `.fs-${crypto.randomBytes(8).toString('hex')}.tmp`);\n let handle: FileHandle | undefined;\n try {\n handle = await fsp.open(tmp, C.O_WRONLY | C.O_CREAT | C.O_EXCL | O_NOFOLLOW, mode);\n await handle.writeFile(data);\n await handle.close();\n handle = undefined;\n await fsp.rename(tmp, dest);\n } catch (err) {\n // Best-effort temp cleanup; never mask the original error.\n if (handle) await handle.close().catch(() => {});\n await fsp.unlink(tmp).catch(() => {});\n throw err;\n }\n}\n\nasync function openRegularFile(relPath: string, dest: string): Promise<FileHandle> {\n // O_NONBLOCK: a FIFO fails the fstat check below instead of blocking the open.\n let handle: FileHandle;\n try {\n handle = await fsp.open(dest, C.O_RDONLY | O_NOFOLLOW | O_NONBLOCK);\n } catch (e) {\n // FreeBSD reports EMLINK rather than ELOOP for O_NOFOLLOW.\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ELOOP' || code === 'EMLINK') {\n throw new FileStoreError(FileStoreError.IS_A_SYMLINK, relPath);\n }\n throw e;\n }\n try {\n const st = await handle.stat();\n if (!st.isFile()) throw new FileStoreError(FileStoreError.NOT_A_FILE, relPath);\n } catch (e) {\n await handle.close().catch(() => {});\n throw e;\n }\n return handle;\n}\n\n/** sha256 of a file's contents, streamed — constant memory on any file size. */\nasync function hashFile(full: string): Promise<string> {\n const digest = crypto.createHash('sha256');\n const handle = await openRegularFile(path.basename(full), full);\n const buf = new Uint8Array(1024 * 1024);\n try {\n for (;;) {\n const { bytesRead } = await handle.read(buf, 0, buf.length);\n if (bytesRead === 0) break;\n digest.update(buf.subarray(0, bytesRead));\n }\n } finally {\n await handle.close();\n }\n return digest.digest('hex');\n}\n\n/**\n * `[rel, path]` for every regular file under the directory `base`; an absent\n * `base` is empty, a present non-directory is refused. The walk never\n * descends symlinked directories.\n */\nasync function filenamesInDir(root: string, under: string, base: string): Promise<[string, string][]> {\n if (!(await requireDir(under, base))) return [];\n const out: [string, string][] = [];\n await walk(base, (full, entry) => {\n if (entry.isFile()) out.push([path.relative(root, full).split(path.sep).join('/'), full]);\n });\n out.sort();\n return out;\n}\n\nasync function symlinksInDir(root: string, under: string, base: string): Promise<Set<string>> {\n const relOf = (full: string) => path.relative(root, full).split(path.sep).join('/');\n let st: BigIntStats;\n try {\n st = await fsp.lstat(base, { bigint: true });\n } catch (e) {\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || code === 'ENOTDIR') return new Set();\n throw e;\n }\n if (st.isSymbolicLink()) return new Set([relOf(base)]);\n if (!st.isDirectory()) throw new FileStoreError(FileStoreError.NOT_A_DIRECTORY, under);\n const out = new Set<string>();\n // Symlinks to directories are reported, never descended, like the rest.\n await walk(base, (full, entry) => {\n if (entry.isSymbolicLink()) out.add(relOf(full));\n });\n return out;\n}\n\n/** `false` when `base` is absent, refused when present but not a directory. */\nasync function requireDir(under: string, base: string): Promise<boolean> {\n let st: BigIntStats;\n try {\n st = await fsp.lstat(base, { bigint: true });\n } catch (e) {\n // Absent — including \"under a file\" (ENOTDIR) — is an empty listing.\n const code = (e as NodeJS.ErrnoException).code;\n if (code === 'ENOENT' || code === 'ENOTDIR') return false;\n throw e;\n }\n if (!st.isDirectory()) throw new FileStoreError(FileStoreError.NOT_A_DIRECTORY, under);\n return true;\n}\n\n/** Visit every entry under `base` without descending symlinked directories. */\nasync function walk(base: string, visit: (full: string, entry: Dirent) => void): Promise<void> {\n const stack: string[] = [base];\n while (stack.length) {\n const dir = stack.pop()!;\n let entries: Dirent[];\n try {\n entries = await fsp.readdir(dir, { withFileTypes: true });\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code === 'ENOENT') continue; // a listing is a snapshot, not a lock\n throw e;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n visit(full, entry);\n if (entry.isDirectory() && !entry.isSymbolicLink()) stack.push(full);\n }\n }\n}\n\nfunction unchangedSinceHashed(cached: Hashed, st: BigIntStats): boolean {\n return st.mtimeNs === cached.mtimeNs && st.ctimeNs === cached.ctimeNs && st.size === cached.size;\n}\n\nfunction oldEnoughToCache(st: BigIntStats, walkStartNs: bigint): boolean {\n const newestNs = st.mtimeNs > st.ctimeNs ? st.mtimeNs : st.ctimeNs;\n return newestNs < walkStartNs - _internals.timestampTrustMarginNs;\n}\n\n// Filesystems stamp times with coarse clocks, so a rewrite shortly after a\n// hashed write can reuse the exact stamps. Files younger than the margin are\n// simply re-hashed next walk.\nconst TIMESTAMP_TRUST_MARGIN_NS = 2_000_000_000n;\n\n/** Test seam — the hasher, the trust margin, and the walk clock. @internal */\nexport const _internals = {\n hashFile,\n timestampTrustMarginNs: TIMESTAMP_TRUST_MARGIN_NS,\n nowNs: (): bigint => BigInt(Date.now()) * 1_000_000n,\n};\n\nexport const LocalFileStore = FileStore;\n\n// Wire `Symbol.asyncDispose` at runtime when the host provides it — the\n// repo's tsconfig targets ES2020 so the type-level `AsyncDisposable` lib is\n// not available, but `await using` callers on newer engines still work.\nconst asyncDispose = (Symbol as { asyncDispose?: symbol }).asyncDispose;\nif (asyncDispose) {\n Object.defineProperty(FileStore.prototype, asyncDispose, {\n value: FileStore.prototype.dispose,\n configurable: true,\n writable: true,\n });\n}\n","/**\n * Shared, Node-only filesystem helpers for the agent toolset's file tools:\n * path confinement (symlink-aware), an atomic write, and language-independent\n * error messages. Kept out of `node.ts` so the tool implementations stay focused\n * and these helpers can be reused by every file tool.\n */\n\nimport type { FileHandle } from 'node:fs/promises';\nimport { crypto, fs as nodefs, path } from '../../internal/node';\nimport { ToolError } from '../../lib/tools/ToolError';\n\nconst fs = nodefs.promises;\n\n/** Mode for directories the file tools create: owner-only under any umask, like the memory tool. */\nexport const DIR_CREATE_MODE = 0o700;\n/**\n * Mode for files the file tools create: owner-only, so other local users can't\n * read what an agent wrote. A file that already exists keeps its own mode.\n */\nexport const FILE_CREATE_MODE = 0o600;\n\n/** True when `p` is `root` itself or lexically contained within it. */\nexport function isWithin(root: string, p: string): boolean {\n const rel = path.relative(root, p);\n return rel === '' || (!rel.startsWith('..' + path.sep) && rel !== '..' && !path.isAbsolute(rel));\n}\n\n/**\n * The first entry of `roots` whose canonical form contains the\n * already-canonical `target`, returned as configured; `undefined` when none\n * does. Each root goes through {@link canonicalize} at check time, exactly like\n * the workdir in {@link confineToRoot}, so granting access (`allowedRoots`)\n * and refusing writes (`readOnlyRoots`) can never resolve the same entry two\n * different ways.\n */\nexport async function containingRoot(roots: readonly string[], target: string): Promise<string | undefined> {\n for (const root of roots) {\n if (isWithin(await canonicalize(path.resolve(root)), target)) return root;\n }\n return undefined;\n}\n\n/** Matches Linux MAXSYMLINKS, the threshold at which `realpath` itself reports ELOOP. */\nconst MAX_SYMLINK_HOPS = 40;\n\n/** The `code` of a Node system error, or `undefined` for anything else. */\nexport function errnoCode(err: unknown): string | undefined {\n const code = (err as { code?: unknown } | null)?.code;\n return typeof code === 'string' ? code : undefined;\n}\n\n/**\n * Fully resolve `abs`: `realpath` the longest existing ancestor and re-append\n * the rest, but never re-append a component that is itself a symlink — read the\n * link and continue from its target instead. This handles paths being created\n * (write/edit) without letting a symlink leaf (e.g. a dangling one pointing\n * outside a confinement root) slip through unresolved.\n *\n * Returns a symlink-free path or throws an errno-carrying error (`ELOOP` for a\n * cycle or more than {@link MAX_SYMLINK_HOPS} links, the `lstat`/`realpath`\n * error for an unreadable component); it never returns `abs` unresolved. Only\n * symlink hops count against the cap, so any depth of not-yet-existing\n * directories still resolves.\n */\nexport async function canonicalize(abs: string): Promise<string> {\n const tail: string[] = [];\n let prefix = abs;\n let hops = 0;\n for (;;) {\n let real: string;\n try {\n real = await fs.realpath(prefix);\n } catch (realpathErr) {\n let isLink: boolean;\n try {\n isLink = (await fs.lstat(prefix)).isSymbolicLink();\n } catch (lstatErr) {\n const code = errnoCode(lstatErr);\n if (code !== 'ENOENT' && code !== 'ENOTDIR') throw lstatErr;\n const parent = path.dirname(prefix);\n if (parent === prefix) throw lstatErr;\n tail.push(path.basename(prefix));\n prefix = parent;\n continue;\n }\n if (!isLink) throw realpathErr;\n if (++hops > MAX_SYMLINK_HOPS) {\n throw Object.assign(new Error('too many levels of symbolic links'), { code: 'ELOOP' });\n }\n prefix = path.resolve(path.dirname(prefix), await fs.readlink(prefix));\n continue;\n }\n return tail.length ? path.join(real, ...tail.reverse()) : real;\n }\n}\n\n/**\n * Resolve `p` against `root` and confine it to `root` or one of `allowedRoots`\n * (absolute paths, resolved at check time exactly like `root`).\n *\n * Absolute and relative inputs go through the same canonicalise-then-contain\n * check — an absolute path that lands inside a permitted root is accepted,\n * only paths that resolve *outside* all of them are rejected. Every symlink in\n * `p` (including the leaf, even a dangling one) is resolved before the\n * confinement check, and the resolved path is what the caller then operates\n * on, so a symlink inside `root` that points outside it can neither pass the\n * check nor be followed afterwards. `..` is collapsed lexically before any\n * symlink is followed. A path that cannot be resolved (symlink loop, unreadable\n * component) is rejected with a `ToolError` naming `p`, never the host's\n * absolute path.\n *\n * Residual TOCTOU: a component could still be swapped for a symlink between this\n * call and the eventual `fs` operation. Closing that fully needs per-component\n * `O_NOFOLLOW`/`openat`, which Node does not expose ergonomically; this is why a\n * sandbox is still recommended for the toolset as a whole.\n */\nexport async function confineToRoot(\n root: string,\n p: string,\n opts?: { allowedRoots?: readonly string[] },\n): Promise<string> {\n const allowedRoots = opts?.allowedRoots ?? [];\n const realRoot = await canonicalize(path.resolve(root));\n let real: string;\n try {\n real = await canonicalize(path.resolve(realRoot, p));\n } catch (err) {\n throw new ToolError(fsErrorMessage(err, `path ${JSON.stringify(p)}`));\n }\n if (isWithin(realRoot, real) || (await containingRoot(allowedRoots, real)) !== undefined) {\n return real;\n }\n const permitted =\n allowedRoots.length ?\n \"the session's working directory and its other permitted directories\"\n : \"the session's working directory\";\n throw new ToolError(`path ${JSON.stringify(p)} is outside ${permitted}`);\n}\n\n/**\n * Atomically write `content` to `targetPath`: write a sibling temp file, fsync\n * it, then rename over the target. The rename is atomic on most filesystems, so\n * a crash mid-write never leaves the target half-written.\n *\n * A new file is created {@link FILE_CREATE_MODE}; an existing one keeps its\n * permission bits (the rename replaces the inode, so they are copied onto the\n * temp file first) — an edit must not strip `+x` or sharing the owner chose.\n */\nexport async function atomicWriteFile(targetPath: string, content: string): Promise<void> {\n const dir = path.dirname(targetPath);\n const tempPath = path.join(dir, `.tmp-${process.pid}-${crypto.randomUUID()}`);\n const existingMode = await fs.stat(targetPath).then(\n (st) => st.mode & 0o777,\n () => undefined,\n );\n let handle: FileHandle | undefined;\n try {\n handle = await fs.open(tempPath, 'wx', FILE_CREATE_MODE);\n if (existingMode !== undefined) await handle.chmod(existingMode);\n await handle.writeFile(content, 'utf-8');\n await handle.sync();\n await handle.close();\n handle = undefined;\n await fs.rename(tempPath, targetPath);\n } catch (err) {\n if (handle) await handle.close().catch(() => {});\n await fs.unlink(tempPath).catch(() => {});\n throw err;\n }\n}\n\n/**\n * Map a thrown filesystem error to a consistent, language-independent message,\n * so the model sees the same wording regardless of the runtime (Node's raw\n * `ENOENT: no such file...` text would otherwise leak through). Codes we don't\n * special-case render as the bare code, never Node's message, which embeds the\n * host's absolute path.\n */\nexport function fsErrorMessage(err: unknown, file: string): string {\n const code = errnoCode(err);\n switch (code) {\n case 'ENOENT':\n return `${file}: no such file or directory`;\n case 'EACCES':\n case 'EPERM':\n return `${file}: permission denied`;\n case 'ENOTDIR':\n return `${file}: not a directory`;\n case 'EISDIR':\n return `${file}: is a directory`;\n case 'ELOOP':\n return `${file}: too many levels of symbolic links`;\n case 'ENAMETOOLONG':\n return `${file}: file name too long`;\n case 'ENOSPC':\n return `${file}: no space left on device`;\n case 'EMFILE':\n case 'ENFILE':\n return `${file}: too many open files`;\n default:\n return `${file}: ${code !== undefined ? `i/o error (${code})` : 'i/o error'}`;\n }\n}\n","import { FromSchema, JSONSchema } from 'json-schema-to-ts';\nimport { Promisable, BetaRunnableTool, BetaToolRunContext } from '../../lib/tools/BetaRunnableTool';\nimport { BetaToolResultContentBlockParam } from '../../resources/beta';\nimport { AutoParseableBetaOutputFormat } from '../../lib/beta-parser';\nimport { AnthropicError } from '../..';\nimport { transformJSONSchema } from '../../lib/transform-json-schema';\n\ntype NoInfer<T> = T extends infer R ? R : never;\n\n/**\n * Creates a Tool with a provided JSON schema that can be passed\n * to the `.toolRunner()` method. The schema is used to automatically validate\n * the input arguments for the tool.\n */\nexport function betaTool<const Schema extends Exclude<JSONSchema, boolean> & { type: 'object' }>(options: {\n name: string;\n inputSchema: Schema;\n description: string;\n run: (\n args: NoInfer<FromSchema<Schema>>,\n context?: BetaToolRunContext,\n ) => Promisable<string | Array<BetaToolResultContentBlockParam>>;\n /**\n * Optional cleanup hook for tools that hold process-level resources (e.g. a\n * persistent shell). `client.beta.sessions.events.toolRunner` calls it once\n * when iteration ends.\n */\n close?: () => void | Promise<void>;\n}): BetaRunnableTool<NoInfer<FromSchema<Schema>>> {\n if (options.inputSchema.type !== 'object') {\n throw new Error(\n `JSON schema for tool \"${options.name}\" must be an object, but got ${options.inputSchema.type}`,\n );\n }\n\n return {\n type: 'custom',\n name: options.name,\n input_schema: options.inputSchema,\n description: options.description,\n run: options.run,\n parse: (content: unknown) => content as FromSchema<Schema>,\n ...(options.close ? { close: options.close } : {}),\n } as any;\n}\n\n/**\n * Creates a JSON schema output format object from the given JSON schema.\n * If this is passed to the `.parse()` method then the response message will contain a\n * `.parsed_output` property that is the result of parsing the content with the given JSON schema.\n *\n */\nexport function betaJSONSchemaOutputFormat<\n const Schema extends Exclude<JSONSchema, boolean> & { type: 'object' },\n>(\n jsonSchema: Schema,\n options?: {\n transform?: boolean;\n },\n): AutoParseableBetaOutputFormat<NoInfer<FromSchema<Schema>>> {\n if (jsonSchema.type !== 'object') {\n throw new Error(`JSON schema for tool must be an object, but got ${jsonSchema.type}`);\n }\n\n const transform = options?.transform ?? true;\n if (transform) {\n // todo: doing this is arguably necessary, but it does change the schema the user passed in\n // so I'm not sure how we should handle that\n jsonSchema = transformJSONSchema(jsonSchema) as Schema;\n }\n\n return {\n type: 'json_schema',\n schema: {\n ...jsonSchema,\n },\n parse: (content) => {\n try {\n return JSON.parse(content);\n } catch (error) {\n throw new AnthropicError(`Failed to parse structured output: ${error}`);\n }\n },\n };\n}\n","/**\n * Node-only skill plumbing for the agent toolset: downloading a session\n * agent's skills into the workdir and extracting the archives. Kept in its own\n * file because it is a distinct concern from the tool implementations in\n * `node.ts` — distinct enough, and large enough, to review on its own.\n */\n\nimport { child_process, fs as fssync, path, stream, util } from '../../internal/node';\nimport { AnthropicError } from '../../core/error';\nimport { loggerFor } from '../../internal/utils/log';\nimport { DIR_CREATE_MODE, errnoCode } from './fs-util';\nimport type { AgentToolContext } from './node';\n\nconst fs = fssync.promises;\nconst execFileAsync = util.promisify(child_process.execFile);\n\n/**\n * Download the session agent's skills into `{ctx.workdir}/skills/<name>/`.\n *\n * No-op (returns a no-op cleanup) unless `ctx.client` is set together with\n * `ctx.session` (or the deprecated `ctx.sessionId`). Reads the resolved agent\n * off the session and, for each skill, fetches its files via\n * `client.beta.skills.versions.download` and extracts the archive (a zip or\n * tar.* archive) into a directory named after the skill. A failure on one skill\n * is logged and does not block the others. Call this before starting the\n * session tool runner (e.g. right after the bash session / workdir is ready).\n *\n * Pass `ctx.session`. A session's resources cannot change while it runs, so the\n * caller fetches it once and shares that snapshot with the memory-store\n * download — the two can then never disagree about the attached resources.\n *\n * `ctx.sessionId` is deprecated: it costs an extra `sessions.retrieve` round\n * trip on every call, and a caller that uses it for both this and the\n * memory-store download fetches the session twice. It remains supported for\n * callers written before `session` existed.\n *\n * Returns a cleanup function that removes the skill directories this call\n * created — call it once the work item is done so downloaded skills do not\n * accumulate in the workdir across sessions.\n */\nexport async function setupSkills(ctx: AgentToolContext): Promise<() => Promise<void>> {\n const { client, sessionId } = ctx;\n if (!client) return async () => {};\n const log = loggerFor(client);\n let session = ctx.session;\n if (!session) {\n if (sessionId === undefined) return async () => {};\n log.warn(\n 'AgentToolContext.sessionId is deprecated and costs an extra session fetch; ' +\n 'fetch the session once and set `session` instead',\n { component: 'agent-tool-context' },\n );\n // The sessions/skills resources inject their anthropic-beta headers\n // (managed-agents / skills) themselves — no need to pass `betas` here.\n session = await client.beta.sessions.retrieve(sessionId);\n }\n const skillsRoot = path.resolve(ctx.workdir, 'skills');\n const created: string[] = [];\n for (const skill of session.agent.skills) {\n try {\n const version = await client.beta.skills.versions.retrieve(skill.version, { skill_id: skill.skill_id });\n // The directory is the skill's name, reduced to a single safe path\n // component so a hostile name can't escape `skillsRoot`.\n let dirname = path.basename(version.name.trim());\n if (dirname === '' || dirname === '.' || dirname === '..') dirname = skill.skill_id;\n const dest = path.resolve(skillsRoot, dirname);\n if (dest !== skillsRoot && !dest.startsWith(skillsRoot + path.sep)) {\n log.warn('skill name escapes the skills dir; skipping', {\n component: 'agent-tool-context',\n name: version.name,\n });\n continue;\n }\n // `skill.version` may be the alias `\"latest\"`, which only the retrieve\n // endpoint resolves; download by the concrete id it returned.\n const resp = await client.beta.skills.versions.download(version.id, { skill_id: skill.skill_id });\n await fs.rm(dest, { recursive: true, force: true });\n await fs.mkdir(dest, { recursive: true, mode: DIR_CREATE_MODE });\n created.push(dest);\n await extractSkillArchive(resp, dest);\n log.info('downloaded skill', {\n component: 'agent-tool-context',\n skill_id: skill.skill_id,\n version: version.id,\n dest,\n });\n } catch (e) {\n log.warn('failed to download skill', {\n component: 'agent-tool-context',\n skill_id: skill.skill_id,\n error: String(e),\n });\n }\n }\n return async () => {\n for (const dest of created) {\n await fs.rm(dest, { recursive: true, force: true }).catch((e) => {\n log.warn('failed to clean up skill', { component: 'agent-tool-context', dest, error: String(e) });\n });\n }\n };\n}\n\n/** Reject archive members that are absolute or contain a `..` component. */\nfunction assertSafeMemberNames(names: string[]): void {\n for (const raw of names) {\n const entry = raw.trim();\n if (!entry) continue;\n if (path.isAbsolute(entry) || entry.split(/[\\\\/]/).includes('..')) {\n throw new AnthropicError(`refusing to extract unsafe archive member: ${entry}`);\n }\n }\n}\n\nconst INCONSISTENT_LISTING = 'skill archive listing is inconsistent; refusing to extract';\n\n/**\n * Type chars (first byte of each `ls`-style line from `unzip -Z` / `tar -tvf`)\n * that denote a regular file or directory. `zipinfo` prints `?` for entries\n * with no Unix type bits, which `unzip` extracts as regular files; GNU tar\n * prints `C` for contiguous files. Everything else — `l` symlink, `h`\n * hardlink, `b`/`c` device, `p` fifo, `s` socket, unknown tar types — is a\n * special member.\n */\nconst PLAIN_TYPE_CHARS = { unzip: new Set(['-', 'd', '?']), tar: new Set(['-', 'd', 'C']) };\n\nfunction listingLines(listing: string): string[] {\n const lines = listing.split('\\n');\n if (lines[lines.length - 1] === '') lines.pop();\n return lines;\n}\n\n/**\n * A special member is excluded by handing its listed name back to the CLI as\n * a pattern, so the name must be byte-identical to what is stored. `tar`,\n * `bsdtar` and `unzip` print bytes they cannot show literally as `\\ooo`, `^X`\n * or `#U` escapes, or as raw non-ASCII; any such name cannot be excluded\n * reliably. A leading `-` would let `unzip` parse the pattern as an option.\n */\nfunction canExcludeVerbatim(cmd: 'unzip' | 'tar', name: string): boolean {\n return /^[\\x20-\\x7E]+$/.test(name) && !/[\\\\^#]/.test(name) && !(cmd === 'unzip' && name.startsWith('-'));\n}\n\n/**\n * Pair an archive's name listing (`unzip -Z1` / `tar -tf`) with its typed\n * listing (`unzip -Z --h --t` / `tar -tvf`) and split the members into plain\n * (regular file or directory) and special (everything else). Special members\n * are excluded from extraction rather than rejected; the archive is refused\n * only when the two listings disagree in length or a special member's name\n * cannot be passed back to the CLI verbatim (see {@link canExcludeVerbatim}).\n */\nexport function classifyArchiveListing(\n cmd: 'unzip' | 'tar',\n names: string,\n typed: string,\n): { plain: string[]; special: string[] } {\n const nameLines = listingLines(names);\n const typedLines = listingLines(typed);\n if (nameLines.length !== typedLines.length) throw new AnthropicError(INCONSISTENT_LISTING);\n const plain: string[] = [];\n const special: string[] = [];\n nameLines.forEach((name, i) => {\n if (PLAIN_TYPE_CHARS[cmd].has(typedLines[i]!.charAt(0))) {\n plain.push(name);\n return;\n }\n if (!canExcludeVerbatim(cmd, name)) {\n throw new AnthropicError(\n `refusing to extract archive: cannot safely exclude member ${JSON.stringify(name)}`,\n );\n }\n special.push(name);\n });\n return { plain, special };\n}\n\n/**\n * Walk `dir` with `lstat` semantics and reject anything that is not a regular\n * file or directory. Never follows a link and never descends into anything\n * but a real directory.\n */\nexport async function assertOnlyPlainEntries(dir: string): Promise<void> {\n for (const entry of await fs.readdir(dir, { withFileTypes: true })) {\n if (entry.isDirectory()) await assertOnlyPlainEntries(path.join(dir, entry.name));\n else if (!entry.isFile()) throw new AnthropicError(INCONSISTENT_LISTING);\n }\n}\n\n/**\n * Run an archive CLI (`unzip` for zip archives, `tar` for everything else),\n * returning its stdout. Both binaries must be on `PATH`; a missing one would\n * otherwise surface as an opaque `ENOENT` spawn failure, so it is turned into a\n * clear, specific error naming the missing command.\n */\nasync function runArchiveTool(cmd: 'unzip' | 'tar', args: string[]): Promise<string> {\n try {\n const { stdout } = await execFileAsync(cmd, args);\n return stdout;\n } catch (e) {\n if (errnoCode(e) === 'ENOENT') {\n throw new AnthropicError(\n `skill extraction requires the \\`${cmd}\\` command, but it was not found on PATH`,\n );\n }\n throw e;\n }\n}\n\n/**\n * The single top-level directory shared by every entry in an archive listing,\n * or `''` if entries don't all live under one common directory. Skill bundles\n * are packaged wrapped in one directory named after the skill (e.g.\n * `pdf/SKILL.md`, `pdf/scripts/...`); the extractor strips it so contents land\n * directly in the skill's dir instead of a redundant nested `<skill>/<skill>/`\n * level. A flat or multi-root archive yields `''`.\n */\nfunction archiveTopDir(names: string[]): string {\n let top: string | undefined;\n let nested = false;\n for (const raw of names) {\n // Drop `.` / empty segments so a `./pdf/...`-style listing (e.g. from\n // `tar -C dir .`) is treated the same as `pdf/...`.\n const parts = raw\n .trim()\n .split('/')\n .filter((p) => p !== '' && p !== '.');\n if (parts.length === 0) continue;\n const first = parts[0]!;\n if (top === undefined) top = first;\n else if (first !== top) return '';\n if (parts.length > 1) nested = true;\n }\n return top !== undefined && nested ? top : '';\n}\n\n/**\n * Extract a skill download (a zip or tar.* archive) into `dest`. Streams the\n * response body straight to a temp file beside `dest` (so the whole archive is\n * never buffered in memory — skills can contain large binaries), then shells out\n * to `unzip`/`tar` — consistent with the rest of the toolset, which already\n * invokes `bash` and `rg`. Both `unzip` and `tar` must be available on `PATH`; a\n * missing binary surfaces as a clear error (see {@link runArchiveTool}). Refuses\n * any member that would escape `dest` (zip-slip / tar-slip): skill archives\n * come from the API, but skills can be third-party. Members that are not a\n * regular file or directory (symlink, hardlink, device, fifo) are excluded\n * from extraction rather than rejected; an archive whose special members\n * cannot be excluded reliably is refused (see {@link classifyArchiveListing}).\n * `tar` matches exclusions unanchored, so a plain member sharing a special\n * member's name may be dropped too. The staging tree is verified to hold only\n * regular files and directories before anything is promoted into `dest`.\n *\n * The skill bundle's single wrapper directory is stripped: the archive is\n * extracted into a staging dir and the wrapper's contents are promoted into\n * `dest`, so files land at `dest/SKILL.md` rather than a doubled\n * `dest/<skill>/SKILL.md` (`unzip` has no `--strip-components`, so this is\n * done uniformly by staging + promote rather than per-tool flags).\n */\nexport async function extractSkillArchive(resp: Response, dest: string): Promise<void> {\n const tmp = path.join(dest, `.skill-archive-${process.pid}-${Date.now()}`);\n if (!resp.body) {\n throw new AnthropicError('skill download response had no body');\n }\n await stream.promises.pipeline(\n stream.Readable.fromWeb(resp.body as Parameters<typeof stream.Readable.fromWeb>[0]),\n fssync.createWriteStream(tmp),\n );\n const stage = path.join(path.dirname(dest), `.skill-stage-${process.pid}-${Date.now()}`);\n const excludeFile = path.join(path.dirname(dest), `.skill-exclude-${process.pid}-${Date.now()}`);\n try {\n // Sniff the first bytes: zip archives start with \"PK\\x03\\x04\"; treat\n // anything else as a tar.* archive (`tar -xf` autodetects gzip/bzip2/xz).\n const head = await readHead(tmp, 4);\n const isZip =\n head.length >= 4 && head[0] === 0x50 && head[1] === 0x4b && head[2] === 0x03 && head[3] === 0x04;\n const archiveCmd = isZip ? 'unzip' : 'tar';\n // List first, validate, then extract — `tar`/`unzip` will happily write a\n // `../` member (or follow a symlink member) outside `-C`/`-d` otherwise.\n const names = await runArchiveTool(archiveCmd, isZip ? ['-Z1', tmp] : ['-tf', tmp]);\n const typed = await runArchiveTool(archiveCmd, isZip ? ['-Z', '--h', '--t', tmp] : ['-tvf', tmp]);\n const { plain, special } = classifyArchiveListing(archiveCmd, names, typed);\n assertSafeMemberNames([...plain, ...special]);\n const top = archiveTopDir(plain);\n await fs.mkdir(stage, { recursive: true, mode: DIR_CREATE_MODE });\n // `unzip` exits non-zero when every member is excluded, so only run the\n // extractor when there is something to extract.\n if (plain.length > 0) {\n await runArchiveTool(archiveCmd, await extractArgs(archiveCmd, tmp, stage, special, excludeFile));\n }\n await assertOnlyPlainEntries(stage);\n // Promote the wrapper's contents (or the staged tree itself, if the\n // archive wasn't wrapped) into the already-created empty `dest`. `stage`\n // is a sibling of `dest`, so each rename stays on one filesystem.\n const srcRoot = top ? path.join(stage, top) : stage;\n const entries = await fs.readdir(srcRoot).catch((e: unknown) => {\n throw errnoCode(e) === 'ENOENT' ? new AnthropicError(INCONSISTENT_LISTING) : e;\n });\n for (const entry of entries) {\n await fs.rename(path.join(srcRoot, entry), path.join(dest, entry));\n }\n } finally {\n await fs.rm(tmp, { force: true });\n await fs.rm(excludeFile, { force: true });\n await fs.rm(stage, { recursive: true, force: true });\n }\n}\n\n/**\n * Arguments that extract `archive` into `stage` while excluding every member\n * in `special`. Names are glob-escaped because both CLIs treat exclusions as\n * patterns; `tar` reads them from `excludeFile`, `unzip` takes them after\n * `-x`, which must follow `-d` so no pattern is parsed as an option.\n */\nasync function extractArgs(\n cmd: 'unzip' | 'tar',\n archive: string,\n stage: string,\n special: string[],\n excludeFile: string,\n): Promise<string[]> {\n const patterns = special.map((name) => name.replace(/[*?[\\\\]/g, '\\\\$&'));\n if (cmd === 'unzip') {\n return ['-oq', archive, '-d', stage, ...(patterns.length > 0 ? ['-x', ...patterns] : [])];\n }\n if (patterns.length === 0) return ['-xf', archive, '-C', stage];\n await fs.writeFile(excludeFile, patterns.join('\\n') + '\\n', { flag: 'wx', mode: 0o600 });\n return ['-xf', archive, '-C', stage, '-X', excludeFile];\n}\n\n/** Read the first `n` bytes of `file`. */\nasync function readHead(file: string, n: number): Promise<Buffer> {\n const handle = await fs.open(file, 'r');\n try {\n const buf = Buffer.alloc(n);\n const { bytesRead } = await handle.read(buf, 0, n, 0);\n return buf.subarray(0, bytesRead);\n } finally {\n await handle.close();\n }\n}\n","/**\n * Session-level memory-store download and sync.\n *\n * A session may have several memory stores attached. This module resolves\n * where each store's folder goes on disk, opens a {@link LocalFileStore}\n * there, and reconciles each folder with its remote store — the merge rules\n * live on {@link SessionMemoryStores}.\n *\n * Node-only (it sits on the filesystem-backed FileStore); like `skills.ts`,\n * it is reachable through the shimmed `node.ts` entry point.\n */\n\nimport { crypto, path } from '../../internal/node';\nimport type { Anthropic } from '../../client';\nimport { AnthropicError } from '../../core/error';\nimport { loggerFor, type Logger } from '../../internal/utils/log';\nimport { decodeUTF8 } from '../../internal/utils/bytes';\nimport { isStatus } from '../../internal/utils/backoff';\nimport { isPathLegal, FileStoreError, LocalFileStore, type FileStore } from '../../internal/file-store';\nimport type { BetaManagedAgentsSession } from '../../resources/beta/sessions/sessions';\nimport type { BetaManagedAgentsMemoryStoreResource } from '../../resources/beta/sessions/resources';\nimport type {\n BetaManagedAgentsMemory,\n BetaManagedAgentsMemoryView,\n} from '../../resources/beta/memory-stores/memories';\nimport { DEFAULT_MEMORY_SYNC_INTERVAL_MS, checkMemorySyncInterval } from './sync-interval';\n\nexport { DEFAULT_MEMORY_SYNC_INTERVAL_MS, MIN_MEMORY_SYNC_INTERVAL_MS } from './sync-interval';\n\n/**\n * Whether a locally deleted file may delete its memory on the server:\n * `\"enabled\"` sends the delete, `\"log_only\"` runs the checks but only logs,\n * `\"disabled\"` never deletes.\n */\nexport type MemoryDeleteMode = 'enabled' | 'log_only' | 'disabled';\n\n/**\n * Time bound the worker puts on each teardown pass — the final\n * {@link SessionMemoryStores.finish}, then {@link SessionMemoryStores.flushWrites} —\n * so a slow server cannot stall teardown.\n */\nexport const MEMORY_FLUSH_TIMEOUT_MS = 30_000;\n\n/**\n * Marker file stamped into every store folder; a sync trusts the folder only\n * when it matches. Never itself syncs.\n */\nexport const MARKER_PATH = '.anthropic-memory-store';\n\nconst MARKER_VERSION = 1;\n\nfunction markerSha(memoryStoreId: string): string {\n return crypto\n .createHash('sha256')\n .update(`version ${MARKER_VERSION}\\n${memoryStoreId}`, 'utf-8')\n .digest('hex');\n}\n\n/** How long a file must stay missing locally before its server delete goes out. */\nexport const DELETE_CORROBORATION_MS = 30_000;\n\n/**\n * Page sizes for memory listings — the API's maximum per view: `basic` pages\n * carry up to 100 items, `full` pages are capped by the server.\n */\nconst LIST_PAGE_SIZE = 100;\nconst FULL_LIST_PAGE_SIZE = 20;\n\n/**\n * How many single-memory content fetches may be in flight at once during one\n * store's pull pass. A sync rarely pulls more than a handful of memories, so\n * a higher cap buys nothing in the common case.\n */\nconst FETCH_CONCURRENCY = 16;\n\n/**\n * How many uploads one store's flush keeps in flight. At ~0.3s per upload,\n * 32 clears the server's 2000-memories-per-store cap inside\n * {@link MEMORY_FLUSH_TIMEOUT_MS}.\n */\nexport const UPLOAD_CONCURRENCY = 32;\n\n/**\n * Per-sync remote-delete cap bounds. The floor lets a small store's\n * deletes clear in one pass; the ceiling caps damage on large ones.\n */\nconst DELETE_CAP_FLOOR = 8;\nconst DELETE_CAP_CEILING = 50;\n\n/**\n * One directory scan: the marker check and the file listing come from the\n * same read, so a folder wiped mid-sync cannot pass the check and then look\n * empty.\n */\ntype MarkerScan = {\n files: Record<string, string>;\n markerOk: boolean;\n distrustReason: string | null;\n};\n\n/**\n * A session's memory stores could not be mounted.\n *\n * Thrown by {@link SessionMemoryStores.download} when a store cannot be\n * materialised on disk, and by the environment worker when a work item for a\n * session that has memory stores carried no sessions token to reach them with.\n */\nexport class SessionMemoryError extends AnthropicError {\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'SessionMemoryError';\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause !== undefined) this.cause = cause;\n }\n}\n\n/** One attached store: its {@link FileStore} on disk plus the sync baseline. */\ntype AttachedStore = {\n memoryStoreId: string;\n files: FileStore;\n readOnly: boolean;\n /** `{rel → content sha}` as of the last download or successful sync. */\n baseline: Map<string, string>;\n /** `{rel → sha}` the server refused; retried only after the file changes. */\n refusedShas: Map<string, string>;\n /** `{rel → Date.now()}` when first seen missing locally. */\n pendingDeletes: Map<string, number>;\n};\n\n/** One sync's remote-delete gate and counters. */\nclass DeletePass {\n attempted = 0;\n capped = 0;\n suppressed = 0;\n\n constructor(\n readonly mode: MemoryDeleteMode,\n readonly cap: number,\n /** Skip the delete wait — set on the session's last sync. */\n readonly waiveWindow: boolean,\n ) {}\n\n takeSlot(): boolean {\n if (this.attempted >= this.cap) {\n this.capped++;\n return false;\n }\n this.attempted++;\n return true;\n }\n}\n\nexport interface SessionMemoryStoresOptions {\n /** Base directory for the `{workdir}/memory/<name>` fallback store location. */\n workdir: string;\n /**\n * How often (milliseconds) {@link SessionMemoryStores.syncIfDue} actually\n * syncs. Defaults to {@link DEFAULT_MEMORY_SYNC_INTERVAL_MS} (15s); values\n * below {@link MIN_MEMORY_SYNC_INTERVAL_MS} (5s) are rejected.\n */\n syncIntervalMs?: number;\n /** See {@link MemoryDeleteMode}. Defaults to `\"enabled\"`. */\n syncDeletions?: MemoryDeleteMode;\n}\n\n/**\n * The memory stores attached to one session, materialised on disk.\n *\n * {@link SessionMemoryStores.download} opens a {@link LocalFileStore} at each\n * attached store's directory (its `mount_path`, or a workdir fallback — see\n * {@link SessionMemoryStores.download}), pulls its memories, and records each\n * one's `content_sha256` as the sync baseline. Each sync\n * ({@link SessionMemoryStores.syncIfDue} on the worker's cadence,\n * {@link SessionMemoryStores.finish} once at the end) reconciles disk against\n * server, per store and per path:\n *\n * - a memory changed only remotely is written to disk;\n * - a file changed only locally is uploaded — an update with a\n * `content_sha256` precondition, or a create for a new file;\n * - a file changed on both sides logs a warning and takes the server version;\n * - a file the server refuses (too large, invalid content) is skipped —\n * warned once and retried only after the file changes; other files keep\n * syncing;\n * - a file deleted locally is deleted on the server after a delay and a\n * re-check — never on the first sync that notices, and only up to a\n * per-sync cap. `syncDeletions` gates it;\n * - a memory deleted on the server is deleted on disk — unless the local\n * file holds un-pushed edits: a writable store re-creates the memory\n * from the file, a read-only one keeps the file unsynced;\n * - a store attached read-only pulls but never pushes.\n *\n * A download pulls the whole store, so it lists with content included. The\n * recurring syncs instead run two phases: a content-free listing (paths and\n * shas) drives the merge decisions, then only the memories actually being\n * written to disk are fetched, a bounded number at a time. A sync that finds\n * nothing changed moves no content at all.\n *\n * A file whose write to disk failed is never in the baseline, so its absence\n * reads as a failed download — it is pulled again, never deleted. A write\n * never re-creates a store folder that vanished mid-sync: it fails, and the\n * next sync's scan finds whatever is at the path by then — nothing\n * (re-downloaded) or someone else's files (left alone) — under the rules\n * below.\n *\n * A store folder that loses its {@link MARKER_PATH} marker, is emptied,\n * or vanishes is re-downloaded rather than treated as a mass local\n * delete; a folder whose marker names another store is left as found —\n * nothing pushed, nothing deleted.\n *\n * Two things about the store's directory make\n * {@link SessionMemoryStores.download} refuse the session outright, with\n * {@link SessionMemoryError}: a `mount_path` that is not a clean absolute\n * path, and a directory already sitting at that path.\n *\n * {@link SessionMemoryStores.download} throws on the first store it cannot\n * materialise. The syncs never throw: mid-session, one bad store or one bad\n * file is logged and the rest continue. Instances are not safe for concurrent\n * use. The worker builds one on its token-scoped sub-client (the memory\n * endpoints reject the environment key): `syncIfDue` after each tool call,\n * `finish` once at a clean end, a bounded {@link SessionMemoryStores.flushWrites}\n * in every teardown, `dispose` last.\n */\nexport class SessionMemoryStores {\n readonly #client: Anthropic;\n readonly #workdir: string;\n readonly #syncIntervalMs: number;\n readonly #syncDeletions: MemoryDeleteMode;\n readonly #log: Logger;\n #lastSyncAt: number;\n #finished = false;\n readonly #stores: AttachedStore[] = [];\n\n constructor(client: Anthropic, opts: SessionMemoryStoresOptions) {\n this.#client = client;\n this.#workdir = opts.workdir;\n this.#syncIntervalMs = opts.syncIntervalMs ?? DEFAULT_MEMORY_SYNC_INTERVAL_MS;\n checkMemorySyncInterval(this.#syncIntervalMs, 'syncIntervalMs');\n this.#syncDeletions = opts.syncDeletions ?? 'enabled';\n this.#log = loggerFor(client);\n this.#lastSyncAt = Date.now();\n }\n\n /**\n * Every attached store's root directory.\n *\n * The worker lists these as the file tools' allowed roots so a store\n * mounted outside the workdir stays reachable.\n */\n get roots(): string[] {\n return this.#stores.map((s) => s.files.root().path);\n }\n\n /**\n * Root directories of stores attached read-only.\n *\n * The file tools consult this to refuse writes into read-only stores.\n */\n get readOnlyRoots(): string[] {\n return this.#stores.filter((s) => s.readOnly).map((s) => s.files.root().path);\n }\n\n /**\n * Where one store's files land on disk.\n *\n * The store's files land at its `mount_path` — the very location the agent's\n * system prompt tells it to read. A `mount_path` we cannot use verbatim is\n * refused rather than quietly relocated: the agent would read an empty\n * folder at the path it was told about, and write notes somewhere the next\n * session looks for nothing.\n */\n #storeRoot(resource: BetaManagedAgentsMemoryStoreResource): string {\n if (resource.mount_path) {\n if (!isPathLegal(resource.mount_path)) {\n throw new SessionMemoryError(\n `memory store mount_path is not a clean absolute path: ${JSON.stringify(resource.mount_path)} ` +\n `(memory_store_id=${resource.memory_store_id})`,\n );\n }\n return resource.mount_path;\n }\n // No mount_path at all: nothing points the agent anywhere, so the workdir\n // is as good a home as any.\n return path.join(this.#workdir, 'memory', resource.name || resource.memory_store_id);\n }\n\n /**\n * Download every attached store's memories to disk.\n *\n * `session` arrives already fetched — one snapshot shared with the skills\n * download, so the two cannot disagree about the resources.\n */\n async download(session: BetaManagedAgentsSession): Promise<void> {\n for (const resource of session.resources) {\n if (resource.type !== 'memory_store') continue;\n const root = this.#storeRoot(resource);\n let store: AttachedStore | undefined;\n try {\n store = {\n memoryStoreId: resource.memory_store_id,\n // utf8: a binary file is refused at put/get, not mid-sync.\n files: await LocalFileStore.open(root, { utf8: true }),\n readOnly: resource.access === 'read_only',\n baseline: new Map(),\n refusedShas: new Map(),\n pendingDeletes: new Map(),\n };\n // A root `open` did not create is a dead run's leftovers; the first\n // sync would upload them into the customer's store.\n if (!store.files.root().removedOnDispose) {\n // The configured path, not root().path — that one is resolved and\n // would name a symlinked mount's target.\n throw new SessionMemoryError(\n `something already exists at the memory store's path: ${root} ` +\n `(memory_store_id=${resource.memory_store_id}); ` +\n 'it must not exist when the session starts',\n );\n }\n try {\n await store.files.createRoot();\n } catch (e) {\n if (!isErrno(e)) throw e;\n // An unmountable root fails the item, not just one file.\n throw new SessionMemoryError(\n `cannot create the memory store's folder: ${root} ` +\n `(memory_store_id=${resource.memory_store_id}): ${e}; ` +\n 'the worker host must make this mount path writable',\n e,\n );\n }\n await this.#stampAndPull(store);\n this.#log.info('downloaded memories', {\n count: store.baseline.size,\n memory_store_id: store.memoryStoreId,\n dest: store.files.root().path,\n });\n this.#stores.push(store);\n } catch (e) {\n // A half-downloaded folder self-destructs; `dispose` leaves a refused\n // pre-existing directory exactly as found.\n if (store) await store.files.dispose().catch(() => {});\n // Every store must land: a session missing a folder its system prompt\n // names runs with amnesia and syncs nothing back.\n if (e instanceof SessionMemoryError) throw e;\n throw new SessionMemoryError(\n `failed to download memory store memory_store_id=${resource.memory_store_id}: ${e}`,\n e,\n );\n }\n }\n this.#lastSyncAt = Date.now();\n }\n\n /**\n * The session's last sync — skips the delete wait, so calling it twice\n * would undo the protection; it throws instead.\n */\n async finish(): Promise<void> {\n if (this.#finished) {\n throw new AnthropicError(\"finish() was already called: it is the session's last sync and runs once\");\n }\n this.#finished = true;\n await this.syncAll(true);\n }\n\n /** @internal — reconcile every store once; the tests' deterministic driver */\n async syncAll(final: boolean): Promise<void> {\n await Promise.all(this.#stores.map((store) => this.#syncStore(store, final)));\n this.#lastSyncAt = Date.now();\n }\n\n async #scanMarker(store: AttachedStore): Promise<MarkerScan> {\n const local = await store.files.hashtree();\n const marker = local[MARKER_PATH];\n delete local[MARKER_PATH];\n if (marker === markerSha(store.memoryStoreId)) {\n return { files: local, markerOk: true, distrustReason: null };\n }\n return {\n files: local,\n markerOk: false,\n distrustReason:\n marker !== undefined ? 'the marker file does not match this store' : 'the marker file is gone',\n };\n }\n\n async #syncStore(store: AttachedStore, final: boolean): Promise<void> {\n try {\n const scan = await this.#scanMarker(store);\n const local = scan.files;\n if (!scan.markerOk) {\n if (Object.keys(local).length > 0) {\n this.#log.warn(`${scan.distrustReason}; leaving the memory store folder as found and not syncing`, {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n });\n return;\n }\n await this.#recover(store, 'the folder or its marker is gone');\n return;\n }\n // A lone file vanishing is an ordinary deletion; two or more at\n // once with nothing left is a wiped folder.\n if (Object.keys(local).length === 0 && store.baseline.size > 1) {\n await this.#recover(store, 'every memory file is gone at once');\n return;\n }\n\n const remote = new Map<string, BetaManagedAgentsMemory>();\n for await (const [rel, item] of this.#listMemories(store.memoryStoreId)) {\n remote.set(rel, item);\n }\n\n const deletes = new DeletePass(\n this.#syncDeletions,\n Math.max(DELETE_CAP_FLOOR, Math.min(DELETE_CAP_CEILING, Math.floor(store.baseline.size / 4))),\n final,\n );\n const pulls: Array<[rel: string, item: BetaManagedAgentsMemory]> = [];\n const baseline = new Map<string, string>();\n const paths = [...new Set([...remote.keys(), ...Object.keys(local), ...store.baseline.keys()])].sort();\n for (const rel of paths) {\n const remoteItem = remote.get(rel);\n const localSha = local[rel];\n const baseSha = store.baseline.get(rel);\n let sha: string | undefined;\n if (\n localSha === undefined &&\n baseSha !== undefined &&\n remoteItem !== undefined &&\n remoteItem.content_sha256 === baseSha &&\n !store.readOnly\n ) {\n sha = await this.#corroboratedDelete(store, rel, remoteItem, baseSha, deletes);\n } else {\n sha = await this.#syncPath(store, rel, remoteItem, localSha, pulls);\n }\n if (sha !== undefined) baseline.set(rel, sha);\n }\n store.baseline = baseline;\n // The content pass: everything above moved only shas.\n await this.#pullAll(store, pulls);\n if (deletes.suppressed > 0) {\n this.#log.debug('remote deletes are disabled; locally deleted memories stay on the server', {\n count: deletes.suppressed,\n memory_store_id: store.memoryStoreId,\n });\n }\n if (deletes.capped > 0) {\n this.#log.warn(\n `delete cap reached: ${deletes.mode === 'log_only' ? 'would send' : 'sent'} ` +\n `${deletes.attempted} deletes, held ${deletes.capped} for later syncs`,\n { memory_store_id: store.memoryStoreId },\n );\n }\n } catch (e) {\n this.#log.warn('memory sync failed', { memory_store_id: store.memoryStoreId, error: String(e) });\n }\n }\n\n /** Sync when `syncIntervalMs` has elapsed since the last one. Never throws. */\n async syncIfDue(): Promise<void> {\n if (Date.now() - this.#lastSyncAt < this.#syncIntervalMs) return;\n await this.syncAll(false);\n }\n\n /**\n * Upload new and changed files; send no deletes and pull nothing.\n *\n * The push-only rescue pass for a session ending on an error or\n * cancel — best-effort, bounded by the caller: once `signal` aborts no\n * further upload starts, each store cut off part-way logs how many\n * changed files it had not finished uploading, and this resolves without\n * waiting for requests already in flight. Each store uploads up to\n * {@link UPLOAD_CONCURRENCY} files at a time. Skips read-only stores,\n * refused files, files the server already holds, and folders that fail\n * the marker check. Never throws.\n */\n async flushWrites(signal?: AbortSignal): Promise<void> {\n await Promise.all(this.#stores.map((store) => this.#flushStore(store, signal)));\n }\n\n async #flushStore(store: AttachedStore, signal: AbortSignal | undefined): Promise<void> {\n const dirty = new Map<string, string>();\n const unsent = new Set<string>();\n const push = async (): Promise<void> => {\n if (store.readOnly) return;\n const scan = await this.#scanMarker(store);\n if (!scan.markerOk) {\n this.#log.warn(`${scan.distrustReason}; not uploading anything from the memory store folder`, {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n });\n return;\n }\n for (const [rel, sha] of Object.entries(scan.files)) {\n if (sha !== store.baseline.get(rel) && store.refusedShas.get(rel) !== sha) {\n dirty.set(rel, sha);\n unsent.add(rel);\n }\n }\n if (dirty.size === 0 || signal?.aborted) return;\n const remote = new Map<string, BetaManagedAgentsMemory>();\n for await (const [rel, item] of this.#listMemories(store.memoryStoreId)) {\n if (signal?.aborted) return;\n remote.set(rel, item);\n }\n const uploads: Array<\n [rel: string, localSha: string | undefined, existing: BetaManagedAgentsMemory | undefined]\n > = [];\n for (const rel of [...dirty.keys()].sort()) {\n const localSha = dirty.get(rel);\n const baseSha = store.baseline.get(rel);\n const existing = remote.get(rel);\n if (existing !== undefined && existing.content_sha256 === localSha) {\n store.baseline.set(rel, existing.content_sha256);\n unsent.delete(rel);\n continue;\n }\n if (existing !== undefined && existing.content_sha256 !== baseSha) {\n this.#log.warn('memory changed both locally and remotely; the flush leaves the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n unsent.delete(rel);\n continue;\n }\n uploads.push([rel, localSha, existing]);\n }\n await this.#uploadAll(store, uploads, unsent, signal);\n };\n try {\n await settledOrAborted(push(), signal);\n if (signal?.aborted && unsent.size > 0) {\n this.#log.warn(\n `memory flush cut off part-way; ${unsent.size} of ${dirty.size} changed files had not finished uploading`,\n { memory_store_id: store.memoryStoreId },\n );\n }\n } catch (e) {\n this.#log.warn('memory flush failed', { memory_store_id: store.memoryStoreId, error: String(e) });\n }\n }\n\n /**\n * Remove every store directory that {@link SessionMemoryStores.download}\n * created. Pre-existing directories are left alone — that is\n * {@link FileStore.dispose}'s own rule. A folder that fails the marker\n * check is kept too — sync left it as found, so must dispose.\n */\n async dispose(): Promise<void> {\n for (const store of this.#stores) {\n const root = store.files.root();\n try {\n const scan = await this.#scanMarker(store);\n if (!scan.markerOk && Object.keys(scan.files).length > 0) {\n this.#log.warn(`${scan.distrustReason}; leaving the memory store folder on disk`, {\n root: root.path,\n memory_store_id: store.memoryStoreId,\n });\n continue;\n }\n await store.files.dispose();\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n this.#log.warn('failed to remove the memory store folder', {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n continue;\n }\n if (root.removedOnDispose) {\n this.#log.info('removed memory store dir', {\n dest: root.path,\n memory_store_id: store.memoryStoreId,\n });\n }\n }\n }\n\n /** Rebuild a destroyed folder from the server; sends no deletes, no uploads. */\n async #recover(store: AttachedStore, reason: string): Promise<void> {\n this.#log.warn(`${reason}; re-downloading the memory store folder instead of syncing`, {\n root: store.files.root().path,\n memory_store_id: store.memoryStoreId,\n });\n await store.files.createRoot();\n await this.#stampAndPull(store);\n }\n\n /**\n * Write the marker, then pull every remote memory. Baseline is cleared\n * first so a failed write never leaves an entry whose file is not on disk.\n * Every memory is needed here, so the listing carries the content — pages\n * cost far fewer round-trips than a request per memory.\n */\n async #stampAndPull(store: AttachedStore): Promise<void> {\n store.baseline = new Map();\n store.pendingDeletes.clear();\n await store.files.put(MARKER_PATH, `version ${MARKER_VERSION}\\n${store.memoryStoreId}`);\n for await (const [rel, item] of this.#listMemories(store.memoryStoreId, 'full')) {\n if (await this.#write(store, rel, item.content ?? '')) {\n store.baseline.set(rel, item.content_sha256);\n }\n }\n }\n\n /**\n * Reconcile one path. Returns the sha to record in the baseline, or\n * `undefined` to drop the path from it.\n *\n * `pulls` is an output: when the remote version should be written to disk,\n * this appends `[rel, remote]` to it instead of writing — `rel` is the\n * file to write, `remote` the listed memory whose content `#pullAll` will\n * fetch and write there.\n */\n async #syncPath(\n store: AttachedStore,\n rel: string,\n remote: BetaManagedAgentsMemory | undefined,\n localSha: string | undefined,\n pulls: Array<[rel: string, item: BetaManagedAgentsMemory]>,\n ): Promise<string | undefined> {\n const baseSha = store.baseline.get(rel);\n if (localSha !== undefined) {\n store.pendingDeletes.delete(rel);\n }\n\n if (!remote) {\n if (localSha === undefined) {\n store.pendingDeletes.delete(rel);\n return undefined;\n }\n if (baseSha !== undefined) {\n if (localSha === baseSha) {\n const fresh = await this.#removeLocal(store, rel, baseSha);\n if (fresh === undefined) return undefined;\n if (fresh === baseSha) return baseSha;\n localSha = fresh;\n }\n // The file holds an un-pushed edit — the only copy; falling\n // through re-creates or keeps it.\n if (store.readOnly) {\n this.#log.warn(\n 'memory deleted remotely but edited locally; keeping the file, ' +\n 'which a read-only store cannot push',\n { path: rel, memory_store_id: store.memoryStoreId },\n );\n } else if (store.refusedShas.get(rel) !== localSha) {\n this.#log.info('memory deleted remotely but edited locally; re-creating it from the file', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n }\n }\n if (store.readOnly) return undefined;\n if (store.refusedShas.get(rel) === localSha) return undefined;\n return await this.#upload(store, rel, localSha, undefined);\n }\n\n const remoteSha = remote.content_sha256;\n const remoteChanged = remoteSha !== baseSha;\n const locallyEdited = localSha !== undefined && localSha !== baseSha && localSha !== remoteSha;\n // Read-only stores never push, so their local edits don't count.\n const localChanged = !store.readOnly && locallyEdited;\n\n if (localSha === undefined && baseSha !== undefined) {\n // Only successful writes enter the baseline, so this file was verifiably\n // on disk and is now gone: a real local deletion. The unchanged-remote\n // case went to #corroboratedDelete.\n if (remoteChanged) {\n this.#log.warn('memory deleted locally but changed remotely; restoring the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n store.pendingDeletes.delete(rel);\n pulls.push([rel, remote]);\n }\n return baseSha;\n }\n\n if (remoteChanged) {\n // The file already holds the remote bytes — adopt without a fetch.\n if (localSha === remoteSha) return remoteSha;\n // locallyEdited, not localChanged: warn on read-only overwrites too.\n if (locallyEdited) {\n this.#log.warn('memory changed both locally and remotely; keeping the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n }\n pulls.push([rel, remote]);\n return baseSha;\n }\n if (localChanged) {\n if (store.refusedShas.get(rel) === localSha) return remoteSha;\n return (await this.#upload(store, rel, localSha, remote)) ?? remoteSha;\n }\n return remoteSha;\n }\n\n /**\n * Remove the file for a memory the server no longer has, if it still holds\n * `expectSha`. Returns `undefined` when the file is gone from disk,\n * `expectSha` when it must stay in the baseline (I/O error), or the file's\n * fresh sha when it was edited since the scan.\n */\n async #removeLocal(store: AttachedStore, rel: string, expectSha: string): Promise<string | undefined> {\n // Re-read: an edit since the scan makes this file the only copy.\n let freshSha: string | null;\n try {\n freshSha = await store.files.hashFile(rel);\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n return expectSha;\n }\n if (freshSha === null) return undefined;\n if (freshSha !== expectSha) return freshSha;\n try {\n await store.files.remove(rel);\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n this.#log.warn('failed to remove memory deleted remotely', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n return expectSha;\n }\n return undefined;\n }\n\n /**\n * Write a memory's content to disk; `false` (and a warning) on failure.\n *\n * A `..` component in the wire path reaches here as {@link FileStoreError} —\n * that is the escape guard.\n */\n async #write(store: AttachedStore, rel: string, content: string): Promise<boolean> {\n try {\n await store.files.put(rel, content);\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n this.#log.warn('failed to write memory', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n return false;\n }\n return true;\n }\n\n /**\n * Fetch and write the given memories, {@link FETCH_CONCURRENCY} at a time.\n *\n * The sync's content pass: the listing carried no content, so each memory\n * is fetched individually and written as it arrives. On success the path's\n * baseline advances; on a failed fetch or write the old entry stays and the\n * next sync retries. A 404 means the memory was deleted after the listing —\n * the next sync reconciles it.\n */\n async #pullAll(store: AttachedStore, pulls: Array<[rel: string, item: BetaManagedAgentsMemory]>) {\n if (pulls.length === 0) return;\n const pullOne = async (rel: string, listed: BetaManagedAgentsMemory): Promise<void> => {\n let item: BetaManagedAgentsMemory;\n try {\n item = await this.#client.beta.memoryStores.memories.retrieve(listed.id, {\n memory_store_id: store.memoryStoreId,\n view: 'full',\n });\n } catch (e) {\n if (isStatus(e, 404)) return;\n this.#log.warn('failed to fetch memory content', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n return;\n }\n if (await this.#write(store, rel, item.content ?? '')) {\n store.baseline.set(rel, item.content_sha256);\n }\n };\n // A fixed pool of workers drains the queue; the write stays inside the\n // worker so a slow disk cannot let fetched bodies pile up beyond the bound.\n const queue = pulls[Symbol.iterator]();\n const worker = async (): Promise<void> => {\n for (const [rel, listed] of queue) await pullOne(rel, listed);\n };\n await Promise.all(Array.from({ length: Math.min(FETCH_CONCURRENCY, pulls.length) }, worker));\n }\n\n /**\n * Upload the given files, {@link UPLOAD_CONCURRENCY} at a time, taking each\n * path off `unsent` as its upload returns. No upload starts once `signal`\n * aborts; the ones already in flight run to completion.\n */\n async #uploadAll(\n store: AttachedStore,\n uploads: Array<\n [rel: string, localSha: string | undefined, existing: BetaManagedAgentsMemory | undefined]\n >,\n unsent: Set<string>,\n signal: AbortSignal | undefined,\n ): Promise<void> {\n const queue = uploads[Symbol.iterator]();\n const worker = async (): Promise<void> => {\n for (const [rel, localSha, existing] of queue) {\n if (signal?.aborted) return;\n const sha = await this.#upload(store, rel, localSha, existing);\n unsent.delete(rel);\n if (sha !== undefined) store.baseline.set(rel, sha);\n }\n };\n await Promise.all(Array.from({ length: Math.min(UPLOAD_CONCURRENCY, uploads.length) }, worker));\n }\n\n /**\n * The store's memories keyed by relative path (the wire path's leading `/`\n * stripped — `#upload` re-prefixes it) — `basic` view (shas, no content) at\n * {@link LIST_PAGE_SIZE} per page unless the caller needs `full` pages.\n * `memory_prefix` rollups and the reserved marker path are skipped.\n */\n async *#listMemories(\n memoryStoreId: string,\n view: BetaManagedAgentsMemoryView = 'basic',\n ): AsyncGenerator<[rel: string, item: BetaManagedAgentsMemory]> {\n const limit = view === 'basic' ? LIST_PAGE_SIZE : FULL_LIST_PAGE_SIZE;\n for await (const item of this.#client.beta.memoryStores.memories.list(memoryStoreId, { view, limit })) {\n if (item.type !== 'memory') continue;\n const rel = item.path.replace(/^\\/+/, '');\n if (rel === MARKER_PATH) {\n this.#log.warn('the server listed the reserved marker path; skipping', {\n path: item.path,\n memory_store_id: memoryStoreId,\n });\n continue;\n }\n yield [rel, item];\n }\n }\n\n /**\n * Push one local file; `undefined` keeps the old baseline so the next pass retries.\n *\n * A refusal the server would repeat (400/413, the utf-8 gate) enters\n * `refusedShas`: warned once, retried only after the file changes.\n */\n async #upload(\n store: AttachedStore,\n rel: string,\n localSha: string | undefined,\n existing: BetaManagedAgentsMemory | undefined,\n ): Promise<string | undefined> {\n try {\n const data = await store.files.get(rel);\n if (data === null) return undefined;\n const content = decodeUTF8(data);\n const item =\n existing ?\n await this.#client.beta.memoryStores.memories.update(existing.id, {\n memory_store_id: store.memoryStoreId,\n content,\n precondition: { type: 'content_sha256', content_sha256: existing.content_sha256 },\n })\n : await this.#client.beta.memoryStores.memories.create(store.memoryStoreId, {\n path: '/' + rel,\n content,\n });\n store.refusedShas.delete(rel);\n return item.content_sha256;\n } catch (e) {\n if (existing && isStatus(e, 404)) {\n // Deleted remotely since the listing, so this file is now the only copy.\n return await this.#upload(store, rel, localSha, undefined);\n }\n const permanent = e instanceof FileStoreError || isStatus(e, 400) || isStatus(e, 413);\n if (existing && isStatus(e, 409)) {\n // The precondition lost a race: the remote moved under us, so the push\n // is dropped. The local file is now stale — the next sync sees\n // remoteChanged and pulls the winner over it.\n this.#log.warn(\n 'memory changed both locally and remotely; the upload was refused and the local edit loses',\n {\n path: rel,\n memory_store_id: store.memoryStoreId,\n },\n );\n } else if (permanent && localSha !== undefined) {\n store.refusedShas.set(rel, localSha);\n this.#log.warn(\n 'the server rejected this memory file, so it stays un-synced until its content changes',\n { path: rel, memory_store_id: store.memoryStoreId, rejection: String(e) },\n );\n } else {\n this.#log.warn('failed to upload memory', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n }\n return undefined;\n }\n }\n\n /** Send the server delete only after the wait, the cap, and a fresh re-check all clear. */\n async #corroboratedDelete(\n store: AttachedStore,\n rel: string,\n remote: BetaManagedAgentsMemory,\n baseSha: string,\n deletes: DeletePass,\n ): Promise<string | undefined> {\n if (deletes.mode === 'disabled') {\n deletes.suppressed++;\n return baseSha;\n }\n let firstAbsent = store.pendingDeletes.get(rel);\n if (firstAbsent === undefined) {\n firstAbsent = Date.now();\n store.pendingDeletes.set(rel, firstAbsent);\n }\n if (!deletes.waiveWindow && Date.now() - firstAbsent < DELETE_CORROBORATION_MS) {\n return baseSha;\n }\n let markerOk: boolean;\n let stillAbsent: boolean;\n try {\n // Re-check: the folder may have been wiped mid-sync.\n markerOk = (await store.files.hashFile(MARKER_PATH)) === markerSha(store.memoryStoreId);\n stillAbsent = (await store.files.hashFile(rel)) === null;\n } catch (e) {\n if (!(e instanceof FileStoreError) && !isErrno(e)) throw e;\n markerOk = stillAbsent = false;\n }\n if (!markerOk) return baseSha;\n if (!stillAbsent) {\n store.pendingDeletes.delete(rel);\n return baseSha;\n }\n if (!deletes.takeSlot()) return baseSha;\n if (deletes.mode === 'log_only') {\n // Repeats each sync — the log is the dry run.\n this.#log.info('log-only: sync would delete this memory on the server', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n return baseSha;\n }\n const sha = await this.#deleteRemote(store, rel, remote, baseSha);\n if (sha === undefined) {\n store.pendingDeletes.delete(rel);\n }\n return sha;\n }\n\n async #deleteRemote(\n store: AttachedStore,\n rel: string,\n remote: BetaManagedAgentsMemory,\n baseSha: string,\n ): Promise<string | undefined> {\n try {\n await this.#client.beta.memoryStores.memories.delete(remote.id, {\n memory_store_id: store.memoryStoreId,\n expected_content_sha256: baseSha,\n });\n } catch (e) {\n if (isStatus(e, 404)) return undefined; // already gone remotely too\n if (isStatus(e, 409) || isStatus(e, 412)) {\n this.#log.warn('memory deleted locally but changed remotely; keeping the remote version', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n });\n } else {\n this.#log.warn('failed to delete memory', {\n path: rel,\n memory_store_id: store.memoryStoreId,\n error: String(e),\n });\n }\n return baseSha;\n }\n this.#log.info('propagated local deletion', { path: rel, memory_store_id: store.memoryStoreId });\n return undefined;\n }\n}\n\n/**\n * True for a thrown value shaped like a Node filesystem error. Shape-checked,\n * not `instanceof Error` — fs errors can come from another realm.\n */\nfunction isErrno(e: unknown): boolean {\n return typeof e === 'object' && e !== null && typeof (e as NodeJS.ErrnoException).code === 'string';\n}\n\n/**\n * Resolve when `p` settles, or as soon as `signal` aborts. A rejection from\n * `p` before the abort propagates; one after it is dropped.\n */\nasync function settledOrAborted(p: Promise<unknown>, signal: AbortSignal | undefined): Promise<void> {\n if (!signal) {\n await p;\n return;\n }\n let onAbort!: () => void;\n const aborted = new Promise<void>((resolve) => {\n onAbort = resolve;\n if (signal.aborted) resolve();\n });\n signal.addEventListener('abort', onAbort, { once: true });\n try {\n await Promise.race([p, aborted]);\n } finally {\n signal.removeEventListener('abort', onAbort);\n }\n}\n","/**\n * Node implementation of the `agent_toolset_20260401` tools — `bash`, `read`,\n * `write`, `edit`, `glob`, `grep` — plus the workdir/skills\n * {@link AgentToolContext}.\n *\n * This mirrors `@anthropic-ai/sdk/tools/memory/node`: it is the explicit,\n * Node-only entry point for these implementations. Importing it pulls in\n * `node:child_process`, `node:fs`, etc., so it is kept separate from the rest of\n * the SDK — depending on it is an opt-in.\n *\n * **Node 22+ is required** for this module: the `glob` tool uses the native\n * `fs.glob`, added in Node 22. The rest of the SDK still supports Node 18+; only\n * the agent toolset has this requirement.\n *\n * The result of {@link betaAgentToolset20260401} is a plain `BetaRunnableTool[]`;\n * hand it to any tool runner — `client.beta.messages.toolRunner({ …, tools })`\n * for the Messages API, or `client.beta.sessions.events.toolRunner({ …, tools })`\n * for a managed-agents session:\n *\n * ```ts\n * import { betaAgentToolset20260401 } from '@anthropic-ai/sdk/tools/agent-toolset/node';\n *\n * const tools = betaAgentToolset20260401({ workdir: '/work' });\n * const tools2 = betaAgentToolset20260401({ workdir: '/work' }).filter((t) => t.name !== 'bash');\n * ```\n *\n * Trust model: the file tools confine to `workdir` plus any `allowedRoots`\n * (symlink-aware) and are safe without a sandbox; `bash` is unrestricted and\n * should run inside one. See {@link AgentToolContext}.\n */\n\nimport * as fs from 'node:fs/promises';\nimport * as fssync from 'node:fs';\nimport * as path from 'node:path';\nimport * as cp from 'node:child_process';\nimport * as crypto from 'node:crypto';\nimport * as readline from 'node:readline';\nimport type { Anthropic } from '../../client';\nimport type { BetaManagedAgentsSession } from '../../resources/beta/sessions/sessions';\nimport { AnthropicError } from '../../core/error';\nimport type { BetaRunnableTool } from '../../lib/tools/BetaRunnableTool';\nimport { ToolError } from '../../lib/tools/ToolError';\nimport { betaTool } from '../../helpers/beta/json-schema';\nimport { promiseWithResolvers } from '../../internal/utils/promise';\nimport {\n atomicWriteFile,\n canonicalize,\n confineToRoot,\n containingRoot,\n DIR_CREATE_MODE,\n fsErrorMessage,\n isWithin,\n} from './fs-util';\n\nexport { setupSkills, extractSkillArchive } from './skills';\nexport {\n SessionMemoryStores,\n SessionMemoryError,\n DEFAULT_MEMORY_SYNC_INTERVAL_MS,\n MIN_MEMORY_SYNC_INTERVAL_MS,\n MEMORY_FLUSH_TIMEOUT_MS,\n MARKER_PATH,\n type MemoryDeleteMode,\n type SessionMemoryStoresOptions,\n} from './memories';\n\nconst BASH_OUTPUT_LIMIT = 100 * 1024;\nconst BASH_DEFAULT_TIMEOUT_MS = 120_000;\n// Default size cap for the read/edit tools (both load the whole file into\n// memory) when AgentToolContext.maxFileBytes is unset. The reject-vs-truncate\n// behaviour remains a separate question pending CMA validation.\nconst DEFAULT_MAX_FILE_BYTES = 256 * 1024;\nconst READ_STREAM_CHUNK_BYTES = 64 * 1024;\nconst NEWLINE = Buffer.from('\\n');\nconst GREP_OUTPUT_LIMIT = 100 * 1024;\nconst GREP_MAX_LINE_LENGTH = 2000;\nconst GLOB_RESULT_LIMIT = 200;\n\n/**\n * A bash command exceeded its `timeoutMs`. Carries the timeout so a caller can\n * tell it apart from an abort without matching on the message text.\n */\nexport class BashTimeoutError extends AnthropicError {\n readonly timeoutMs: number;\n\n constructor(timeoutMs: number) {\n super(`bash command timed out after ${timeoutMs}ms`);\n this.name = 'BashTimeoutError';\n this.timeoutMs = timeoutMs;\n }\n}\n\nconst ANSI_RE = /\\x1b\\[[0-9;?]*[ -/]*[@-~]/g;\n\n// `fs.glob` is Node 22+. `@types/node` may still target an older line, so the\n// surface this module uses is typed locally rather than relying on the ambient\n// declaration. At runtime this module requires Node 22 (see the file header).\ntype GlobFn = (\n pattern: string,\n options: {\n cwd?: string;\n withFileTypes?: boolean;\n exclude?: (entry: fssync.Dirent) => boolean;\n },\n) => AsyncIterable<fssync.Dirent>;\nconst fsGlob = (fs as unknown as { glob: GlobFn }).glob;\n\nfunction resolveMaxBytes(configured: number | null | undefined): number | null {\n return configured === undefined ? DEFAULT_MAX_FILE_BYTES : configured;\n}\n\n/**\n * Throw when the deprecated {@link AgentToolContext.unrestrictedPaths} was\n * passed at all. Nothing else reads that property.\n */\nfunction rejectUnrestrictedPaths(value: boolean | undefined): void {\n if (value === undefined) return;\n throw new AnthropicError(\n 'The `unrestrictedPaths` option you passed to the agent toolset (AgentToolContext) is no longer ' +\n \"supported. The toolset's file tools (read, write, edit, glob, grep) are now always confined to \" +\n 'the working directory plus the directories listed in `allowedRoots`. Remove `unrestrictedPaths` ' +\n 'from your context; to let the file tools reach any other directory, add it to `allowedRoots`.',\n );\n}\n\n/**\n * Workdir + path-policy for the agent toolset.\n *\n * Trust model — two tiers:\n *\n * - The file tools ({@link betaReadTool}, {@link betaWriteTool},\n * {@link betaEditTool}, {@link betaGlobTool}, {@link betaGrepTool}) confine to\n * `workdir` plus any `allowedRoots`. {@link resolvePath} canonicalizes the\n * target (resolving every symlink, including the leaf) before the check\n * *and* returns that canonical path for the operation, so a symlink inside\n * the workdir that points outside it neither passes the check nor gets\n * followed afterwards — this is a real boundary, not a lexical hint (modulo\n * the residual TOCTOU noted on {@link resolvePath}).\n * - {@link betaBashTool} runs an unrestricted `/bin/bash` and cannot be\n * confined. Run it — and, for defense in depth, the whole toolset — inside a\n * sandbox the host controls (e.g. a self-hosted environment runner).\n */\nexport interface AgentToolContext {\n /** Base directory for resolving relative tool paths. */\n workdir: string;\n /**\n * @deprecated No longer accepted: the file tools are always confined to\n * `workdir` plus `allowedRoots`, which is neither behavior this flag used to\n * select, so passing either value throws. Remove it; list extra directories\n * in {@link AgentToolContext.allowedRoots}. The property is removed in a\n * future release.\n */\n unrestrictedPaths?: boolean;\n /**\n * Absolute directories outside `workdir` the file tools may also reach,\n * resolved at check time. The environment worker sets this to the session's\n * memory-store folders. Does **not** constrain {@link betaBashTool}.\n */\n allowedRoots?: string[];\n /**\n * Anthropic client. Optional — the bare toolset needs no client; it is only\n * used by `setupSkills`, which (together with {@link AgentToolContext.session},\n * or the deprecated {@link AgentToolContext.sessionId}) downloads each of the\n * session agent's skills into `{workdir}/skills/<name>/`.\n */\n client?: Anthropic;\n /**\n * The already-fetched session whose agent's skills `setupSkills` downloads.\n * A session's resources cannot change while it runs, so the caller fetches it\n * once and shares that snapshot with the memory-store download; the two can\n * then never disagree about them.\n */\n session?: BetaManagedAgentsSession;\n /**\n * @deprecated `setupSkills` fetches the session itself when given only an id,\n * one extra round trip per context. Prefer {@link AgentToolContext.session}.\n * Kept for callers written before `session` existed; ignored when `session`\n * is set.\n */\n sessionId?: string;\n /**\n * Directories the write and edit tools refuse to modify, resolved at check\n * time exactly like `allowedRoots`. The worker sets this to the roots of\n * read-only memory stores so the agent sees the error at write time instead\n * of the change silently never syncing; the mechanism is generic to any\n * directory.\n */\n readOnlyRoots?: string[];\n /**\n * Optional environment for the bash subprocess. When unset, the bash tool\n * inherits the process environment with the runner's `ANTHROPIC_*`\n * credentials scrubbed. When provided, it FULLY REPLACES that default\n * environment — the mapping is used verbatim and is NOT merged with or added\n * to the scrubbed process environment. To keep the defaults plus extra vars,\n * build the combined mapping yourself before passing it.\n */\n env?: Record<string, string | undefined>;\n /**\n * Size cap for a whole-file `read` and for `edit`, which both load the whole\n * file into memory. A `read` with `view_range` on a larger file streams it and\n * applies the cap to the selected lines instead. `undefined` (default) uses the\n * built-in 256 KiB cap; a positive number sets a custom cap; `null` disables the\n * cap entirely. Disabling it reintroduces the OOM risk on a model-controlled\n * path, so pass `null` only when the sandbox can absorb arbitrarily large files.\n * The non-regular-file (FIFO/device) guard always applies regardless of this\n * value.\n */\n maxFileBytes?: number | null;\n}\n\n/**\n * Returns the `agent_toolset_20260401` implementations bound to `ctx`. The\n * result is a plain array of `BetaRunnableTool`; filter or extend it before\n * handing it to a tool runner:\n *\n * ```ts\n * const tools = [...betaAgentToolset20260401(ctx), myCustomTool];\n * const tools = betaAgentToolset20260401(ctx).filter((t) => t.name !== 'grep');\n * ```\n *\n * Concurrency note: `client.beta.sessions.events.toolRunner` dispatches a\n * session's tool calls serially (the sessions API delivers one `agent.tool_use`\n * at a time). `client.beta.messages.toolRunner` runs a turn's `tool.run` calls\n * via `Promise.all`. The toolset below is safe under either model —\n * {@link betaBashTool} serializes its persistent shell internally and the FS\n * tools are independent per call — but {@link betaEditTool}/{@link betaWriteTool}\n * cannot synchronize concurrent writes to the *same* file across processes, so a\n * multi-edit turn touching one path is still subject to inherent FS lost-update\n * races. Custom tools that close over mutable state should do their own queueing.\n */\nexport function betaAgentToolset20260401(ctx: AgentToolContext): BetaRunnableTool[] {\n return [\n betaBashTool(ctx),\n betaReadTool(ctx),\n betaWriteTool(ctx),\n betaEditTool(ctx),\n betaGlobTool(ctx),\n betaGrepTool(ctx),\n ];\n}\n\n/**\n * Resolve `p` against `ctx.workdir`; reject results outside `ctx.workdir` and\n * `ctx.allowedRoots`. Absolute and relative inputs go through the same\n * canonicalise-then-contain check — an absolute path that lands inside a\n * permitted root is accepted, only paths that resolve *outside* all of them\n * are rejected. Every symlink in `p` (including the leaf, even a dangling one)\n * is resolved before the check, and the resolved path is what the tool then\n * operates on, so a symlink inside the workdir that points outside it can\n * neither pass the check nor be followed afterwards. See the trust model on\n * {@link AgentToolContext}.\n *\n * Residual TOCTOU: a component could still be swapped for a symlink between this\n * call and the eventual `fs` operation. Closing that fully needs per-component\n * `O_NOFOLLOW`/`openat`, which Node does not expose ergonomically; the same\n * residual exposure exists in `tools/memory/node` and is why a sandbox is still\n * recommended for the toolset as a whole.\n */\nexport async function resolvePath(ctx: AgentToolContext, p: string): Promise<string> {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return confineToRoot(ctx.workdir, p, { allowedRoots: ctx.allowedRoots ?? [] });\n}\n\n/**\n * The read-only root `target` falls under, or `undefined`. `target` arrives\n * fully canonicalized (from {@link resolvePath}), so each root is\n * canonicalized too — a root recorded through a symlinked workdir must still\n * match the resolved write target.\n */\nfunction readOnlyRootFor(ctx: AgentToolContext, target: string): Promise<string | undefined> {\n return containingRoot(ctx.readOnlyRoots ?? [], target);\n}\n\n// ---- bash ----------------------------------------------------------------\n\n/**\n * Build the environment for the spawned bash shell. The runner process holds\n * Anthropic credentials in `ANTHROPIC_*` env vars — the API key, the auth token,\n * and the per-work session token among them. `bash` runs an unrestricted shell,\n * so any command the agent runs could read those straight out of `process.env`;\n * strip the whole `ANTHROPIC_*` namespace from the child's environment.\n * Everything else (PATH, HOME, locale, …) is passed through unchanged.\n *\n * Passing an explicit `env` to {@link AgentToolContext} does NOT add to this\n * default — it FULLY REPLACES it. The provided mapping becomes the entire bash\n * environment verbatim; nothing here is merged in, so callers who want the\n * scrubbed process environment plus extras must build that mapping themselves.\n */\nfunction scrubbedShellEnv(): Record<string, string | undefined> {\n const env: Record<string, string | undefined> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith('ANTHROPIC_')) continue;\n env[key] = value;\n }\n return env;\n}\n\n/**\n * A persistent /bin/bash process. State (cwd, env, background jobs) survives\n * across exec() calls. Uses pipes rather than a PTY so input is never echoed.\n */\nexport class BashSession {\n #proc: cp.ChildProcessWithoutNullStreams;\n #buf = '';\n #truncated = false;\n #closed = false;\n // While a command is in flight, the resolver to fire once its sentinel lands\n // in `#buf` (or once the shell dies). Event-driven: no polling loop.\n #waiting: { sentinel: string; resolve: () => void } | null = null;\n\n constructor(dir: string, env: Record<string, string | undefined> = scrubbedShellEnv()) {\n this.#proc = cp.spawn('/bin/bash', ['--noprofile', '--norc'], {\n cwd: dir,\n // `env` is the full base environment (the scrubbed process env by\n // default, or the verbatim replacement from `AgentToolContext.env`).\n // PS1/PS2/TERM are shell-control settings BashSession always applies so\n // the pipe-based sentinel exec parsing works — not part of the\n // user-facing environment.\n env: { ...env, PS1: '', PS2: '', TERM: 'dumb' },\n stdio: ['pipe', 'pipe', 'pipe'],\n detached: true,\n });\n this.#proc.stdout.setEncoding('utf8');\n this.#proc.stderr.setEncoding('utf8');\n this.#proc.stdout.on('data', (d: string) => this.#append(d));\n this.#proc.stderr.on('data', (d: string) => this.#append(d));\n this.#proc.once('close', () => {\n this.#closed = true;\n // Wake any in-flight exec so it fails fast instead of waiting for its deadline.\n const w = this.#waiting;\n this.#waiting = null;\n w?.resolve();\n });\n }\n\n /** Whether the underlying shell process has exited. */\n get closed(): boolean {\n return this.#closed;\n }\n\n // Cap the buffer during accumulation so a command that streams unboundedly\n // can't OOM the runner. Keeps the tail so the sentinel stays detectable.\n // Also resolves the in-flight exec the instant its sentinel is buffered.\n #append(d: string): void {\n this.#buf += d;\n if (this.#buf.length > BASH_OUTPUT_LIMIT) {\n this.#buf = this.#buf.slice(this.#buf.length - BASH_OUTPUT_LIMIT);\n this.#truncated = true;\n }\n if (this.#waiting && this.#buf.indexOf(this.#waiting.sentinel) >= 0) {\n const w = this.#waiting;\n this.#waiting = null;\n w.resolve();\n }\n }\n\n async exec(\n command: string,\n opts: { timeoutMs?: number; signal?: AbortSignal | null | undefined } = {},\n ): Promise<{ output: string; exitCode: number }> {\n if (this.#closed) {\n throw new AnthropicError('bash session terminated');\n }\n const timeoutMs = opts.timeoutMs ?? BASH_DEFAULT_TIMEOUT_MS;\n const signal = opts.signal;\n // Reject with the signal's own reason, so a caller telling a user cancel\n // apart from an `AbortSignal.timeout()` sees the platform's name intact.\n signal?.throwIfAborted();\n this.#buf = '';\n this.#truncated = false;\n // Per-call nonce so a command that prints a fixed marker can't spoof the\n // exit-code framing. The `''` split keeps the literal out of what we write\n // to stdin — only the shell's printf reassembles it.\n const sentinel = `__ANT_CMD_${crypto.randomUUID()}_DONE__`;\n const sentinelSplit = `${sentinel.slice(0, 8)}''${sentinel.slice(8)}`;\n // </dev/null: a stdin-reading command (`cat`, `read`) gets EOF instead of\n // blocking on the shared pipe until the timeout.\n const wrapped = `{ ${command}\\n} </dev/null 2>&1; printf '\\\\n${sentinelSplit}%d\\\\n' $?\\n`;\n this.#proc.stdin.write(wrapped);\n\n if (this.#buf.indexOf(sentinel) < 0) {\n // Park until the sentinel lands, the deadline passes, the caller aborts,\n // or the shell dies — whichever comes first. `#append` (and the `close`\n // handler) resolve `sentinelSeen`; the deadline / abort reject.\n const { promise: sentinelSeen, resolve } = promiseWithResolvers<void>();\n this.#waiting = { sentinel, resolve };\n let timer: ReturnType<typeof setTimeout> | undefined;\n let onAbort: (() => void) | undefined;\n try {\n await Promise.race([\n sentinelSeen,\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new BashTimeoutError(timeoutMs)), timeoutMs);\n }),\n new Promise<never>((_, reject) => {\n if (!signal) return;\n onAbort = () => reject(signal.reason);\n signal.addEventListener('abort', onAbort, { once: true });\n }),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n if (onAbort && signal) signal.removeEventListener('abort', onAbort);\n this.#waiting = null;\n }\n }\n\n const idx = this.#buf.indexOf(sentinel);\n if (idx < 0) {\n // The shell closed (or was killed) before emitting the sentinel.\n throw new AnthropicError('bash session terminated');\n }\n const tail = this.#buf.slice(idx + sentinel.length);\n const m = tail.match(/^(-?\\d+)/);\n const exitCode = m ? parseInt(m[1]!, 10) : -1;\n let out = this.#buf.slice(0, idx).replace(ANSI_RE, '').replace(/\\n+$/, '');\n if (this.#truncated) {\n out = `[output truncated]\\n${out}`;\n }\n return { output: out, exitCode };\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n const w = this.#waiting;\n this.#waiting = null;\n w?.resolve();\n this.#proc.stdout.destroy();\n this.#proc.stderr.destroy();\n this.#proc.stdin.destroy();\n try {\n // Negative PID targets the process group so foreground jobs (e.g. a\n // hung sleep) die with the shell.\n process.kill(-this.#proc.pid!, 'SIGKILL');\n } catch {\n this.#proc.kill('SIGKILL');\n }\n this.#proc.unref();\n }\n}\n\nexport function betaBashTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n let session: BashSession | undefined;\n // Concurrent run() callers chain onto this promise so writes to the shared\n // shell's stdin can't interleave (which would corrupt the sentinel-match\n // exit-code parsing in BashSession.exec). Each call replaces `tail` with a\n // promise that resolves only after its own exec settles.\n let tail: Promise<unknown> = Promise.resolve();\n return betaTool({\n name: 'bash',\n description: 'Run a bash command in a persistent shell. State (cwd, env vars) persists across calls.',\n inputSchema: {\n type: 'object',\n properties: {\n command: { type: 'string', description: 'The command to run' },\n restart: { type: 'boolean', description: 'Restart the persistent shell before running' },\n timeout_ms: { type: 'integer', description: 'Per-call timeout in milliseconds' },\n },\n },\n run: async ({ command, restart, timeout_ms }, context) => {\n const prev = tail;\n const gate = promiseWithResolvers<void>();\n tail = gate.promise;\n // Swallow prior rejections — earlier callers got their own error path;\n // we just need to wait for the shell to be free.\n try {\n await prev;\n } catch {\n // ignore\n }\n try {\n if (restart) {\n session?.close();\n session = undefined;\n }\n if (!command) {\n if (restart) return 'bash session restarted';\n throw new ToolError('bash: command is required');\n }\n session ??= new BashSession(ctx.workdir, ctx.env);\n try {\n const { output, exitCode } = await session.exec(command, {\n timeoutMs: timeout_ms ?? BASH_DEFAULT_TIMEOUT_MS,\n signal: context?.signal,\n });\n if (exitCode !== 0) throw new ToolError(output || `exit ${exitCode}`);\n return output;\n } catch (e) {\n if (e instanceof ToolError) throw e;\n // Timeout, abort, or terminated: the still-running command will emit\n // a stale sentinel, so discard this session and let the next call\n // start fresh.\n session.close();\n session = undefined;\n throw new ToolError(`bash: ${e instanceof Error ? e.message : String(e)}`);\n }\n } finally {\n gate.resolve();\n }\n },\n close: () => {\n session?.close();\n session = undefined;\n },\n });\n}\n\n// ---- fs ------------------------------------------------------------------\n\nexport function betaReadTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'read',\n description: 'Read a UTF-8 text file relative to the workdir.',\n inputSchema: {\n type: 'object',\n properties: {\n file_path: { type: 'string' },\n view_range: {\n type: 'array',\n items: { type: 'integer' },\n description: '[start_line, end_line] 1-indexed inclusive',\n },\n },\n required: ['file_path'],\n },\n run: async ({ file_path, view_range }) => {\n if (!file_path) throw new ToolError('read: file_path is required');\n const abs = await resolvePath(ctx, file_path);\n if (view_range?.length && view_range.length !== 2) {\n throw new ToolError('read: view_range must be [start_line, end_line]');\n }\n let data: string;\n try {\n // stat() before any open(): the size cap stops a multi-GB file from\n // OOM'ing the runner, and isFile() rejects FIFOs/devices/dirs without\n // opening them (open() on an unconnected FIFO blocks indefinitely).\n const st = await fs.stat(abs);\n if (!st.isFile()) {\n throw new ToolError(`read: ${file_path} is not a regular file`);\n }\n const limit = resolveMaxBytes(ctx.maxFileBytes);\n if (limit !== null && st.size > limit) {\n if (!view_range?.length) {\n throw new ToolError(\n `read: ${file_path} is ${st.size} bytes, exceeds ${limit}-byte limit. ` +\n 'Use the view_range parameter to read specific line ranges, e.g. view_range: [1, 500].',\n );\n }\n const [startLine, endLine] = view_range as [number, number];\n return await readRangeStreaming(abs, file_path, startLine, endLine, limit);\n }\n data = await fs.readFile(abs, 'utf8');\n } catch (e) {\n if (e instanceof ToolError) throw e;\n throw new ToolError(`read: ${fsErrorMessage(e, file_path)}`);\n }\n if (!view_range?.length) return data;\n const [startLine, endLine] = view_range as [number, number];\n const lines = data.split('\\n');\n const start = Math.max(0, startLine - 1);\n const end = endLine > 0 ? endLine : lines.length;\n return lines.slice(start, end).join('\\n');\n },\n });\n}\n\n/** Returns lines `[startLine, endLine]` of the file at `abs`, capping the selected bytes at `limit`. */\nasync function readRangeStreaming(\n abs: string,\n filePath: string,\n startLine: number,\n endLine: number,\n limit: number,\n): Promise<string> {\n const lines = new LineRangeCollector(filePath, startLine, endLine, limit);\n if (lines.rangeIsEmpty()) return '';\n // Byte chunks rather than readline: a single huge line must never be buffered\n // whole, so memory stays bounded by `limit` plus one chunk.\n const stream = fssync.createReadStream(abs, { highWaterMark: READ_STREAM_CHUNK_BYTES });\n try {\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n lines.collectFrom(chunk);\n if (lines.rangeIsCollected()) break;\n }\n } finally {\n stream.destroy();\n }\n return lines.text();\n}\n\n/** Collects the bytes of lines `[startLine, endLine]` from consecutive file chunks, capped at `limit`. */\nclass LineRangeCollector {\n readonly #filePath: string;\n readonly #startLine: number;\n readonly #endLine: number;\n readonly #start: number;\n readonly #end: number;\n readonly #limit: number;\n #line = 0;\n #collected: Buffer[] = [];\n #collectedBytes = 0;\n\n constructor(filePath: string, startLine: number, endLine: number, limit: number) {\n this.#filePath = filePath;\n this.#startLine = startLine;\n this.#endLine = endLine;\n this.#start = Math.max(0, startLine - 1);\n this.#end = endLine > 0 ? endLine : Infinity;\n this.#limit = limit;\n }\n\n rangeIsEmpty(): boolean {\n return this.#end <= this.#start;\n }\n\n rangeIsCollected(): boolean {\n return this.#line >= this.#end;\n }\n\n collectFrom(chunk: Buffer): void {\n let lineStart = 0;\n while (lineStart < chunk.length && !this.rangeIsCollected()) {\n const newline = chunk.indexOf(0x0a, lineStart);\n const lineEnd = newline < 0 ? chunk.length : newline;\n if (this.#line >= this.#start) {\n this.#collect(chunk.subarray(lineStart, lineEnd), newline >= 0);\n }\n if (newline < 0) break;\n this.#line++;\n lineStart = newline + 1;\n }\n }\n\n #collect(lineBytes: Buffer, newlineTerminated: boolean): void {\n this.#collected.push(lineBytes);\n this.#collectedBytes += lineBytes.length;\n if (newlineTerminated && this.#line + 1 < this.#end) {\n this.#collected.push(NEWLINE);\n this.#collectedBytes += NEWLINE.length;\n }\n if (this.#collectedBytes > this.#limit) throw this.#overLimitError();\n }\n\n #overLimitError(): ToolError {\n if (this.#end - this.#start === 1) {\n return new ToolError(\n `read: line ${this.#start + 1} of ${this.#filePath} alone exceeds ${this.#limit}-byte limit. ` +\n 'The read tool cannot return part of a line, so view_range cannot narrow this further.',\n );\n }\n return new ToolError(\n `read: view_range [${this.#startLine}, ${this.#endLine}] of ${this.#filePath} exceeds ${this.#limit}-byte limit. ` +\n 'Narrow the view_range to read a smaller portion.',\n );\n }\n\n text(): string {\n return Buffer.concat(this.#collected, this.#collectedBytes).toString('utf8');\n }\n}\n\nexport function betaWriteTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'write',\n description: 'Write a UTF-8 text file relative to the workdir, creating parent directories as needed.',\n inputSchema: {\n type: 'object',\n properties: { file_path: { type: 'string' }, content: { type: 'string' } },\n required: ['file_path', 'content'],\n },\n run: async ({ file_path, content }) => {\n if (!file_path) throw new ToolError('write: file_path is required');\n const abs = await resolvePath(ctx, file_path);\n const ro = await readOnlyRootFor(ctx, abs);\n if (ro !== undefined) {\n throw new ToolError(`write: ${file_path} is inside read-only directory ${ro}`);\n }\n try {\n await fs.mkdir(path.dirname(abs), { recursive: true, mode: DIR_CREATE_MODE });\n await atomicWriteFile(abs, content ?? '');\n } catch (e) {\n throw new ToolError(`write: ${fsErrorMessage(e, file_path)}`);\n }\n return `wrote ${Buffer.byteLength(content ?? '')} bytes to ${file_path}`;\n },\n });\n}\n\nexport function betaEditTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'edit',\n description:\n 'Replace old_string with new_string in a file. old_string must be unique unless replace_all.',\n inputSchema: {\n type: 'object',\n properties: {\n file_path: { type: 'string' },\n old_string: { type: 'string' },\n new_string: { type: 'string' },\n replace_all: { type: 'boolean' },\n },\n required: ['file_path', 'old_string', 'new_string'],\n },\n run: async ({ file_path, old_string, new_string, replace_all }) => {\n if (!file_path) throw new ToolError('edit: file_path is required');\n if (!old_string) throw new ToolError('edit: old_string is required');\n const abs = await resolvePath(ctx, file_path);\n const ro = await readOnlyRootFor(ctx, abs);\n if (ro !== undefined) {\n throw new ToolError(`edit: ${file_path} is inside read-only directory ${ro}`);\n }\n let data: string;\n try {\n // stat() before any open() — same guard as `read`: the size cap stops a\n // multi-GB file from OOM'ing the runner, and isFile() rejects\n // FIFOs/devices/dirs without opening them (open() on an unconnected FIFO\n // blocks indefinitely). The edit path is model-controlled, so it needs\n // the same bound `read` already has.\n const st = await fs.stat(abs);\n if (!st.isFile()) {\n throw new ToolError(`edit: ${file_path} is not a regular file`);\n }\n const limit = resolveMaxBytes(ctx.maxFileBytes);\n if (limit !== null && st.size > limit) {\n throw new ToolError(\n `edit: ${file_path} is ${st.size} bytes, exceeds ${limit}-byte limit. ` +\n 'The edit tool loads the whole file and cannot modify a file this large.',\n );\n }\n data = await fs.readFile(abs, 'utf8');\n } catch (e) {\n if (e instanceof ToolError) throw e;\n throw new ToolError(`edit: ${fsErrorMessage(e, file_path)}`);\n }\n const count = data.split(old_string).length - 1;\n if (count === 0) throw new ToolError(`edit: old_string not found in ${file_path}`);\n let updated: string;\n if (replace_all) {\n updated = data.split(old_string).join(new_string);\n } else {\n if (count > 1)\n throw new ToolError(`edit: old_string appears ${count} times in ${file_path} (must be unique)`);\n // Callback form so `$&`/`$1`/`` $` `` in new_string are inserted\n // literally instead of expanded as replacement patterns.\n updated = data.replace(old_string, () => new_string);\n }\n try {\n await atomicWriteFile(abs, updated);\n } catch (e) {\n throw new ToolError(`edit: write: ${fsErrorMessage(e, file_path)}`);\n }\n return `edited ${file_path} (${replace_all ? count : 1} replacement(s))`;\n },\n });\n}\n\n// ---- search --------------------------------------------------------------\n\n/**\n * Best-effort: stops `fs.glob` from walking out of the root via a literal or\n * brace-expanded `..`. The realpath post-filter in {@link betaGlobTool} is the\n * boundary; this only avoids the walk.\n */\nfunction patternCanAscend(pattern: string): boolean {\n return pattern.split(/[\\\\/{},]/).includes('..');\n}\n\nexport function betaGlobTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'glob',\n description:\n 'Match files under the workdir against a glob pattern. Results are mtime-sorted, newest first.',\n inputSchema: {\n type: 'object',\n properties: {\n pattern: { type: 'string' },\n path: { type: 'string', description: 'Directory to search in. Defaults to the workdir.' },\n },\n required: ['pattern'],\n },\n run: async ({ pattern, path: searchPath }) => {\n if (!pattern) throw new ToolError('glob: pattern is required');\n if (path.isAbsolute(pattern)) {\n throw new ToolError(\n 'glob: absolute pattern not permitted; pass a relative pattern (and optionally path)',\n );\n }\n if (patternCanAscend(pattern)) {\n throw new ToolError('glob: \"..\" is not permitted in the pattern');\n }\n const root = searchPath ? await resolvePath(ctx, searchPath) : path.resolve(ctx.workdir);\n // Compare canonical against canonical: a workdir that is itself a\n // symlink would otherwise falsely reject every realpath'd match below.\n const realRoot = searchPath ? root : await canonicalize(root);\n const matches: { path: string; mtime: number }[] = [];\n // Bounds the walk for patterns that match, or brace-expand into,\n // enormous trees.\n let remaining = WALK_MAX_ENTRIES;\n try {\n // Native `fs.glob` (Node 22+). `exclude` prunes the noisy dirs the\n // legacy walker skipped; only regular files are collected.\n for await (const entry of fsGlob(pattern, {\n cwd: root,\n withFileTypes: true,\n exclude: (d) => d.name === '.git' || d.name === 'node_modules',\n })) {\n if (remaining-- <= 0) break;\n if (!entry.isFile()) continue;\n const full = path.join(entry.parentPath, entry.name);\n // Drop any match that resolves outside the search root. A pattern\n // that *names* a symlinked directory (the model controls the\n // pattern, and the bash tool in the same session can plant the\n // link) makes `fs.glob` descend through it and report entries with\n // the raw parent path, so a lexical check on `full` alone would\n // pass `root/link_out/secret` even though it lives outside the\n // jail. Resolve-failure (ELOOP, EACCES, a racing unlink) is a deny.\n let real: string;\n try {\n real = await fs.realpath(full);\n } catch {\n continue;\n }\n if (!isWithin(realRoot, real)) continue;\n let mtime = 0;\n try {\n mtime = (await fs.stat(full)).mtimeMs;\n } catch {\n // unreadable — keep it in the list with mtime 0\n }\n matches.push({ path: full, mtime });\n }\n } catch (e) {\n throw new ToolError(`glob: ${e instanceof Error ? e.message : String(e)}`);\n }\n if (matches.length === 0) return 'no matches';\n matches.sort((a, b) => b.mtime - a.mtime);\n return matches\n .slice(0, GLOB_RESULT_LIMIT)\n .map((m) => m.path)\n .join('\\n');\n },\n });\n}\n\nexport function betaGrepTool(ctx: AgentToolContext): BetaRunnableTool {\n rejectUnrestrictedPaths(ctx.unrestrictedPaths);\n return betaTool({\n name: 'grep',\n description: 'Search file contents for a regex. Uses ripgrep if available, otherwise a built-in walker.',\n inputSchema: {\n type: 'object',\n properties: { pattern: { type: 'string' }, path: { type: 'string' } },\n required: ['pattern'],\n },\n run: async ({ pattern, path: p }, context) => {\n if (!pattern) throw new ToolError('grep: pattern is required');\n let searchPath = path.resolve(ctx.workdir);\n if (p) searchPath = await resolvePath(ctx, p);\n const rg = await findRg();\n return rg ?\n runRipgrep(rg, pattern, searchPath, context?.signal)\n : runWalkGrep(pattern, searchPath, context?.signal);\n },\n });\n}\n\nfunction runRipgrep(\n rg: string,\n pattern: string,\n searchPath: string,\n signal?: AbortSignal | null | undefined,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const proc = cp.spawn(rg, ['-n', '--no-heading', '-e', pattern, '--', searchPath], {\n ...(signal ? { signal } : {}),\n });\n let out = '';\n let errOut = '';\n let truncated = false;\n proc.stdout.on('data', (d) => {\n if (truncated) return;\n out += d;\n if (out.length > GREP_OUTPUT_LIMIT) {\n truncated = true;\n out = out.slice(0, GREP_OUTPUT_LIMIT);\n proc.kill('SIGKILL');\n }\n });\n proc.stderr.on('data', (d) => (errOut += d));\n proc.on('close', (code) => {\n if (signal?.aborted) return reject(new ToolError('grep: aborted'));\n if (truncated) return resolve(out + `\\n[output truncated at ${GREP_OUTPUT_LIMIT} bytes]`);\n if (code === 0) return resolve(out);\n if (code === 1) return resolve('no matches');\n reject(new ToolError(`grep: rg failed: ${errOut || `exit ${code}`}`));\n });\n proc.on('error', (e) => {\n if (signal?.aborted) return reject(new ToolError('grep: aborted'));\n reject(new ToolError(`grep: rg failed: ${e.message}`));\n });\n });\n}\n\nasync function runWalkGrep(\n pattern: string,\n root: string,\n signal?: AbortSignal | null | undefined,\n): Promise<string> {\n let re: RegExp;\n try {\n re = new RegExp(pattern);\n } catch (e) {\n throw new ToolError(`grep: invalid regex: ${e instanceof Error ? e.message : String(e)}`);\n }\n const hits: string[] = [];\n let budget = GREP_OUTPUT_LIMIT;\n const push = (line: string): boolean => {\n budget -= line.length + 1;\n if (budget < 0) {\n hits.push(`[output truncated at ${GREP_OUTPUT_LIMIT} bytes]`);\n return false;\n }\n hits.push(line);\n return true;\n };\n const stat = await fs.stat(root).catch(() => null);\n if (stat?.isFile()) {\n await grepFile(root, re, push);\n } else {\n await walk(root, '', (rel) => grepFile(path.join(root, rel), re, push), signal);\n }\n if (signal?.aborted) throw new ToolError('grep: aborted');\n if (hits.length === 0) return 'no matches';\n return hits.join('\\n');\n}\n\nasync function grepFile(file: string, re: RegExp, push: (line: string) => boolean): Promise<boolean> {\n const stream = fssync.createReadStream(file, { encoding: 'utf8' });\n const rl = readline.createInterface({ input: stream, crlfDelay: Infinity });\n let i = 0;\n try {\n for await (const line of rl) {\n i++;\n // Cap line length: `pattern` is model-supplied and JS regexes backtrack,\n // so a pathological pattern against a very long line is a ReDoS.\n if (line.length > GREP_MAX_LINE_LENGTH) continue;\n if (re.test(line) && !push(`${file}:${i}:${line}`)) return false;\n }\n } catch {\n // unreadable / binary\n } finally {\n stream.destroy();\n }\n return true;\n}\n\n// ---- utils ---------------------------------------------------------------\n\nconst WALK_MAX_DEPTH = 40;\nconst WALK_MAX_ENTRIES = 50_000;\n\n/**\n * Bounded recursive walk. `fn` may return `false` to abort. Only real\n * directories are descended into and only real files are handed to `fn` —\n * symlinks (and devices/fifos/sockets) are skipped entirely so a symlink inside\n * the root cannot be followed out of it.\n */\nasync function walk(\n root: string,\n rel: string,\n fn: (rel: string) => boolean | void | Promise<boolean | void>,\n signal?: AbortSignal | null | undefined,\n): Promise<void> {\n let remaining = WALK_MAX_ENTRIES;\n async function inner(rel: string, depth: number): Promise<boolean> {\n if (depth > WALK_MAX_DEPTH) return true;\n if (signal?.aborted) return false;\n let entries: fssync.Dirent[];\n try {\n entries = await fs.readdir(path.join(root, rel), { withFileTypes: true });\n } catch {\n return true;\n }\n for (const e of entries) {\n if (e.name === '.git' || e.name === 'node_modules') continue;\n if (remaining-- <= 0) return false;\n if (signal?.aborted) return false;\n const childRel = rel ? path.join(rel, e.name) : e.name;\n if (e.isDirectory()) {\n if (!(await inner(childRel, depth + 1))) return false;\n } else if (e.isFile()) {\n if ((await fn(childRel)) === false) return false;\n }\n // Symlinks, devices, fifos and sockets are intentionally skipped.\n }\n return true;\n }\n await inner(rel, 0);\n}\n\nasync function findRg(): Promise<string | null> {\n const dirs = (process.env['PATH'] ?? '').split(path.delimiter);\n for (const d of dirs) {\n const candidate = path.join(d, 'rg');\n try {\n await fs.access(candidate, fssync.constants.X_OK);\n return candidate;\n } catch {\n // not here\n }\n }\n return null;\n}\n"],"names":[],"mappings":"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","ignoreList":[0,1,2,3,4,5]}