pi-cursor-sdk 0.5.0 → 0.5.2

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 (723) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +110 -30
  3. package/dist/context.js +53 -34
  4. package/dist/cursor-api-key.js +34 -19
  5. package/dist/cursor-cloud-options.js +1 -0
  6. package/dist/cursor-config.js +59 -0
  7. package/dist/cursor-custom-store-path.js +177 -0
  8. package/dist/cursor-custom-subagent-definitions.js +14 -0
  9. package/dist/cursor-fallback-models.generated.js +1 -1
  10. package/dist/cursor-fallback-warning.js +8 -2
  11. package/dist/cursor-live-run-coordinator.js +22 -2
  12. package/dist/cursor-mcp-timeout-override.js +3 -1
  13. package/dist/cursor-pi-tool-bridge-run.js +21 -0
  14. package/dist/cursor-pi-tool-bridge-server.js +1 -1
  15. package/dist/cursor-provider-binding.js +70 -10
  16. package/dist/cursor-provider-errors.js +33 -26
  17. package/dist/cursor-provider-live-run-drain.js +10 -4
  18. package/dist/cursor-provider-run-finalizer.js +2 -1
  19. package/dist/cursor-provider-turn-prepare.js +25 -9
  20. package/dist/cursor-provider-turn-summary.js +1 -1
  21. package/dist/cursor-provider-turn-tool-ledger.js +13 -7
  22. package/dist/cursor-provider.js +2 -1
  23. package/dist/cursor-question-tool.js +5 -5
  24. package/dist/cursor-request-provenance.js +13 -2
  25. package/dist/cursor-sdk-output-filter.js +1 -1
  26. package/dist/cursor-sdk-process-error-guard.js +1 -3
  27. package/dist/cursor-sdk-runtime.js +13 -14
  28. package/dist/cursor-sdk-vendor-env.js +20 -0
  29. package/dist/cursor-session-agent-cleanup.js +29 -26
  30. package/dist/cursor-session-agent.js +38 -16
  31. package/dist/cursor-session-send-policy.js +2 -2
  32. package/dist/cursor-session-store.js +235 -45
  33. package/dist/cursor-state.js +6 -3
  34. package/dist/cursor-tool-manifest.js +1 -1
  35. package/dist/index.js +21 -19
  36. package/dist/model-discovery.js +51 -18
  37. package/dist/model-list-cache.js +12 -1
  38. package/docs/cursor-live-smoke-checklist.md +2 -2
  39. package/docs/cursor-model-ux-spec.md +70 -26
  40. package/docs/cursor-native-tool-replay.md +13 -5
  41. package/docs/cursor-native-tool-visual-audit.md +1 -1
  42. package/docs/cursor-testing-lessons.md +43 -5
  43. package/docs/cursor-tool-surfaces.md +3 -3
  44. package/node_modules/@hono/node-server/README.md +21 -10
  45. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  46. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  47. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  48. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  49. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  50. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  51. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  52. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  53. package/node_modules/@hono/node-server/package.json +3 -2
  54. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts → auth-Anm-lwWi.d.mts} +9 -8
  55. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts.map → auth-Anm-lwWi.d.mts.map} +1 -1
  56. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs → auth-BNDyLTqp.mjs} +5 -3
  57. package/node_modules/@modelcontextprotocol/core/dist/{auth-CGP0BDVq.mjs.map → auth-BNDyLTqp.mjs.map} +1 -1
  58. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs → auth-D1CeV_Jr.cjs} +5 -3
  59. package/node_modules/@modelcontextprotocol/core/dist/{auth-4-zilcqg.cjs.map → auth-D1CeV_Jr.cjs.map} +1 -1
  60. package/node_modules/@modelcontextprotocol/core/dist/{auth-YUQV3RRv.d.mts → auth-V9XJSCfa.d.cts} +9 -8
  61. package/node_modules/@modelcontextprotocol/core/dist/{auth--n_Yzytt.d.cts.map → auth-V9XJSCfa.d.cts.map} +1 -1
  62. package/node_modules/@modelcontextprotocol/core/dist/index.cjs +1 -1
  63. package/node_modules/@modelcontextprotocol/core/dist/index.d.cts +1 -1
  64. package/node_modules/@modelcontextprotocol/core/dist/index.d.mts +1 -1
  65. package/node_modules/@modelcontextprotocol/core/dist/index.mjs +1 -1
  66. package/node_modules/@modelcontextprotocol/core/dist/internal.cjs +1 -1
  67. package/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +1 -1
  68. package/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +1 -1
  69. package/node_modules/@modelcontextprotocol/core/dist/internal.mjs +1 -1
  70. package/node_modules/@modelcontextprotocol/core/package.json +2 -2
  71. package/node_modules/@modelcontextprotocol/hono/README.md +7 -5
  72. package/node_modules/@modelcontextprotocol/hono/dist/index.cjs.map +1 -1
  73. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts +5 -0
  74. package/node_modules/@modelcontextprotocol/hono/dist/index.d.cts.map +1 -1
  75. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts +5 -0
  76. package/node_modules/@modelcontextprotocol/hono/dist/index.d.mts.map +1 -1
  77. package/node_modules/@modelcontextprotocol/hono/dist/index.mjs.map +1 -1
  78. package/node_modules/@modelcontextprotocol/hono/package.json +4 -4
  79. package/node_modules/@modelcontextprotocol/server/README.md +1 -7
  80. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-Bt6U_Fqb.d.mts → createMcpHandler-D4NN8WsG.d.mts} +35 -13
  81. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D4NN8WsG.d.mts.map +1 -0
  82. package/node_modules/@modelcontextprotocol/server/dist/{createMcpHandler-BLVe3qmU.d.cts → createMcpHandler-DZmmlN8e.d.cts} +35 -13
  83. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DZmmlN8e.d.cts.map +1 -0
  84. package/node_modules/@modelcontextprotocol/server/dist/index.cjs +32 -5
  85. package/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
  86. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts +41 -5
  87. package/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -1
  88. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts +41 -5
  89. package/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -1
  90. package/node_modules/@modelcontextprotocol/server/dist/index.mjs +32 -5
  91. package/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
  92. package/node_modules/@modelcontextprotocol/server/dist/{mcp-DUcCQSTW.cjs → mcp-BumlNux0.cjs} +73 -23
  93. package/node_modules/@modelcontextprotocol/server/dist/mcp-BumlNux0.cjs.map +1 -0
  94. package/node_modules/@modelcontextprotocol/server/dist/{mcp-Dw2OlZ1f.mjs → mcp-DIH4cS6P.mjs} +73 -23
  95. package/node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs.map +1 -0
  96. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
  97. package/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
  98. package/node_modules/@modelcontextprotocol/server/dist/{src-CgFsfg3E.cjs → src-BhnGYybN.cjs} +29 -11
  99. package/node_modules/@modelcontextprotocol/server/dist/src-BhnGYybN.cjs.map +1 -0
  100. package/node_modules/@modelcontextprotocol/server/dist/{src-D-y6h4N7.mjs → src-Cqbh3MYc.mjs} +29 -11
  101. package/node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs.map +1 -0
  102. package/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +2 -2
  103. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
  104. package/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
  105. package/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +2 -2
  106. package/node_modules/@modelcontextprotocol/server/package.json +4 -4
  107. package/node_modules/hono/dist/_virtual/_rolldown/runtime.js +13 -0
  108. package/node_modules/hono/dist/adapter/aws-lambda/conninfo.js +42 -23
  109. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +318 -344
  110. package/node_modules/hono/dist/adapter/aws-lambda/index.js +2 -8
  111. package/node_modules/hono/dist/adapter/aws-lambda/types.js +1 -0
  112. package/node_modules/hono/dist/adapter/bun/conninfo.js +20 -25
  113. package/node_modules/hono/dist/adapter/bun/index.js +3 -13
  114. package/node_modules/hono/dist/adapter/bun/serve-static.js +27 -27
  115. package/node_modules/hono/dist/adapter/bun/server.js +11 -5
  116. package/node_modules/hono/dist/adapter/bun/ssg.js +25 -15
  117. package/node_modules/hono/dist/adapter/bun/websocket.js +61 -68
  118. package/node_modules/hono/dist/adapter/cloudflare-pages/conninfo.js +24 -9
  119. package/node_modules/hono/dist/adapter/cloudflare-pages/handler.js +59 -62
  120. package/node_modules/hono/dist/adapter/cloudflare-pages/index.js +2 -8
  121. package/node_modules/hono/dist/adapter/cloudflare-workers/conninfo.js +7 -9
  122. package/node_modules/hono/dist/adapter/cloudflare-workers/index.js +3 -8
  123. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static-module.js +5 -6
  124. package/node_modules/hono/dist/adapter/cloudflare-workers/serve-static.js +26 -20
  125. package/node_modules/hono/dist/adapter/cloudflare-workers/utils.js +21 -34
  126. package/node_modules/hono/dist/adapter/cloudflare-workers/websocket.js +31 -39
  127. package/node_modules/hono/dist/adapter/deno/conninfo.js +16 -13
  128. package/node_modules/hono/dist/adapter/deno/deno.d.js +1 -0
  129. package/node_modules/hono/dist/adapter/deno/index.js +3 -10
  130. package/node_modules/hono/dist/adapter/deno/serve-static.js +33 -38
  131. package/node_modules/hono/dist/adapter/deno/ssg.js +27 -16
  132. package/node_modules/hono/dist/adapter/deno/websocket.js +30 -30
  133. package/node_modules/hono/dist/adapter/lambda-edge/conninfo.js +7 -9
  134. package/node_modules/hono/dist/adapter/lambda-edge/handler.js +102 -101
  135. package/node_modules/hono/dist/adapter/lambda-edge/index.js +2 -6
  136. package/node_modules/hono/dist/adapter/netlify/conninfo.js +24 -9
  137. package/node_modules/hono/dist/adapter/netlify/handler.js +10 -8
  138. package/node_modules/hono/dist/adapter/netlify/index.js +3 -2
  139. package/node_modules/hono/dist/adapter/netlify/mod.js +2 -6
  140. package/node_modules/hono/dist/adapter/service-worker/handler.js +15 -19
  141. package/node_modules/hono/dist/adapter/service-worker/index.js +23 -7
  142. package/node_modules/hono/dist/adapter/service-worker/types.js +1 -0
  143. package/node_modules/hono/dist/adapter/vercel/conninfo.js +7 -10
  144. package/node_modules/hono/dist/adapter/vercel/handler.js +8 -6
  145. package/node_modules/hono/dist/adapter/vercel/index.js +2 -6
  146. package/node_modules/hono/dist/cjs/_virtual/_rolldown/runtime.js +33 -0
  147. package/node_modules/hono/dist/cjs/adapter/aws-lambda/conninfo.js +42 -44
  148. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +326 -373
  149. package/node_modules/hono/dist/cjs/adapter/aws-lambda/index.js +7 -34
  150. package/node_modules/hono/dist/cjs/adapter/aws-lambda/types.js +0 -15
  151. package/node_modules/hono/dist/cjs/adapter/bun/conninfo.js +21 -47
  152. package/node_modules/hono/dist/cjs/adapter/bun/index.js +14 -45
  153. package/node_modules/hono/dist/cjs/adapter/bun/serve-static.js +29 -50
  154. package/node_modules/hono/dist/cjs/adapter/bun/server.js +11 -26
  155. package/node_modules/hono/dist/cjs/adapter/bun/ssg.js +24 -35
  156. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +63 -91
  157. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js +25 -31
  158. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/handler.js +61 -85
  159. package/node_modules/hono/dist/cjs/adapter/cloudflare-pages/index.js +7 -34
  160. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/conninfo.js +8 -31
  161. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/index.js +7 -33
  162. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static-module.js +7 -29
  163. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/serve-static.js +27 -42
  164. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/utils.js +21 -55
  165. package/node_modules/hono/dist/cjs/adapter/cloudflare-workers/websocket.js +33 -62
  166. package/node_modules/hono/dist/cjs/adapter/deno/conninfo.js +16 -34
  167. package/node_modules/hono/dist/cjs/adapter/deno/index.js +10 -38
  168. package/node_modules/hono/dist/cjs/adapter/deno/serve-static.js +33 -59
  169. package/node_modules/hono/dist/cjs/adapter/deno/ssg.js +27 -37
  170. package/node_modules/hono/dist/cjs/adapter/deno/websocket.js +32 -53
  171. package/node_modules/hono/dist/cjs/adapter/lambda-edge/conninfo.js +8 -31
  172. package/node_modules/hono/dist/cjs/adapter/lambda-edge/handler.js +102 -130
  173. package/node_modules/hono/dist/cjs/adapter/lambda-edge/index.js +5 -30
  174. package/node_modules/hono/dist/cjs/adapter/netlify/conninfo.js +25 -31
  175. package/node_modules/hono/dist/cjs/adapter/netlify/handler.js +10 -29
  176. package/node_modules/hono/dist/cjs/adapter/netlify/index.js +5 -21
  177. package/node_modules/hono/dist/cjs/adapter/netlify/mod.js +5 -30
  178. package/node_modules/hono/dist/cjs/adapter/service-worker/handler.js +16 -41
  179. package/node_modules/hono/dist/cjs/adapter/service-worker/index.js +25 -30
  180. package/node_modules/hono/dist/cjs/adapter/service-worker/types.js +0 -15
  181. package/node_modules/hono/dist/cjs/adapter/vercel/conninfo.js +8 -32
  182. package/node_modules/hono/dist/cjs/adapter/vercel/handler.js +8 -27
  183. package/node_modules/hono/dist/cjs/adapter/vercel/index.js +5 -30
  184. package/node_modules/hono/dist/cjs/client/client.js +139 -212
  185. package/node_modules/hono/dist/cjs/client/fetch-result-please.js +62 -80
  186. package/node_modules/hono/dist/cjs/client/index.js +7 -32
  187. package/node_modules/hono/dist/cjs/client/types.js +0 -15
  188. package/node_modules/hono/dist/cjs/client/utils.js +54 -92
  189. package/node_modules/hono/dist/cjs/compose.js +49 -66
  190. package/node_modules/hono/dist/cjs/context.js +379 -450
  191. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +47 -72
  192. package/node_modules/hono/dist/cjs/helper/accepts/index.js +3 -27
  193. package/node_modules/hono/dist/cjs/helper/adapter/index.js +33 -73
  194. package/node_modules/hono/dist/cjs/helper/conninfo/index.js +0 -15
  195. package/node_modules/hono/dist/cjs/helper/conninfo/types.js +0 -15
  196. package/node_modules/hono/dist/cjs/helper/cookie/index.js +75 -116
  197. package/node_modules/hono/dist/cjs/helper/css/common.js +165 -244
  198. package/node_modules/hono/dist/cjs/helper/css/index.js +136 -151
  199. package/node_modules/hono/dist/cjs/helper/dev/index.js +45 -71
  200. package/node_modules/hono/dist/cjs/helper/factory/index.js +30 -51
  201. package/node_modules/hono/dist/cjs/helper/html/index.js +32 -62
  202. package/node_modules/hono/dist/cjs/helper/proxy/index.js +113 -106
  203. package/node_modules/hono/dist/cjs/helper/route/index.js +123 -66
  204. package/node_modules/hono/dist/cjs/helper/ssg/index.js +19 -43
  205. package/node_modules/hono/dist/cjs/helper/ssg/middleware.js +56 -64
  206. package/node_modules/hono/dist/cjs/helper/ssg/plugins.js +55 -57
  207. package/node_modules/hono/dist/cjs/helper/ssg/ssg.js +196 -296
  208. package/node_modules/hono/dist/cjs/helper/ssg/utils.js +47 -90
  209. package/node_modules/hono/dist/cjs/helper/streaming/index.js +8 -35
  210. package/node_modules/hono/dist/cjs/helper/streaming/sse.js +53 -85
  211. package/node_modules/hono/dist/cjs/helper/streaming/stream.js +23 -53
  212. package/node_modules/hono/dist/cjs/helper/streaming/text.js +10 -32
  213. package/node_modules/hono/dist/cjs/helper/streaming/utils.js +13 -32
  214. package/node_modules/hono/dist/cjs/helper/testing/index.js +16 -31
  215. package/node_modules/hono/dist/cjs/helper/websocket/index.js +51 -76
  216. package/node_modules/hono/dist/cjs/hono-base.js +347 -403
  217. package/node_modules/hono/dist/cjs/hono.js +28 -42
  218. package/node_modules/hono/dist/cjs/http-exception.js +55 -56
  219. package/node_modules/hono/dist/cjs/index.js +22 -30
  220. package/node_modules/hono/dist/cjs/jsx/base.js +237 -366
  221. package/node_modules/hono/dist/cjs/jsx/children.js +16 -41
  222. package/node_modules/hono/dist/cjs/jsx/components.js +119 -192
  223. package/node_modules/hono/dist/cjs/jsx/constants.js +15 -42
  224. package/node_modules/hono/dist/cjs/jsx/context.js +144 -162
  225. package/node_modules/hono/dist/cjs/jsx/dom/client.js +49 -69
  226. package/node_modules/hono/dist/cjs/jsx/dom/components.js +23 -52
  227. package/node_modules/hono/dist/cjs/jsx/dom/context.js +39 -67
  228. package/node_modules/hono/dist/cjs/jsx/dom/css.js +143 -158
  229. package/node_modules/hono/dist/cjs/jsx/dom/hooks/index.js +55 -64
  230. package/node_modules/hono/dist/cjs/jsx/dom/index.js +114 -173
  231. package/node_modules/hono/dist/cjs/jsx/dom/intrinsic-element/components.js +282 -375
  232. package/node_modules/hono/dist/cjs/jsx/dom/jsx-dev-runtime.js +14 -49
  233. package/node_modules/hono/dist/cjs/jsx/dom/jsx-runtime.js +5 -32
  234. package/node_modules/hono/dist/cjs/jsx/dom/render.js +469 -623
  235. package/node_modules/hono/dist/cjs/jsx/dom/server.js +37 -64
  236. package/node_modules/hono/dist/cjs/jsx/dom/utils.js +7 -30
  237. package/node_modules/hono/dist/cjs/jsx/hooks/index.js +225 -318
  238. package/node_modules/hono/dist/cjs/jsx/index.js +86 -135
  239. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/common.js +20 -43
  240. package/node_modules/hono/dist/cjs/jsx/intrinsic-element/components.js +117 -168
  241. package/node_modules/hono/dist/cjs/jsx/intrinsic-elements.js +0 -15
  242. package/node_modules/hono/dist/cjs/jsx/jsx-dev-runtime.js +14 -39
  243. package/node_modules/hono/dist/cjs/jsx/jsx-runtime.js +34 -68
  244. package/node_modules/hono/dist/cjs/jsx/streaming.js +123 -166
  245. package/node_modules/hono/dist/cjs/jsx/types.js +0 -15
  246. package/node_modules/hono/dist/cjs/jsx/utils.js +91 -175
  247. package/node_modules/hono/dist/cjs/middleware/basic-auth/index.js +98 -86
  248. package/node_modules/hono/dist/cjs/middleware/bearer-auth/index.js +92 -109
  249. package/node_modules/hono/dist/cjs/middleware/body-limit/index.js +66 -72
  250. package/node_modules/hono/dist/cjs/middleware/cache/index.js +153 -199
  251. package/node_modules/hono/dist/cjs/middleware/combine/index.js +135 -95
  252. package/node_modules/hono/dist/cjs/middleware/compress/index.js +73 -88
  253. package/node_modules/hono/dist/cjs/middleware/context-storage/index.js +49 -41
  254. package/node_modules/hono/dist/cjs/middleware/cors/index.js +107 -107
  255. package/node_modules/hono/dist/cjs/middleware/csrf/index.js +101 -72
  256. package/node_modules/hono/dist/cjs/middleware/etag/digest.js +58 -97
  257. package/node_modules/hono/dist/cjs/middleware/etag/index.js +71 -91
  258. package/node_modules/hono/dist/cjs/middleware/ip-restriction/index.js +161 -169
  259. package/node_modules/hono/dist/cjs/middleware/jsx-renderer/index.js +99 -77
  260. package/node_modules/hono/dist/cjs/middleware/jwk/index.js +3 -27
  261. package/node_modules/hono/dist/cjs/middleware/jwk/jwk.js +118 -135
  262. package/node_modules/hono/dist/cjs/middleware/jwt/index.js +9 -38
  263. package/node_modules/hono/dist/cjs/middleware/jwt/jwt.js +120 -141
  264. package/node_modules/hono/dist/cjs/middleware/language/index.js +7 -35
  265. package/node_modules/hono/dist/cjs/middleware/language/language.js +184 -182
  266. package/node_modules/hono/dist/cjs/middleware/logger/index.js +41 -62
  267. package/node_modules/hono/dist/cjs/middleware/method-not-allowed/index.js +82 -88
  268. package/node_modules/hono/dist/cjs/middleware/method-override/index.js +101 -102
  269. package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
  270. package/node_modules/hono/dist/cjs/middleware/powered-by/index.js +23 -30
  271. package/node_modules/hono/dist/cjs/middleware/pretty-json/index.js +38 -42
  272. package/node_modules/hono/dist/cjs/middleware/request-id/index.js +3 -27
  273. package/node_modules/hono/dist/cjs/middleware/request-id/request-id.js +34 -42
  274. package/node_modules/hono/dist/cjs/middleware/secure-headers/index.js +4 -29
  275. package/node_modules/hono/dist/cjs/middleware/secure-headers/permissions-policy.js +0 -15
  276. package/node_modules/hono/dist/cjs/middleware/secure-headers/secure-headers.js +142 -174
  277. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +56 -93
  278. package/node_modules/hono/dist/cjs/middleware/serve-static/path.js +15 -38
  279. package/node_modules/hono/dist/cjs/middleware/timeout/index.js +40 -45
  280. package/node_modules/hono/dist/cjs/middleware/timing/index.js +7 -35
  281. package/node_modules/hono/dist/cjs/middleware/timing/timing.js +177 -118
  282. package/node_modules/hono/dist/cjs/middleware/trailing-slash/index.js +85 -58
  283. package/node_modules/hono/dist/cjs/preset/quick.js +18 -37
  284. package/node_modules/hono/dist/cjs/preset/tiny.js +15 -33
  285. package/node_modules/hono/dist/cjs/request/constants.js +5 -27
  286. package/node_modules/hono/dist/cjs/request.js +334 -346
  287. package/node_modules/hono/dist/cjs/router/linear-router/index.js +3 -27
  288. package/node_modules/hono/dist/cjs/router/linear-router/router.js +95 -143
  289. package/node_modules/hono/dist/cjs/router/pattern-router/index.js +3 -27
  290. package/node_modules/hono/dist/cjs/router/pattern-router/router.js +41 -63
  291. package/node_modules/hono/dist/cjs/router/reg-exp-router/index.js +7 -34
  292. package/node_modules/hono/dist/cjs/router/reg-exp-router/matcher.js +18 -45
  293. package/node_modules/hono/dist/cjs/router/reg-exp-router/node.js +91 -135
  294. package/node_modules/hono/dist/cjs/router/reg-exp-router/prepared-router.js +92 -161
  295. package/node_modules/hono/dist/cjs/router/reg-exp-router/router.js +98 -147
  296. package/node_modules/hono/dist/cjs/router/reg-exp-router/trie.js +73 -89
  297. package/node_modules/hono/dist/cjs/router/smart-router/index.js +3 -27
  298. package/node_modules/hono/dist/cjs/router/smart-router/router.js +49 -79
  299. package/node_modules/hono/dist/cjs/router/trie-router/index.js +3 -27
  300. package/node_modules/hono/dist/cjs/router/trie-router/node.js +134 -186
  301. package/node_modules/hono/dist/cjs/router/trie-router/router.js +15 -39
  302. package/node_modules/hono/dist/cjs/router/utils.js +5 -27
  303. package/node_modules/hono/dist/cjs/router.js +37 -37
  304. package/node_modules/hono/dist/cjs/types.js +5 -28
  305. package/node_modules/hono/dist/cjs/utils/accept.js +177 -225
  306. package/node_modules/hono/dist/cjs/utils/basic-auth.js +16 -40
  307. package/node_modules/hono/dist/cjs/utils/body.js +84 -110
  308. package/node_modules/hono/dist/cjs/utils/buffer.js +43 -91
  309. package/node_modules/hono/dist/cjs/utils/color.js +35 -44
  310. package/node_modules/hono/dist/cjs/utils/compress.js +11 -26
  311. package/node_modules/hono/dist/cjs/utils/concurrent.js +29 -59
  312. package/node_modules/hono/dist/cjs/utils/constants.js +7 -26
  313. package/node_modules/hono/dist/cjs/utils/cookie.js +107 -177
  314. package/node_modules/hono/dist/cjs/utils/crypto.js +30 -61
  315. package/node_modules/hono/dist/cjs/utils/encode.js +31 -48
  316. package/node_modules/hono/dist/cjs/utils/filepath.js +23 -54
  317. package/node_modules/hono/dist/cjs/utils/handler.js +11 -33
  318. package/node_modules/hono/dist/cjs/utils/headers.js +0 -15
  319. package/node_modules/hono/dist/cjs/utils/html.js +96 -137
  320. package/node_modules/hono/dist/cjs/utils/http-status.js +0 -15
  321. package/node_modules/hono/dist/cjs/utils/ipaddr.js +213 -286
  322. package/node_modules/hono/dist/cjs/utils/jwt/index.js +14 -27
  323. package/node_modules/hono/dist/cjs/utils/jwt/jwa.js +25 -42
  324. package/node_modules/hono/dist/cjs/utils/jwt/jws.js +119 -199
  325. package/node_modules/hono/dist/cjs/utils/jwt/jwt.js +122 -206
  326. package/node_modules/hono/dist/cjs/utils/jwt/types.js +122 -159
  327. package/node_modules/hono/dist/cjs/utils/jwt/utf8.js +9 -28
  328. package/node_modules/hono/dist/cjs/utils/mime.js +75 -101
  329. package/node_modules/hono/dist/cjs/utils/stream.js +88 -111
  330. package/node_modules/hono/dist/cjs/utils/types.js +0 -15
  331. package/node_modules/hono/dist/cjs/utils/url.js +185 -234
  332. package/node_modules/hono/dist/cjs/validator/index.js +3 -27
  333. package/node_modules/hono/dist/cjs/validator/utils.js +0 -15
  334. package/node_modules/hono/dist/cjs/validator/validator.js +60 -103
  335. package/node_modules/hono/dist/client/client.js +138 -197
  336. package/node_modules/hono/dist/client/fetch-result-please.js +59 -56
  337. package/node_modules/hono/dist/client/index.js +3 -7
  338. package/node_modules/hono/dist/client/types.js +1 -0
  339. package/node_modules/hono/dist/client/utils.js +51 -68
  340. package/node_modules/hono/dist/compose.js +49 -45
  341. package/node_modules/hono/dist/context.js +376 -426
  342. package/node_modules/hono/dist/helper/accepts/accepts.js +47 -51
  343. package/node_modules/hono/dist/helper/accepts/index.js +1 -4
  344. package/node_modules/hono/dist/helper/adapter/index.js +33 -52
  345. package/node_modules/hono/dist/helper/conninfo/index.js +1 -0
  346. package/node_modules/hono/dist/helper/conninfo/types.js +1 -0
  347. package/node_modules/hono/dist/helper/cookie/index.js +74 -94
  348. package/node_modules/hono/dist/helper/css/common.js +167 -225
  349. package/node_modules/hono/dist/helper/css/index.js +132 -137
  350. package/node_modules/hono/dist/helper/dev/index.js +44 -49
  351. package/node_modules/hono/dist/helper/factory/index.js +27 -27
  352. package/node_modules/hono/dist/helper/html/index.js +30 -39
  353. package/node_modules/hono/dist/helper/proxy/index.js +116 -88
  354. package/node_modules/hono/dist/helper/route/index.js +121 -43
  355. package/node_modules/hono/dist/helper/ssg/index.js +3 -18
  356. package/node_modules/hono/dist/helper/ssg/middleware.js +53 -40
  357. package/node_modules/hono/dist/helper/ssg/plugins.js +55 -36
  358. package/node_modules/hono/dist/helper/ssg/ssg.js +198 -283
  359. package/node_modules/hono/dist/helper/ssg/utils.js +53 -75
  360. package/node_modules/hono/dist/helper/streaming/index.js +2 -8
  361. package/node_modules/hono/dist/helper/streaming/sse.js +50 -61
  362. package/node_modules/hono/dist/helper/streaming/stream.js +22 -31
  363. package/node_modules/hono/dist/helper/streaming/text.js +9 -10
  364. package/node_modules/hono/dist/helper/streaming/utils.js +9 -12
  365. package/node_modules/hono/dist/helper/testing/index.js +16 -10
  366. package/node_modules/hono/dist/helper/websocket/index.js +49 -53
  367. package/node_modules/hono/dist/hono-base.js +344 -379
  368. package/node_modules/hono/dist/hono.js +27 -20
  369. package/node_modules/hono/dist/http-exception.js +53 -33
  370. package/node_modules/hono/dist/index.js +19 -6
  371. package/node_modules/hono/dist/jsx/base.js +231 -340
  372. package/node_modules/hono/dist/jsx/children.js +16 -20
  373. package/node_modules/hono/dist/jsx/components.js +118 -170
  374. package/node_modules/hono/dist/jsx/constants.js +9 -15
  375. package/node_modules/hono/dist/jsx/context.js +153 -150
  376. package/node_modules/hono/dist/jsx/dom/client.js +45 -48
  377. package/node_modules/hono/dist/jsx/dom/components.js +21 -29
  378. package/node_modules/hono/dist/jsx/dom/context.js +37 -44
  379. package/node_modules/hono/dist/jsx/dom/css.js +142 -147
  380. package/node_modules/hono/dist/jsx/dom/hooks/index.js +52 -40
  381. package/node_modules/hono/dist/jsx/dom/index.js +71 -134
  382. package/node_modules/hono/dist/jsx/dom/intrinsic-element/components.js +275 -359
  383. package/node_modules/hono/dist/jsx/dom/jsx-dev-runtime.js +14 -18
  384. package/node_modules/hono/dist/jsx/dom/jsx-runtime.js +2 -8
  385. package/node_modules/hono/dist/jsx/dom/render.js +492 -631
  386. package/node_modules/hono/dist/jsx/dom/server.js +32 -32
  387. package/node_modules/hono/dist/jsx/dom/utils.js +6 -8
  388. package/node_modules/hono/dist/jsx/hooks/index.js +236 -308
  389. package/node_modules/hono/dist/jsx/index.js +45 -98
  390. package/node_modules/hono/dist/jsx/intrinsic-element/common.js +20 -22
  391. package/node_modules/hono/dist/jsx/intrinsic-element/components.js +113 -154
  392. package/node_modules/hono/dist/jsx/intrinsic-elements.js +1 -0
  393. package/node_modules/hono/dist/jsx/jsx-dev-runtime.js +12 -16
  394. package/node_modules/hono/dist/jsx/jsx-runtime.js +29 -42
  395. package/node_modules/hono/dist/jsx/streaming.js +120 -142
  396. package/node_modules/hono/dist/jsx/types.js +1 -0
  397. package/node_modules/hono/dist/jsx/utils.js +105 -168
  398. package/node_modules/hono/dist/middleware/basic-auth/index.js +96 -63
  399. package/node_modules/hono/dist/middleware/bearer-auth/index.js +93 -89
  400. package/node_modules/hono/dist/middleware/body-limit/index.js +66 -51
  401. package/node_modules/hono/dist/middleware/cache/index.js +165 -190
  402. package/node_modules/hono/dist/middleware/combine/index.js +134 -73
  403. package/node_modules/hono/dist/middleware/compress/index.js +75 -69
  404. package/node_modules/hono/dist/middleware/context-storage/index.js +49 -19
  405. package/node_modules/hono/dist/middleware/cors/index.js +107 -86
  406. package/node_modules/hono/dist/middleware/csrf/index.js +103 -53
  407. package/node_modules/hono/dist/middleware/etag/digest.js +59 -77
  408. package/node_modules/hono/dist/middleware/etag/index.js +71 -70
  409. package/node_modules/hono/dist/middleware/ip-restriction/index.js +163 -158
  410. package/node_modules/hono/dist/middleware/jsx-renderer/index.js +97 -54
  411. package/node_modules/hono/dist/middleware/jwk/index.js +1 -4
  412. package/node_modules/hono/dist/middleware/jwk/jwk.js +116 -112
  413. package/node_modules/hono/dist/middleware/jwt/index.js +2 -10
  414. package/node_modules/hono/dist/middleware/jwt/jwt.js +114 -114
  415. package/node_modules/hono/dist/middleware/language/index.js +2 -15
  416. package/node_modules/hono/dist/middleware/language/language.js +180 -157
  417. package/node_modules/hono/dist/middleware/logger/index.js +43 -37
  418. package/node_modules/hono/dist/middleware/method-not-allowed/index.js +81 -66
  419. package/node_modules/hono/dist/middleware/method-override/index.js +101 -81
  420. package/node_modules/hono/dist/middleware/mount/index.js +70 -0
  421. package/node_modules/hono/dist/middleware/powered-by/index.js +23 -9
  422. package/node_modules/hono/dist/middleware/pretty-json/index.js +39 -22
  423. package/node_modules/hono/dist/middleware/request-id/index.js +1 -4
  424. package/node_modules/hono/dist/middleware/request-id/request-id.js +33 -20
  425. package/node_modules/hono/dist/middleware/secure-headers/index.js +1 -5
  426. package/node_modules/hono/dist/middleware/secure-headers/permissions-policy.js +1 -0
  427. package/node_modules/hono/dist/middleware/secure-headers/secure-headers.js +144 -155
  428. package/node_modules/hono/dist/middleware/serve-static/index.js +56 -72
  429. package/node_modules/hono/dist/middleware/serve-static/path.js +15 -17
  430. package/node_modules/hono/dist/middleware/timeout/index.js +40 -23
  431. package/node_modules/hono/dist/middleware/timing/index.js +2 -9
  432. package/node_modules/hono/dist/middleware/timing/timing.js +177 -97
  433. package/node_modules/hono/dist/middleware/trailing-slash/index.js +85 -37
  434. package/node_modules/hono/dist/preset/quick.js +17 -15
  435. package/node_modules/hono/dist/preset/tiny.js +14 -11
  436. package/node_modules/hono/dist/request/constants.js +4 -5
  437. package/node_modules/hono/dist/request.js +328 -319
  438. package/node_modules/hono/dist/router/linear-router/index.js +1 -4
  439. package/node_modules/hono/dist/router/linear-router/router.js +93 -120
  440. package/node_modules/hono/dist/router/pattern-router/index.js +1 -4
  441. package/node_modules/hono/dist/router/pattern-router/router.js +39 -40
  442. package/node_modules/hono/dist/router/reg-exp-router/index.js +1 -7
  443. package/node_modules/hono/dist/router/reg-exp-router/matcher.js +17 -23
  444. package/node_modules/hono/dist/router/reg-exp-router/node.js +87 -110
  445. package/node_modules/hono/dist/router/reg-exp-router/prepared-router.js +89 -137
  446. package/node_modules/hono/dist/router/reg-exp-router/router.js +92 -129
  447. package/node_modules/hono/dist/router/reg-exp-router/trie.js +69 -64
  448. package/node_modules/hono/dist/router/smart-router/index.js +1 -4
  449. package/node_modules/hono/dist/router/smart-router/router.js +46 -55
  450. package/node_modules/hono/dist/router/trie-router/index.js +1 -4
  451. package/node_modules/hono/dist/router/trie-router/node.js +131 -162
  452. package/node_modules/hono/dist/router/trie-router/router.js +11 -14
  453. package/node_modules/hono/dist/router/utils.js +4 -5
  454. package/node_modules/hono/dist/router.js +35 -14
  455. package/node_modules/hono/dist/types/adapter/aws-lambda/conninfo.d.ts +4 -1
  456. package/node_modules/hono/dist/types/adapter/aws-lambda/handler.d.ts +150 -104
  457. package/node_modules/hono/dist/types/adapter/aws-lambda/index.d.ts +4 -8
  458. package/node_modules/hono/dist/types/adapter/aws-lambda/types.d.ts +152 -122
  459. package/node_modules/hono/dist/types/adapter/bun/conninfo.d.ts +4 -1
  460. package/node_modules/hono/dist/types/adapter/bun/index.d.ts +6 -10
  461. package/node_modules/hono/dist/types/adapter/bun/serve-static.d.ts +7 -2
  462. package/node_modules/hono/dist/types/adapter/bun/server.d.ts +4 -5
  463. package/node_modules/hono/dist/types/adapter/bun/ssg.d.ts +5 -1
  464. package/node_modules/hono/dist/types/adapter/bun/websocket.d.ts +31 -16
  465. package/node_modules/hono/dist/types/adapter/cloudflare-pages/conninfo.d.ts +4 -1
  466. package/node_modules/hono/dist/types/adapter/cloudflare-pages/handler.d.ts +29 -17
  467. package/node_modules/hono/dist/types/adapter/cloudflare-pages/index.d.ts +3 -7
  468. package/node_modules/hono/dist/types/adapter/cloudflare-workers/conninfo.d.ts +6 -1
  469. package/node_modules/hono/dist/types/adapter/cloudflare-workers/index.d.ts +4 -7
  470. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static-module.d.ts +5 -2
  471. package/node_modules/hono/dist/types/adapter/cloudflare-workers/serve-static.d.ts +10 -5
  472. package/node_modules/hono/dist/types/adapter/cloudflare-workers/utils.d.ts +10 -2
  473. package/node_modules/hono/dist/types/adapter/cloudflare-workers/websocket.d.ts +6 -1
  474. package/node_modules/hono/dist/types/adapter/deno/conninfo.d.ts +4 -1
  475. package/node_modules/hono/dist/types/adapter/deno/deno.d.ts +1 -0
  476. package/node_modules/hono/dist/types/adapter/deno/index.d.ts +5 -8
  477. package/node_modules/hono/dist/types/adapter/deno/serve-static.d.ts +7 -2
  478. package/node_modules/hono/dist/types/adapter/deno/ssg.d.ts +5 -1
  479. package/node_modules/hono/dist/types/adapter/deno/websocket.d.ts +6 -1
  480. package/node_modules/hono/dist/types/adapter/lambda-edge/conninfo.d.ts +6 -1
  481. package/node_modules/hono/dist/types/adapter/lambda-edge/handler.d.ts +83 -57
  482. package/node_modules/hono/dist/types/adapter/lambda-edge/index.d.ts +3 -7
  483. package/node_modules/hono/dist/types/adapter/netlify/conninfo.d.ts +4 -1
  484. package/node_modules/hono/dist/types/adapter/netlify/handler.d.ts +6 -1
  485. package/node_modules/hono/dist/types/adapter/netlify/index.d.ts +3 -5
  486. package/node_modules/hono/dist/types/adapter/netlify/mod.d.ts +3 -2
  487. package/node_modules/hono/dist/types/adapter/service-worker/handler.d.ts +9 -7
  488. package/node_modules/hono/dist/types/adapter/service-worker/index.d.ts +7 -9
  489. package/node_modules/hono/dist/types/adapter/service-worker/types.d.ts +12 -7
  490. package/node_modules/hono/dist/types/adapter/vercel/conninfo.d.ts +6 -1
  491. package/node_modules/hono/dist/types/adapter/vercel/handler.d.ts +6 -1
  492. package/node_modules/hono/dist/types/adapter/vercel/index.d.ts +3 -6
  493. package/node_modules/hono/dist/types/client/client.d.ts +5 -3
  494. package/node_modules/hono/dist/types/client/fetch-result-please.d.ts +21 -19
  495. package/node_modules/hono/dist/types/client/index.d.ts +5 -7
  496. package/node_modules/hono/dist/types/client/types.d.ts +134 -159
  497. package/node_modules/hono/dist/types/client/utils.d.ts +6 -4
  498. package/node_modules/hono/dist/types/compose.d.ts +4 -2
  499. package/node_modules/hono/dist/types/context.d.ts +335 -335
  500. package/node_modules/hono/dist/types/helper/accepts/accepts.d.ts +11 -9
  501. package/node_modules/hono/dist/types/helper/accepts/index.d.ts +2 -5
  502. package/node_modules/hono/dist/types/helper/adapter/index.d.ts +4 -6
  503. package/node_modules/hono/dist/types/helper/conninfo/index.d.ts +2 -5
  504. package/node_modules/hono/dist/types/helper/conninfo/types.d.ts +25 -23
  505. package/node_modules/hono/dist/types/helper/cookie/index.d.ts +10 -12
  506. package/node_modules/hono/dist/types/helper/css/common.d.ts +11 -9
  507. package/node_modules/hono/dist/types/helper/css/index.d.ts +26 -28
  508. package/node_modules/hono/dist/types/helper/dev/index.d.ts +10 -12
  509. package/node_modules/hono/dist/types/helper/factory/index.d.ts +26 -73
  510. package/node_modules/hono/dist/types/helper/html/index.d.ts +4 -7
  511. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +19 -21
  512. package/node_modules/hono/dist/types/helper/route/index.d.ts +4 -2
  513. package/node_modules/hono/dist/types/helper/ssg/index.d.ts +4 -7
  514. package/node_modules/hono/dist/types/helper/ssg/middleware.d.ts +8 -6
  515. package/node_modules/hono/dist/types/helper/ssg/plugins.d.ts +3 -1
  516. package/node_modules/hono/dist/types/helper/ssg/ssg.d.ts +38 -36
  517. package/node_modules/hono/dist/types/helper/ssg/utils.d.ts +5 -3
  518. package/node_modules/hono/dist/types/helper/streaming/index.d.ts +4 -8
  519. package/node_modules/hono/dist/types/helper/streaming/sse.d.ts +10 -8
  520. package/node_modules/hono/dist/types/helper/streaming/stream.d.ts +4 -2
  521. package/node_modules/hono/dist/types/helper/streaming/text.d.ts +4 -2
  522. package/node_modules/hono/dist/types/helper/streaming/utils.d.ts +2 -0
  523. package/node_modules/hono/dist/types/helper/testing/index.d.ts +7 -9
  524. package/node_modules/hono/dist/types/helper/websocket/index.d.ts +30 -33
  525. package/node_modules/hono/dist/types/hono-base.d.ts +210 -210
  526. package/node_modules/hono/dist/types/hono.d.ts +11 -10
  527. package/node_modules/hono/dist/types/http-exception.d.ts +20 -22
  528. package/node_modules/hono/dist/types/index.d.ts +6 -37
  529. package/node_modules/hono/dist/types/jsx/base.d.ts +37 -35
  530. package/node_modules/hono/dist/types/jsx/children.d.ts +8 -6
  531. package/node_modules/hono/dist/types/jsx/components.d.ts +8 -5
  532. package/node_modules/hono/dist/types/jsx/constants.d.ts +2 -0
  533. package/node_modules/hono/dist/types/jsx/context.d.ts +9 -6
  534. package/node_modules/hono/dist/types/jsx/dom/client.d.ts +9 -10
  535. package/node_modules/hono/dist/types/jsx/dom/components.d.ts +9 -6
  536. package/node_modules/hono/dist/types/jsx/dom/context.d.ts +3 -1
  537. package/node_modules/hono/dist/types/jsx/dom/css.d.ts +27 -30
  538. package/node_modules/hono/dist/types/jsx/dom/hooks/index.d.ts +11 -12
  539. package/node_modules/hono/dist/types/jsx/dom/index.d.ts +79 -83
  540. package/node_modules/hono/dist/types/jsx/dom/intrinsic-element/components.d.ts +9 -5
  541. package/node_modules/hono/dist/types/jsx/dom/jsx-dev-runtime.d.ts +4 -6
  542. package/node_modules/hono/dist/types/jsx/dom/jsx-runtime.d.ts +3 -7
  543. package/node_modules/hono/dist/types/jsx/dom/render.d.ts +32 -50
  544. package/node_modules/hono/dist/types/jsx/dom/server.d.ts +87 -85
  545. package/node_modules/hono/dist/types/jsx/dom/utils.d.ts +2 -0
  546. package/node_modules/hono/dist/types/jsx/hooks/index.d.ts +16 -16
  547. package/node_modules/hono/dist/types/jsx/index.d.ts +71 -73
  548. package/node_modules/hono/dist/types/jsx/intrinsic-element/common.d.ts +3 -1
  549. package/node_modules/hono/dist/types/jsx/intrinsic-element/components.d.ts +7 -4
  550. package/node_modules/hono/dist/types/jsx/intrinsic-elements.d.ts +708 -708
  551. package/node_modules/hono/dist/types/jsx/jsx-dev-runtime.d.ts +4 -7
  552. package/node_modules/hono/dist/types/jsx/jsx-runtime.d.ts +7 -10
  553. package/node_modules/hono/dist/types/jsx/streaming.d.ts +9 -10
  554. package/node_modules/hono/dist/types/jsx/types.d.ts +12 -13
  555. package/node_modules/hono/dist/types/jsx/utils.d.ts +2 -0
  556. package/node_modules/hono/dist/types/middleware/basic-auth/index.d.ts +17 -19
  557. package/node_modules/hono/dist/types/middleware/bearer-auth/index.d.ts +46 -48
  558. package/node_modules/hono/dist/types/middleware/body-limit/index.d.ts +6 -8
  559. package/node_modules/hono/dist/types/middleware/cache/index.d.ts +13 -15
  560. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +4 -6
  561. package/node_modules/hono/dist/types/middleware/compress/index.d.ts +9 -10
  562. package/node_modules/hono/dist/types/middleware/context-storage/index.d.ts +4 -6
  563. package/node_modules/hono/dist/types/middleware/cors/index.d.ts +10 -12
  564. package/node_modules/hono/dist/types/middleware/csrf/index.d.ts +6 -8
  565. package/node_modules/hono/dist/types/middleware/etag/digest.d.ts +2 -0
  566. package/node_modules/hono/dist/types/middleware/etag/index.d.ts +6 -8
  567. package/node_modules/hono/dist/types/middleware/ip-restriction/index.d.ts +11 -12
  568. package/node_modules/hono/dist/types/middleware/jsx-renderer/index.d.ts +11 -11
  569. package/node_modules/hono/dist/types/middleware/jwk/index.d.ts +2 -1
  570. package/node_modules/hono/dist/types/middleware/jwk/jwk.d.ts +20 -23
  571. package/node_modules/hono/dist/types/middleware/jwt/index.d.ts +7 -6
  572. package/node_modules/hono/dist/types/middleware/jwt/jwt.d.ts +28 -30
  573. package/node_modules/hono/dist/types/middleware/language/index.d.ts +6 -5
  574. package/node_modules/hono/dist/types/middleware/language/language.d.ts +42 -44
  575. package/node_modules/hono/dist/types/middleware/logger/index.d.ts +3 -5
  576. package/node_modules/hono/dist/types/middleware/method-not-allowed/index.d.ts +7 -9
  577. package/node_modules/hono/dist/types/middleware/method-override/index.d.ts +14 -16
  578. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
  579. package/node_modules/hono/dist/types/middleware/powered-by/index.d.ts +8 -10
  580. package/node_modules/hono/dist/types/middleware/pretty-json/index.d.ts +18 -20
  581. package/node_modules/hono/dist/types/middleware/request-id/index.d.ts +6 -5
  582. package/node_modules/hono/dist/types/middleware/request-id/request-id.d.ts +9 -11
  583. package/node_modules/hono/dist/types/middleware/secure-headers/index.d.ts +6 -6
  584. package/node_modules/hono/dist/types/middleware/secure-headers/permissions-policy.d.ts +2 -0
  585. package/node_modules/hono/dist/types/middleware/secure-headers/secure-headers.d.ts +55 -57
  586. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +24 -24
  587. package/node_modules/hono/dist/types/middleware/serve-static/path.d.ts +2 -0
  588. package/node_modules/hono/dist/types/middleware/timeout/index.d.ts +5 -7
  589. package/node_modules/hono/dist/types/middleware/timing/index.d.ts +6 -5
  590. package/node_modules/hono/dist/types/middleware/timing/timing.d.ts +17 -20
  591. package/node_modules/hono/dist/types/middleware/trailing-slash/index.d.ts +35 -37
  592. package/node_modules/hono/dist/types/preset/quick.d.ts +6 -9
  593. package/node_modules/hono/dist/types/preset/tiny.d.ts +6 -9
  594. package/node_modules/hono/dist/types/request/constants.d.ts +2 -0
  595. package/node_modules/hono/dist/types/request.d.ts +288 -286
  596. package/node_modules/hono/dist/types/router/linear-router/index.d.ts +2 -5
  597. package/node_modules/hono/dist/types/router/linear-router/router.d.ts +7 -5
  598. package/node_modules/hono/dist/types/router/pattern-router/index.d.ts +2 -5
  599. package/node_modules/hono/dist/types/router/pattern-router/router.d.ts +7 -5
  600. package/node_modules/hono/dist/types/router/reg-exp-router/index.d.ts +3 -6
  601. package/node_modules/hono/dist/types/router/reg-exp-router/matcher.d.ts +3 -1
  602. package/node_modules/hono/dist/types/router/reg-exp-router/node.d.ts +6 -4
  603. package/node_modules/hono/dist/types/router/reg-exp-router/prepared-router.d.ts +11 -10
  604. package/node_modules/hono/dist/types/router/reg-exp-router/router.d.ts +10 -9
  605. package/node_modules/hono/dist/types/router/reg-exp-router/trie.d.ts +7 -5
  606. package/node_modules/hono/dist/types/router/smart-router/index.d.ts +2 -5
  607. package/node_modules/hono/dist/types/router/smart-router/router.d.ts +11 -9
  608. package/node_modules/hono/dist/types/router/trie-router/index.d.ts +2 -5
  609. package/node_modules/hono/dist/types/router/trie-router/node.d.ts +6 -4
  610. package/node_modules/hono/dist/types/router/trie-router/router.d.ts +7 -5
  611. package/node_modules/hono/dist/types/router/utils.d.ts +2 -0
  612. package/node_modules/hono/dist/types/router.d.ts +23 -22
  613. package/node_modules/hono/dist/types/types.d.ts +146 -505
  614. package/node_modules/hono/dist/types/utils/accept.d.ts +5 -3
  615. package/node_modules/hono/dist/types/utils/basic-auth.d.ts +4 -2
  616. package/node_modules/hono/dist/types/utils/body.d.ts +46 -50
  617. package/node_modules/hono/dist/types/utils/buffer.d.ts +7 -5
  618. package/node_modules/hono/dist/types/utils/color.d.ts +2 -0
  619. package/node_modules/hono/dist/types/utils/compress.d.ts +2 -0
  620. package/node_modules/hono/dist/types/utils/concurrent.d.ts +6 -4
  621. package/node_modules/hono/dist/types/utils/constants.d.ts +2 -0
  622. package/node_modules/hono/dist/types/utils/cookie.d.ts +20 -18
  623. package/node_modules/hono/dist/types/utils/crypto.d.ts +5 -7
  624. package/node_modules/hono/dist/types/utils/encode.d.ts +2 -0
  625. package/node_modules/hono/dist/types/utils/filepath.d.ts +5 -3
  626. package/node_modules/hono/dist/types/utils/handler.d.ts +2 -0
  627. package/node_modules/hono/dist/types/utils/headers.d.ts +2 -0
  628. package/node_modules/hono/dist/types/utils/html.d.ts +11 -9
  629. package/node_modules/hono/dist/types/utils/http-status.d.ts +2 -0
  630. package/node_modules/hono/dist/types/utils/ipaddr.d.ts +4 -6
  631. package/node_modules/hono/dist/types/utils/jwt/index.d.ts +18 -12
  632. package/node_modules/hono/dist/types/utils/jwt/jwa.d.ts +15 -13
  633. package/node_modules/hono/dist/types/utils/jwt/jws.d.ts +4 -7
  634. package/node_modules/hono/dist/types/utils/jwt/jwt.d.ts +26 -29
  635. package/node_modules/hono/dist/types/utils/jwt/types.d.ts +48 -45
  636. package/node_modules/hono/dist/types/utils/jwt/utf8.d.ts +2 -0
  637. package/node_modules/hono/dist/types/utils/mime.d.ts +60 -57
  638. package/node_modules/hono/dist/types/utils/stream.d.ts +27 -25
  639. package/node_modules/hono/dist/types/utils/types.d.ts +14 -26
  640. package/node_modules/hono/dist/types/utils/url.d.ts +2 -0
  641. package/node_modules/hono/dist/types/validator/index.d.ts +3 -7
  642. package/node_modules/hono/dist/types/validator/utils.d.ts +6 -8
  643. package/node_modules/hono/dist/types/validator/validator.d.ts +11 -9
  644. package/node_modules/hono/dist/types.js +4 -6
  645. package/node_modules/hono/dist/utils/accept.js +185 -212
  646. package/node_modules/hono/dist/utils/basic-auth.js +18 -21
  647. package/node_modules/hono/dist/utils/body.js +87 -92
  648. package/node_modules/hono/dist/utils/buffer.js +44 -71
  649. package/node_modules/hono/dist/utils/color.js +33 -21
  650. package/node_modules/hono/dist/utils/compress.js +11 -5
  651. package/node_modules/hono/dist/utils/concurrent.js +29 -38
  652. package/node_modules/hono/dist/utils/constants.js +7 -5
  653. package/node_modules/hono/dist/utils/cookie.js +114 -163
  654. package/node_modules/hono/dist/utils/crypto.js +30 -40
  655. package/node_modules/hono/dist/utils/encode.js +30 -26
  656. package/node_modules/hono/dist/utils/filepath.js +23 -33
  657. package/node_modules/hono/dist/utils/handler.js +10 -11
  658. package/node_modules/hono/dist/utils/headers.js +1 -0
  659. package/node_modules/hono/dist/utils/html.js +97 -117
  660. package/node_modules/hono/dist/utils/http-status.js +1 -0
  661. package/node_modules/hono/dist/utils/ipaddr.js +227 -279
  662. package/node_modules/hono/dist/utils/jwt/index.js +12 -4
  663. package/node_modules/hono/dist/utils/jwt/jwa.js +24 -20
  664. package/node_modules/hono/dist/utils/jwt/jws.js +115 -174
  665. package/node_modules/hono/dist/utils/jwt/jwt.js +120 -198
  666. package/node_modules/hono/dist/utils/jwt/types.js +79 -95
  667. package/node_modules/hono/dist/utils/jwt/utf8.js +9 -7
  668. package/node_modules/hono/dist/utils/mime.js +74 -79
  669. package/node_modules/hono/dist/utils/stream.js +86 -88
  670. package/node_modules/hono/dist/utils/types.js +1 -0
  671. package/node_modules/hono/dist/utils/url.js +187 -215
  672. package/node_modules/hono/dist/validator/index.js +1 -4
  673. package/node_modules/hono/dist/validator/utils.js +1 -0
  674. package/node_modules/hono/dist/validator/validator.js +61 -83
  675. package/node_modules/hono/package.json +35 -27
  676. package/package.json +16 -14
  677. package/scripts/lib/cursor-sdk-output-filter.d.mts +1 -0
  678. package/scripts/lib/cursor-sdk-output-filter.mjs +1 -0
  679. package/scripts/platform-smoke/artifacts.mjs +7 -1
  680. package/shared/cursor-sdk-output-filter.d.mts +3 -0
  681. package/shared/cursor-sdk-output-filter.mjs +117 -44
  682. package/src/context.ts +57 -33
  683. package/src/cursor-api-key.ts +37 -17
  684. package/src/cursor-cloud-options.ts +2 -0
  685. package/src/cursor-config.ts +76 -0
  686. package/src/cursor-custom-store-path.ts +151 -0
  687. package/src/cursor-custom-subagent-definitions.ts +21 -0
  688. package/src/cursor-fallback-models.generated.ts +1 -1
  689. package/src/cursor-fallback-warning.ts +7 -3
  690. package/src/cursor-live-run-coordinator.ts +21 -2
  691. package/src/cursor-mcp-timeout-override.ts +3 -1
  692. package/src/cursor-pi-tool-bridge-run.ts +21 -0
  693. package/src/cursor-pi-tool-bridge-server.ts +1 -2
  694. package/src/cursor-pi-tool-bridge-types.ts +3 -0
  695. package/src/cursor-provider-binding.ts +70 -11
  696. package/src/cursor-provider-errors.ts +32 -28
  697. package/src/cursor-provider-live-run-drain.ts +9 -4
  698. package/src/cursor-provider-run-finalizer.ts +2 -1
  699. package/src/cursor-provider-turn-prepare.ts +28 -13
  700. package/src/cursor-provider-turn-summary.ts +1 -1
  701. package/src/cursor-provider-turn-tool-ledger.ts +12 -7
  702. package/src/cursor-provider.ts +3 -1
  703. package/src/cursor-question-tool.ts +5 -5
  704. package/src/cursor-request-provenance.ts +18 -3
  705. package/src/cursor-sdk-output-filter.ts +2 -0
  706. package/src/cursor-sdk-process-error-guard.ts +1 -2
  707. package/src/cursor-sdk-runtime.ts +14 -15
  708. package/src/cursor-sdk-vendor-env.ts +22 -0
  709. package/src/cursor-session-agent-cleanup.ts +28 -27
  710. package/src/cursor-session-agent.ts +44 -17
  711. package/src/cursor-session-send-policy.ts +2 -2
  712. package/src/cursor-session-store.ts +259 -53
  713. package/src/cursor-state.ts +7 -2
  714. package/src/cursor-tool-manifest.ts +1 -1
  715. package/src/index.ts +19 -19
  716. package/src/model-discovery.ts +62 -23
  717. package/src/model-list-cache.ts +11 -1
  718. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BLVe3qmU.d.cts.map +0 -1
  719. package/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-Bt6U_Fqb.d.mts.map +0 -1
  720. package/node_modules/@modelcontextprotocol/server/dist/mcp-DUcCQSTW.cjs.map +0 -1
  721. package/node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs.map +0 -1
  722. package/node_modules/@modelcontextprotocol/server/dist/src-CgFsfg3E.cjs.map +0 -1
  723. package/node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs.map +0 -1
@@ -1,16 +1,15 @@
1
- import { existsSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { resolveCursorSdkPlatformPackageDirectory } from "./cursor-ripgrep-path.js";
1
+ // Vendor env must initialize before the static @cursor/sdk import below so
2
+ // tree-sitter natives resolve when Pi lives outside this package's node_modules.
3
+ import "./cursor-sdk-vendor-env.js";
4
+ import * as CursorSdk from "@cursor/sdk";
5
+ /**
6
+ * Load the Cursor SDK module.
7
+ *
8
+ * Uses a static import so Pi's compiled-Bun extension graph includes @cursor/sdk
9
+ * (a runtime dynamic bare import is omitted from that graph; see #228).
10
+ * `loadCursorSdk` remains async for call-site compatibility and so vendor-env
11
+ * side effects (imported above) always run before callers receive the module.
12
+ */
4
13
  export async function loadCursorSdk() {
5
- // The SDK searches launcher ancestors, which miss Pi's separately installed extension packages.
6
- if (process.env.CURSOR_TREE_SITTER_VENDOR_DIR === undefined) {
7
- const packageDirectory = resolveCursorSdkPlatformPackageDirectory();
8
- if (packageDirectory) {
9
- const vendor = join(packageDirectory, "vendor");
10
- if (existsSync(join(vendor, "tree-sitter", "index.js")) && existsSync(join(vendor, "tree-sitter-bash", "index.js"))) {
11
- process.env.CURSOR_TREE_SITTER_VENDOR_DIR = vendor;
12
- }
13
- }
14
- }
15
- return import("@cursor/sdk");
14
+ return CursorSdk;
16
15
  }
@@ -0,0 +1,20 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { resolveCursorSdkPlatformPackageDirectory } from "./cursor-ripgrep-path.js";
4
+ /**
5
+ * Ensure CURSOR_TREE_SITTER_VENDOR_DIR is set before @cursor/sdk first loads.
6
+ * Must run as a side effect of importing this module (before a static SDK import).
7
+ */
8
+ export function ensureCursorTreeSitterVendorDir() {
9
+ if (process.env.CURSOR_TREE_SITTER_VENDOR_DIR !== undefined)
10
+ return;
11
+ const packageDirectory = resolveCursorSdkPlatformPackageDirectory();
12
+ if (!packageDirectory)
13
+ return;
14
+ const vendor = join(packageDirectory, "vendor");
15
+ if (existsSync(join(vendor, "tree-sitter", "index.js")) &&
16
+ existsSync(join(vendor, "tree-sitter-bash", "index.js"))) {
17
+ process.env.CURSOR_TREE_SITTER_VENDOR_DIR = vendor;
18
+ }
19
+ }
20
+ ensureCursorTreeSitterVendorDir();
@@ -4,7 +4,7 @@ import { scrubSensitiveText } from "./cursor-sensitive-text.js";
4
4
  import { loadCursorSdk } from "./cursor-sdk-runtime.js";
5
5
  import { cursorSessionScopeKeyForManager } from "./cursor-session-scope.js";
6
6
  import { CURSOR_SESSION_AGENT_RESUME_ENTRY_TYPE, isCursorLocalAgentId, parseCursorSessionAgentResumeEntryData, readResumableCursorSessionAgentIds, resolveCursorSessionRepoRoot, } from "./cursor-session-agent-resume.js";
7
- import { cursorSessionStoreIdentitiesEqual, getCursorSessionStoreIdentities, openCursorSessionStore, } from "./cursor-session-store.js";
7
+ import { withCursorSessionStoreIdentities, openCursorSessionStore, resolveCursorSessionStoreIdentity, } from "./cursor-session-store.js";
8
8
  export const CURSOR_SESSION_AGENT_CLEANUP_ENTRY_TYPE = "cursor-sdk-agent-cleanup";
9
9
  class InvalidCursorSessionStoreIdentityError extends Error {
10
10
  }
@@ -202,7 +202,7 @@ function appendDurableCleanupEntry(pi, ctx, data) {
202
202
  return false;
203
203
  return fsyncExistingRegularFile(sessionFile);
204
204
  }
205
- export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
205
+ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx, storeRoot) {
206
206
  const usage = "Usage: /cursor-local-resume-cleanup [--dry-run|--yes]";
207
207
  const tokens = args.trim().split(/\s+/).filter(Boolean);
208
208
  const dryRun = tokens.length === 0 || (tokens.length === 1 && tokens[0] === "--dry-run");
@@ -236,7 +236,7 @@ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
236
236
  }
237
237
  return;
238
238
  }
239
- if (!appendDurableCleanupEntry(pi, ctx, { action: "delete", phase: "intent", ...baseEntry })) {
239
+ if (!scope.sessionFile || !appendDurableCleanupEntry(pi, ctx, { action: "delete", phase: "intent", ...baseEntry })) {
240
240
  ctx.ui.notify("Cleanup intent could not be durably recorded. No agents were deleted.", "error");
241
241
  return;
242
242
  }
@@ -244,31 +244,34 @@ export async function runCursorSessionAgentCleanupCommand(pi, args, ctx) {
244
244
  const failedAgentIds = [];
245
245
  const openedStores = new Map();
246
246
  try {
247
- const operations = await getSdkOperations();
248
- const identities = await getCursorSessionStoreIdentities(ctx.cwd, scope.scopeKey, scope.sessionFile !== undefined);
249
- for (const candidate of plan.candidates) {
250
- const { agentId } = candidate;
251
- try {
252
- const identity = candidate.storeIdentity ?? identities.defaultStore;
253
- if (!cursorSessionStoreIdentitiesEqual(identity, identities.defaultStore) &&
254
- !cursorSessionStoreIdentitiesEqual(identity, identities.sessionStore))
255
- throw new InvalidCursorSessionStoreIdentityError("Recorded Cursor local store identity is not valid for this pi session");
256
- let openedStore = openedStores.get(identity.stateRoot);
257
- if (!openedStore) {
258
- openedStore = await openCursorSessionStore(ctx.cwd, identity);
259
- openedStores.set(identity.stateRoot, openedStore);
247
+ await withCursorSessionStoreIdentities(ctx.cwd, scope.scopeKey, storeRoot, async (identities) => {
248
+ const operations = await getSdkOperations();
249
+ for (const candidate of plan.candidates) {
250
+ const { agentId } = candidate;
251
+ try {
252
+ const identity = await resolveCursorSessionStoreIdentity({
253
+ cwd: ctx.cwd, scopeKey: scope.scopeKey,
254
+ identities, recordedIdentity: candidate.storeIdentity, agentId,
255
+ });
256
+ if (!identity)
257
+ throw new InvalidCursorSessionStoreIdentityError("Recorded Cursor local store identity is not valid for this pi session");
258
+ let openedStore = openedStores.get(identity.stateRoot);
259
+ if (!openedStore) {
260
+ openedStore = await openCursorSessionStore(ctx.cwd, identity, identities.workspaceRoot, identities.storeRoot);
261
+ openedStores.set(identity.stateRoot, openedStore);
262
+ }
263
+ await operations.delete(agentId, { cwd: ctx.cwd, store: openedStore.store });
264
+ deletedAgentIds.push(agentId);
265
+ }
266
+ catch (error) {
267
+ failedAgentIds.push({
268
+ agentId,
269
+ error: scrubSensitiveText(getString(asRecord(error), "message") ?? String(error)),
270
+ ...(error instanceof InvalidCursorSessionStoreIdentityError ? { retryable: false } : {}),
271
+ });
260
272
  }
261
- await operations.delete(agentId, { cwd: ctx.cwd, store: openedStore.store });
262
- deletedAgentIds.push(agentId);
263
- }
264
- catch (error) {
265
- failedAgentIds.push({
266
- agentId,
267
- error: scrubSensitiveText(getString(asRecord(error), "message") ?? String(error)),
268
- ...(error instanceof InvalidCursorSessionStoreIdentityError ? { retryable: false } : {}),
269
- });
270
273
  }
271
- }
274
+ });
272
275
  }
273
276
  catch (error) {
274
277
  const message = scrubSensitiveText(getString(asRecord(error), "message") ?? String(error));
@@ -1,4 +1,5 @@
1
1
  import { createHash } from "node:crypto";
2
+ import { normalizeCursorCustomStoreRoot } from "./cursor-custom-store-path.js";
2
3
  import { getRegisteredCursorPiToolBridge, } from "./cursor-pi-tool-bridge.js";
3
4
  import { computeCursorContextFingerprint } from "./context.js";
4
5
  import { getCursorSessionFile, getCursorSessionScopeGeneration, getCursorSessionScopeKey } from "./cursor-session-scope.js";
@@ -26,11 +27,14 @@ function assertScopeAcceptsAcquire(scopeKey) {
26
27
  }
27
28
  terminalDisposedScopeGenerations.delete(scopeKey);
28
29
  }
29
- function rethrowSupersededWhenReplacedByDifferentPoolKey(scopeKey, poolKey, error) {
30
+ function samePoolIdentity(entry, poolKey, capturedStoreRoot) {
31
+ return entry.poolKey === poolKey && entry.storeRoot === capturedStoreRoot;
32
+ }
33
+ function rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, storeRoot, error) {
30
34
  if (!(error instanceof SessionCursorAgentCreationSupersededError))
31
35
  return;
32
36
  const replacement = sessionAgentsByScope.get(scopeKey);
33
- if (replacement && replacement.poolKey !== poolKey) {
37
+ if (replacement && !samePoolIdentity(replacement, poolKey, storeRoot)) {
34
38
  throw error;
35
39
  }
36
40
  }
@@ -87,6 +91,20 @@ function buildBridgePoolKeySuffix(registeredBridge) {
87
91
  return "bridge:absent";
88
92
  return registeredBridge.getToolSurfaceSignature();
89
93
  }
94
+ function buildCustomSubagentPoolKeySuffix(agents) {
95
+ const definitions = Object.entries(agents ?? {}).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
96
+ if (!definitions.length)
97
+ return [];
98
+ const content = definitions.map(([name, entry]) => [
99
+ name, entry.description, entry.prompt,
100
+ entry.model === undefined ? null : entry.model === "inherit" ? "inherit" : {
101
+ id: entry.model.id,
102
+ params: [...(entry.model.params ?? [])].sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : a.value < b.value ? -1 : a.value > b.value ? 1 : 0)
103
+ .map(({ id, value }) => ({ id, value })),
104
+ },
105
+ ]);
106
+ return [`subagents:${createHash("sha256").update(JSON.stringify(content)).digest("hex")}`];
107
+ }
90
108
  function buildSessionAgentPoolKey(scopeKey, params) {
91
109
  return [
92
110
  scopeKey,
@@ -101,6 +119,7 @@ function buildSessionAgentPoolKey(scopeKey, params) {
101
119
  : "http1:off",
102
120
  buildApiKeyPoolKeyFingerprint(params.apiKey),
103
121
  buildBridgePoolKeySuffix("bridge" in params ? params.bridge : getRegisteredCursorPiToolBridge()),
122
+ ...buildCustomSubagentPoolKeySuffix(params.agents),
104
123
  ].join("\0");
105
124
  }
106
125
  async function disposePoolEntry(entry, options) {
@@ -252,11 +271,11 @@ function leaseFromEntry(entry, scopeKey, params, created) {
252
271
  },
253
272
  };
254
273
  }
255
- function getCurrentReadyPoolEntry(scopeKey, poolKey) {
274
+ function getCurrentReadyPoolEntry(scopeKey, poolKey, storeRoot) {
256
275
  const current = sessionAgentsByScope.get(scopeKey);
257
276
  if (current?.status !== "ready")
258
277
  return undefined;
259
- if (current.poolKey !== poolKey)
278
+ if (!samePoolIdentity(current, poolKey, storeRoot))
260
279
  return undefined;
261
280
  return current;
262
281
  }
@@ -269,7 +288,7 @@ async function tryLeaseReadyEntry(entry, scopeKey, params, poolKey, created) {
269
288
  await disposePoolEntryForScope(scopeKey);
270
289
  return undefined;
271
290
  }
272
- const readyEntry = getCurrentReadyPoolEntry(scopeKey, poolKey);
291
+ const readyEntry = getCurrentReadyPoolEntry(scopeKey, poolKey, params.storeRoot);
273
292
  if (!readyEntry)
274
293
  return undefined;
275
294
  return leaseFromEntry(readyEntry, scopeKey, params, created);
@@ -303,11 +322,10 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
303
322
  cwd: params.cwd,
304
323
  scopeKey,
305
324
  persistent: persistentStore,
306
- hasResumeHandle: resumeHandle !== undefined,
307
- resumeIdentity: resumeHandle?.storeIdentity,
325
+ storeRoot: params.storeRoot,
326
+ resume: resumeHandle ? { identity: resumeHandle.storeIdentity, agentId: resumeHandle.agentId } : undefined,
308
327
  });
309
328
  sessionStore = storeSelection.sessionStore;
310
- const { identities } = storeSelection;
311
329
  const resumeAttemptAllowed = storeSelection.resumeAttemptAllowed;
312
330
  let resumeNotice = storeSelection.resumeFallback ? LOCAL_RESUME_FALLBACK_NOTICE : undefined;
313
331
  const buildAgentOptions = () => ({
@@ -321,6 +339,7 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
321
339
  store: sessionStore.store,
322
340
  }),
323
341
  ...(bridgeRun?.mcpServers ? { mcpServers: bridgeRun.mcpServers } : {}),
342
+ ...(params.agents && Object.keys(params.agents).length ? { agents: params.agents } : {}),
324
343
  });
325
344
  let agent;
326
345
  let effectiveSendState = sendState;
@@ -334,9 +353,11 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
334
353
  catch {
335
354
  if (persistentStore)
336
355
  resumeNotice = LOCAL_RESUME_FALLBACK_NOTICE;
337
- if (!cursorSessionStoreIdentitiesEqual(sessionStore.identity, identities.sessionStore)) {
356
+ if (storeSelection.persistent && !cursorSessionStoreIdentitiesEqual(sessionStore.identity, storeSelection.identities.sessionStore)) {
357
+ const { identities } = storeSelection;
358
+ const replacement = await openCursorSessionStore(params.cwd, identities.sessionStore, identities.workspaceRoot, identities.storeRoot);
338
359
  await sessionStore.dispose().catch(() => undefined);
339
- sessionStore = await openCursorSessionStore(params.cwd, identities.sessionStore);
360
+ sessionStore = replacement;
340
361
  }
341
362
  }
342
363
  }
@@ -348,6 +369,7 @@ async function createSessionAgentEntry(scopeKey, persistentStore, instanceId, se
348
369
  return {
349
370
  status: "ready",
350
371
  poolKey: resolvedPoolKey,
372
+ storeRoot: params.storeRoot,
351
373
  instanceId,
352
374
  scopeKey,
353
375
  agent,
@@ -376,6 +398,7 @@ export async function acquireSessionCursorAgent(input) {
376
398
  const params = { ...input, bridge: "bridge" in input ? input.bridge : getRegisteredCursorPiToolBridge() };
377
399
  const scopeKey = params.scope?.scopeKey ?? getCursorSessionScopeKey();
378
400
  const persistentStore = (params.scope ? params.scope.sessionFile : getCursorSessionFile()) !== undefined;
401
+ params.storeRoot = persistentStore && params.storeRoot !== undefined ? normalizeCursorCustomStoreRoot(params.storeRoot) : undefined;
379
402
  while (true) {
380
403
  assertScopeAcceptsAcquire(scopeKey);
381
404
  if (invalidatedScopeKeys.has(scopeKey)) {
@@ -383,7 +406,7 @@ export async function acquireSessionCursorAgent(input) {
383
406
  }
384
407
  const poolKey = buildSessionAgentPoolKey(scopeKey, params);
385
408
  const state = getSessionCursorAgentPoolState(scopeKey);
386
- if ((state.status === "ready" || state.status === "busy") && state.poolKey !== poolKey) {
409
+ if ((state.status === "ready" || state.status === "busy") && !samePoolIdentity(state, poolKey, params.storeRoot)) {
387
410
  await disposePoolEntryForScope(scopeKey);
388
411
  continue;
389
412
  }
@@ -398,7 +421,7 @@ export async function acquireSessionCursorAgent(input) {
398
421
  continue;
399
422
  }
400
423
  if (state.status === "creating") {
401
- if (state.poolKey !== poolKey) {
424
+ if (!samePoolIdentity(state, poolKey, params.storeRoot)) {
402
425
  await disposePoolEntryForScope(scopeKey);
403
426
  continue;
404
427
  }
@@ -408,7 +431,7 @@ export async function acquireSessionCursorAgent(input) {
408
431
  catch (error) {
409
432
  if (error instanceof SessionCursorAgentCreationSupersededError) {
410
433
  assertScopeAcceptsAcquire(scopeKey);
411
- rethrowSupersededWhenReplacedByDifferentPoolKey(scopeKey, poolKey, error);
434
+ rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, params.storeRoot, error);
412
435
  continue;
413
436
  }
414
437
  throw error;
@@ -436,6 +459,7 @@ export async function acquireSessionCursorAgent(input) {
436
459
  placeholder = {
437
460
  status: "creating",
438
461
  poolKey,
462
+ storeRoot: params.storeRoot,
439
463
  instanceId,
440
464
  scopeKey,
441
465
  sendState,
@@ -456,7 +480,7 @@ export async function acquireSessionCursorAgent(input) {
456
480
  }
457
481
  if (error instanceof SessionCursorAgentCreationSupersededError) {
458
482
  assertScopeAcceptsAcquire(scopeKey);
459
- rethrowSupersededWhenReplacedByDifferentPoolKey(scopeKey, poolKey, error);
483
+ rethrowSupersededWhenReplacedByDifferentPoolIdentity(scopeKey, poolKey, params.storeRoot, error);
460
484
  continue;
461
485
  }
462
486
  throw error;
@@ -495,8 +519,6 @@ export const __testUtils = {
495
519
  resetSessionCursorAgent,
496
520
  refreshSessionCursorAgentConfig,
497
521
  disposeAllSessionCursorAgents,
498
- buildApiKeyPoolKeyFingerprint,
499
- buildSessionAgentPoolKey,
500
522
  setDeadTransportAgentDisposeTimeoutMs(ms) {
501
523
  const previous = deadTransportAgentDisposeTimeoutMs;
502
524
  deadTransportAgentDisposeTimeoutMs = ms;
@@ -1,14 +1,14 @@
1
1
  import { buildCursorIncrementalPrompt, buildCursorPrompt, shouldBootstrapCursorContext, } from "./context.js";
2
2
  // Long-lived SDK session agents can drift tool-call behavior; recreate the agent after this many successful incremental sends.
3
3
  export const MAX_COMPLETED_INCREMENTAL_SENDS_BEFORE_REBOOTSTRAP = 20;
4
- export function planCursorSessionSend(sendState, context) {
4
+ export function planCursorSessionSend(sendState, context, nativeSourceRoles) {
5
5
  if (!sendState.bootstrapped) {
6
6
  return { mode: "bootstrap", resetAgent: false, reason: "initial" };
7
7
  }
8
8
  if (sendState.incrementalSendCount >= MAX_COMPLETED_INCREMENTAL_SENDS_BEFORE_REBOOTSTRAP) {
9
9
  return { mode: "bootstrap", resetAgent: true, reason: "incremental_threshold" };
10
10
  }
11
- if (shouldBootstrapCursorContext(sendState, context)) {
11
+ if (shouldBootstrapCursorContext(sendState, context, nativeSourceRoles)) {
12
12
  return { mode: "bootstrap", resetAgent: true, reason: "context_divergence" };
13
13
  }
14
14
  return { mode: "incremental", resetAgent: false, reason: "incremental" };
@@ -1,9 +1,14 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
+ import { existsSync, lstatSync } from "node:fs";
2
3
  import { rm } from "node:fs/promises";
3
- import { tmpdir } from "node:os";
4
- import { dirname, join, toNamespacedPath } from "node:path";
4
+ import { homedir, tmpdir } from "node:os";
5
+ import { dirname, isAbsolute, join, relative, resolve, sep, toNamespacedPath } from "node:path";
5
6
  import { loadCursorSdk } from "./cursor-sdk-runtime.js";
7
+ import { guardCursorCustomStorePath, normalizeCursorCustomStoreRoot, prepareCursorCustomStoreRoot } from "./cursor-custom-store-path.js";
6
8
  let sdkOperationsForTests;
9
+ const activeWorkspaceRoots = new Map();
10
+ // ponytail: leases protect only extension-owned stores in this process. Other SDK
11
+ // users/processes must stop before upgrade; a cross-process lock belongs in the SDK.
7
12
  export function hashCursorSessionStoreScope(scopeKey) {
8
13
  return createHash("sha256")
9
14
  .update("pi-cursor-sdk-session-store\0")
@@ -11,9 +16,8 @@ export function hashCursorSessionStoreScope(scopeKey) {
11
16
  .digest("hex")
12
17
  .slice(0, 32);
13
18
  }
14
- export function buildCursorSessionStateRoot(defaultStateRoot, scopeKey, persistent) {
15
- const baseRoot = persistent ? defaultStateRoot : join(tmpdir(), `pi-cursor-sdk-${randomUUID()}`);
16
- return join(baseRoot, "pi-sessions", hashCursorSessionStoreScope(scopeKey));
19
+ export function buildCursorSessionStateRoot(defaultStateRoot, scopeKey) {
20
+ return join(defaultStateRoot, "pi-sessions", hashCursorSessionStoreScope(scopeKey));
17
21
  }
18
22
  async function getSdkOperations() {
19
23
  if (sdkOperationsForTests)
@@ -27,76 +31,262 @@ async function getSdkOperations() {
27
31
  openSqliteStore: (options) => SqliteLocalAgentStore.open(options),
28
32
  };
29
33
  }
30
- export async function getCursorSessionStoreIdentities(cwd, scopeKey, persistent) {
31
- const defaultStateRoot = await (await getSdkOperations()).getDefaultStateRoot(cwd);
34
+ function leaseWorkspaceRoot(key, ownership) {
35
+ ownership.users++;
36
+ let released = false;
32
37
  return {
33
- defaultStore: { version: 1, stateRoot: defaultStateRoot },
34
- sessionStore: {
35
- version: 1,
36
- stateRoot: buildCursorSessionStateRoot(defaultStateRoot, scopeKey, persistent),
38
+ root: ownership.root,
39
+ release: () => {
40
+ if (released)
41
+ return;
42
+ released = true;
43
+ if (--ownership.users === 0)
44
+ activeWorkspaceRoots.delete(key);
37
45
  },
38
46
  };
39
47
  }
48
+ function workspaceLeaseKey(cwd, storeRoot) {
49
+ return JSON.stringify([cwd, storeRoot ?? null]);
50
+ }
51
+ function acquireWorkspaceRoot(cwd, storeRoot) {
52
+ const key = workspaceLeaseKey(cwd, storeRoot);
53
+ let ownership = activeWorkspaceRoots.get(key);
54
+ if (!ownership) {
55
+ ownership = {
56
+ // Publish ownership synchronously, before SDK loading or the public getter.
57
+ root: Promise.resolve().then(async () => {
58
+ if (storeRoot !== undefined) {
59
+ const root = prepareCursorCustomStoreRoot(storeRoot);
60
+ return join(root, createHash("sha256").update(resolve(cwd)).digest("hex").slice(0, 32));
61
+ }
62
+ const operations = await getSdkOperations();
63
+ assertSafeWorkspaceLayout(cwd);
64
+ const root = await operations.getDefaultStateRoot(cwd);
65
+ assertSafeStorePath(root, dirname(root), "local store");
66
+ return root;
67
+ }),
68
+ users: 0,
69
+ };
70
+ activeWorkspaceRoots.set(key, ownership);
71
+ }
72
+ return leaseWorkspaceRoot(key, ownership);
73
+ }
74
+ function retainWorkspaceRoot(cwd, workspaceRoot, storeRoot) {
75
+ const key = workspaceLeaseKey(cwd, storeRoot);
76
+ const ownership = activeWorkspaceRoots.get(key);
77
+ if (!ownership)
78
+ throw new Error("Cursor local workspace ownership is not active");
79
+ const lease = leaseWorkspaceRoot(key, ownership);
80
+ return {
81
+ ...lease,
82
+ root: lease.root.then((root) => {
83
+ if (root !== workspaceRoot)
84
+ throw new Error("Cursor local workspace ownership root mismatch");
85
+ return root;
86
+ }),
87
+ };
88
+ }
89
+ export async function withCursorSessionStoreIdentities(cwd, scopeKey, selectedRoot, use) {
90
+ const storeRoot = selectedRoot === undefined ? undefined : normalizeCursorCustomStoreRoot(selectedRoot);
91
+ const lease = acquireWorkspaceRoot(cwd, storeRoot);
92
+ try {
93
+ const workspaceRoot = await lease.root;
94
+ return await use({
95
+ workspaceRoot,
96
+ sessionStore: { version: 1, stateRoot: buildCursorSessionStateRoot(workspaceRoot, scopeKey) },
97
+ ...(storeRoot === undefined
98
+ ? { domain: "default", defaultStore: { version: 1, stateRoot: workspaceRoot } }
99
+ : { domain: "custom", storeRoot }),
100
+ });
101
+ }
102
+ finally {
103
+ lease.release();
104
+ }
105
+ }
40
106
  export function cursorSessionStoreIdentitiesEqual(left, right) {
41
107
  return left.version === right.version && left.stateRoot === right.stateRoot;
42
108
  }
43
- async function openOwnedCursorSessionStore(cwd, identity, removalRoot) {
109
+ function rejectedStorePath(stateRoot, base) {
110
+ // User-managed ancestors above the SDK prefix (or our temporary removal root)
111
+ // may be links/junctions. Owned components, including the base, may not.
112
+ let path = resolve(base);
113
+ const suffix = relative(path, resolve(stateRoot));
114
+ if (suffix === ".." || suffix.startsWith(`..${sep}`) || isAbsolute(suffix))
115
+ return stateRoot;
116
+ for (const component of ["", ...suffix.split(sep).filter(Boolean)]) {
117
+ path = join(path, component);
118
+ try {
119
+ if (!lstatSync(path).isDirectory())
120
+ return path;
121
+ }
122
+ catch (error) {
123
+ if (error.code !== "ENOENT")
124
+ throw error;
125
+ }
126
+ }
127
+ }
128
+ function assertSafeStorePath(stateRoot, base, label) {
129
+ const rejected = rejectedStorePath(stateRoot, base);
130
+ if (rejected)
131
+ throw new Error(`Cursor ${label} path contains a link or non-directory: ${rejected}`);
132
+ }
133
+ function workspaceHashes(cwd) {
134
+ const current = createHash("sha256").update(cwd).digest("hex");
135
+ try {
136
+ return { current, legacy: createHash("md5").update(cwd).digest("hex") };
137
+ }
138
+ catch (error) {
139
+ if (error.code === "ERR_OSSL_EVP_UNSUPPORTED" ||
140
+ (error instanceof Error && error.message === "Digest method not supported"))
141
+ return { current, legacy: undefined };
142
+ throw error;
143
+ }
144
+ }
145
+ function assertSafeWorkspaceLayout(cwd) {
146
+ // ponytail: SDK 1.0.36 has no public read-only root resolver; use one when exposed.
147
+ // This pure layout is contract-verified against its factory and public getter;
148
+ // guard it before that getter can rename MD5 history through an owned link.
149
+ const slug = cwd.replace(/[^a-zA-Z0-9]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
150
+ const prefix = join(homedir(), ".cursor", "projects", slug, "sdk-agent-store");
151
+ const { current, legacy } = workspaceHashes(cwd);
152
+ for (const hash of [current, legacy]) {
153
+ if (hash)
154
+ assertSafeStorePath(join(prefix, hash), prefix, "local store");
155
+ }
156
+ }
157
+ function legacyWorkspaceRoot(cwd, defaultStateRoot) {
158
+ // The public getter owns migration and may return MD5 after a failed rename.
159
+ const { current, legacy } = workspaceHashes(cwd);
160
+ if (!legacy)
161
+ return undefined;
162
+ const prefix = dirname(defaultStateRoot);
163
+ if (defaultStateRoot !== join(prefix, current) && defaultStateRoot !== join(prefix, legacy))
164
+ return undefined;
165
+ return join(prefix, legacy);
166
+ }
167
+ export async function resolveCursorSessionStoreIdentity(options) {
168
+ const { cwd, scopeKey, identities, agentId } = options;
169
+ if (identities.domain === "custom") {
170
+ if (!options.recordedIdentity || !cursorSessionStoreIdentitiesEqual(options.recordedIdentity, identities.sessionStore))
171
+ return undefined;
172
+ // Cleanup admits each candidate before cached-store reuse, which skips the open-time guard.
173
+ assertSafeStorePath(identities.sessionStore.stateRoot, dirname(identities.workspaceRoot), "local store");
174
+ guardCursorCustomStorePath(dirname(identities.workspaceRoot), identities.sessionStore.stateRoot).verify();
175
+ return identities.sessionStore;
176
+ }
177
+ const legacyRoot = legacyWorkspaceRoot(cwd, identities.defaultStore.stateRoot);
178
+ const legacyDefault = legacyRoot ? { version: 1, stateRoot: legacyRoot } : undefined;
179
+ // Version-1 handles predate recorded identities and used the default workspace
180
+ // store. If both roots survive, that old store still owns their data.
181
+ const recorded = options.recordedIdentity ?? legacyDefault ?? identities.defaultStore;
182
+ const base = dirname(identities.defaultStore.stateRoot);
183
+ const current = [identities.defaultStore, identities.sessionStore];
184
+ const exact = current.find((identity) => cursorSessionStoreIdentitiesEqual(identity, recorded));
185
+ if (exact) {
186
+ assertSafeStorePath(exact.stateRoot, base, "local store");
187
+ return exact;
188
+ }
189
+ if (!legacyRoot)
190
+ return undefined;
191
+ const legacySession = { version: 1, stateRoot: buildCursorSessionStateRoot(legacyRoot, scopeKey) };
192
+ const legacy = [legacyDefault, legacySession].find((identity) => identity && cursorSessionStoreIdentitiesEqual(identity, recorded));
193
+ if (!legacy)
194
+ return undefined;
195
+ assertSafeStorePath(legacy.stateRoot, base, "local store");
196
+ if (existsSync(legacyRoot))
197
+ return legacy; // No merge or silent owner switch.
198
+ const migrated = legacy === legacyDefault ? identities.defaultStore : identities.sessionStore;
199
+ assertSafeStorePath(migrated.stateRoot, base, "local store");
200
+ if (!existsSync(migrated.stateRoot))
201
+ return undefined;
202
+ // A missing legacy path alone is not migration proof. The exact cwd/scope
203
+ // destination must independently contain this recorded agent with this cwd.
204
+ const opened = await openCursorSessionStore(cwd, migrated, identities.defaultStore.stateRoot);
205
+ try {
206
+ const agent = await opened.store.agents.get({ agentId });
207
+ return agent?.cwd === cwd ? migrated : undefined;
208
+ }
209
+ finally {
210
+ await opened.dispose();
211
+ }
212
+ }
213
+ async function openOwnedCursorSessionStore(cwd, identity, options) {
44
214
  const openedIdentity = Object.freeze({ ...identity });
215
+ const lease = "workspaceRoot" in options ? retainWorkspaceRoot(cwd, options.workspaceRoot, options.storeRoot) : undefined;
216
+ const removalRoot = "removalRoot" in options ? options.removalRoot : undefined;
217
+ const removeTemporaryStore = async () => {
218
+ if (removalRoot) {
219
+ assertSafeStorePath(openedIdentity.stateRoot, removalRoot, "temporary store removal");
220
+ await rm(removalRoot, { recursive: true, force: true });
221
+ }
222
+ };
45
223
  let store;
46
224
  try {
47
- store = await (await getSdkOperations()).openSqliteStore({
225
+ await lease?.root;
226
+ const base = "workspaceRoot" in options ? dirname(options.workspaceRoot) : options.removalRoot;
227
+ assertSafeStorePath(openedIdentity.stateRoot, base, "local store");
228
+ const guard = "workspaceRoot" in options && options.storeRoot !== undefined
229
+ ? guardCursorCustomStorePath(base, openedIdentity.stateRoot) : undefined;
230
+ const operations = await getSdkOperations();
231
+ guard?.verify();
232
+ store = await operations.openSqliteStore({
48
233
  workspaceRef: cwd,
49
234
  stateRoot: toNamespacedPath(openedIdentity.stateRoot),
50
235
  });
236
+ guard?.verify();
51
237
  }
52
238
  catch (error) {
53
- if (removalRoot)
54
- await rm(removalRoot, { recursive: true, force: true }).catch(() => undefined);
239
+ await store?.dispose().catch(() => undefined);
240
+ lease?.release();
241
+ await removeTemporaryStore().catch(() => undefined);
55
242
  throw error;
56
243
  }
244
+ const openedStore = store;
57
245
  return {
58
246
  identity: openedIdentity,
59
- store,
247
+ store: openedStore,
60
248
  dispose: async () => {
61
249
  try {
62
- await store.dispose();
250
+ await openedStore.dispose();
63
251
  }
64
252
  finally {
65
- if (removalRoot)
66
- await rm(removalRoot, { recursive: true, force: true });
253
+ lease?.release();
254
+ await removeTemporaryStore();
67
255
  }
68
256
  },
69
257
  };
70
258
  }
71
- export function openCursorSessionStore(cwd, identity) {
72
- return openOwnedCursorSessionStore(cwd, identity);
259
+ export function openCursorSessionStore(cwd, identity, workspaceRoot, storeRoot) {
260
+ return openOwnedCursorSessionStore(cwd, identity, { workspaceRoot, storeRoot });
73
261
  }
74
262
  export async function openCursorSessionStoreForScope(options) {
75
- const identities = await getCursorSessionStoreIdentities(options.cwd, options.scopeKey, options.persistent);
76
- const requestedResumeIdentity = options.hasResumeHandle
77
- ? options.resumeIdentity ?? (options.persistent ? identities.defaultStore : undefined)
78
- : undefined;
79
- const resumableIdentities = options.persistent
80
- ? [identities.defaultStore, identities.sessionStore]
81
- : [identities.sessionStore];
82
- const resumeIdentity = requestedResumeIdentity && resumableIdentities
83
- .find((identity) => cursorSessionStoreIdentitiesEqual(identity, requestedResumeIdentity));
84
- let resumeAttemptAllowed = options.hasResumeHandle && resumeIdentity !== undefined;
85
- let resumeFallback = options.persistent && options.hasResumeHandle && !resumeIdentity;
86
- const selectedIdentity = resumeIdentity ?? identities.sessionStore;
87
- const removalRoot = options.persistent ? undefined : dirname(dirname(identities.sessionStore.stateRoot));
88
- let sessionStore;
89
- try {
90
- sessionStore = await openOwnedCursorSessionStore(options.cwd, selectedIdentity, removalRoot);
91
- }
92
- catch (error) {
93
- if (!resumeIdentity || cursorSessionStoreIdentitiesEqual(resumeIdentity, identities.sessionStore))
94
- throw error;
95
- resumeAttemptAllowed = false;
96
- resumeFallback = true;
97
- sessionStore = await openOwnedCursorSessionStore(options.cwd, identities.sessionStore);
263
+ if (!options.persistent) {
264
+ const removalRoot = join(tmpdir(), `pi-cursor-sdk-${randomUUID()}`);
265
+ const identity = { version: 1, stateRoot: buildCursorSessionStateRoot(removalRoot, options.scopeKey) };
266
+ const sessionStore = await openOwnedCursorSessionStore(options.cwd, identity, { removalRoot });
267
+ return { persistent: false, sessionStore, identities: { sessionStore: identity }, resumeAttemptAllowed: false, resumeFallback: false };
98
268
  }
99
- return { sessionStore, identities, resumeAttemptAllowed, resumeFallback };
269
+ return withCursorSessionStoreIdentities(options.cwd, options.scopeKey, options.storeRoot, async (identities) => {
270
+ const resumeIdentity = options.resume ? await resolveCursorSessionStoreIdentity({
271
+ cwd: options.cwd, scopeKey: options.scopeKey, identities,
272
+ recordedIdentity: options.resume.identity, agentId: options.resume.agentId,
273
+ }).catch(() => undefined) : undefined; // Unreadable resume storage falls back; fresh-store failures still propagate.
274
+ let resumeAttemptAllowed = resumeIdentity !== undefined;
275
+ let resumeFallback = options.resume !== undefined && !resumeIdentity;
276
+ const selectedIdentity = resumeIdentity ?? identities.sessionStore;
277
+ let sessionStore;
278
+ try {
279
+ sessionStore = await openCursorSessionStore(options.cwd, selectedIdentity, identities.workspaceRoot, identities.storeRoot);
280
+ }
281
+ catch (error) {
282
+ if (!resumeIdentity || cursorSessionStoreIdentitiesEqual(resumeIdentity, identities.sessionStore))
283
+ throw error;
284
+ resumeAttemptAllowed = false;
285
+ resumeFallback = true;
286
+ sessionStore = await openCursorSessionStore(options.cwd, identities.sessionStore, identities.workspaceRoot, identities.storeRoot);
287
+ }
288
+ return { persistent: true, sessionStore, identities, resumeAttemptAllowed, resumeFallback };
289
+ });
100
290
  }
101
291
  export const __testUtils = {
102
292
  setSdkOperations(operations) {